10 KiB
10 KiB
Gitea Setup mit CI/CD Runner
Lokale Git-Instanz auf Proxmox LXC mit automatischem Deployment via Gitea Actions.
Übersicht
┌─────────────────┐ git push ┌─────────────────┐
│ Lokaler PC │ ───────────────▶ │ Gitea LXC │
│ (Development) │ │ 192.168.2.40 │
└─────────────────┘ └────────┬────────┘
│ trigger
▼
┌─────────────────┐
│ Gitea Runner │
│ (act_runner) │
└────────┬────────┘
│ SSH deploy
▼
┌─────────────────┐
│ GSM Server │
│ 192.168.2.30 │
└─────────────────┘
Teil 1: LXC Container erstellen
Proxmox Web UI
- CT Template herunterladen:
Datacenter → pve → local → CT Templates → Templates- Debian 12 (Bookworm) empfohlen
- Neuen Container erstellen:
- CT ID: 104 (oder nächste freie)
- Hostname: gitea
- Password: sicheres Root-Passwort
- Template: debian-12-standard
- Disk: 16 GB
- CPU: 2 Cores
- RAM: 1024 MB
- Network: vmbr0, DHCP oder statisch 192.168.2.40
Oder per CLI auf Proxmox Host
# Template herunterladen falls nicht vorhanden
pveam download local debian-12-standard_12.2-1_amd64.tar.zst
# Container erstellen
pct create 104 local:vztmpl/debian-12-standard_12.2-1_amd64.tar.zst \
--hostname gitea \
--memory 1024 \
--cores 2 \
--rootfs local-lvm:16 \
--net0 name=eth0,bridge=vmbr0,ip=192.168.2.40/24,gw=192.168.2.1 \
--password \
--unprivileged 1 \
--features nesting=1
# Container starten
pct start 104
Teil 2: Gitea Installation
System vorbereiten
# In den Container einloggen
pct enter 104
# System updaten
apt update && apt upgrade -y
# Abhängigkeiten installieren
apt install -y git curl wget sudo sqlite3
Git-User erstellen
adduser --system --shell /bin/bash --group --disabled-password --home /home/git git
Gitea herunterladen
# Aktuelle Version prüfen: https://github.com/go-gitea/gitea/releases
GITEA_VERSION="1.21.4"
wget -O /usr/local/bin/gitea https://dl.gitea.io/gitea/${GITEA_VERSION}/gitea-${GITEA_VERSION}-linux-amd64
chmod +x /usr/local/bin/gitea
# Version prüfen
gitea --version
Verzeichnisse erstellen
mkdir -p /var/lib/gitea/{custom,data,log}
mkdir -p /etc/gitea
chown -R git:git /var/lib/gitea
chown root:git /etc/gitea
chmod 770 /etc/gitea
Systemd Service
cat > /etc/systemd/system/gitea.service << 'EOF'
[Unit]
Description=Gitea (Git with a cup of tea)
After=network.target
[Service]
RestartSec=2s
Type=simple
User=git
Group=git
WorkingDirectory=/var/lib/gitea/
ExecStart=/usr/local/bin/gitea web --config /etc/gitea/app.ini
Restart=always
Environment=USER=git HOME=/home/git GITEA_WORK_DIR=/var/lib/gitea
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable gitea
systemctl start gitea
Web-Setup abschließen
- Browser öffnen:
http://192.168.2.40:3000 - Initial-Setup:
- Database: SQLite3
- SSH Port: 22
- HTTP Port: 3000
- Base URL:
http://192.168.2.40:3000/(später ändern für Domain) - Admin Account erstellen
Berechtigungen nach Setup fixieren
chmod 750 /etc/gitea
chmod 640 /etc/gitea/app.ini
Teil 3: Gitea Actions aktivieren
app.ini anpassen
nano /etc/gitea/app.ini
Folgende Sektion hinzufügen/anpassen:
[actions]
ENABLED = true
DEFAULT_ACTIONS_URL = github
Gitea neustarten:
systemctl restart gitea
Teil 4: Gitea Actions Runner
Runner installieren
# Als root auf dem Gitea-Server (oder separater Server)
cd /opt
RUNNER_VERSION="0.2.6"
wget https://gitea.com/gitea/act_runner/releases/download/v${RUNNER_VERSION}/act_runner-${RUNNER_VERSION}-linux-amd64
mv act_runner-${RUNNER_VERSION}-linux-amd64 act_runner
chmod +x act_runner
Runner Token generieren
- Gitea Web UI →
Site Administration → Actions → Runners Create new Runner→ Token kopieren
Runner registrieren
cd /opt
./act_runner register --no-interactive \
--instance http://192.168.2.40:3000 \
--token <DEIN_TOKEN> \
--name homelab-runner \
--labels ubuntu-latest:docker://node:20-bookworm,ubuntu-22.04:docker://ubuntu:22.04
Runner als Systemd Service
cat > /etc/systemd/system/gitea-runner.service << 'EOF'
[Unit]
Description=Gitea Actions Runner
After=network.target gitea.service
[Service]
Type=simple
User=root
WorkingDirectory=/opt
ExecStart=/opt/act_runner daemon
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable gitea-runner
systemctl start gitea-runner
Docker für Runner installieren (falls Labels mit docker:// genutzt)
apt install -y docker.io
systemctl enable docker
systemctl start docker
Teil 5: SSH Deploy Key einrichten
Auf dem Gitea-Server (Runner)
# SSH Key für Deployments erstellen
ssh-keygen -t ed25519 -C "gitea-deploy" -f /root/.ssh/deploy_key -N ""
# Public Key anzeigen
cat /root/.ssh/deploy_key.pub
Auf dem GSM-Server (192.168.2.30)
# Public Key zu authorized_keys hinzufügen
echo "ssh-ed25519 AAAA... gitea-deploy" >> /root/.ssh/authorized_keys
In Gitea als Secret speichern
- Repository →
Settings → Actions → Secrets - Neues Secret:
SSH_DEPLOY_KEY - Inhalt: Private Key (
cat /root/.ssh/deploy_key)
Teil 6: GSM Repository einrichten
Auf dem GSM-Server (192.168.2.30)
cd /opt/gameserver-monitor
# Falls noch kein Git-Repo
git init
git add .
git commit -m "Initial commit"
# Gitea als Remote hinzufügen
git remote add origin http://192.168.2.40:3000/<user>/gameserver-monitor.git
git push -u origin main
Workflow-Datei erstellen
Im Repository .gitea/workflows/deploy.yml erstellen:
name: Deploy GSM
on:
push:
branches: [main]
workflow_dispatch: # Manueller Trigger
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Deploy to Server
uses: appleboy/ssh-action@v1.0.3
with:
host: 192.168.2.30
username: root
key: ${{ secrets.SSH_DEPLOY_KEY }}
script: |
set -e
cd /opt/gameserver-monitor
echo "=== Pulling latest changes ==="
git fetch origin main
git reset --hard origin/main
echo "=== Installing backend dependencies ==="
cd backend
npm ci --production
echo "=== Building frontend ==="
cd ../frontend
npm ci
npm run build
echo "=== Restarting services ==="
pm2 restart gsm-backend
echo "=== Deploy complete ==="
Alternative: Separater Frontend/Backend Deploy
name: Deploy GSM
on:
push:
branches: [main]
paths:
- 'backend/**'
- 'frontend/**'
jobs:
deploy-backend:
runs-on: ubuntu-latest
if: contains(github.event.head_commit.modified, 'backend/')
steps:
- uses: actions/checkout@v4
- name: Deploy Backend
uses: appleboy/ssh-action@v1.0.3
with:
host: 192.168.2.30
username: root
key: ${{ secrets.SSH_DEPLOY_KEY }}
script: |
cd /opt/gameserver-monitor/backend
git pull origin main
npm ci --production
pm2 restart gsm-backend
deploy-frontend:
runs-on: ubuntu-latest
if: contains(github.event.head_commit.modified, 'frontend/')
steps:
- uses: actions/checkout@v4
- name: Deploy Frontend
uses: appleboy/ssh-action@v1.0.3
with:
host: 192.168.2.30
username: root
key: ${{ secrets.SSH_DEPLOY_KEY }}
script: |
cd /opt/gameserver-monitor/frontend
git pull origin main
npm ci
npm run build
Teil 7: Reverse Proxy (Optional)
Nginx Proxy Manager Konfiguration
Falls Gitea über Domain erreichbar sein soll (z.B. git.zeasy.dev):
- Nginx Proxy Manager → Proxy Hosts → Add
- Domain: git.zeasy.dev
- Forward Hostname: 192.168.2.40
- Forward Port: 3000
- SSL: Let's Encrypt aktivieren
Gitea app.ini anpassen
[server]
DOMAIN = git.zeasy.dev
ROOT_URL = https://git.zeasy.dev/
SSH_DOMAIN = git.zeasy.dev
Teil 8: Lokale Git-Konfiguration
Remote für lokales Entwickeln
# Im lokalen Projekt
cd E:/Projects/homelab-docs/gsm-frontend
git remote add gitea http://192.168.2.40:3000/<user>/gameserver-monitor.git
# Oder mit SSH (wenn SSH-Key eingerichtet)
git remote add gitea git@192.168.2.40:<user>/gameserver-monitor.git
Workflow
# Entwickeln...
git add .
git commit -m "Feature: xyz"
git push gitea main # → Triggert automatisch Deploy
Troubleshooting
Runner-Status prüfen
systemctl status gitea-runner
journalctl -u gitea-runner -f
Gitea Logs
journalctl -u gitea -f
# oder
tail -f /var/lib/gitea/log/gitea.log
Actions Debug
- In Gitea Web UI: Repository → Actions → Job auswählen → Logs ansehen
SSH-Verbindung testen
# Vom Runner aus
ssh -i /root/.ssh/deploy_key root@192.168.2.30 "echo 'Connection OK'"
Ressourcen
- Gitea Docs: https://docs.gitea.io/
- Gitea Actions: https://docs.gitea.io/en-us/actions/overview/
- Act Runner: https://gitea.com/gitea/act_runner