about summary refs log tree commit diff
path: root/users/grfn/bbbg/README.md
blob: 78bf13919861f8df06146d84b0d572a66b897351 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
This directory contains a small web application that acts as a signup
sheet and attendee tracking system for [my local board gaming
meetup](https://www.meetup.com/brooklyn-based-board-gaming/).

# Development

## Installing dependencies

### With Nix + Docker ("blessed way")

Prerequisites:

-   [Nix](https://nixos.org/)
-   [lorri](https://github.com/nix-community/lorri)
-   [Docker](https://www.docker.com/)

From this directory in a full checkout of depot, run the following
commands to install all development dependencies:

``` shell-session
$ pwd
/path/to/depot/users/grfn/bbbg
$ direnv allow
$ lorri watch --once # Wait for a single nix shell build
```

Then, to run a docker container with the development database:

``` shell-session
$ pwd
/path/to/depot/users/grfn/bbbg
$ arion up -d
```

### Choose-your-own-adventure

Note that the **authoritative** source for dev dependencies is the `shell.nix`
file in this directory - those may diverge from what's written here; if so
follow those versions rather than these.

-   Install the [clojure command-line
    tools](https://clojure.org/guides/getting_started), with openjdk 11
-   Install and run a postgresql 12 database, with:
    -   A user with superuser priveleges, the username `bbbg` and the
        password `password`
    -   A database called `bbbg` owned by that user.
-   Export the following environment variables in a context visible by
    whatever method you use to run the application:
    -   `PGHOST=localhost`
    -   `PGUSER=bbbg`
    -   `PGDATABASE=bbbg`
    -   `PGPASSWORD=bbbg`

## Running the application

Before running the app, you'll need an oauth2 client-id and client secret for a
Discord app. The application can either load those from a
[pass](https://www.passwordstore.org/) password store, or read them from
plaintext files in a directory. In either case, they should be accessible at the
paths `bbbg/discord-client-id` and `bbbg/discord-client-secret` respectively.

### From the command line

``` shell-session
$ clj -A:dev
Clojure 1.11.0-alpha3
user=> (require 'bbbg.core)
nil
user=> ;; Optionally, if you're using a directory with plaintext files for the discord client ID and client secret:
user=> (bbbg.util.dev-secrets/set-backend! [:dir "/path/to/that/directory"])
user=> (bbbg.core/run-dev)
#<SystemMap>
user=> (bbbg.db/migrate! (:db bbbg.core/system))
11:57:26.536 [main] INFO  migratus.core - Starting migrations {  }
11:57:26.538 [main] INFO  com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Starting... {  }
11:57:26.883 [main] INFO  com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Added connection com.impossibl.postgres.jdbc.PGDirectConnection@3cae770e {  }
11:57:26.884 [main] INFO  com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Start completed. {  }
11:57:26.923 [main] INFO  migratus.core - Ending migrations {  }
nil
```

This will run a web server for the application listening at
<http://localhost:8888>

### In Emacs, with [CIDER](https://docs.cider.mx/cider/index.html) + [direnv](https://github.com/wbolster/emacs-direnv)

Open `//users/grfn/bbbg/src/bbbg/core.clj` in a buffer, then follow the
instructions at the end of the file

# Deployment

## With nix+terraform

Deployment configuration is located in the `tf.nix` file, which is
currently tightly coupled to my own infrastructure and AWS account but
could hypothetically be adjusted to be general-purpose.

To deploy a new version of the application, after following "installing
dependencies" above, run the following command in a context with ec2
credentials available:

``` shell-session
$ terraform apply
```

The current deploy configuration includes:

-   An ec2 instance running nixos, with a postgresql database and the
    bbbg application running as a service, behind nginx with an
    auto-renewing letsencrypt cert
-   The DNS A record for `bbbg.gws.fyi` pointing at that ec2 instance,
    in the cloudflare zone for `gws.fyi`

## Otherwise

¯\\\_(ツ)_
You'll need:

-   An uberjar for bbbg; the canonical way of building that is `nix-build
    /path/to/depot -A users.grfn.bbbg.server-jar` but I\'m not sure how that
    works outside of nix
-   A postgresql database
-   Environment variables telling the app how to connect to that
    database. See `config.systemd.services.bbbg-server.environment` in
    `module.nix` for which env vars are currently being exported by the
    NixOS module that runs the production version of the app