unoffical wafrn mirror
wafrn.net
atproto
social-network
activitypub
1services:
2 backend: &default_backend
3 build: &default_backend_build
4 context: .
5 dockerfile: packages/backend/Dockerfile
6 # these args configure private env vars for the backend and public env vars for the frontend
7 depends_on:
8 db:
9 condition: service_started
10 redis:
11 condition: service_started
12 frontend:
13 condition: service_started
14 migration:
15 condition: service_completed_successfully
16 restart: unless-stopped
17 environment: &default_backend_env_vars
18 NODE_ENV: production
19 ADMIN_USER: ${ADMIN_USER}
20 ADMIN_EMAIL: ${ADMIN_EMAIL}
21 ADMIN_PASSWORD: ${ADMIN_PASSWORD}
22 JWT_SECRET: ${JWT_SECRET}
23 DOMAIN_NAME: ${DOMAIN_NAME}
24
25 CACHE_DOMAIN: ${CACHE_DOMAIN}
26 MEDIA_DOMAIN: ${MEDIA_DOMAIN}
27
28 DONATION_URL: ${DONATION_URL}
29
30 SMTP_HOST: ${SMTP_HOST}
31 SMTP_USER: ${SMTP_USER}
32 SMTP_PORT: ${SMTP_PORT}
33 SMTP_PASSWORD: ${SMTP_PASSWORD}
34 SMTP_FROM: ${SMTP_FROM}
35
36 POSTGRES_USER: ${POSTGRES_USER}
37 POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
38 POSTGRES_DBNAME: ${POSTGRES_DBNAME}
39
40 WEBPUSH_EMAIL: ${WEBPUSH_EMAIL}
41 WEBPUSH_PRIVATE: ${WEBPUSH_PRIVATE}
42 WEBPUSH_PUBLIC: ${WEBPUSH_PUBLIC}
43
44 ENABLE_BSKY: ${ENABLE_BSKY}
45 PDS_DOMAIN_NAME: ${PDS_DOMAIN_NAME}
46 PDS_JWT_SECRET: ${PDS_JWT_SECRET}
47 PDS_ADMIN_PASSWORD: ${PDS_ADMIN_PASSWORD}
48
49 USE_WORKERS: false
50 LOG_SQL_QUERIES: ${LOG_SQL_QUERIES:-}
51 UPLOAD_LIMIT: ${UPLOAD_LIMIT:-}
52 POSTS_PER_PAGE: ${POSTS_PER_PAGE:-}
53 LOG_LEVEL: ${LOG_LEVEL:-}
54 BLOCKLIST_URI: ${BLOCKLIST_URI:-}
55 FRONTEND_PATH: ${FRONTEND_PATH:-}
56 DISABLE_REQUIRE_SEND_EMAIL: ${DISABLE_REQUIRE_SEND_EMAIL:-}
57 BLOCKED_IPS: ${BLOCKED_IPS:-}
58 REVIEW_REGISTRATIONS: ${REVIEW_REGISTRATIONS:-}
59 IGNORE_BLOCK_HOSTS: ${IGNORE_BLOCK_HOSTS:-}
60
61 FRONTEND_LOGO: ${FRONTEND_LOGO:-}
62 FRONTEND_API_URL: ${FRONTEND_API_URL:-}
63 FRONTEND_MEDIA_URL: ${FRONTEND_MEDIA_URL:-}
64 FRONTEND_CACHE_URL: ${FRONTEND_CACHE_URL:-}
65 FRONTEND_CACHE_BACKUP_URLS: ${FRONTEND_CACHE_BACKUP_URLS:-}
66 FRONTEND_SHORTEN_POSTS: ${FRONTEND_SHORTEN_POSTS:-}
67 FRONTEND_DISABLE_PWA: ${FRONTEND_DISABLE_PWA:-}
68 FRONTEND_MAINTENANCE: ${FRONTEND_MAINTENANCE:-}
69 FRONTEND_SHORT_TITLE: ${FRONTEND_SHORT_TITLE:-}
70 FRONTEND_LONG_TITLE: ${FRONTEND_LONG_TITLE:-}
71 FRONTEND_DESCRIPTION: ${FRONTEND_DESCRIPTION:-}
72
73 REGISTRATION_LEVEL: ${REGISTRATION_LEVEL:-}
74 REGISTRATIONS_DISABLED_TEXT: ${REGISTRATIONS_DISABLED_TEXT:-}
75 HIDE_BLOCKED_SERVERS: ${HIDE_BLOCKED_SERVERS:-}
76 REGISTRATION_MINIMUM_AGE: ${REGISTRATION_MINIMUM_AGE:-}
77
78 FRONTEND_FQDN_URL: https://${DOMAIN_NAME}
79
80 ENABLE_RAW_OUTPUT: ${ENABLE_RAW_OUTPUT:-}
81 deploy:
82 mode: replicated
83 replicas: 3
84 volumes:
85 - ./packages/backend/uploads:/app/packages/backend/uploads
86 - ./packages/backend/cache:/app/packages/backend/cache
87 - frontend:/app/packages/frontend:ro
88
89 migration:
90 <<: *default_backend
91 depends_on:
92 db:
93 condition: service_started
94 redis:
95 condition: service_started
96 frontend:
97 condition: service_started
98 restart: no
99 deploy:
100 mode: replicated
101 replicas: 1
102 command: "npm exec tsx migrate.ts init-container"
103
104 frontend:
105 restart: unless-stopped
106 build:
107 context: .
108 dockerfile: packages/frontend/Dockerfile
109 ports:
110 - 80:80
111 - 443:443
112 environment:
113 DOMAIN_NAME: ${DOMAIN_NAME}
114 PDS_DOMAIN_NAME: ${PDS_DOMAIN_NAME}
115 CACHE_DOMAIN: ${CACHE_DOMAIN}
116 MEDIA_DOMAIN: ${MEDIA_DOMAIN}
117
118 DONATION_URL: ${DONATION_URL}
119 ACME_EMAIL: ${ACME_EMAIL}
120 FRONTEND_SHORT_TITLE: ${FRONTEND_SHORT_TITLE:-}
121 FRONTEND_LONG_TITLE: ${FRONTEND_LONG_TITLE:-}
122 FRONTEND_DESCRIPTION: ${FRONTEND_DESCRIPTION:-}
123 REGISTRATION_LEVEL: ${REGISTRATION_LEVEL:-}
124 REGISTRATIONS_DISABLED_TEXT: ${REGISTRATIONS_DISABLED_TEXT:-}
125 HIDE_BLOCKED_SERVERS: ${HIDE_BLOCKED_SERVERS:-}
126 REGISTRATION_MINIMUM_AGE: ${REGISTRATION_MINIMUM_AGE:-}
127 CACHE_HOST: "cache:9000"
128 BACKEND_HOST: "wafrn-backend-1:9000 wafrn-backend-2:9000 wafrn-backend-3:9000"
129 WEBSOCKET_HOST: "wafrn-websocket-1:9000"
130 volumes:
131 - "caddy:/data"
132 - "frontend:/var/www/html/frontend"
133 - ./packages/backend/uploads:/var/www/html/uploads
134 - ./packages/caddy:/etc/caddy/config
135
136 db:
137 image: postgres:17
138 restart: unless-stopped
139 shm_size: '2gb'
140 environment:
141 POSTGRES_USER: ${POSTGRES_USER}
142 POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
143 POSTGRES_DB: ${POSTGRES_DBNAME}
144 volumes:
145 - dbpg:/var/lib/postgresql/data
146
147 adminer:
148 image: adminer
149 restart: unless-stopped
150
151 redis:
152 image: redis:7.2.4
153 restart: unless-stopped
154 volumes:
155 - redis:/data
156
157 pds:
158 image: ghcr.io/bluesky-social/pds:0.4
159 restart: unless-stopped
160 profiles:
161 - bluesky
162 environment:
163 PDS_HOSTNAME: ${PDS_DOMAIN_NAME}
164 PDS_JWT_SECRET: ${PDS_JWT_SECRET}
165 PDS_ADMIN_PASSWORD: ${PDS_ADMIN_PASSWORD}
166 PDS_PLC_ROTATION_KEY_K256_PRIVATE_KEY_HEX: ${PDS_PLC_ROTATION_KEY_K256_PRIVATE_KEY_HEX}
167 PDS_DATA_DIRECTORY: /pds
168 PDS_BLOBSTORE_DISK_LOCATION: /pds/blocks
169 PDS_BLOB_UPLOAD_LIMIT: 157286400
170 PDS_DID_PLC_URL: "https://plc.directory"
171 PDS_BSKY_APP_VIEW_URL: "https://api.bsky.app"
172 PDS_BSKY_APP_VIEW_DID: "did:web:api.bsky.app"
173 PDS_REPORT_SERVICE_URL: "https://mod.bsky.app"
174 PDS_REPORT_SERVICE_DID: "did:plc:ar7c4by46qjdydhdevvrndac"
175 PDS_CRAWLERS: "https://bsky.network, https://atproto.africa"
176 PDS_EMAIL_SMTP_URL: "smtps://${SMTP_USER}:${SMTP_PASSWORD}@${SMTP_HOST}:${SMTP_PORT}"
177 PDS_EMAIL_FROM_ADDRESS: "${SMTP_FROM}"
178 LOG_ENABLED: true
179 volumes:
180 - pds:/pds
181
182 pds_worker:
183 <<: *default_backend
184 profiles:
185 - bluesky
186 deploy:
187 mode: replicated
188 replicas: 1
189 command: "npm exec tsx atproto.ts"
190
191 cache:
192 <<: *default_backend
193 deploy:
194 mode: replicated
195 replicas: 1
196
197 websocket:
198 <<: *default_backend
199 deploy:
200 mode: replicated
201 replicas: 1
202 command: "npm exec tsx websocket.ts"
203
204 workers:
205 <<: *default_backend
206 build:
207 <<: *default_backend_build
208 environment:
209 <<: *default_backend_env_vars
210 USE_WORKERS: true
211 deploy:
212 mode: replicated
213 replicas: 3
214
215volumes:
216 dbpg:
217 caddy:
218 pds:
219 frontend:
220 redis: