this repo has no description
1services:
2 bspds:
3 build:
4 context: .
5 dockerfile: Dockerfile
6 image: bspds:latest
7 restart: unless-stopped
8 ports:
9 - "127.0.0.1:3000:3000"
10 environment:
11 SERVER_HOST: "0.0.0.0"
12 SERVER_PORT: "3000"
13 PDS_HOSTNAME: "${PDS_HOSTNAME:?PDS_HOSTNAME is required}"
14 DATABASE_URL: "postgres://bspds:${DB_PASSWORD:?DB_PASSWORD is required}@db:5432/pds"
15 S3_ENDPOINT: "http://minio:9000"
16 AWS_REGION: "us-east-1"
17 S3_BUCKET: "pds-blobs"
18 AWS_ACCESS_KEY_ID: "${MINIO_ROOT_USER:-minioadmin}"
19 AWS_SECRET_ACCESS_KEY: "${MINIO_ROOT_PASSWORD:?MINIO_ROOT_PASSWORD is required}"
20 VALKEY_URL: "redis://valkey:6379"
21 JWT_SECRET: "${JWT_SECRET:?JWT_SECRET is required (min 32 chars)}"
22 DPOP_SECRET: "${DPOP_SECRET:?DPOP_SECRET is required (min 32 chars)}"
23 MASTER_KEY: "${MASTER_KEY:?MASTER_KEY is required (min 32 chars)}"
24 APPVIEW_URL: "${APPVIEW_URL:-https://api.bsky.app}"
25 CRAWLERS: "${CRAWLERS:-https://bsky.network}"
26 FRONTEND_DIR: "/app/frontend/dist"
27 depends_on:
28 db:
29 condition: service_healthy
30 minio:
31 condition: service_healthy
32 valkey:
33 condition: service_healthy
34 healthcheck:
35 test: ["CMD", "wget", "-q", "--spider", "http://localhost:3000/xrpc/_health"]
36 interval: 30s
37 timeout: 10s
38 retries: 3
39 start_period: 10s
40 deploy:
41 resources:
42 limits:
43 memory: 1G
44 reservations:
45 memory: 256M
46
47 db:
48 image: postgres:18-alpine
49 restart: unless-stopped
50 environment:
51 POSTGRES_USER: bspds
52 POSTGRES_PASSWORD: "${DB_PASSWORD:?DB_PASSWORD is required}"
53 POSTGRES_DB: pds
54 volumes:
55 - postgres_data:/var/lib/postgresql/data
56 healthcheck:
57 test: ["CMD-SHELL", "pg_isready -U bspds -d pds"]
58 interval: 10s
59 timeout: 5s
60 retries: 5
61 start_period: 10s
62 deploy:
63 resources:
64 limits:
65 memory: 512M
66 reservations:
67 memory: 128M
68
69 minio:
70 image: minio/minio:RELEASE.2025-10-15T17-29-55Z
71 restart: unless-stopped
72 command: server /data --console-address ":9001"
73 environment:
74 MINIO_ROOT_USER: "${MINIO_ROOT_USER:-minioadmin}"
75 MINIO_ROOT_PASSWORD: "${MINIO_ROOT_PASSWORD:?MINIO_ROOT_PASSWORD is required}"
76 volumes:
77 - minio_data:/data
78 healthcheck:
79 test: ["CMD", "mc", "ready", "local"]
80 interval: 30s
81 timeout: 10s
82 retries: 3
83 start_period: 10s
84 deploy:
85 resources:
86 limits:
87 memory: 512M
88 reservations:
89 memory: 128M
90
91 minio-init:
92 image: minio/mc:RELEASE.2025-07-16T15-35-03Z
93 depends_on:
94 minio:
95 condition: service_healthy
96 entrypoint: >
97 /bin/sh -c "
98 mc alias set local http://minio:9000 $${MINIO_ROOT_USER} $${MINIO_ROOT_PASSWORD};
99 mc mb --ignore-existing local/pds-blobs;
100 mc anonymous set none local/pds-blobs;
101 exit 0;
102 "
103 environment:
104 MINIO_ROOT_USER: "${MINIO_ROOT_USER:-minioadmin}"
105 MINIO_ROOT_PASSWORD: "${MINIO_ROOT_PASSWORD:?MINIO_ROOT_PASSWORD is required}"
106
107 valkey:
108 image: valkey/valkey:9-alpine
109 restart: unless-stopped
110 command: valkey-server --appendonly yes --maxmemory 256mb --maxmemory-policy allkeys-lru
111 volumes:
112 - valkey_data:/data
113 healthcheck:
114 test: ["CMD", "valkey-cli", "ping"]
115 interval: 10s
116 timeout: 5s
117 retries: 3
118 start_period: 5s
119 deploy:
120 resources:
121 limits:
122 memory: 300M
123 reservations:
124 memory: 64M
125
126 nginx:
127 image: nginx:1.28-alpine
128 restart: unless-stopped
129 ports:
130 - "80:80"
131 - "443:443"
132 volumes:
133 - ./nginx.prod.conf:/etc/nginx/nginx.conf:ro
134 - ./certs:/etc/nginx/certs:ro
135 - acme_challenge:/var/www/acme:ro
136 depends_on:
137 - bspds
138 healthcheck:
139 test: ["CMD", "nginx", "-t"]
140 interval: 30s
141 timeout: 10s
142 retries: 3
143
144 certbot:
145 image: certbot/certbot:v5.2.2
146 volumes:
147 - ./certs:/etc/letsencrypt
148 - acme_challenge:/var/www/acme
149 entrypoint: "/bin/sh -c 'trap exit TERM; while :; do certbot renew --webroot -w /var/www/acme; sleep 12h & wait $${!}; done'"
150
151 prometheus:
152 image: prom/prometheus:v3.8.0
153 restart: unless-stopped
154 ports:
155 - "127.0.0.1:9090:9090"
156 volumes:
157 - ./observability/prometheus.yml:/etc/prometheus/prometheus.yml:ro
158 - prometheus_data:/prometheus
159 command:
160 - '--config.file=/etc/prometheus/prometheus.yml'
161 - '--storage.tsdb.path=/prometheus'
162 - '--storage.tsdb.retention.time=30d'
163 deploy:
164 resources:
165 limits:
166 memory: 256M
167
168volumes:
169 postgres_data:
170 minio_data:
171 valkey_data:
172 prometheus_data:
173 acme_challenge: