๐ฆ Forgejo โ Self-hosted Git & CI
Host: Homelab ยท Compose:
Homelab/Forgejo/compose.yaml
Stack name:forgejo[!NOTE] Update Available: Updates for this stack are pending in:
renovate/docker-dependencies.
1. Overview
A self-hosted Forgejo Git server โ a community fork of Gitea โ with a full CI runner pipeline. The runner uses Docker-in-Docker (DinD) to execute Actions workflows in isolated containers. This is the Git backend powering this very documentation repo.
2. Architecture & Services
| Service | Image | Port | Role |
|---|---|---|---|
database |
11notes/postgres:17@sha256:6860d92d13eabd73703220ebc9ee401c12922d4eb7715e70adf3b2041768a486 |
5432 |
PostgreSQL backend for Forgejo |
dind |
docker:28.3.3-dind@sha256:c0872aae4791ff427e6eda52769afa04f17b5cf756f8267e0d52774c99d5c9de |
โ | Docker daemon for runner containerised jobs |
forgejo |
codeberg.org/forgejo/forgejo:16.0.5 |
3000 |
Git server + web UI |
runner |
code.forgejo.org/forgejo/runner:13.1.0 |
โ | CI job runner (Actions) |
3. Networking
cloudflare-netโ External network routing Forgejo through the Cloudflare Tunnel for public access atgit.m1ckyb.com.databaseโ External network for PostgreSQL access.internalโ Internal network connecting Forgejo, runner, and DinD.
4. Persistent Storage
| Container | Host Path / Volume | Description |
|---|---|---||
| database | /backup/forgejo/database | Automated DB backups |
| database | postgres.etc | โ |
| database | postgres.var | โ |
| forgejo | /docker/data/forgejo/forgejo | All Forgejo repos, config, attachments |
| runner | /docker/data/forgejo/runner/config.yaml | Runner configuration file |
| runner | /docker/data/forgejo/runner/data | Runner registration tokens and state |
5. Environment Variables
| Variable | Service | Description |
|---|---|---|
POSTGRES_BACKUP_RETENTION |
database |
โ |
POSTGRES_BACKUP_SCHEDULE |
database |
โ |
POSTGRES_PASSWORD |
database |
โ |
TZ |
database |
Australia/Sydney |
FORGEJO__database__DB_TYPE |
forgejo |
postgres |
FORGEJO__database__HOST |
forgejo |
database:5432 |
FORGEJO__database__NAME |
forgejo |
โ |
FORGEJO__database__PASSWD |
forgejo |
โ |
FORGEJO__database__USER |
forgejo |
โ |
TZ |
forgejo |
Australia/Sydney |
USER_GID |
forgejo |
โ |
USER_UID |
forgejo |
โ |
DOCKER_HOST |
runner |
tcp://dind:2375 |
6. Access & Usage
| URL | Description |
|---|---|
https://git.m1ckyb.com |
Forgejo public web UI (via Cloudflare Tunnel) |
http://localhost:3000 |
Direct local access |
# Start the stack
docker compose -f Homelab/Forgejo/compose.yaml up -d
# Register the runner (first time)
docker exec -it forgejo-runner forgejo-runner register
# View runner logs
docker logs forgejo-runner -f
7. Maintenance & Backup
# Update all images
docker compose -f Homelab/Forgejo/compose.yaml pull
docker compose -f Homelab/Forgejo/compose.yaml up -d
# Backup (database auto-backs up every 2h to /backup/forgejo/database)
# Also rsync Forgejo data directory
rsync -av /docker/data/forgejo/ /backup/forgejo/data/
[!IMPORTANT] Before updating Forgejo, always check the release notes for migration requirements. Some versions require running the
gitea migratecommand inside the container after upgrade.