# Dev platform self-host stack — Gitea + GlitchTip
# Curl + run:
#   curl -O https://osalt.dev/stack/dev-platform/compose.yml
#   curl -O https://osalt.dev/stack/dev-platform/.env.example && mv .env.example .env
#   docker compose up -d
#
# Not in this file (per stack editorial):
#   - Drone: pairs server + docker-runner with a shared RPC secret and a Gitea
#     OAuth app. Configure once Gitea is up. See https://docs.drone.io/server/provider/gitea/.
#   - Harbor: ships its own preparer (`./install.sh`) that generates a compose
#     from harbor.yml. See https://goharbor.io/docs/2.x/install-config/.
#   - Coder: needs postgres + access-url config. See https://coder.com/docs/install/docker.

services:
  gitea:
    image: gitea/gitea:1.22
    restart: unless-stopped
    ports:
      - "${GITEA_HTTP_PORT:-3000}:3000"
      - "${GITEA_SSH_PORT:-2222}:22"
    environment:
      USER_UID: "1000"
      USER_GID: "1000"
      GITEA__database__DB_TYPE: sqlite3
      GITEA__server__DOMAIN: ${GITEA_DOMAIN:-localhost}
      GITEA__server__ROOT_URL: ${GITEA_ROOT_URL:-http://localhost:3000/}
      GITEA__server__SSH_PORT: ${GITEA_SSH_PORT:-2222}
    volumes:
      - gitea_data:/data

  glitchtip-pg:
    image: postgres:16-alpine
    restart: unless-stopped
    environment:
      POSTGRES_USER: ${GLITCHTIP_DB_USER:-glitchtip}
      POSTGRES_PASSWORD: ${GLITCHTIP_DB_PASSWORD:?set GLITCHTIP_DB_PASSWORD in .env}
      POSTGRES_DB: ${GLITCHTIP_DB_NAME:-glitchtip}
    volumes:
      - glitchtip_pg:/var/lib/postgresql/data

  glitchtip-redis:
    image: redis:7-alpine
    restart: unless-stopped

  glitchtip-web:
    image: glitchtip/glitchtip:v4.1
    restart: unless-stopped
    depends_on:
      - glitchtip-pg
      - glitchtip-redis
    ports:
      - "${GLITCHTIP_PORT:-8080}:8080"
    environment:
      DATABASE_URL: postgres://${GLITCHTIP_DB_USER:-glitchtip}:${GLITCHTIP_DB_PASSWORD}@glitchtip-pg:5432/${GLITCHTIP_DB_NAME:-glitchtip}
      SECRET_KEY: ${GLITCHTIP_SECRET_KEY:?set GLITCHTIP_SECRET_KEY in .env}
      PORT: "8080"
      EMAIL_URL: ${GLITCHTIP_EMAIL_URL:-consolemail://}
      GLITCHTIP_DOMAIN: ${GLITCHTIP_DOMAIN:-http://localhost:8080}
      DEFAULT_FROM_EMAIL: ${GLITCHTIP_FROM_EMAIL:-glitchtip@example.com}
      CELERY_WORKER_AUTOSCALE: "1,3"
      REDIS_URL: redis://glitchtip-redis:6379/0
    volumes:
      - glitchtip_uploads:/code/uploads

  glitchtip-worker:
    image: glitchtip/glitchtip:v4.1
    restart: unless-stopped
    depends_on:
      - glitchtip-pg
      - glitchtip-redis
    command: ./bin/run-celery-with-beat.sh
    environment:
      DATABASE_URL: postgres://${GLITCHTIP_DB_USER:-glitchtip}:${GLITCHTIP_DB_PASSWORD}@glitchtip-pg:5432/${GLITCHTIP_DB_NAME:-glitchtip}
      SECRET_KEY: ${GLITCHTIP_SECRET_KEY}
      EMAIL_URL: ${GLITCHTIP_EMAIL_URL:-consolemail://}
      GLITCHTIP_DOMAIN: ${GLITCHTIP_DOMAIN:-http://localhost:8080}
      DEFAULT_FROM_EMAIL: ${GLITCHTIP_FROM_EMAIL:-glitchtip@example.com}
      REDIS_URL: redis://glitchtip-redis:6379/0
    volumes:
      - glitchtip_uploads:/code/uploads

  glitchtip-migrate:
    image: glitchtip/glitchtip:v4.1
    depends_on:
      - glitchtip-pg
    command: ./bin/run-migrate.sh
    environment:
      DATABASE_URL: postgres://${GLITCHTIP_DB_USER:-glitchtip}:${GLITCHTIP_DB_PASSWORD}@glitchtip-pg:5432/${GLITCHTIP_DB_NAME:-glitchtip}
      SECRET_KEY: ${GLITCHTIP_SECRET_KEY}
    restart: "no"

volumes:
  gitea_data:
  glitchtip_pg:
  glitchtip_uploads:
