# Simplified docker-compose for external reverse proxy # Exposes cocoon on 127.0.0.1:8080 by default # # Usage: # docker-compose -f docker-compose.noproxy.yaml up -d # 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 depends_on: init-keys: condition: service_completed_successfully ports: - "127.0.0.1:8080:8080" 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} # 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:-} # 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: "service:cocoon" 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: cocoon: condition: service_healthy entrypoint: ["/bin/sh", "/create-initial-invite.sh"] restart: "no" volumes: data: driver: local