An atproto PDS written in Go
at list 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 - ./create-initial-invite.sh:/create-initial-invite.sh:ro 95 environment: 96 COCOON_DID: ${COCOON_DID} 97 COCOON_HOSTNAME: ${COCOON_HOSTNAME} 98 COCOON_ROTATION_KEY_PATH: /keys/rotation.key 99 COCOON_JWK_PATH: /keys/jwk.key 100 COCOON_CONTACT_EMAIL: ${COCOON_CONTACT_EMAIL} 101 COCOON_RELAYS: ${COCOON_RELAYS:-https://bsky.network} 102 COCOON_ADMIN_PASSWORD: ${COCOON_ADMIN_PASSWORD} 103 COCOON_DB_TYPE: ${COCOON_DB_TYPE:-sqlite} 104 COCOON_DB_NAME: ${COCOON_DB_NAME:-/data/cocoon/cocoon.db} 105 COCOON_DATABASE_URL: ${COCOON_DATABASE_URL:-} 106 depends_on: 107 - init-keys 108 entrypoint: ["/bin/sh", "/create-initial-invite.sh"] 109 restart: "no" 110 111 caddy: 112 image: caddy:2-alpine 113 container_name: cocoon-caddy 114 network_mode: host 115 volumes: 116 - ./Caddyfile:/etc/caddy/Caddyfile:ro 117 - caddy_data:/data 118 - caddy_config:/config 119 restart: unless-stopped 120 environment: 121 COCOON_HOSTNAME: ${COCOON_HOSTNAME} 122 CADDY_ACME_EMAIL: ${COCOON_CONTACT_EMAIL:-} 123 124volumes: 125 data: 126 driver: local 127 caddy_data: 128 driver: local 129 caddy_config: 130 driver: local