Commit Graph

423 Commits

Author SHA1 Message Date
46f17c5164 fix: staging-app should only run PHP-FPM (not nginx) + fix git ownership warnings 2025-11-01 16:03:22 +01:00
210e0aa74d feat: add auto-deploy to staging after successful build 2025-11-01 15:50:52 +01:00
a441da37f6 feat: implement exception handling system with error context and policies 2025-11-01 15:46:43 +01:00
f3440dff0d Merge staging: Fix security-scan workflow and ErrorAggregationInitializer 2025-11-01 00:31:11 +01:00
9591ecc906 fix: Update security-scan.yml (additional fixes) 2025-11-01 00:31:09 +01:00
2e8797ce1d fix: Correct branch detection in security-scan.yml
- Handle pull_request events correctly (use head_ref)
- Support staging branch in security scans
- Add workflow_dispatch input for branch selection
- Fix REF_NAME extraction for all event types
2025-11-01 00:29:34 +01:00
e105afb23c fix: Update DefaultContainer if needed 2025-11-01 00:28:33 +01:00
d2b7fc96fc fix: Update ErrorAggregationInitializer
Fix DI binding issues for ErrorAggregatorInterface
2025-11-01 00:25:13 +01:00
8c7bbec8b7 fix: Correct staging-internal network configuration
Remove external: false and name specification to let Docker Compose
create the network automatically
2025-10-31 23:58:14 +01:00
87aa6f067e Merge staging: Add staging environment setup 2025-10-31 23:52:43 +01:00
77b2dc5dd7 feat: Add staging environment setup
- Create staging stack with separate containers and volumes
- Configure staging.michaelschiemer.de subdomain routing
- Add deploy-staging.yml workflow for auto-deployment
- Extend build-image.yml to support staging branch
- Separate Redis instance and network for staging
- Staging uses staging branch by default

Features:
- Auto-deploy: Push to staging branch → build → deploy to staging
- Separate from production: Different containers, volumes, networks
- Shared Traefik: Uses same SSL certificates (*.michaelschiemer.de)
- Testing environment before production deployment
2025-10-31 23:52:30 +01:00
bb0caa4e7c chore: Trigger build workflow test
Testing the new separated build-image.yml workflow
2025-10-31 23:44:48 +01:00
194bd71257 feat: Split CI/CD pipeline into separate build and deploy workflows
- Add build-image.yml: Automatic image builds on push (5-8 min)
- Add deploy-production.yml: Manual deployment workflow (2-5 min)
- Mark production-deploy.yml as deprecated

Benefits:
- Faster feedback: Images ready in ~5-8 min (vs 10-15 min before)
- Flexible deployment: Deploy when ready, not forced after every build
- Parallel execution: Multiple builds can run simultaneously
- Better separation: Build failures don't block deployments of existing images
2025-10-31 23:43:49 +01:00
d84c5dbacb refactor: Framework code cleanup and improvements
- DI dependency graph improvements
- Database connection updates
- HTTP middleware chain optimizations
- Routing middleware cleanup
2025-10-31 23:38:23 +01:00
dd5c1687e3 fix: Update nginx upstream name from php-fpm to php-upstream
Ensure consistency with nginx base image configuration
2025-10-31 23:38:13 +01:00
01fcd690e2 feat: Shared code volume for nginx and app containers
- Add app-code volume to both nginx and app containers
- App container clones code once into shared volume
- Nginx container uses shared volume (read-only) and waits for code
- Update entrypoint.sh to handle storage-preserving git clone
- Fix nginx configuration to use app:9000 for PHP-FPM

This eliminates duplicate code cloning and ensures both containers
always use the same code version from the shared volume.
2025-10-31 23:37:29 +01:00
9e39a7b14e chore: Make RapidMail Credentials non required. 2025-10-31 23:34:36 +01:00
6c7f27dae4 fix: add fallback for empty image_tag in deployment
- Add validation and fallback logic for IMAGE_TAG
- If build job output is empty, generate tag from commit SHA
- Use 'latest' tag as last resort fallback
- Add debug output to show what tag is being used
- Fixes 'invalid reference format' error when IMAGE_TAG is empty
2025-10-31 22:16:50 +01:00
2373060d3f refactor: replace Ansible deployment with direct SSH commands
- Remove Ansible dependency from deployment workflow
- Use direct SSH commands for Docker operations
- Simplify deployment process:
  * SSH to production server
  * Docker registry login
  * Pull new image
  * Update docker-compose.yml with sed
  * Restart services with docker compose
