the browser-facing portion of osu!
1# Deployment with docker
2
3There's only one image to be built:
4
5 docker build -f Dockerfile.deployment --tag <repository>:<tag> --build-arg <buildarg1> --build-arg <buildarg2> .
6
7There are several build arguments required:
8
9- `APP_URL`
10- `DOCS_URL`
11- `GIT_SHA` (build version. Something like `"$(date "+%Y%m%d-%H%M%S")-$(git rev-parse HEAD | cut -c1-7)"` should work)
12
13## Updating image
14
15Run build with `--pull --no-cache` parameters to ensure latest image and packages are used.
16
17## Configuration files
18
19There are three main configuration files which can be mounted to the container:
20
21- `/app/.env`: environment file. Can also be done by passing them as environment variables
22- `/app/storage/oauth-private.key`: OAuth private key. Alternatively can be set using environment variable `PASSPORT_PRIVATE_KEY`
23- `/app/storage/oauth-public.key`: OAuth public key for the private key above. Similarly can be an environment variable `PASSPORT_PUBLIC_KEY`
24
25Note that as the actual process is run as non-root user, the files must be world-readable.
26
27## Services
28
29The image built serves multiple purposes, each can be run by passing the parameter when starting docker (or as command if using orchestration tools like docker compose).
30
31There are three main commands:
32
33- octane: starts octane on port 8000
34- assets: starts nginx on port 8080. Used to serve static assets
35- artisan: starts artisan command. This should be followed by correct options
36
37### octane
38
39Command: `octane`
40
41Serves PHP over HTTP. Connect to it at port 8000 through a reverse proxy like `nginx`.
42
43### static assets
44
45Command: `assets`
46
47This serves static files using nginx at port 8080. The nginx config file is located at `/app/docker/deployment/nginx-assets.conf` and can be overridden by mounting.
48
49### job runner
50
51Command: `artisan queue:work --queue=<queuename> <additional options...>`
52
53There are multiple queues used:
54
55- `beatmap_default`
56- `beatmap_high`
57- `default`
58- `notification`
59- `store-notifications`
60
61The names should be relatively self explained. Multiple queues can be handled by single runner by specifying them all separated by comma (ex: `default,notification,store-notifications`).
62
63Additional options can be checked [in this page](https://laravel.com/docs/6.x/queues).
64
65### scheduled tasks
66
67Command: `artisan schedule:run`
68
69This should be run at least every 10 minutes. It doesn't run permanently.
70
71## Migration
72
73No migration is run by default. Run the container with command `artisan migrate` to run the migration.