Skip to content

๐ŸฆŒ 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 at git.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 migrate command inside the container after upgrade.