Uebertragung per tar, Abgleich auf dem Zielhost
Deploy auf den Timer-Server / deploy (push) Failing after 13s
Deploy auf den Timer-Server / deploy (push) Failing after 13s
rsync scheitert im Runner-Container am Docker-Host ('pipe: Permission
denied', auch im 22.04-Image). Das Paket geht jetzt per tar hinueber und
wird auf dem Server abgeglichen, wo rsync normal laeuft.
Dabei die Rechte geradegezogen: der Deploy-Benutzer besitzt den Code und
braucht dafuer kein sudo. Das frueher vorgesehene 'chown -R timerapp' nach
jedem Lauf haette ihm die Schreibrechte fuer den naechsten Lauf entzogen -
und die Einrichtungsanleitung haette dem Dienst das Datenverzeichnis
weggenommen. Jetzt: Code gehoert deploy, data/ gehoert timerapp.
Ein Diagnoseschritt meldet zu Beginn Benutzer, Werkzeuge, Rechte und
sudo-Regeln, damit solche Faelle im Protokoll sichtbar sind.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -487,7 +487,9 @@ Stand selbsttaetig auf den Server aus. Der Workflow liegt in
|
||||
|
||||
### Was der Workflow tut
|
||||
|
||||
1. Uebertraegt die versionierten Dateien per `rsync` nach `/opt/timer-app`.
|
||||
1. Uebertraegt die versionierten Dateien als tar-Paket auf den Server und
|
||||
gleicht sie dort per `rsync` gegen `/opt/timer-app` ab. (Im Runner-Container
|
||||
laesst der Docker-Host rsync nicht laufen - `pipe: Permission denied`.)
|
||||
**Nicht angefasst** werden `backend/.env`, `data/` und `node_modules/` —
|
||||
sie sind vom Abgleich ausgenommen und ueberleben auch das `--delete`,
|
||||
das geloeschte Dateien auf dem Server aufraeumt.
|
||||
@@ -511,14 +513,17 @@ mkdir -p /home/deploy/.ssh && chmod 700 /home/deploy/.ssh
|
||||
echo '<oeffentlicher Schluessel>' >> /home/deploy/.ssh/authorized_keys
|
||||
chown -R deploy:deploy /home/deploy/.ssh && chmod 600 /home/deploy/.ssh/authorized_keys
|
||||
|
||||
# Schreibrecht auf das Anwendungsverzeichnis
|
||||
# Der Code gehoert dem Deploy-Benutzer, der Dienst liest ihn nur.
|
||||
chown -R deploy:timerapp /opt/timer-app && chmod -R g+rX /opt/timer-app
|
||||
|
||||
# WICHTIG: das Datenverzeichnis gehoert dem Dienst - sonst kann die
|
||||
# Anwendung ihre Datenbank nicht mehr schreiben.
|
||||
chown -R timerapp:timerapp /opt/timer-app/data && chmod 750 /opt/timer-app/data
|
||||
|
||||
# Genau die drei Befehle ohne Passwort - nicht mehr
|
||||
cat > /etc/sudoers.d/deploy-timer-app <<'EOF'
|
||||
deploy ALL=(root) NOPASSWD: /bin/systemctl restart timer-app, \
|
||||
/bin/journalctl -u timer-app *, \
|
||||
/bin/chown -R timerapp\:timerapp /opt/timer-app
|
||||
/bin/journalctl -u timer-app *
|
||||
EOF
|
||||
chmod 440 /etc/sudoers.d/deploy-timer-app
|
||||
visudo -c
|
||||
@@ -532,7 +537,6 @@ Im Repo unter **Settings -> Actions** hinterlegen:
|
||||
| Variable | `DEPLOY_USER` | `deploy` |
|
||||
| Variable | `DEPLOY_PATH` | `/opt/timer-app` |
|
||||
| Variable | `DEPLOY_SERVICE` | `timer-app` |
|
||||
| Variable | `DEPLOY_OWNER` | `timerapp:timerapp` |
|
||||
| Variable | `HEALTH_URL` | `http://127.0.0.1:3003/health` |
|
||||
| Secret | `DEPLOY_SSH_KEY` | privater Deploy-Schluessel (ganze Datei inkl. BEGIN/END-Zeilen) |
|
||||
| Secret | `DEPLOY_KNOWN_HOSTS` | `ssh-keyscan 192.168.1.5` — Zeile(n) fuer den Zielhost |
|
||||
|
||||
Reference in New Issue
Block a user