unoffical wafrn mirror wafrn.net
atproto social-network activitypub
at api-load-balancing 196 lines 5.8 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 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: