Skip to main content

Gitea on GCP (git.daw.club)

Self-hosted Gitea instance for daw.club project management, running on a GCE e2-small VM behind a global HTTPS load balancer.

Architecture

GCP Resources

VM Details

  • OS: Debian 12
  • Gitea: v1.22.6 (binary install at /usr/local/bin/gitea)
  • Config: /etc/gitea/app.ini
  • Data: /var/lib/gitea/data/ (SQLite DB, repos)
  • LFS storage: GCS bucket songbird-gitea-lfs (via gcsfuse mount at /mnt/gcslfs)
  • Service: systemd unit gitea.service
  • User: git (system user)

Common Operations

Cost

  • GCE e2-small: ~$15/month (0.5 vCPU, 2GB RAM)
  • 30GB pd-ssd: ~$5/month
  • Static IP: Free (while attached to a running VM)
  • Load balancer: ~$18/month (forwarding rules + backend)
  • SSL cert: Free (Google-managed)
  • GCS LFS storage: ~$0.02/GB/month (Standard class)
  • Total: ~$38/month (VM + disk + LB + GCS)

DNS

Managed via Cloudflare:
  • git.daw.club → A record → 34.117.234.171 (GCP LB static IP)
  • Cloudflare proxy disabled (DNS only) — GCP LB handles SSL

LFS on GCS

Git LFS objects are stored in the songbird-gitea-lfs GCS bucket via gcsfuse, which mounts the bucket as a local filesystem at /mnt/gcslfs. Gitea uses its standard PATH-based LFS storage pointing to the mount, so no HMAC keys or S3 credentials are needed — the VM’s attached service account (gitea-cloudrun@...) provides authentication automatically. The mount is managed by a systemd mount unit (mnt-gcslfs.mount) that starts before Gitea.

Future: Cloud Run for Headless DAW

The GCS bucket songbird-gitea-data and Artifact Registry (us-central1/songbird) are already provisioned for future Cloud Run deployments of the headless DAW instances. The load balancer can be extended with additional URL map rules to route DAW traffic.