kitgit

tirbofish/kitgit

main / deploy / docker-compose.prod.yml · 4204 bytes

deploy/docker-compose.prod.yml
services:
  caddy:
    image: caddy:2-alpine
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile:ro
      - caddy-data:/data
      - caddy-config:/config
    depends_on:
      - kitgit
      - authentik-server

  postgres:
    image: postgres:16-alpine
    restart: unless-stopped
    environment:
      POSTGRES_USER: kitgit
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
      POSTGRES_DB: postgres
    volumes:
      - pgdata:/var/lib/postgresql/data
      - ./init-db.sql:/docker-entrypoint-initdb.d/init-db.sql:ro
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U kitgit"]
      interval: 5s
      timeout: 5s
      retries: 10
    # not published — internal only

  redis:
    image: redis:7-alpine
    restart: unless-stopped
    healthcheck:
      test: ["CMD", "redis-cli", "ping"]
      interval: 5s
      timeout: 3s
      retries: 10

  authentik-server:
    image: ghcr.io/goauthentik/server:2024.10.4
    command: server
    restart: unless-stopped
    environment:
      AUTHENTIK_SECRET_KEY: ${AUTHENTIK_SECRET_KEY}
      AUTHENTIK_BOOTSTRAP_PASSWORD: ${AUTHENTIK_BOOTSTRAP_PASSWORD}
      AUTHENTIK_BOOTSTRAP_EMAIL: ${AUTHENTIK_BOOTSTRAP_EMAIL}
      AUTHENTIK_REDIS__HOST: redis
      AUTHENTIK_POSTGRESQL__HOST: postgres
      AUTHENTIK_POSTGRESQL__USER: kitgit
      AUTHENTIK_POSTGRESQL__NAME: authentik
      AUTHENTIK_POSTGRESQL__PASSWORD: ${POSTGRES_PASSWORD}
      AUTHENTIK_HOST: https://auth.tirbo.fish
      AUTHENTIK_HOST_BROWSER: https://auth.tirbo.fish
    volumes:
      - authentik-media:/media
      - authentik-templates:/templates
      - ./authentik/blueprints-prod:/blueprints/custom:ro
    depends_on:
      postgres:
        condition: service_healthy
      redis:
        condition: service_healthy

  authentik-worker:
    image: ghcr.io/goauthentik/server:2024.10.4
    command: worker
    restart: unless-stopped
    environment:
      AUTHENTIK_SECRET_KEY: ${AUTHENTIK_SECRET_KEY}
      AUTHENTIK_BOOTSTRAP_PASSWORD: ${AUTHENTIK_BOOTSTRAP_PASSWORD}
      AUTHENTIK_BOOTSTRAP_EMAIL: ${AUTHENTIK_BOOTSTRAP_EMAIL}
      AUTHENTIK_REDIS__HOST: redis
      AUTHENTIK_POSTGRESQL__HOST: postgres
      AUTHENTIK_POSTGRESQL__USER: kitgit
      AUTHENTIK_POSTGRESQL__NAME: authentik
      AUTHENTIK_POSTGRESQL__PASSWORD: ${POSTGRES_PASSWORD}
      AUTHENTIK_HOST: https://auth.tirbo.fish
      AUTHENTIK_HOST_BROWSER: https://auth.tirbo.fish
    user: root
    volumes:
      - authentik-media:/media
      - authentik-templates:/templates
      - ./authentik/blueprints-prod:/blueprints/custom:ro
    depends_on:
      postgres:
        condition: service_healthy
      redis:
        condition: service_healthy

  kitgit:
    build:
      context: ..
      dockerfile: Dockerfile
    restart: unless-stopped
    environment:
      KITGIT_DATABASE_URL: postgres://kitgit:${POSTGRES_PASSWORD}@postgres:5432/kitgit
      KITGIT_DATA_DIR: /data
      KITGIT_HTTP_BIND: 0.0.0.0:8080
      KITGIT_SSH_BIND: 0.0.0.0:2222
      # Advertise classic git@host:… URLs (host publishes 22 → container 2222).
      KITGIT_SSH_PUBLIC_PORT: "22"
      KITGIT_PUBLIC_URL: ${KITGIT_PUBLIC_URL}
      KITGIT_SESSION_SECRET: ${KITGIT_SESSION_SECRET}
      KITGIT_OIDC_ISSUER: ${KITGIT_OIDC_ISSUER}
      KITGIT_OIDC_DISCOVERY_URL: ${KITGIT_OIDC_DISCOVERY_URL}
      KITGIT_OIDC_CLIENT_ID: ${KITGIT_OIDC_CLIENT_ID}
      KITGIT_OIDC_CLIENT_SECRET: ${KITGIT_OIDC_CLIENT_SECRET}
      KITGIT_OIDC_REDIRECT_URL: ${KITGIT_OIDC_REDIRECT_URL}
      KITGIT_AUTHENTIK_URL: ${KITGIT_AUTHENTIK_URL}
      KITGIT_AUTHENTIK_API_TOKEN: ${KITGIT_AUTHENTIK_API_TOKEN}
      AUTHENTIK_TOKEN: ${AUTHENTIK_TOKEN}
      KITGIT_AUTHENTIK_AUTH_FLOW: ${KITGIT_AUTHENTIK_AUTH_FLOW:-default-authentication-flow}
      RUST_LOG: info,kitgit=info
    volumes:
      - kitgit-data:/data
    ports:
      # Host 22 = Git SSH (GitHub-style). Droplet admin sshd listens on 2222.
      - "22:2222"
    depends_on:
      postgres:
        condition: service_healthy
      authentik-server:
        condition: service_started

volumes:
  pgdata:
  authentik-media:
  authentik-templates:
  kitgit-data:
  caddy-data:
  caddy-config: