An atproto PDS written in Go
at push-based 131 lines 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 COCOON_S3_CDN_URL: ${COCOON_S3_CDN_URL:-} 74 75 # Optional: Fallback proxy 76 COCOON_FALLBACK_PROXY: ${COCOON_FALLBACK_PROXY:-} 77 restart: unless-stopped 78 healthcheck: 79 test: ["CMD", "curl", "-f", "http://localhost:8080/xrpc/_health"] 80 interval: 30s 81 timeout: 10s 82 retries: 3 83 start_period: 40s 84 85 create-invite: 86 build: 87 context: . 88 dockerfile: Dockerfile 89 image: ghcr.io/haileyok/cocoon:latest 90 container_name: cocoon-create-invite 91 network_mode: host 92 volumes: 93 - ./keys:/keys 94 - ./data:/data/cocoon 95 - ./create-initial-invite.sh:/create-initial-invite.sh:ro 96 environment: 97 COCOON_DID: ${COCOON_DID} 98 COCOON_HOSTNAME: ${COCOON_HOSTNAME} 99 COCOON_ROTATION_KEY_PATH: /keys/rotation.key 100 COCOON_JWK_PATH: /keys/jwk.key 101 COCOON_CONTACT_EMAIL: ${COCOON_CONTACT_EMAIL} 102 COCOON_RELAYS: ${COCOON_RELAYS:-https://bsky.network} 103 COCOON_ADMIN_PASSWORD: ${COCOON_ADMIN_PASSWORD} 104 COCOON_DB_TYPE: ${COCOON_DB_TYPE:-sqlite} 105 COCOON_DB_NAME: ${COCOON_DB_NAME:-/data/cocoon/cocoon.db} 106 COCOON_DATABASE_URL: ${COCOON_DATABASE_URL:-} 107 depends_on: 108 - init-keys 109 entrypoint: ["/bin/sh", "/create-initial-invite.sh"] 110 restart: "no" 111 112 caddy: 113 image: caddy:2-alpine 114 container_name: cocoon-caddy 115 network_mode: host 116 volumes: 117 - ./Caddyfile:/etc/caddy/Caddyfile:ro 118 - caddy_data:/data 119 - caddy_config:/config 120 restart: unless-stopped 121 environment: 122 COCOON_HOSTNAME: ${COCOON_HOSTNAME} 123 CADDY_ACME_EMAIL: ${COCOON_CONTACT_EMAIL:-} 124 125volumes: 126 data: 127 driver: local 128 caddy_data: 129 driver: local 130 caddy_config: 131 driver: local