forked from
hailey.at/cocoon
BYOK Personal Data Server (PDS) written in Go
ipfs
vow
atproto
pds
go
1services:
2 init-keys:
3 build:
4 context: .
5 dockerfile: Dockerfile
6 container_name: vow-init-keys
7 volumes:
8 - ./keys:/keys
9 - ./data:/data/vow
10 - ./init-keys.sh:/init-keys.sh:ro
11 environment:
12 VOW_DID: ${VOW_DID}
13 VOW_HOSTNAME: ${VOW_HOSTNAME}
14 VOW_ROTATION_KEY_PATH: /keys/rotation.key
15 VOW_JWK_PATH: /keys/jwk.key
16 VOW_CONTACT_EMAIL: ${VOW_CONTACT_EMAIL}
17 VOW_RELAYS: ${VOW_RELAYS:-https://bsky.network}
18 VOW_ADMIN_PASSWORD: ${VOW_ADMIN_PASSWORD}
19 entrypoint: ["/bin/sh", "/init-keys.sh"]
20 restart: "no"
21
22 ipfs:
23 image: ipfs/kubo:latest
24 container_name: vow-ipfs
25 volumes:
26 - /opt/ipfs:/data/ipfs
27 environment:
28 # Disable local network discovery.
29 IPFS_PROFILE: server
30 ports:
31 # P2P
32 - 4001:4001
33 - 4001:4001/udp
34 # Expose the IPFS gateway to the reverse proxy only.
35 - 127.0.0.1:8080:8080
36 # Keep the RPC API internal.
37 - 127.0.0.1:5001:5001
38 restart: unless-stopped
39 healthcheck:
40 test: ["CMD", "ipfs", "id"]
41 interval: 30s
42 timeout: 10s
43 retries: 5
44 start_period: 15s
45
46 vow:
47 build:
48 context: .
49 dockerfile: Dockerfile
50 container_name: vow-pds
51 depends_on:
52 init-keys:
53 condition: service_completed_successfully
54 ipfs:
55 condition: service_healthy
56 ports:
57 - "127.0.0.1:8080:8080"
58 volumes:
59 - ./data:/data/vow
60 - ./keys:/keys:ro
61 environment:
62 # Required
63 VOW_DID: ${VOW_DID}
64 VOW_HOSTNAME: ${VOW_HOSTNAME}
65 VOW_ROTATION_KEY_PATH: /keys/rotation.key
66 VOW_JWK_PATH: /keys/jwk.key
67 VOW_CONTACT_EMAIL: ${VOW_CONTACT_EMAIL}
68 VOW_RELAYS: ${VOW_RELAYS:-https://bsky.network}
69 VOW_ADMIN_PASSWORD: ${VOW_ADMIN_PASSWORD}
70 VOW_SESSION_SECRET: ${VOW_SESSION_SECRET}
71
72 # Server
73 VOW_ADDR: ":8080"
74 VOW_DB_NAME: ${VOW_DB_NAME:-/data/vow/vow.db}
75
76 # SMTP (optional)
77 VOW_SMTP_USER: ${VOW_SMTP_USER:-}
78 VOW_SMTP_PASS: ${VOW_SMTP_PASS:-}
79 VOW_SMTP_HOST: ${VOW_SMTP_HOST:-}
80 VOW_SMTP_PORT: ${VOW_SMTP_PORT:-}
81 VOW_SMTP_EMAIL: ${VOW_SMTP_EMAIL:-}
82 VOW_SMTP_NAME: ${VOW_SMTP_NAME:-}
83
84 # IPFS
85 # Use the internal ipfs service for the RPC API.
86 VOW_IPFS_NODE_URL: ${VOW_IPFS_NODE_URL:-http://ipfs:5001}
87 # Optional public gateway for sync.getBlob redirects.
88 VOW_IPFS_GATEWAY_URL: ${VOW_IPFS_GATEWAY_URL:-}
89 # Optional fallback for proxied ATProto requests.
90 # Format: did#service-id, for example did:plc:xxx#atproto_labeler
91 VOW_FALLBACK_PROXY: ${VOW_FALLBACK_PROXY:-}
92 restart: unless-stopped
93 healthcheck:
94 test: ["CMD", "curl", "-f", "http://localhost:8080/xrpc/_health"]
95 interval: 30s
96 timeout: 10s
97 retries: 3
98 start_period: 40s
99
100 create-invite:
101 build:
102 context: .
103 dockerfile: Dockerfile
104 container_name: vow-create-invite
105 network_mode: "service:vow"
106 volumes:
107 - ./keys:/keys
108 - ./data:/data/vow
109 - ./create-initial-invite.sh:/create-initial-invite.sh:ro
110 environment:
111 VOW_DID: ${VOW_DID}
112 VOW_HOSTNAME: ${VOW_HOSTNAME}
113 VOW_ROTATION_KEY_PATH: /keys/rotation.key
114 VOW_JWK_PATH: /keys/jwk.key
115 VOW_CONTACT_EMAIL: ${VOW_CONTACT_EMAIL}
116 VOW_RELAYS: ${VOW_RELAYS:-https://bsky.network}
117 VOW_ADMIN_PASSWORD: ${VOW_ADMIN_PASSWORD}
118 VOW_DB_NAME: ${VOW_DB_NAME:-/data/vow/vow.db}
119 depends_on:
120 vow:
121 condition: service_healthy
122 entrypoint: ["/bin/sh", "/create-initial-invite.sh"]
123 restart: "no"
124
125volumes:
126 ipfs_data:
127 driver: local