1x-env: &x-env
2 APP_KEY: "${APP_KEY}"
3 BEATMAPS_DIFFICULTY_CACHE_SERVER_URL: http://beatmap-difficulty-lookup-cache:8080
4 BROADCAST_DRIVER: redis
5 DB_CONNECTION_STRING: Server=db;Database=osu;Uid=osuweb;
6 DB_HOST: db
7 ES_HOST: http://elasticsearch:9200
8 ES_SOLO_SCORES_HOST: http://elasticsearch:9200
9 GITHUB_TOKEN: "${GITHUB_TOKEN}"
10 NOTIFICATION_REDIS_HOST: redis
11 PASSPORT_PUBLIC_KEY: "${PASSPORT_PUBLIC_KEY:-}"
12 REDIS_HOST: redis
13
14x-web: &x-web
15 build:
16 context: ./docker/development
17 dockerfile: ../../Dockerfile.development
18 init: true
19 volumes:
20 - .:/app
21 environment:
22 <<: *x-env
23
24services:
25 php:
26 <<: *x-web
27 command: ['octane', '--watch']
28 deploy:
29 restart_policy:
30 condition: on-failure
31 shm_size: '2gb' # for chromium
32
33 php-dusk:
34 <<: *x-web
35 command: ['octane', '--watch']
36 environment:
37 <<: *x-env
38 APP_ENV: dusk.local
39 OCTANE_STATE_FILE: /tmp/octane-state.json
40
41 assets:
42 <<: *x-web
43 command: ['watch']
44
45 job:
46 <<: *x-web
47 command: ['job']
48
49 testjs:
50 <<: *x-web
51 volumes:
52 - .:/app
53 - ./storage/testjs-assets:/app/public/assets
54 - ./storage/testjs-builds:/app/resources/builds
55 profiles: ['testjs']
56 command: ['test', 'js']
57
58 schedule:
59 <<: *x-web
60 command: ['schedule']
61
62 migrator:
63 <<: *x-web
64 command: ['migrate']
65 depends_on:
66 db:
67 condition: service_healthy
68
69 beatmap-difficulty-lookup-cache:
70 image: pppy/osu-beatmap-difficulty-lookup-cache
71 ports:
72 - "${BEATMAPS_DIFFICULTY_CACHE_EXTERNAL_PORT:-127.0.0.1:5001}:8080"
73
74 notification-server:
75 image: pppy/osu-notification-server
76 depends_on:
77 redis:
78 condition: service_healthy
79 db:
80 condition: service_healthy
81 volumes:
82 - .env:/app/.env
83 - ./storage/oauth-public.key:/app/oauth-public.key
84 environment:
85 <<: *x-env
86 ports:
87 # used by GitHub Actions test
88 - "${NOTIFICATION_EXTERNAL_PORT:-127.0.0.1:2345}:2345"
89
90 notification-server-dusk:
91 image: pppy/osu-notification-server
92 depends_on:
93 redis:
94 condition: service_healthy
95 db:
96 condition: service_healthy
97 volumes:
98 - .env.dusk.local:/app/.env
99 - ./storage/oauth-public.key:/app/oauth-public.key
100 environment:
101 <<: *x-env
102
103 db:
104 image: mysql:8.0
105 volumes:
106 - database:/var/lib/mysql
107 - ./docker/development/db_user.sql:/docker-entrypoint-initdb.d/db_user.sql
108 environment:
109 <<: *x-env
110 MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
111 ports:
112 - "${MYSQL_EXTERNAL_PORT:-127.0.0.1:3306}:3306"
113 healthcheck:
114 # important to use 127.0.0.1 instead of localhost as mysql starts twice.
115 # the first time it listens on sockets but isn't actually ready
116 # see https://github.com/docker-library/mysql/issues/663
117 start_interval: 1s
118 start_period: 60s
119 test: ["CMD", "mysqladmin", "ping", "-h", "127.0.0.1"]
120 timeout: 60s
121
122 redis:
123 command: ['redis-server', '--save', '60', '1', '--loglevel', 'warning']
124 image: redis:latest
125 ports:
126 - "${REDIS_EXTERNAL_PORT:-127.0.0.1:6379}:6379"
127 healthcheck:
128 start_interval: 1s
129 start_period: 60s
130 test: ["CMD", "redis-cli", "--raw", "incr", "ping"]
131 timeout: 60s
132 volumes:
133 - redis:/data
134
135 elasticsearch:
136 # Version must be kept up to date with library defined in: composer.json
137 image: elasticsearch:7.17.16
138 ports:
139 - "${ES_EXTERNAL_PORT:-127.0.0.1:9200}:9200"
140 volumes:
141 - elasticsearch:/usr/share/elasticsearch/data
142 environment:
143 action.auto_create_index: false
144 discovery.type: single-node
145 ES_JAVA_OPTS: "-Xms512m -Xmx512m" # less OOM on default settings.
146 ingest.geoip.downloader.enabled: false
147 healthcheck:
148 start_interval: 1s
149 start_period: 60s
150 test: curl -s http://localhost:9200/_cluster/health?wait_for_status=yellow >/dev/null || exit 1
151 timeout: 60s
152
153 nginx:
154 image: nginx:latest
155 depends_on:
156 - php
157 - php-dusk
158 - notification-server
159 - notification-server-dusk
160 volumes:
161 - ./docker/development/nginx-default.conf:/etc/nginx/conf.d/default.conf
162 - .:/app
163 ports:
164 - "${NGINX_PORT:-8080}:80"
165
166 score-indexer:
167 image: pppy/osu-elastic-indexer:master
168 command: ["queue", "watch"]
169 depends_on:
170 redis:
171 condition: service_healthy
172 db:
173 condition: service_healthy
174 elasticsearch:
175 condition: service_healthy
176 environment:
177 <<: *x-env
178 SCHEMA: "${SCHEMA:-1}"
179
180 score-indexer-test:
181 image: pppy/osu-elastic-indexer:master
182 command: ["queue", "watch"]
183 depends_on:
184 redis:
185 condition: service_healthy
186 db:
187 condition: service_healthy
188 elasticsearch:
189 condition: service_healthy
190 environment:
191 <<: *x-env
192 # match with .env.testing.example
193 DB_CONNECTION_STRING: Server=db;Database=osu_test;Uid=osuweb;
194 ES_INDEX_PREFIX: test_
195 SCHEMA: test
196
197volumes:
198 database:
199 elasticsearch:
200 redis: