Files
michaelschiemer/deployment/gitea-runner/BUILD_ON_PRODUCTION.md
Michael Schiemer efa97f8b5d
Some checks failed
🚀 Build & Deploy Image / Determine Build Necessity (push) Successful in 33s
Security Vulnerability Scan / Check for Dependency Changes (push) Successful in 39s
🚀 Build & Deploy Image / Build Runtime Base Image (push) Successful in 17s
🚀 Build & Deploy Image / Run Tests & Quality Checks (push) Successful in 1m15s
Security Vulnerability Scan / Composer Security Audit (push) Has been skipped
🚀 Build & Deploy Image / Build Docker Image (push) Failing after 33s
🚀 Build & Deploy Image / Auto-deploy to Staging (push) Has been skipped
🚀 Build & Deploy Image / Auto-deploy to Production (push) Has been skipped
fix: Build CI images on production server
- Add build-ci-image-production.sh script for building CI images on production
- Add BUILD_ON_PRODUCTION.md documentation
- Fix Dockerfile to handle optional PECL extensions for PHP 8.5 RC

This fixes the issue where Gitea workflows fail with:
'Error response from daemon: pull access denied for php-ci'
2025-11-08 14:33:59 +01:00

2.5 KiB

CI Image auf Produktionsserver bauen

Problem

Der Gitea Runner auf dem Produktionsserver versucht, das php-ci:latest Image zu pullen, aber es existiert nicht in der Registry oder lokal. Der Fehler lautet:

Error response from daemon: pull access denied for php-ci, repository does not exist or may require 'docker login'

Lösung: Image direkt auf dem Produktionsserver bauen

Schritt 1: Auf den Produktionsserver verbinden

ssh user@production-server

Schritt 2: Zum Projektverzeichnis wechseln

cd /path/to/michaelschiemer

Schritt 3: CI Image bauen

cd deployment/gitea-runner
./build-ci-image-production.sh

Das Script:

  • Baut das php-ci:latest Image
  • Baut das docker-build:latest Image
  • Lädt beide Images in den gitea-runner-dind Container

Schritt 4: Verifikation

  1. Prüfe ob Images gebaut wurden:

    docker images | grep -E "php-ci|docker-build"
    
  2. Prüfe ob Images in docker-dind geladen wurden:

    docker exec gitea-runner-dind docker images | grep -E "php-ci|docker-build"
    
  3. Prüfe Runner Labels in Gitea UI:

  4. Teste einen Workflow:

    • Ein Workflow mit runs-on: php-ci sollte jetzt funktionieren

Alternative: Ansible Playbook verwenden

Falls Ansible auf dem Produktionsserver verfügbar ist:

cd deployment/ansible
ansible-playbook -i inventory/production.yml \
  playbooks/setup-gitea-runner-ci.yml \
  -e "project_root=/path/to/michaelschiemer"

Troubleshooting

Image wird nicht in docker-dind gefunden:

  • Stelle sicher, dass gitea-runner-dind läuft: docker ps | grep docker-dind
  • Lade das Image manuell: docker save php-ci:latest | docker exec -i gitea-runner-dind docker load

Runner zeigt php-ci Label nicht:

  • Labels können nur bei der Registration geändert werden
  • Runner neu registrieren:
    cd deployment/gitea-runner
    ./unregister.sh
    ./register.sh
    

Build schlägt fehl:

  • Prüfe Docker-Logs: docker logs gitea-runner-dind
  • Stelle sicher, dass genug Speicherplatz vorhanden ist: df -h
  • Prüfe Docker-Daemon: docker info

Hinweise

  • Das Image ist ca. 1.85GB groß - der Build kann einige Minuten dauern
  • Stelle sicher, dass genug Speicherplatz auf dem Server vorhanden ist
  • Das Image wird lokal gebaut und muss nicht in die Registry gepusht werden (wird direkt in docker-dind geladen)