name: Deploy CV Site (andreknie.de) on: push: branches: - master - main workflow_dispatch: jobs: deploy: runs-on: ubuntu-latest steps: - name: Checkout Code uses: actions/checkout@v3 - name: Install & Build Frontend run: | npm ci npm run build - name: Copy project files to VM uses: appleboy/scp-action@v0.1.7 with: host: ${{ secrets.DEPLOY_SSH_HOST }} username: ${{ secrets.DEPLOY_SSH_USER }} key: ${{ secrets.DEPLOY_SSH_KEY }} source: "Caddyfile,*,dist/**,dist/.*" target: "/opt/orchestrator/privat/CV/andreknie.de" - name: Execute Deployment on VM uses: appleboy/ssh-action@v1.0.3 with: host: ${{ secrets.DEPLOY_SSH_HOST }} username: ${{ secrets.DEPLOY_SSH_USER }} key: ${{ secrets.DEPLOY_SSH_KEY }} script: | cd /opt/orchestrator/privat/CV/andreknie.de # 1. Sichere .env aus den Gitea Secrets generieren cat < .env PORT=3003 NODE_ENV=production BASE_URL=https://andreknie.de SMTP_HOST=smtp.ionos.de SMTP_PORT=587 SMTP_USER=${{ secrets.SMTP_USER }} SMTP_PASS=${{ secrets.SMTP_PASS }} STAKEHOLDER_EMAIL=kontakt@d-hive.de DATABASE_URL=postgresql://umami:${{ secrets.UMAMI_DB_PASS }}@umami-db:5432/umami POSTGRES_DB=umami POSTGRES_USER=umami POSTGRES_PASSWORD=${{ secrets.UMAMI_DB_PASS }} HASH_SALT=${{ secrets.UMAMI_HASH_SALT }} EOF # 2. Frontend-Build in den Caddy-Ordner verschieben mkdir -p site # Wenn dist existiert, kopiere den Inhalt if [ -d "dist" ]; then cp -r dist/* site/ || true cp -r dist/.* site/ 2>/dev/null || true else echo "FEHLER: dist Ordner existiert nicht!" fi # Debugging: Zeige an, ob die Dateien wirklich da sind echo "INHALT VON SITE:" ls -la site/ # 3. Docker Container neustarten docker compose up -d --build echo "CADDYFILE CSP AUF HOST:" grep -n "Content-Security-Policy" Caddyfile echo "CADDYFILE CSP IM CONTAINER:" docker compose exec -T caddy grep -n "Content-Security-Policy" /etc/caddy/Caddyfile docker compose exec -T caddy caddy reload --config /etc/caddy/Caddyfile || true docker compose up -d --force-recreate caddy