diff --git a/docker-compose.dist.yaml b/docker-compose.dist.yaml new file mode 100644 index 0000000..e905756 --- /dev/null +++ b/docker-compose.dist.yaml @@ -0,0 +1,137 @@ +version: "3.8" + +services: + init-keys: + build: + context: . + dockerfile: Dockerfile + image: ghcr.io/haileyok/cocoon:latest + container_name: cocoon-init-keys + volumes: + - ./keys:/keys + - ./data:/data/cocoon + - ./init-keys.sh:/init-keys.sh:ro + environment: + COCOON_DID: ${COCOON_DID} + COCOON_HOSTNAME: ${COCOON_HOSTNAME} + COCOON_ROTATION_KEY_PATH: /keys/rotation.key + COCOON_JWK_PATH: /keys/jwk.key + COCOON_CONTACT_EMAIL: ${COCOON_CONTACT_EMAIL} + COCOON_RELAYS: ${COCOON_RELAYS:-https://bsky.network} + COCOON_ADMIN_PASSWORD: ${COCOON_ADMIN_PASSWORD} + entrypoint: ["/bin/sh", "/init-keys.sh"] + restart: "no" + + cocoon: + build: + context: . + dockerfile: Dockerfile + image: ghcr.io/haileyok/cocoon:latest + container_name: cocoon-pds + network_mode: host + depends_on: + init-keys: + condition: service_completed_successfully + volumes: + - ./data:/data/cocoon + - ./keys/rotation.key:/keys/rotation.key:ro + - ./keys/jwk.key:/keys/jwk.key:ro + environment: + # Required settings + COCOON_DID: ${COCOON_DID} + COCOON_HOSTNAME: ${COCOON_HOSTNAME} + COCOON_ROTATION_KEY_PATH: /keys/rotation.key + COCOON_JWK_PATH: /keys/jwk.key + COCOON_CONTACT_EMAIL: ${COCOON_CONTACT_EMAIL} + COCOON_RELAYS: ${COCOON_RELAYS:-https://bsky.network} + COCOON_ADMIN_PASSWORD: ${COCOON_ADMIN_PASSWORD} + COCOON_SESSION_SECRET: ${COCOON_SESSION_SECRET} + + # Server configuration + COCOON_ADDR: ":8080" + COCOON_DB_TYPE: ${COCOON_DB_TYPE:-sqlite} + COCOON_DB_NAME: ${COCOON_DB_NAME:-/data/cocoon/cocoon.db} + COCOON_DATABASE_URL: ${COCOON_DATABASE_URL:-} + COCOON_BLOCKSTORE_VARIANT: ${COCOON_BLOCKSTORE_VARIANT:-sqlite} + # Set this if using Turso + COCOON_TURSO_TOKEN: ${COCOON_TURSO_TOKEN:-} + + # Optional: SMTP settings for email + COCOON_SMTP_USER: ${COCOON_SMTP_USER:-} + COCOON_SMTP_PASS: ${COCOON_SMTP_PASS:-} + COCOON_SMTP_HOST: ${COCOON_SMTP_HOST:-} + COCOON_SMTP_PORT: ${COCOON_SMTP_PORT:-} + COCOON_SMTP_EMAIL: ${COCOON_SMTP_EMAIL:-} + COCOON_SMTP_NAME: ${COCOON_SMTP_NAME:-} + + # Optional: S3 configuration + COCOON_S3_BACKUPS_ENABLED: ${COCOON_S3_BACKUPS_ENABLED:-false} + COCOON_S3_BLOBSTORE_ENABLED: ${COCOON_S3_BLOBSTORE_ENABLED:-false} + COCOON_S3_REGION: ${COCOON_S3_REGION:-} + COCOON_S3_BUCKET: ${COCOON_S3_BUCKET:-} + COCOON_S3_ENDPOINT: ${COCOON_S3_ENDPOINT:-} + COCOON_S3_ACCESS_KEY: ${COCOON_S3_ACCESS_KEY:-} + COCOON_S3_SECRET_KEY: ${COCOON_S3_SECRET_KEY:-} + COCOON_S3_CDN_URL: ${COCOON_S3_CDN_URL:-} + + # Configure pointing to the subscribe repos service as a sync repos service + PUSH_BASED_EVENTS: ${PUSH_BASED_EVENTS:-false} + SUBSCRIBE_REPOS_SERVICE_URL: ${SUBSCRIBE_REPOS_SERVICE_URL:-} + + # Optional: Fallback proxy + COCOON_FALLBACK_PROXY: ${COCOON_FALLBACK_PROXY:-} + restart: unless-stopped + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:8080/xrpc/_health"] + interval: 30s + timeout: 10s + retries: 3 + start_period: 40s + + create-invite: + build: + context: . + dockerfile: Dockerfile + image: ghcr.io/haileyok/cocoon:latest + container_name: cocoon-create-invite + network_mode: host + volumes: + - ./keys:/keys + - ./data:/data/cocoon + - ./create-initial-invite.sh:/create-initial-invite.sh:ro + environment: + COCOON_DID: ${COCOON_DID} + COCOON_HOSTNAME: ${COCOON_HOSTNAME} + COCOON_ROTATION_KEY_PATH: /keys/rotation.key + COCOON_JWK_PATH: /keys/jwk.key + COCOON_CONTACT_EMAIL: ${COCOON_CONTACT_EMAIL} + COCOON_RELAYS: ${COCOON_RELAYS:-https://bsky.network} + COCOON_ADMIN_PASSWORD: ${COCOON_ADMIN_PASSWORD} + COCOON_DB_TYPE: ${COCOON_DB_TYPE:-sqlite} + COCOON_DB_NAME: ${COCOON_DB_NAME:-/data/cocoon/cocoon.db} + COCOON_DATABASE_URL: ${COCOON_DATABASE_URL:-} + depends_on: + - init-keys + entrypoint: ["/bin/sh", "/create-initial-invite.sh"] + restart: "no" + + caddy: + image: caddy:2-alpine + container_name: cocoon-caddy + network_mode: host + volumes: + - ./Caddyfile:/etc/caddy/Caddyfile:ro + - caddy_data:/data + - caddy_config:/config + restart: unless-stopped + environment: + COCOON_HOSTNAME: ${COCOON_HOSTNAME} + CADDY_ACME_EMAIL: ${COCOON_CONTACT_EMAIL:-} + +volumes: + data: + driver: local + caddy_data: + driver: local + caddy_config: + driver: local