An atproto PDS written in Go
at v0.6.0 4.2 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_TYPE: ${COCOON_DB_TYPE:-sqlite} 53 COCOON_DB_NAME: ${COCOON_DB_NAME:-/data/cocoon/cocoon.db} 54 COCOON_DATABASE_URL: ${COCOON_DATABASE_URL:-} 55 COCOON_BLOCKSTORE_VARIANT: ${COCOON_BLOCKSTORE_VARIANT:-sqlite} 56 57 # Optional: SMTP settings for email 58 COCOON_SMTP_USER: ${COCOON_SMTP_USER:-} 59 COCOON_SMTP_PASS: ${COCOON_SMTP_PASS:-} 60 COCOON_SMTP_HOST: ${COCOON_SMTP_HOST:-} 61 COCOON_SMTP_PORT: ${COCOON_SMTP_PORT:-} 62 COCOON_SMTP_EMAIL: ${COCOON_SMTP_EMAIL:-} 63 COCOON_SMTP_NAME: ${COCOON_SMTP_NAME:-} 64 65 # Optional: S3 configuration 66 COCOON_S3_BACKUPS_ENABLED: ${COCOON_S3_BACKUPS_ENABLED:-false} 67 COCOON_S3_BLOBSTORE_ENABLED: ${COCOON_S3_BLOBSTORE_ENABLED:-false} 68 COCOON_S3_REGION: ${COCOON_S3_REGION:-} 69 COCOON_S3_BUCKET: ${COCOON_S3_BUCKET:-} 70 COCOON_S3_ENDPOINT: ${COCOON_S3_ENDPOINT:-} 71 COCOON_S3_ACCESS_KEY: ${COCOON_S3_ACCESS_KEY:-} 72 COCOON_S3_SECRET_KEY: ${COCOON_S3_SECRET_KEY:-} 73 74 # Optional: Fallback proxy 75 COCOON_FALLBACK_PROXY: ${COCOON_FALLBACK_PROXY:-} 76 restart: unless-stopped 77 healthcheck: 78 test: ["CMD", "curl", "-f", "http://localhost:8080/xrpc/_health"] 79 interval: 30s 80 timeout: 10s 81 retries: 3 82 start_period: 40s 83 84 create-invite: 85 build: 86 context: . 87 dockerfile: Dockerfile 88 image: ghcr.io/haileyok/cocoon:latest 89 container_name: cocoon-create-invite 90 network_mode: host 91 volumes: 92 - ./keys:/keys 93 - ./create-initial-invite.sh:/create-initial-invite.sh:ro 94 environment: 95 COCOON_DID: ${COCOON_DID} 96 COCOON_HOSTNAME: ${COCOON_HOSTNAME} 97 COCOON_ROTATION_KEY_PATH: /keys/rotation.key 98 COCOON_JWK_PATH: /keys/jwk.key 99 COCOON_CONTACT_EMAIL: ${COCOON_CONTACT_EMAIL} 100 COCOON_RELAYS: ${COCOON_RELAYS:-https://bsky.network} 101 COCOON_ADMIN_PASSWORD: ${COCOON_ADMIN_PASSWORD} 102 COCOON_DB_TYPE: ${COCOON_DB_TYPE:-sqlite} 103 COCOON_DB_NAME: ${COCOON_DB_NAME:-/data/cocoon/cocoon.db} 104 COCOON_DATABASE_URL: ${COCOON_DATABASE_URL:-} 105 depends_on: 106 - init-keys 107 entrypoint: ["/bin/sh", "/create-initial-invite.sh"] 108 restart: "no" 109 110 caddy: 111 image: caddy:2-alpine 112 container_name: cocoon-caddy 113 network_mode: host 114 volumes: 115 - ./Caddyfile:/etc/caddy/Caddyfile:ro 116 - caddy_data:/data 117 - caddy_config:/config 118 restart: unless-stopped 119 environment: 120 COCOON_HOSTNAME: ${COCOON_HOSTNAME} 121 CADDY_ACME_EMAIL: ${COCOON_CONTACT_EMAIL:-} 122 123volumes: 124 data: 125 driver: local 126 caddy_data: 127 driver: local 128 caddy_config: 129 driver: local