- Remove Ansible verification step
- Simplify rollback step (only shows manual instructions)
- Works with ubuntu-latest runner (no special image needed)
- Fixes 'ansible: command not found' errors
- Works with act for local testing
2025-10-31 22:08:00 +01:00
798eea093a feat: add act configuration for local workflow testing
- Add .actrc file to map custom runner labels to Docker images
- Add test-workflow.sh script for easy local testing with act
- Maps php-ci runner to php-ci:latest Docker image
- Maps docker-build runner to docker:latest
- Helps resolve 'ansible: command not found' errors when testing workflows locally
2025-10-31 22:00:09 +01:00
e9f0847b1e fix: use php-ci runner for deploy job instead of ubuntu-latest
- Changed deploy job to use php-ci runner which has Ansible pre-installed
- Removed redundant Ansible installation step
- Fixes 'ansible: command not found' error in Gitea Actions workflow
2025-10-31 21:50:37 +01:00
d14d12be3a test: Second workflow test - Buildx configuration fix 2025-10-31 21:33:19 +01:00
12cc4b3617 fix: Use DOCKER_HOST from runner environment for Buildx
- Remove hardcoded docker-dind host reference
- Buildx will use DOCKER_HOST from runner environment
- Add Docker availability check
- Improve error handling for Docker connection
2025-10-31 21:31:57 +01:00
30ab5b4270 test: Trigger workflow to test build optimization 2025-10-31 21:29:43 +01:00
9fd9875611 feat: Skip Docker build if image already exists for commit
- Add check step to verify if image for commit SHA already exists
- Skip build step if image exists (saves 5+ minutes per deployment)
- Use git-{SHORT_SHA} tag to identify images by commit
- Only rebuild when code actually changed
- Improve build cache utilization
2025-10-31 21:26:56 +01:00
8fb2736a07 fix: Prioritize HTTPS registry and configure Buildx for insecure registry
- Prioritize registry.michaelschiemer.de (HTTPS) over HTTP endpoints
- Configure Buildx to use docker-dind with insecure-registry support
- Ensure Buildx respects insecure-registry settings from docker-dind
- Fix 'http: server gave HTTP response to HTTPS client' error
2025-10-31 21:22:55 +01:00
aabb5a82fe fix: Update repository URL in all workflow files
- Fix checkout URLs in update-production-secrets.yml
- Fix checkout URLs in security-scan.yml
- Fix checkout URLs in test-registry.yml
- Change from repository.michaelschiemer.de:5000 to git.michaelschiemer.de
2025-10-31 21:15:01 +01:00
75e2d9e02f fix: Remove duplicate registry validation code
- Remove duplicate ACTUAL_REGISTRY validation logic
- Ensure REGISTRY_TO_USE is properly set before docker build
- Fix invalid tag format error by using consistent variable
2025-10-31 21:14:13 +01:00
16d586ecdf chore: Update deployment configuration and documentation
- Update Gitea configuration (remove DEFAULT_ACTIONS_URL)
- Fix deployment documentation
- Update Ansible playbooks
- Clean up deprecated files
- Add new deployment scripts and templates
2025-10-31 21:11:11 +01:00
cf4748f8db fix: Use correct Git repository URL in checkout steps
- Change from repository.michaelschiemer.de:5000 to git.michaelschiemer.de
- Remove port 5000 from HTTPS URLs (HTTPS uses default port 443)
- Fix TLS handshake error during checkout
2025-10-31 21:05:07 +01:00
0ffea7aaf9 fix: Docker image tag format - remove leading slashes from registry URL
- Add validation and cleanup for ACTUAL_REGISTRY variable
- Remove leading/trailing slashes from registry URLs
- Use REGISTRY_TO_USE variable with fallback to REGISTRY env
- Fix invalid tag format '/framework:latest' error
2025-10-31 21:03:10 +01:00
813cf32b9a Revert: Zurück zu git.michaelschiemer.de da repository.michaelschiemer.de:5000 nicht erreichbar 2025-10-31 20:31:56 +01:00
1107f84f42 Revert: Zurück zu git.michaelschiemer.de da repository.michaelschiemer.de:5000 nicht erreichbar 2025-10-31 20:28:01 +01:00
f1329433ce Update: Verwende repository.michaelschiemer.de:5000 für Git-Repository URLs
- Ändere Remote-URL zu repository.michaelschiemer.de:5000
- Aktualisiere alle Workflows (production-deploy, test-registry, security-scan, update-production-secrets)
- Test: Production Deployment Workflow
2025-10-31 20:14:41 +01:00
891508f47c Fix: Ansible group_vars werden jetzt automatisch geladen
- Erstelle Symlink für inventory/group_vars/production.yml
- Ansible lädt group_vars automatisch, wenn sie neben der Inventory-Datei liegen
- Entferne manuelle include_vars Aufrufe (werden später bereinigt)
- Test: Production Deployment Workflow
2025-10-31 20:11:40 +01:00
9f43d156d8 Add: Test-Workflow für Registry-Credentials
- Testet Registry-Login mit Gitea Secrets
- Vergleicht mit bekannten korrekten Credentials
- Zeigt detaillierte Debug-Informationen
2025-10-31 18:23:25 +01:00
a8f1735f29 Fix: Verbesserte Docker Login-Behandlung für HTTP-Registries
- Prüft HTTPS-Fehler und gibt Hinweise
- Versucht Login erneut falls HTTPS-Probleme erkannt werden
2025-10-31 18:19:50 +01:00
3c28dbfbe8 Fix: Verbesserte Login-Debug-Ausgabe
- Zeigt jetzt immer Login-Output, auch wenn leer
- Setzt +e / -e für korrekte Exit-Code-Erfassung
- Bessere Fehleranalyse für 401/Unauthorized
- Detailliertere Fehlermeldungen
2025-10-31 18:17:21 +01:00
e463f074f2 Fix: docker-dind insecure-registry Konfiguration für HTTP-Registry
- Fügt insecure-registry Flags für 94.16.110.151:5000 hinzu
- Erlaubt HTTP-Zugriff auf Registry ohne SSL-Zertifikatsprüfung
2025-10-31 18:09:09 +01:00
da6afdf280 Fix: HOST_IP-Erkennung verbessert
- Korrekte HOST_IP-Erkennung mit Fallbacks
- Verhindert leere HOST_IP-Variable
- DEPLOYMENT_HOST:5000 als erste Option
2025-10-31 18:03:11 +01:00
e06a6942ff Fix: Verbesserter Registry-Login mit detailliertem Debugging
- Bessere Host-IP-Erkennung mit Fallbacks
- Detaillierte HTTP-Status-Code-Ausgabe
- 401 wird als erfolgreiche Erreichbarkeit gewertet (Auth erforderlich)
- Debug-Output für Login-Versuche
- DEPLOYMENT_HOST:5000 als erste Option
2025-10-31 18:01:23 +01:00
56f9376430 Fix: Workflow testet jetzt Container-Namen 'registry:5000'
- Fügt 'registry:5000' als erste Option hinzu
- Container-Name funktioniert wenn docker-dind Zugriff auf traefik-public hat
2025-10-31 17:53:15 +01:00
8b181a5ea2 Fix: docker-dind Zugriff auf traefik-public Netzwerk
- docker-dind erhält Zugriff auf traefik-public Netzwerk
- Job-Container können Registry über Container-Namen 'registry:5000' erreichen
- Workflow testet jetzt auch Container-Namen als Registry-URL
2025-10-31 17:52:28 +01:00
b60bbb7344 Fix: Registry-Login über Host-Port 5000
- Testet jetzt zuerst direkten Host-Zugriff über Port 5000 (HTTP)
- Findet automatisch Gateway-IP des Docker-Netzwerks
- Testet host.docker.internal für Docker Host
- Da docker-dind in isoliertem Netzwerk läuft, muss Host direkt erreicht werden
2025-10-31 17:49:53 +01:00
df650d8abb Fix: Workflow Registry-Login und Buildx-Installation
- Registry-Login testet jetzt mehrere URLs (externe Domain, IP, HTTP Port 5000)
- Automatische Erkennung der funktionierenden Registry-URL
- Verbessertes Error-Handling und Debugging-Ausgaben
- Buildx auf v0.29.1 aktualisiert und global installiert
- Shell-Angaben für alle Steps korrigiert (sh für ersten, bash für weitere)
- Registry-URL wird als Step-Output gespeichert und im Build verwendet
2025-10-31 17:46:25 +01:00
dfb1d9bd5d Add custom docker-build image for CI workflows
- Created Dockerfile.build with Docker CLI, Buildx, Git, Bash
- Updated build-ci-image.sh to build both php-ci and docker-build images
- Updated workflow to use docker-build image (no installation needed)
- Updated runner .env to use docker-build:latest instead of docker:latest
2025-10-31 16:00:56 +01:00
001aa1c9b0 Fix: Add missing git/bash installation step for docker:latest image 2025-10-31 15:56:09 +01:00
15c2e6000b Fix: Install git and bash in docker:latest image for build job
docker:latest is minimal Alpine image without git/bash.
Added step to install git and bash before checkout.
2025-10-31 15:55:48 +01:00
f602f24342 Test: Verify docker-build runner label works for build job 2025-10-31 15:52:47 +01:00
2924a9a061 Fix: Use docker-build label for build job (Docker required)
The build job needs Docker installed, but ubuntu-latest (node:16-bullseye) doesn't have Docker.
Changed build job to use docker-build label with docker:latest image.

NOTE: Runner .env must be updated manually with:
docker-build:docker://docker:latest

Then runner must be re-registered to pick up the new label.
2025-10-31 15:47:05 +01:00