A modified version of Wafrn used on https://wf.jbc.lol (mirror of https://git.jbc.lol/jbcrn/wf.jbc.lol which is a mirror of https://codeberg.org/jbcarreon123/wf.jbc.lol)
1services:
2 backend: &default_backend
3 build:
4 context: .
5 dockerfile: packages/backend/Dockerfile
6 depends_on:
7 db:
8 condition: service_healthy
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 SMTP_HOST: ${SMTP_HOST}
28 SMTP_USER: ${SMTP_USER}
29 SMTP_PORT: ${SMTP_PORT}
30 SMTP_PASSWORD: ${SMTP_PASSWORD}
31 SMTP_FROM: ${SMTP_FROM}
32
33 POSTGRES_USER: ${POSTGRES_USER}
34 POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
35 POSTGRES_DBNAME: ${POSTGRES_DBNAME}
36
37 WEBPUSH_EMAIL: ${WEBPUSH_EMAIL}
38 WEBPUSH_PRIVATE: ${WEBPUSH_PRIVATE}
39 WEBPUSH_PUBLIC: ${WEBPUSH_PUBLIC}
40
41 ENABLE_BSKY: ${ENABLE_BSKY}
42 PDS_DOMAIN_NAME: ${PDS_DOMAIN_NAME}
43 PDS_JWT_SECRET: ${PDS_JWT_SECRET}
44 PDS_ADMIN_PASSWORD: ${PDS_ADMIN_PASSWORD}
45
46 USE_WORKERS: true
47 LOG_SQL_QUERIES: ${LOG_SQL_QUERIES:-}
48 UPLOAD_LIMIT: ${UPLOAD_LIMIT:-}
49 POSTS_PER_PAGE: ${POSTS_PER_PAGE:-}
50 LOG_LEVEL: ${LOG_LEVEL:-}
51 BLOCKLIST_URI: ${BLOCKLIST_URI:-}
52 FRONTEND_PATH: ${FRONTEND_PATH:-}
53 DISABLE_REQUIRE_SEND_EMAIL: ${DISABLE_REQUIRE_SEND_EMAIL:-}
54 BLOCKED_IPS: ${BLOCKED_IPS:-}
55 REVIEW_REGISTRATIONS: ${REVIEW_REGISTRATIONS:-}
56 IGNORE_BLOCK_HOSTS: ${IGNORE_BLOCK_HOSTS:-}
57
58 FRONTEND_LOGO: ${FRONTEND_LOGO:-}
59 FRONTEND_API_URL: ${FRONTEND_API_URL:-}
60 FRONTEND_MEDIA_URL: ${FRONTEND_MEDIA_URL:-}
61 FRONTEND_CACHE_URL: ${FRONTEND_CACHE_URL:-}
62 FRONTEND_CACHE_BACKUP_URLS: ${FRONTEND_CACHE_BACKUP_URLS:-}
63 FRONTEND_SHORTEN_POSTS: ${FRONTEND_SHORTEN_POSTS:-}
64 FRONTEND_DISABLE_PWA: ${FRONTEND_DISABLE_PWA:-}
65 FRONTEND_MAINTENANCE: ${FRONTEND_MAINTENANCE:-}
66 FRONTEND_SHORT_TITLE: ${FRONTEND_SHORT_TITLE:-}
67 FRONTEND_LONG_TITLE: ${FRONTEND_LONG_TITLE:-}
68 FRONTEND_DESCRIPTION: ${FRONTEND_DESCRIPTION:-}
69
70 FRONTEND_FQDN_URL: https://${DOMAIN_NAME}
71
72 ENABLE_RAW_OUTPUT: ${ENABLE_RAW_OUTPUT:-}
73 volumes:
74 - ./packages/backend/uploads:/app/packages/backend/uploads
75 - ./packages/backend/cache:/app/packages/backend/cache
76 - frontend:/app/packages/frontend:ro
77
78 migration:
79 <<: *default_backend
80 depends_on:
81 db:
82 condition: service_started
83 redis:
84 condition: service_started
85 frontend:
86 condition: service_started
87 restart: no
88 command: "npm exec tsx migrate.ts init-container"
89
90 frontend:
91 restart: unless-stopped
92 build:
93 context: .
94 dockerfile: packages/frontend/Dockerfile
95 ports:
96 - 80:80
97 - 443:443
98 environment:
99 DOMAIN_NAME: ${DOMAIN_NAME}
100 PDS_DOMAIN_NAME: ${PDS_DOMAIN_NAME}
101 CACHE_DOMAIN: ${CACHE_DOMAIN}
102 MEDIA_DOMAIN: ${MEDIA_DOMAIN}
103 ACME_EMAIL: ${ACME_EMAIL}
104 FRONTEND_SHORT_TITLE: ${FRONTEND_SHORT_TITLE:-}
105 FRONTEND_LONG_TITLE: ${FRONTEND_LONG_TITLE:-}
106 FRONTEND_DESCRIPTION: ${FRONTEND_DESCRIPTION:-}
107 volumes:
108 - "caddy:/data"
109 - "frontend:/var/www/html/frontend"
110 - ./packages/backend/uploads:/var/www/html/uploads
111 - ./packages/caddy:/etc/caddy/config
112
113 db:
114 image: postgres:17
115 restart: unless-stopped
116 shm_size: '2gb'
117 environment:
118 POSTGRES_USER: ${POSTGRES_USER}
119 POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
120 POSTGRES_DB: ${POSTGRES_DBNAME}
121 volumes:
122 - dbpg:/var/lib/postgresql/data
123
124 adminer:
125 image: adminer
126 restart: unless-stopped
127
128 redis:
129 image: redis:7.2.4
130 restart: unless-stopped
131 volumes:
132 - redis:/data
133
134 pds:
135 image: ghcr.io/bluesky-social/pds:0.4
136 restart: unless-stopped
137 profiles:
138 - bluesky
139 environment:
140 PDS_HOSTNAME: ${PDS_DOMAIN_NAME}
141 PDS_JWT_SECRET: ${PDS_JWT_SECRET}
142 PDS_ADMIN_PASSWORD: ${PDS_ADMIN_PASSWORD}
143 PDS_PLC_ROTATION_KEY_K256_PRIVATE_KEY_HEX: ${PDS_PLC_ROTATION_KEY_K256_PRIVATE_KEY_HEX}
144 PDS_DATA_DIRECTORY: /pds
145 PDS_BLOBSTORE_DISK_LOCATION: /pds/blocks
146 PDS_BLOB_UPLOAD_LIMIT: 52428800
147 PDS_DID_PLC_URL: "https://plc.directory"
148 PDS_BSKY_APP_VIEW_URL: "https://api.bsky.app"
149 PDS_BSKY_APP_VIEW_DID: "did:web:api.bsky.app"
150 PDS_REPORT_SERVICE_URL: "https://mod.bsky.app"
151 PDS_REPORT_SERVICE_DID: "did:plc:ar7c4by46qjdydhdevvrndac"
152 PDS_CRAWLERS: "https://bsky.network, https://atproto.africa"
153 PDS_EMAIL_SMTP_URL: "smtp://${SMTP_USER}:${SMTP_PASSWORD}@${SMTP_HOST}:${SMTP_PORT}"
154 PDS_EMAIL_FROM_ADDRESS: "${SMTP_FROM}"
155 LOG_ENABLED: true
156 volumes:
157 - pds:/pds
158
159 pds_worker:
160 <<: *default_backend
161 profiles:
162 - bluesky
163 command: "npm exec tsx atproto.ts"
164
165volumes:
166 dbpg:
167 caddy:
168 pds:
169 frontend:
170 redis: