# Caddy config.
#
# - gendsgn.ru — main production site, auto-TLS via Let's Encrypt.
# - www.gendsgn.ru — 301 redirect to apex (canonical URL).
# - :80 — fallback for raw IP access. Will be removed once everyone uses the domain.
#
# `handle /api/*` (NOT `handle_path`) — we keep the /api prefix because
# the FastAPI router is mounted at /api/v1/*.

gendsgn.ru {
    encode zstd gzip

    handle /api/* {
        reverse_proxy backend:8000
    }

    handle /health {
        reverse_proxy backend:8000
    }

    handle {
        reverse_proxy frontend:3000
    }
}

www.gendsgn.ru {
    redir https://gendsgn.ru{uri} permanent
}

# Obsidian Self-hosted LiveSync (CouchDB backend).
# Auto-TLS Let's Encrypt. CORS уже включён на стороне CouchDB через bootstrap
# (см. scripts/setup-couchdb.sh). Basic-auth — на стороне CouchDB (admin user).
#
# DNS: A-record obsidian.gendsgn.ru → IP VPS.
# Клиенты Obsidian + Self-hosted LiveSync plugin указывают на этот URL.
obsidian.gendsgn.ru {
    encode zstd gzip

    reverse_proxy couchdb:5984 {
        # Большие документы (vault attachments / images) — увеличиваем timeout
        transport http {
            response_header_timeout 120s
        }
    }
}

# GlitchTip — self-hosted error tracking (Sentry-compatible).
# DNS: A-record errors.gendsgn.ru → IP VPS.
errors.gendsgn.ru {
    encode zstd gzip

    reverse_proxy glitchtip-web:8080

    log {
        output file /var/log/caddy/errors.gendsgn.ru.log
    }
}

# Forgejo — self-hosted git (migration 2026-05-16).
# DNS: A-record git.gendsgn.ru → IP VPS.
# Forgejo container из forgejo-migration/docker-compose.yml на shared
# gendesign_default network. HTTP port 3000 (default Forgejo).
# Был добавлен вручную при migration, потерян при первом auto-deploy после
# изменения Caddyfile (deploy.yml делает git reset --hard). См. fix issue.
git.gendsgn.ru {
    encode zstd gzip

    reverse_proxy forgejo:3000

    log {
        output file /var/log/caddy/git.gendsgn.ru.log
    }
}

# Plain HTTP by IP — kept for ssh-tunnel / debugging.
# Caddy issues no TLS here (no hostname).
:80 {
    encode zstd gzip

    handle /api/* {
        reverse_proxy backend:8000
    }

    handle /health {
        reverse_proxy backend:8000
    }

    handle {
        reverse_proxy frontend:3000
    }
}
# Test deploy flow 2026-05-15T21:43:32Z
