Gitea - Self-Hosted Git Platform & Actions CI/CD¶
Gitea is a lightweight, self-hosted, all-in-one software development platform featuring Git repository management, Code Review (Pull Requests), Issue Tracking, Built-in Package Registries, and Gitea Actions (CI/CD runner).
Architecture & Homelab Setup¶
- Host:
192.168.0.210(kamitbrains_homelab) - Web Interface URL:
https://gitea.kamitbrains-minipc-k1.lab(alsogitea.kamitbrains.local,gitea.kamitbrains.fr) - HTTP Internal Port:
3000 - SSH Port:
2223(mapped to container port22to avoid collision with Forgejo on2222) - Database Engine: PostgreSQL 16 (
postgres:16-alpine) - Data Mount Directory:
/opt/gitea/data(mounted to/datain container with UID/GID 1000)
Quick Start (Docker Compose)¶
Ansible Deployment¶
The automated role is located at ansible/roles/gitea/ and configured in ansible/site.yml:
Role Files¶
ansible/roles/gitea/tasks/main.yml: Directory creation (UID 1000 permissions), configuration templates deployment, Docker Compose stack startup, and systemd service registration.ansible/roles/gitea/templates/app.ini.j2: Production configuration withWORK_PATH = /data/giteaand PostgreSQL parameters.ansible/roles/gitea/templates/docker-compose.override.yml.j2: Traefik v3 HTTP and HTTPS routing labels.
Kubernetes K3s & Helm Setup¶
Official Gitea documentation recommendations (https://docs.gitea.com/installation/install-on-kubernetes/) are codified under helm/ and kubernetes/:
Helm Values Configuration¶
File: helm/values/gitea/values.yaml
ingress:
enabled: true
className: traefik
hosts:
- host: gitea.kamitbrains-minipc-k1.lab
paths:
- path: /
pathType: Prefix
tls:
- secretName: gitea-ingress-tls
hosts:
- gitea.kamitbrains-minipc-k1.lab
gitea:
admin:
username: "gitea_admin"
email: "admin@kamitbrains-minipc-k1.lab"
config:
server:
DOMAIN: gitea.kamitbrains-minipc-k1.lab
ROOT_URL: https://gitea.kamitbrains-minipc-k1.lab/
SSH_PORT: 2223
Kubernetes Native Manifests¶
File: kubernetes/apps/code-management/gitea.yaml
CLI Administration¶
To manage Gitea users via CLI inside the running Docker container:
# List existing users
docker exec -u 1000 gitea gitea admin user list
# Create an administrator user
docker exec -u 1000 gitea gitea admin user create --admin --username gitea_admin --password "<PASSWORD>" --email "admin@kamitbrains-minipc-k1.lab" --must-change-password=false
Secret Isolation¶
Administrative credentials and database keys are managed out-of-tree in .secrets/ (gitignored):
- .secrets/gitea-admin-login
- .secrets/gitea-admin-password
- .secrets/gitea-db-password
- .secrets/gitea-secret-key
- .secrets/gitea.md