/
docker-compose.yml
191 lines (174 loc) · 5.1 KB
/
docker-compose.yml
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
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
version: "3"
x-environment: &common-env
DANBOORU_HOSTNAME: http://localhost:${EXPOSED_SERVER_PORT:-3000}
DANBOORU_REDIS_URL: redis://redis
DANBOORU_OPENSEARCH_HOST: opensearch
DANBOORU_MEMCACHED_SERVERS: memcached
DANBOORU_IQDB_SERVER: http://iqdb:5588
DANBOORU_DISCORD_SITE: http://localhost:8000
DANBOORU_DISCORD_SECRET: super_secret_for_url_discord
# These are just development secrets, do not use them in production
DANBOORU_PROTECTED_FILE_SECRET: 6686a6413d90c43d5e82403ef271ec25d13cc24e3bfcdd094e73d1eff22a3567
DANBOORU_REPLACEMENT_FILE_SECRET: b35bc54cdc0d0436fc5867c7ef88f9b10a37ae20a06b37e67614fe60019d7bb1
SECRET_TOKEN: 1c58518a891eff4520cadc59afa9e378a9325f1247544ff258096e497f095f45
SESSION_SECRET_KEY: 44b4f44e9f253c406cbe727d403d500c1cecff943e4d2aea8f5447f28846fffe
# Hide annoying output from libvips on corrupt files
VIPS_WARNING: "0"
DD_TRACE_STARTUP_LOGS: false
x-depends-on: &common-depends-on
opensearch:
condition: service_healthy
memcached:
condition: service_started
postgres:
condition: service_started
redis:
condition: service_started
services:
e621:
build:
context: ./
args:
HOST_UID: ${HOST_UID:-1000}
HOST_GID: ${HOST_GID:-1000}
user: ${DOCKER_USER:-root}
image: e621
volumes:
- .:/app
- node_modules:/app/node_modules
- post_data:/app/public/data
- ./docker/cron_tasks/daily:/etc/periodic/daily
environment:
<<: *common-env
RAILS_ENV: development
DD_AGENT_HOST: datadog-agent
DD_SERVICE: ${DD_SERVICE:-}
DD_ENV: ${DD_ENV:-}
depends_on:
<<: *common-depends-on
autocompleted:
condition: service_started
iqdb:
condition: service_started
tty: true
autocompleted:
image: ghcr.io/e621ng/autocompleted:8807bc8658f594cd0de04de1c272c3a2f917fc48
command: /app/autocompleted
environment:
SERVER_ADDR: autocompleted:8118
PG__USER: e621
PG__HOST: postgres
PG__PORT: 5432
PG__DBNAME: e621_development
PG__POOL__MAX_SIZE: 1
nginx:
image: nginx:stable-alpine
volumes:
- ./public:/app/public
- post_data:/app/public/data
- ./docker/default.conf.template:/etc/nginx/templates/default.conf.template
environment:
<<: *common-env
NGINX_PORT: ${EXPOSED_SERVER_PORT:-3000}
depends_on:
- autocompleted
- e621
ports:
- "${EXPOSED_SERVER_PORT:-3000}:${EXPOSED_SERVER_PORT:-3000}"
postgres:
image: postgres:15-alpine
environment:
- POSTGRES_USER=e621
- POSTGRES_DB=e621_development
- POSTGRES_HOST_AUTH_METHOD=trust
volumes:
- db_data:/var/lib/postgresql/data
ports:
- "${EXPOSED_POSTGRES_PORT:-34517}:5432"
redis:
image: redis:7.0.10-alpine
command: redis-server --save 10 1 --loglevel warning
volumes:
- redis_data_v2:/data
memcached:
image: memcached:1.5.22-alpine
opensearch:
image: opensearchproject/opensearch:2.9.0
environment:
- discovery.type=single-node
- logger.level=WARN
- DISABLE_SECURITY_PLUGIN=true
- DISABLE_INSTALL_DEMO_CONFIG=true
- OPENSEARCH_JAVA_OPTS=-Xms1g -Xmx1g
volumes:
- opensearch_data:/usr/share/opensearch/data
healthcheck:
interval: 5s
timeout: 2s
retries: 12
test: curl "opensearch:9200/_cluster/health?wait_for_status=yellow&timeout=2s"
iqdb:
image: ghcr.io/e621ng/iqdb:b988f000f17008677c7546c0c13623bc956b585d
command: iqdb http 0.0.0.0 5588 /iqdb/e621_v2.db
volumes:
- iqdb_data:/iqdb
datadog-agent:
image: datadog/agent:7.52.0
environment:
DD_API_KEY: ${DD_API_KEY:-}
DD_SITE: ${DD_SITE:-us5.datadoghq.com}
DD_HOSTNAME: datadog-agent
DD_LOG_LEVEL: WARN
DD_APM_NON_LOCAL_TRAFFIC: true
profiles:
- datadog
# Discord integration
discord_joiner:
image: ghcr.io/e621ng/discord_joiner:fdd9563e75d6f1b2b756c032b9749199c08d9765
environment:
FETCH_SECRET: abc123
URL_SECRET: super_secret_for_url_discord
JOINER_BASE_URL: http://localhost:8000
BOT_TOKEN: ${JOINER_BOT_TOKEN-}
OAUTH2_CLIENT_ID: ${JOINER_OAUTH2_CLIENT_ID-}
OAUTH2_CLIENT_SECRET: ${JOINER_OAUTH2_CLIENT_SECRET-}
GUILD_ID: ${JOINER_GUILD_ID-}
FAILED_JOIN_URL: ${JOINER_FAILED_JOIN_WEBHOOK_URL-}
ports:
- 8000:8000
volumes:
- discord_joiner_data:/opt/app/data
profiles:
- discord
# Useful for development
tests:
image: e621
environment:
<<: *common-env
RAILS_ENV: test
volumes:
- .:/app
- ./docker/danbooru_local_config.rb:/app/config/danbooru_local_config.rb
- node_modules:/app/node_modules
depends_on:
<<: *common-depends-on
entrypoint: bundle exec rails test
profiles:
- tests
rubocop:
image: e621
volumes:
- .:/app
- rubocop_cache:/rubocop_cache
entrypoint: bundle exec rubocop --cache-root /rubocop_cache
profiles:
- rubocop
volumes:
post_data:
iqdb_data:
opensearch_data:
db_data:
redis_data_v2:
node_modules:
rubocop_cache:
discord_joiner_data: