unoffical wafrn mirror
wafrn.net
atproto
social-network
activitypub
1services:
2 backend: &default_backend
3 build:
4 context: .
5 dockerfile: packages/backend/Dockerfile
6 depends_on:
7 db:
8 condition: service_started
9 redis:
10 condition: service_started
11 frontend:
12 condition: service_started
13 migration:
14 condition: service_completed_successfully
15 restart: unless-stopped
16 environment:
17 NODE_ENV: production
18 ADMIN_USER: ${ADMIN_USER}
19 ADMIN_EMAIL: ${ADMIN_EMAIL}
20 ADMIN_PASSWORD: ${ADMIN_PASSWORD}
21 JWT_SECRET: ${JWT_SECRET}
22 DOMAIN_NAME: ${DOMAIN_NAME}
23
24 CACHE_DOMAIN: ${CACHE_DOMAIN}
25 MEDIA_DOMAIN: ${MEDIA_DOMAIN}
26
27 DONATION_URL: ${DONATION_URL}
28
29 SMTP_HOST: ${SMTP_HOST}
30 SMTP_USER: ${SMTP_USER}
31 SMTP_PORT: ${SMTP_PORT}
32 SMTP_PASSWORD: ${SMTP_PASSWORD}
33 SMTP_FROM: ${SMTP_FROM}
34
35 POSTGRES_USER: ${POSTGRES_USER}
36 POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
37 POSTGRES_DBNAME: ${POSTGRES_DBNAME}
38
39 WEBPUSH_EMAIL: ${WEBPUSH_EMAIL}
40 WEBPUSH_PRIVATE: ${WEBPUSH_PRIVATE}
41 WEBPUSH_PUBLIC: ${WEBPUSH_PUBLIC}
42
43 ENABLE_BSKY: ${ENABLE_BSKY}
44 PDS_DOMAIN_NAME: ${PDS_DOMAIN_NAME}
45 PDS_JWT_SECRET: ${PDS_JWT_SECRET}
46 PDS_ADMIN_PASSWORD: ${PDS_ADMIN_PASSWORD}
47
48 USE_WORKERS: true
49 LOG_SQL_QUERIES: ${LOG_SQL_QUERIES:-}
50 UPLOAD_LIMIT: ${UPLOAD_LIMIT:-}
51 POSTS_PER_PAGE: ${POSTS_PER_PAGE:-}
52 LOG_LEVEL: ${LOG_LEVEL:-}
53 BLOCKLIST_URI: ${BLOCKLIST_URI:-}
54 FRONTEND_PATH: ${FRONTEND_PATH:-}
55 DISABLE_REQUIRE_SEND_EMAIL: ${DISABLE_REQUIRE_SEND_EMAIL:-}
56 BLOCKED_IPS: ${BLOCKED_IPS:-}
57 REVIEW_REGISTRATIONS: ${REVIEW_REGISTRATIONS:-}
58 IGNORE_BLOCK_HOSTS: ${IGNORE_BLOCK_HOSTS:-}
59
60 FRONTEND_LOGO: ${FRONTEND_LOGO:-}
61 FRONTEND_API_URL: ${FRONTEND_API_URL:-}
62 FRONTEND_MEDIA_URL: ${FRONTEND_MEDIA_URL:-}
63 FRONTEND_CACHE_URL: ${FRONTEND_CACHE_URL:-}
64 FRONTEND_CACHE_BACKUP_URLS: ${FRONTEND_CACHE_BACKUP_URLS:-}
65 FRONTEND_SHORTEN_POSTS: ${FRONTEND_SHORTEN_POSTS:-}
66 FRONTEND_DISABLE_PWA: ${FRONTEND_DISABLE_PWA:-}
67 FRONTEND_MAINTENANCE: ${FRONTEND_MAINTENANCE:-}
68 FRONTEND_SHORT_TITLE: ${FRONTEND_SHORT_TITLE:-}
69 FRONTEND_LONG_TITLE: ${FRONTEND_LONG_TITLE:-}
70 FRONTEND_DESCRIPTION: ${FRONTEND_DESCRIPTION:-}
71
72 REGISTRATION_LEVEL: ${REGISTRATION_LEVEL:-}
73 REGISTRATIONS_DISABLED_TEXT: ${REGISTRATIONS_DISABLED_TEXT:-}
74 HIDE_BLOCKED_SERVERS: ${HIDE_BLOCKED_SERVERS:-}
75 AUTOFOLLOW_MAIN_ADMIN: ${AUTOFOLLOW_MAIN_ADMIN:-}
76 REGISTRATION_MINIMUM_AGE: ${REGISTRATION_MINIMUM_AGE:-}
77
78 FRONTEND_FQDN_URL: https://${DOMAIN_NAME}
79
80 ENABLE_RAW_OUTPUT: ${ENABLE_RAW_OUTPUT:-}
81 volumes:
82 - ./packages/backend/uploads:/app/packages/backend/uploads
83 - ./packages/backend/cache:/app/packages/backend/cache
84 - frontend:/app/packages/frontend:ro
85
86 migration:
87 <<: *default_backend
88 depends_on:
89 db:
90 condition: service_started
91 redis:
92 condition: service_started
93 frontend:
94 condition: service_started
95 restart: no
96 command: "npm exec tsx migrate.ts init-container"
97
98 frontend:
99 restart: unless-stopped
100 build:
101 context: .
102 dockerfile: packages/frontend/Dockerfile
103 ports:
104 - 80:80
105 - 443:443
106 environment:
107 DOMAIN_NAME: ${DOMAIN_NAME}
108 PDS_DOMAIN_NAME: ${PDS_DOMAIN_NAME}
109 CACHE_DOMAIN: ${CACHE_DOMAIN}
110 MEDIA_DOMAIN: ${MEDIA_DOMAIN}
111
112 DONATION_URL: ${DONATION_URL}
113 ACME_EMAIL: ${ACME_EMAIL}
114 FRONTEND_SHORT_TITLE: ${FRONTEND_SHORT_TITLE:-}
115 FRONTEND_LONG_TITLE: ${FRONTEND_LONG_TITLE:-}
116 FRONTEND_DESCRIPTION: ${FRONTEND_DESCRIPTION:-}
117 REGISTRATION_LEVEL: ${REGISTRATION_LEVEL:-}
118 REGISTRATIONS_DISABLED_TEXT: ${REGISTRATIONS_DISABLED_TEXT:-}
119 HIDE_BLOCKED_SERVERS: ${HIDE_BLOCKED_SERVERS:-}
120 AUTOFOLLOW_MAIN_ADMIN: ${AUTOFOLLOW_MAIN_ADMIN:-}
121 REGISTRATION_MINIMUM_AGE: ${REGISTRATION_MINIMUM_AGE:-}
122 volumes:
123 - "caddy:/data"
124 - "frontend:/var/www/html/frontend"
125 - ./packages/backend/uploads:/var/www/html/uploads
126 - ./packages/caddy:/etc/caddy/config
127
128 db:
129 build:
130 context: monitoring/database
131 dockerfile: Dockerfile
132 restart: unless-stopped
133 shm_size: '2gb'
134 environment:
135 POSTGRES_USER: ${POSTGRES_USER}
136 POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
137 POSTGRES_DB: ${POSTGRES_DBNAME}
138 POSTGRES_METRICS_USER: ${POSTGRES_METRICS_USER}
139 POSTGRES_METRICS_PASSWORD: ${POSTGRES_METRICS_PASSWORD}
140 POSTGRES_METRICS_DBNAME: ${POSTGRES_METRICS_DBNAME}
141 volumes:
142 - dbpg:/var/lib/postgresql/data
143
144 adminer:
145 image: adminer
146 restart: unless-stopped
147
148 redis:
149 image: redis:7.2.4
150 restart: unless-stopped
151 volumes:
152 - redis:/data
153
154 pds:
155 image: ghcr.io/bluesky-social/pds:0.4
156 restart: unless-stopped
157 profiles:
158 - bluesky
159 environment:
160 PDS_HOSTNAME: ${PDS_DOMAIN_NAME}
161 PDS_JWT_SECRET: ${PDS_JWT_SECRET}
162 PDS_ADMIN_PASSWORD: ${PDS_ADMIN_PASSWORD}
163 PDS_PLC_ROTATION_KEY_K256_PRIVATE_KEY_HEX: ${PDS_PLC_ROTATION_KEY_K256_PRIVATE_KEY_HEX}
164 PDS_DATA_DIRECTORY: /pds
165 PDS_BLOBSTORE_DISK_LOCATION: /pds/blocks
166 PDS_BLOB_UPLOAD_LIMIT: 157286400
167 PDS_DID_PLC_URL: "https://plc.directory"
168 PDS_BSKY_APP_VIEW_URL: "https://api.bsky.app"
169 PDS_BSKY_APP_VIEW_DID: "did:web:api.bsky.app"
170 PDS_REPORT_SERVICE_URL: "https://mod.bsky.app"
171 PDS_REPORT_SERVICE_DID: "did:plc:ar7c4by46qjdydhdevvrndac"
172 PDS_CRAWLERS: "https://bsky.network, https://atproto.africa"
173 PDS_EMAIL_SMTP_URL: "smtps://${SMTP_USER}:${SMTP_PASSWORD}@${SMTP_HOST}:${SMTP_PORT}"
174 PDS_EMAIL_FROM_ADDRESS: "${SMTP_FROM}"
175 LOG_ENABLED: true
176 volumes:
177 - pds:/pds
178
179 pds_worker:
180 <<: *default_backend
181 profiles:
182 - bluesky
183 command: "npm exec tsx atproto.ts"
184
185 prometheus:
186 restart: unless-stopped
187 image: prom/prometheus:latest
188 volumes:
189 - ./monitoring/prometheus.yml:/etc/prometheus/prometheus.yml
190 - prometheus_data:/prometheus
191 command:
192 - '--config.file=/etc/prometheus/prometheus.yml'
193 - '--storage.tsdb.path=/prometheus'
194 - '--web.console.libraries=/usr/share/prometheus/console_libraries'
195 - '--web.console.templates=/usr/share/prometheus/consoles'
196
197 cadvisor:
198 restart: unless-stopped
199 image: gcr.io/cadvisor/cadvisor:latest
200 command:
201 - '-port=8081'
202 environment:
203 CADVISOR_HEALTHCHECK_URL: http://localhost:8081/healthz
204 volumes:
205 - /:/rootfs:ro
206 - /var/run:/var/run:rw
207 - /sys:/sys:ro
208 - /var/lib/docker/:/var/lib/docker:ro
209
210 node-exporter:
211 restart: unless-stopped
212 image: prom/node-exporter:latest
213 volumes:
214 - /proc:/host/proc:ro
215 - /sys:/host/sys:ro
216 - /:/rootfs:ro
217 command:
218 - '--path.procfs=/host/proc'
219 - '--path.sysfs=/host/sys'
220 - '--collector.filesystem.ignored-mount-points="^/(sys|proc|dev|host|etc)($$|/)"'
221
222 grafana:
223 build:
224 context: monitoring/grafana
225 dockerfile: Dockerfile
226 volumes:
227 - grafana_data:/var/lib/grafana
228 restart: unless-stopped
229 environment:
230 GF_SERVER_HTTP_PORT: 2345
231 GF_SECURITY_ADMIN_PASSWORD: ${GF_SECURITY_ADMIN_PASSWORD}
232 GF_USERS_ALLOW_SIGN_UP: false
233
234 GF_SMTP_ENABLED: true
235 GF_SMTP_HOST: ${SMTP_HOST}:${SMTP_PORT}
236 GF_SMTP_FROM_ADDRESS: ${SMTP_FROM}
237 GF_SERVER_DOMAIN: ${DOMAIN_NAME}
238 GF_SMTP_FROM_NAME: ${SMTP_FROM}
239 GF_SMTP_USER: "${SMTP_USER}"
240 GF_SMTP_PASSWORD: "${SMTP_PASSWORD}"
241
242 POSTGRES_METRICS_USER: ${POSTGRES_METRICS_USER}
243 POSTGRES_METRICS_PASSWORD: ${POSTGRES_METRICS_PASSWORD}
244 POSTGRES_METRICS_DBNAME: ${POSTGRES_METRICS_DBNAME}
245
246 pgwatch:
247 build:
248 context: monitoring/pgwatch
249 dockerfile: Dockerfile
250 args:
251 POSTGRES_USER: ${POSTGRES_USER}
252 POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
253 POSTGRES_DB: ${POSTGRES_DBNAME}
254 restart: unless-stopped
255 environment:
256 POSTGRES_METRICS_USER: ${POSTGRES_METRICS_USER}
257 POSTGRES_METRICS_PASSWORD: ${POSTGRES_METRICS_PASSWORD}
258 POSTGRES_METRICS_DBNAME: ${POSTGRES_METRICS_DBNAME}
259 command:
260 - "--web-disable=all"
261 - "--sources=/sources.yaml"
262 - "--sink=postgresql://${POSTGRES_METRICS_USER}:${POSTGRES_METRICS_PASSWORD}@db:5432/${POSTGRES_METRICS_DBNAME}"
263 depends_on:
264 db:
265 condition: service_started
266
267volumes:
268 dbpg:
269 caddy:
270 pds:
271 frontend:
272 redis:
273 prometheus_data:
274 grafana_data:
275
276networks:
277 default:
278 enable_ipv6: true