unoffical wafrn mirror wafrn.net
atproto social-network activitypub
at angular21 315 lines 9.5 kB view raw
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 REGISTRATION_MINIMUM_AGE: ${REGISTRATION_MINIMUM_AGE:-} 75 REGISTRATIONS_DISABLED_TEXT: ${REGISTRATIONS_DISABLED_TEXT:-} 76 HIDE_BLOCKED_SERVERS: ${HIDE_BLOCKED_SERVERS:-} 77 AUTOFOLLOW_MAIN_ADMIN: ${AUTOFOLLOW_MAIN_ADMIN:-} 78 79 FRONTEND_FQDN_URL: https://${DOMAIN_NAME} 80 81 ENABLE_RAW_OUTPUT: ${ENABLE_RAW_OUTPUT:-} 82 deploy: 83 mode: replicated 84 replicas: 3 85 volumes: 86 - ./packages/backend/uploads:/app/packages/backend/uploads 87 - ./packages/backend/cache:/app/packages/backend/cache 88 - frontend:/app/packages/frontend:ro 89 90 migration: 91 <<: *default_backend 92 depends_on: 93 db: 94 condition: service_started 95 redis: 96 condition: service_started 97 frontend: 98 condition: service_started 99 restart: no 100 deploy: 101 mode: replicated 102 replicas: 1 103 command: "npm exec tsx migrate.ts init-container" 104 105 frontend: 106 restart: unless-stopped 107 build: 108 context: . 109 dockerfile: packages/frontend/Dockerfile 110 ports: 111 - 80:80 112 - 443:443 113 environment: 114 DOMAIN_NAME: ${DOMAIN_NAME} 115 PDS_DOMAIN_NAME: ${PDS_DOMAIN_NAME} 116 CACHE_DOMAIN: ${CACHE_DOMAIN} 117 MEDIA_DOMAIN: ${MEDIA_DOMAIN} 118 119 DONATION_URL: ${DONATION_URL} 120 ACME_EMAIL: ${ACME_EMAIL} 121 FRONTEND_SHORT_TITLE: ${FRONTEND_SHORT_TITLE:-} 122 FRONTEND_LONG_TITLE: ${FRONTEND_LONG_TITLE:-} 123 FRONTEND_DESCRIPTION: ${FRONTEND_DESCRIPTION:-} 124 REGISTRATION_LEVEL: ${REGISTRATION_LEVEL:-} 125 REGISTRATIONS_DISABLED_TEXT: ${REGISTRATIONS_DISABLED_TEXT:-} 126 HIDE_BLOCKED_SERVERS: ${HIDE_BLOCKED_SERVERS:-} 127 AUTOFOLLOW_MAIN_ADMIN: ${AUTOFOLLOW_MAIN_ADMIN:-} 128 REGISTRATION_MINIMUM_AGE: ${REGISTRATION_MINIMUM_AGE:-} 129 CACHE_HOST: "cache:9000" 130 BACKEND_HOST: "wafrn-backend-1:9000 wafrn-backend-2:9000 wafrn-backend-3:9000" 131 WEBSOCKET_HOST: "wafrn-websocket-1:9000" 132 133 volumes: 134 - "caddy:/data" 135 - "frontend:/var/www/html/frontend" 136 - ./packages/backend/uploads:/var/www/html/uploads 137 - ./packages/caddy:/etc/caddy/config 138 139 db: 140 build: 141 context: monitoring/database 142 dockerfile: Dockerfile 143 restart: unless-stopped 144 shm_size: '2gb' 145 environment: 146 POSTGRES_USER: ${POSTGRES_USER} 147 POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} 148 POSTGRES_DB: ${POSTGRES_DBNAME} 149 POSTGRES_METRICS_USER: ${POSTGRES_METRICS_USER} 150 POSTGRES_METRICS_PASSWORD: ${POSTGRES_METRICS_PASSWORD} 151 POSTGRES_METRICS_DBNAME: ${POSTGRES_METRICS_DBNAME} 152 volumes: 153 - dbpg:/var/lib/postgresql/data 154 155 adminer: 156 image: adminer 157 restart: unless-stopped 158 159 redis: 160 image: redis:7.2.4 161 restart: unless-stopped 162 volumes: 163 - redis:/data 164 165 pds: 166 image: ghcr.io/bluesky-social/pds:0.4 167 restart: unless-stopped 168 profiles: 169 - bluesky 170 environment: 171 PDS_HOSTNAME: ${PDS_DOMAIN_NAME} 172 PDS_JWT_SECRET: ${PDS_JWT_SECRET} 173 PDS_ADMIN_PASSWORD: ${PDS_ADMIN_PASSWORD} 174 PDS_PLC_ROTATION_KEY_K256_PRIVATE_KEY_HEX: ${PDS_PLC_ROTATION_KEY_K256_PRIVATE_KEY_HEX} 175 PDS_DATA_DIRECTORY: /pds 176 PDS_BLOBSTORE_DISK_LOCATION: /pds/blocks 177 PDS_BLOB_UPLOAD_LIMIT: 157286400 178 PDS_DID_PLC_URL: "https://plc.directory" 179 PDS_BSKY_APP_VIEW_URL: "https://api.bsky.app" 180 PDS_BSKY_APP_VIEW_DID: "did:web:api.bsky.app" 181 PDS_REPORT_SERVICE_URL: "https://mod.bsky.app" 182 PDS_REPORT_SERVICE_DID: "did:plc:ar7c4by46qjdydhdevvrndac" 183 PDS_CRAWLERS: "https://bsky.network, https://atproto.africa" 184 PDS_EMAIL_SMTP_URL: "smtps://${SMTP_USER}:${SMTP_PASSWORD}@${SMTP_HOST}:${SMTP_PORT}" 185 PDS_EMAIL_FROM_ADDRESS: "${SMTP_FROM}" 186 LOG_ENABLED: true 187 volumes: 188 - pds:/pds 189 190 pds_worker: 191 <<: *default_backend 192 deploy: 193 mode: replicated 194 replicas: 1 195 profiles: 196 - bluesky 197 command: "npm exec tsx atproto.ts" 198 199 cache: 200 <<: *default_backend 201 deploy: 202 mode: replicated 203 replicas: 1 204 websocket: 205 <<: *default_backend 206 deploy: 207 mode: replicated 208 replicas: 1 209 command: "npm exec tsx websocket.ts" 210 211 workers: 212 <<: *default_backend 213 build: 214 <<: *default_backend_build 215 environment: 216 <<: *default_backend_env_vars 217 USE_WORKERS: true 218 deploy: 219 mode: replicated 220 replicas: 3 221 222 prometheus: 223 restart: unless-stopped 224 image: prom/prometheus:latest 225 volumes: 226 - ./monitoring/prometheus.yml:/etc/prometheus/prometheus.yml 227 - prometheus_data:/prometheus 228 command: 229 - '--config.file=/etc/prometheus/prometheus.yml' 230 - '--storage.tsdb.path=/prometheus' 231 - '--web.console.libraries=/usr/share/prometheus/console_libraries' 232 - '--web.console.templates=/usr/share/prometheus/consoles' 233 234 cadvisor: 235 restart: unless-stopped 236 image: gcr.io/cadvisor/cadvisor:latest 237 command: 238 - '-port=8081' 239 environment: 240 CADVISOR_HEALTHCHECK_URL: http://localhost:8081/healthz 241 volumes: 242 - /:/rootfs:ro 243 - /var/run:/var/run:rw 244 - /sys:/sys:ro 245 - /var/lib/docker/:/var/lib/docker:ro 246 247 node-exporter: 248 restart: unless-stopped 249 image: prom/node-exporter:latest 250 volumes: 251 - /proc:/host/proc:ro 252 - /sys:/host/sys:ro 253 - /:/rootfs:ro 254 command: 255 - '--path.procfs=/host/proc' 256 - '--path.sysfs=/host/sys' 257 - '--collector.filesystem.ignored-mount-points="^/(sys|proc|dev|host|etc)($$|/)"' 258 259 grafana: 260 build: 261 context: monitoring/grafana 262 dockerfile: Dockerfile 263 volumes: 264 - grafana_data:/var/lib/grafana 265 restart: unless-stopped 266 environment: 267 GF_SERVER_HTTP_PORT: 2345 268 GF_SECURITY_ADMIN_PASSWORD: ${GF_SECURITY_ADMIN_PASSWORD} 269 GF_USERS_ALLOW_SIGN_UP: false 270 271 GF_SMTP_ENABLED: true 272 GF_SMTP_HOST: ${SMTP_HOST}:${SMTP_PORT} 273 GF_SMTP_FROM_ADDRESS: ${SMTP_FROM} 274 GF_SERVER_DOMAIN: ${DOMAIN_NAME} 275 GF_SMTP_FROM_NAME: ${SMTP_FROM} 276 GF_SMTP_USER: "${SMTP_USER}" 277 GF_SMTP_PASSWORD: "${SMTP_PASSWORD}" 278 279 POSTGRES_METRICS_USER: ${POSTGRES_METRICS_USER} 280 POSTGRES_METRICS_PASSWORD: ${POSTGRES_METRICS_PASSWORD} 281 POSTGRES_METRICS_DBNAME: ${POSTGRES_METRICS_DBNAME} 282 283 pgwatch: 284 build: 285 context: monitoring/pgwatch 286 dockerfile: Dockerfile 287 args: 288 POSTGRES_USER: ${POSTGRES_USER} 289 POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} 290 POSTGRES_DB: ${POSTGRES_DBNAME} 291 restart: unless-stopped 292 environment: 293 POSTGRES_METRICS_USER: ${POSTGRES_METRICS_USER} 294 POSTGRES_METRICS_PASSWORD: ${POSTGRES_METRICS_PASSWORD} 295 POSTGRES_METRICS_DBNAME: ${POSTGRES_METRICS_DBNAME} 296 command: 297 - "--web-disable=all" 298 - "--sources=/sources.yaml" 299 - "--sink=postgresql://${POSTGRES_METRICS_USER}:${POSTGRES_METRICS_PASSWORD}@db:5432/${POSTGRES_METRICS_DBNAME}" 300 depends_on: 301 db: 302 condition: service_started 303 304volumes: 305 dbpg: 306 caddy: 307 pds: 308 frontend: 309 redis: 310 prometheus_data: 311 grafana_data: 312 313networks: 314 default: 315 enable_ipv6: true