forked from
tranquil.farm/tranquil-pds
Our Personal Data Server from scratch!
1services:
2 tranquil-pds:
3 build:
4 context: .
5 dockerfile: Dockerfile
6 image: tranquil-pds:latest
7 restart: unless-stopped
8 environment:
9 SERVER_HOST: "0.0.0.0"
10 volumes:
11 - ./config.toml:/etc/tranquil-pds/config.toml:ro
12 - blob_data:/var/lib/tranquil/blobs
13 - backup_data:/var/lib/tranquil/backups
14 depends_on:
15 db:
16 condition: service_healthy
17 healthcheck:
18 test: ["CMD", "wget", "-q", "--spider", "http://localhost:3000/xrpc/_health"]
19 interval: 30s
20 timeout: 10s
21 retries: 3
22 start_period: 10s
23 deploy:
24 resources:
25 limits:
26 memory: 1G
27 reservations:
28 memory: 256M
29
30 frontend:
31 build:
32 context: ./frontend
33 dockerfile: Dockerfile
34 image: tranquil-pds-frontend:latest
35 restart: unless-stopped
36 healthcheck:
37 test: ["CMD", "wget", "-q", "--spider", "http://localhost:80/"]
38 interval: 30s
39 timeout: 10s
40 retries: 3
41 start_period: 5s
42 deploy:
43 resources:
44 limits:
45 memory: 128M
46 reservations:
47 memory: 32M
48
49 db:
50 image: postgres:18-alpine
51 restart: unless-stopped
52 environment:
53 POSTGRES_USER: tranquil_pds
54 POSTGRES_PASSWORD: "CHANGE-ME"
55 POSTGRES_DB: pds
56 volumes:
57 - postgres_data:/var/lib/postgresql/data
58 healthcheck:
59 test: ["CMD-SHELL", "pg_isready -U tranquil_pds -d pds"]
60 interval: 10s
61 timeout: 5s
62 retries: 5
63 start_period: 10s
64 deploy:
65 resources:
66 limits:
67 memory: 512M
68 reservations:
69 memory: 128M
70
71 nginx:
72 image: nginx:1.29-alpine
73 restart: unless-stopped
74 ports:
75 - "80:80"
76 - "443:443"
77 volumes:
78 - ./nginx.frontend.conf:/etc/nginx/nginx.conf:ro
79 - ./certs:/etc/nginx/certs:ro
80 - acme_challenge:/var/www/acme:ro
81 depends_on:
82 - tranquil-pds
83 - frontend
84 healthcheck:
85 test: ["CMD", "nginx", "-t"]
86 interval: 30s
87 timeout: 10s
88 retries: 3
89
90 certbot:
91 image: certbot/certbot:v5.2.2
92 volumes:
93 - ./certs:/etc/letsencrypt
94 - acme_challenge:/var/www/acme
95 entrypoint: "/bin/sh -c 'trap exit TERM; while :; do certbot renew --webroot -w /var/www/acme; sleep 12h & wait $${!}; done'"
96
97 prometheus:
98 image: prom/prometheus:v3.8.0
99 restart: unless-stopped
100 ports:
101 - "127.0.0.1:9090:9090"
102 volumes:
103 - ./observability/prometheus.yaml:/etc/prometheus/prometheus.yaml:ro
104 - prometheus_data:/prometheus
105 command:
106 - '--config.file=/etc/prometheus/prometheus.yaml'
107 - '--storage.tsdb.path=/prometheus'
108 - '--storage.tsdb.retention.time=30d'
109 deploy:
110 resources:
111 limits:
112 memory: 256M
113
114volumes:
115 postgres_data:
116 blob_data:
117 backup_data:
118 prometheus_data:
119 acme_challenge: