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