You need a private Git server for a handful of repos — not a DevOps platform, not CI runners, not package registries. Just git push, pull requests, issues, and a web UI that works. GitLab feels like bringing a forklift to move a box of files. GitHub Enterprise pricing makes your accountant wince.
Gogs has been the answer to that problem since 2014. ~48k stars, MIT-licensed, written in Go, and famous for running on absurdly small hardware — people have hosted it on a Raspberry Pi or a $5 VPS with 512 MB RAM. The tagline is honest: the painless way to host your own Git service.
What it actually does
Gogs is a Git forge stripped to essentials. Users, organizations, repositories, SSH and HTTPS clone URLs, issues, pull requests, wikis, protected branches, deploy keys, Git LFS, and webhooks to Slack, Discord, or Jenkins. You can migrate repos from GitHub or mirror them. LDAP, SMTP, reverse-proxy auth, and 2FA cover the login side.
What you don't get: built-in CI like Gitea Actions or GitLab pipelines. Gogs expects you to wire webhooks to Jenkins, Drone, or whatever build system you already run. That's a feature if you want a quiet Git server and nothing else — a limitation if you wanted one box to do everything.
If you've heard of Gitea, here's the family tree: Gitea forked from Gogs years ago and grew faster — Actions, package registry, more frequent releases. Gogs stayed closer to the original vision: simple, stable, low overhead. Some teams pick Gitea for the roadmap; others pick Gogs because they don't need the extras and like a smaller attack surface.
Why self-host Git at all?
Client code stays on your metal. Agencies storing proprietary repos for customers don't want a SaaS ToS change or a vendor breach to become their problem.
Canadian residency. "Our Git server is in Montreal" is a straightforward answer when a client asks where source code lives under PIPEDA.
Flat cost. Per-seat GitHub Teams fees add up. A Gogs instance on one VPS costs the same whether three developers push or thirty — you pay for the server, not seats.
It actually stays small. Gogs idle RAM is tiny compared to GitLab. The official docs suggest 512 MB RAM and two CPU cores as a teamwork baseline. Memory footprint stays low even as repo count grows; you scale CPU before RAM.
What running it takes
Single binary on Linux, or Docker — most people choose Docker. Official image: gogs/gogs. Mount a volume at /data for repositories and config; that's your backup target. First boot walks you through a web installer on port 3000: database (SQLite works for small teams, Postgres or MySQL for production), admin account, site URL.
Map SSH carefully: Gogs can run a built-in SSH server inside the container (often host port 2222 → container 2222). HTTPS goes through a reverse proxy with a real domain — clone URLs embed the hostname, so git.example.com beats a raw IP.
Patching matters. Gogs has had serious security advisories — path traversal and RCE issues that hit unpatched instances. Stay on current releases (0.14.x as of this writing), subscribe to GitHub security advisories, and don't expose an admin panel to the open internet without TLS and rate limiting. Self-hosting Git is only "safer" if someone actually updates it.
Disable open registration unless you're running a public forge. Back up the data volume and database together; test a restore before you need it.
Gogs vs Gitea — quick honest take
Pick Gogs if you want the lightest possible Git host, you're fine with Jenkins (or similar) for CI, and you prefer fewer moving parts.
Pick Gitea if you want built-in Actions, OCI package registry, and a faster-moving feature set on the same lightweight Go stack.
Pick GitLab if you need the full DevSecOps suite — we host that on GitLab hosting when the scope calls for it.
Hosting it in Canada
We run Gogs and Gitea on Canadian Docker hosting — TLS, Postgres, volume backups, and SSH on sensible ports. Pair it with Uptime Kuma so a dead Git server doesn't become a surprise at standup.
Tell us team size and whether you need CI elsewhere — we'll size a Git box that stays small on purpose, not one you have to grow every quarter.