An atproto PDS written in Go
at v0.5.1 3.9 kB view raw
1version: '3.8' 2 3services: 4 init-keys: 5 build: 6 context: . 7 dockerfile: Dockerfile 8 image: ghcr.io/haileyok/cocoon:latest 9 container_name: cocoon-init-keys 10 volumes: 11 - ./keys:/keys 12 - ./data:/data/cocoon 13 - ./init-keys.sh:/init-keys.sh:ro 14 environment: 15 COCOON_DID: ${COCOON_DID} 16 COCOON_HOSTNAME: ${COCOON_HOSTNAME} 17 COCOON_ROTATION_KEY_PATH: /keys/rotation.key 18 COCOON_JWK_PATH: /keys/jwk.key 19 COCOON_CONTACT_EMAIL: ${COCOON_CONTACT_EMAIL} 20 COCOON_RELAYS: ${COCOON_RELAYS:-https://bsky.network} 21 COCOON_ADMIN_PASSWORD: ${COCOON_ADMIN_PASSWORD} 22 entrypoint: ["/bin/sh", "/init-keys.sh"] 23 restart: "no" 24 25 cocoon: 26 build: 27 context: . 28 dockerfile: Dockerfile 29 image: ghcr.io/haileyok/cocoon:latest 30 container_name: cocoon-pds 31 network_mode: host 32 depends_on: 33 init-keys: 34 condition: service_completed_successfully 35 volumes: 36 - ./data:/data/cocoon 37 - ./keys/rotation.key:/keys/rotation.key:ro 38 - ./keys/jwk.key:/keys/jwk.key:ro 39 environment: 40 # Required settings 41 COCOON_DID: ${COCOON_DID} 42 COCOON_HOSTNAME: ${COCOON_HOSTNAME} 43 COCOON_ROTATION_KEY_PATH: /keys/rotation.key 44 COCOON_JWK_PATH: /keys/jwk.key 45 COCOON_CONTACT_EMAIL: ${COCOON_CONTACT_EMAIL} 46 COCOON_RELAYS: ${COCOON_RELAYS:-https://bsky.network} 47 COCOON_ADMIN_PASSWORD: ${COCOON_ADMIN_PASSWORD} 48 COCOON_SESSION_SECRET: ${COCOON_SESSION_SECRET} 49 50 # Server configuration 51 COCOON_ADDR: ":8080" 52 COCOON_DB_NAME: /data/cocoon/cocoon.db 53 COCOON_BLOCKSTORE_VARIANT: ${COCOON_BLOCKSTORE_VARIANT:-sqlite} 54 55 # Optional: SMTP settings for email 56 COCOON_SMTP_USER: ${COCOON_SMTP_USER:-} 57 COCOON_SMTP_PASS: ${COCOON_SMTP_PASS:-} 58 COCOON_SMTP_HOST: ${COCOON_SMTP_HOST:-} 59 COCOON_SMTP_PORT: ${COCOON_SMTP_PORT:-} 60 COCOON_SMTP_EMAIL: ${COCOON_SMTP_EMAIL:-} 61 COCOON_SMTP_NAME: ${COCOON_SMTP_NAME:-} 62 63 # Optional: S3 configuration 64 COCOON_S3_BACKUPS_ENABLED: ${COCOON_S3_BACKUPS_ENABLED:-false} 65 COCOON_S3_BLOBSTORE_ENABLED: ${COCOON_S3_BLOBSTORE_ENABLED:-false} 66 COCOON_S3_REGION: ${COCOON_S3_REGION:-} 67 COCOON_S3_BUCKET: ${COCOON_S3_BUCKET:-} 68 COCOON_S3_ENDPOINT: ${COCOON_S3_ENDPOINT:-} 69 COCOON_S3_ACCESS_KEY: ${COCOON_S3_ACCESS_KEY:-} 70 COCOON_S3_SECRET_KEY: ${COCOON_S3_SECRET_KEY:-} 71 72 # Optional: Fallback proxy 73 COCOON_FALLBACK_PROXY: ${COCOON_FALLBACK_PROXY:-} 74 restart: unless-stopped 75 healthcheck: 76 test: ["CMD", "curl", "-f", "http://localhost:8080/xrpc/_health"] 77 interval: 30s 78 timeout: 10s 79 retries: 3 80 start_period: 40s 81 82 create-invite: 83 build: 84 context: . 85 dockerfile: Dockerfile 86 image: ghcr.io/haileyok/cocoon:latest 87 container_name: cocoon-create-invite 88 network_mode: host 89 volumes: 90 - ./keys:/keys 91 - ./create-initial-invite.sh:/create-initial-invite.sh:ro 92 environment: 93 COCOON_DID: ${COCOON_DID} 94 COCOON_HOSTNAME: ${COCOON_HOSTNAME} 95 COCOON_ROTATION_KEY_PATH: /keys/rotation.key 96 COCOON_JWK_PATH: /keys/jwk.key 97 COCOON_CONTACT_EMAIL: ${COCOON_CONTACT_EMAIL} 98 COCOON_RELAYS: ${COCOON_RELAYS:-https://bsky.network} 99 COCOON_ADMIN_PASSWORD: ${COCOON_ADMIN_PASSWORD} 100 COCOON_DB_NAME: /data/cocoon/cocoon.db 101 depends_on: 102 - init-keys 103 entrypoint: ["/bin/sh", "/create-initial-invite.sh"] 104 restart: "no" 105 106 caddy: 107 image: caddy:2-alpine 108 container_name: cocoon-caddy 109 network_mode: host 110 volumes: 111 - ./Caddyfile:/etc/caddy/Caddyfile:ro 112 - caddy_data:/data 113 - caddy_config:/config 114 restart: unless-stopped 115 environment: 116 COCOON_HOSTNAME: ${COCOON_HOSTNAME} 117 CADDY_ACME_EMAIL: ${COCOON_CONTACT_EMAIL:-} 118 119volumes: 120 data: 121 driver: local 122 caddy_data: 123 driver: local 124 caddy_config: 125 driver: local