v1.5: Lokales Datenbank-Backup nach D:\VPS_Backup
- backup/vps-db-backup.cmd: pg_dump | gzip vom Container mp-db via plink, Ablage D:\VPS_Backup\mieterportal\mieterportal-db-YYYY-MM-DD.sql.gz - 14-taegige Aufbewahrung (forfiles), Plausibilitaetspruefung (Exitcode, Mindestgroesse), Log in backup.log - Aufgabenplanung: taeglich 03:17 Uhr (interaktiv, Benutzer ah wegen Z:-Key) - Probelauf erfolgreich, Doku in kimi.md
This commit is contained in:
@@ -0,0 +1,49 @@
|
|||||||
|
@echo off
|
||||||
|
rem ============================================================
|
||||||
|
rem Hinterstein Mieterportal - Datenbank-Backup auf D:\VPS_Backup
|
||||||
|
rem Holt ein pg_dump vom VPS (Container mp-db) und legt es lokal
|
||||||
|
rem als gzip ab. Aufbewahrung: 14 Tage (forfiles).
|
||||||
|
rem Laeuft ueber Aufgabenplanung (taeglich 03:17 Uhr, Benutzer ah,
|
||||||
|
rem nur bei angemeldetem Benutzer - Z:-Laufwerk mit SSH-Key noetig).
|
||||||
|
rem Achtung: Keine Klammern in Echo-Texten innerhalb von IF-Bloecken
|
||||||
|
rem (wuerden den Block vorzeitig schliessen) - daher Labels statt Blöcke.
|
||||||
|
rem ============================================================
|
||||||
|
setlocal
|
||||||
|
set ZIEL=D:\VPS_Backup\mieterportal
|
||||||
|
set PLINK=C:\Program Files\PuTTY\plink.exe
|
||||||
|
set HOSTKEY=SHA256:4G3UxsugNkHH6BrPXScLXh+vX8P1sLgWKn8cZBKSRxw
|
||||||
|
set KEY=Z:\Devel\ssh\priv_ionos_hocks_vps.ppk
|
||||||
|
set PORT=38592
|
||||||
|
set SERVER=root@hocks.eu
|
||||||
|
set LOG=%ZIEL%\backup.log
|
||||||
|
|
||||||
|
if not exist "%ZIEL%" mkdir "%ZIEL%"
|
||||||
|
|
||||||
|
for /f %%d in ('powershell -NoProfile -Command "Get-Date -Format yyyy-MM-dd"') do set DATUM=%%d
|
||||||
|
set DATEI=%ZIEL%\mieterportal-db-%DATUM%.sql.gz
|
||||||
|
|
||||||
|
echo [%DATE% %TIME%] Backup startet nach %DATEI% >> "%LOG%"
|
||||||
|
"%PLINK%" -batch -hostkey "%HOSTKEY%" -i "%KEY%" -P %PORT% %SERVER% "docker exec mp-db sh -c 'pg_dump -U mp -d mieterportal | gzip -9'" > "%DATEI%"
|
||||||
|
if errorlevel 1 goto :fehler_plink
|
||||||
|
|
||||||
|
for %%S in ("%DATEI%") do set GROESSE=%%~zS
|
||||||
|
if %GROESSE% LSS 10000 goto :fehler_klein
|
||||||
|
|
||||||
|
rem Aufbewahrung: Dateien aelter als 14 Tage loeschen
|
||||||
|
forfiles /p "%ZIEL%" /m mieterportal-db-*.sql.gz /d -14 /c "cmd /c del @path" 2>nul
|
||||||
|
|
||||||
|
echo [%DATE% %TIME%] OK: %GROESSE% Bytes, Aufraeumen abgeschlossen >> "%LOG%"
|
||||||
|
endlocal
|
||||||
|
exit /b 0
|
||||||
|
|
||||||
|
:fehler_plink
|
||||||
|
echo [%DATE% %TIME%] FEHLER: plink oder pg_dump lieferte Exitcode 1 oder hoeher >> "%LOG%"
|
||||||
|
if exist "%DATEI%" del "%DATEI%"
|
||||||
|
endlocal
|
||||||
|
exit /b 1
|
||||||
|
|
||||||
|
:fehler_klein
|
||||||
|
echo [%DATE% %TIME%] FEHLER: Dump zu klein ^(%GROESSE% Bytes^) - vermutlich Fehlerausgabe statt Dump >> "%LOG%"
|
||||||
|
del "%DATEI%"
|
||||||
|
endlocal
|
||||||
|
exit /b 1
|
||||||
@@ -189,6 +189,14 @@ tar -czf mp-dist.tar.gz -C dist .
|
|||||||
|
|
||||||
## 8. Verlauf / offene Punkte
|
## 8. Verlauf / offene Punkte
|
||||||
|
|
||||||
|
**Erledigt 02.10. (v1.5):** Lokales Datenbank-Backup: `backup/vps-db-backup.cmd`
|
||||||
|
holt nächtlich (Aufgabenplanung „Mieterportal DB-Backup", täglich 03:17 Uhr,
|
||||||
|
Benutzer ah, interaktiv) per plink ein `pg_dump | gzip` vom Container mp-db und
|
||||||
|
legt es nach `D:\VPS_Backup\mieterportal\mieterportal-db-YYYY-MM-DD.sql.gz`
|
||||||
|
(14-tägige Aufbewahrung via forfiles, Log: `backup.log`). Probelauf OK
|
||||||
|
(11 KB, Dump-Format geprüft). Einschränkung: läuft nur, wenn der Rechner an
|
||||||
|
und Benutzer ah angemeldet ist (Z:-Laufwerk mit dem SSH-Key, Pageant).
|
||||||
|
|
||||||
**Erledigt 02.10. (v1.0):** Portal komplett neu aufgesetzt (5 Module, Mieter-/Verwaltungsansicht,
|
**Erledigt 02.10. (v1.0):** Portal komplett neu aufgesetzt (5 Module, Mieter-/Verwaltungsansicht,
|
||||||
KI-Branding: Logo/Hero/Illustration), Docker-Setup (Dockerfile, nginx, compose),
|
KI-Branding: Logo/Hero/Illustration), Docker-Setup (Dockerfile, nginx, compose),
|
||||||
Repo in git.hocks.eu angelegt, Deploy-Workflow + Dark Mode + beispieldaten.py aus dem
|
Repo in git.hocks.eu angelegt, Deploy-Workflow + Dark Mode + beispieldaten.py aus dem
|
||||||
@@ -244,10 +252,12 @@ Zustellung an axel@hocks.eu status=sent, Test-Ticket bereinigt.
|
|||||||
- Zertifikatserneuerung prüfen (per 01.12.2026): NPM-Renewer sollte cert 9 über HTTP-Challenge
|
- Zertifikatserneuerung prüfen (per 01.12.2026): NPM-Renewer sollte cert 9 über HTTP-Challenge
|
||||||
erneuern; sonst certbot/webroot + Kopie nach npm-9 wiederholen.
|
erneuern; sonst certbot/webroot + Kopie nach npm-9 wiederholen.
|
||||||
- Demo-Empfängeradressen der Mieter (example.de) durch echte ersetzen, sobald bekannt.
|
- Demo-Empfängeradressen der Mieter (example.de) durch echte ersetzen, sobald bekannt.
|
||||||
|
- Backup ggf. serverseitig ergänzen (zweite Sicherungslinie, falls lokaler Rechner
|
||||||
|
nachts aus ist), Backup-Wiederherstellung einmal testen.
|
||||||
- Sicherheit für Produktion: Passwort-Hash serverseitig salten (bcrypt/argon2), CSRF-Token,
|
- Sicherheit für Produktion: Passwort-Hash serverseitig salten (bcrypt/argon2), CSRF-Token,
|
||||||
Rate-Limiting auf /api/auth/login.
|
Rate-Limiting auf /api/auth/login.
|
||||||
- Mögliche nächste Schritte: Datenbank-Backup-Job (nächtlicher pg_dump), E-Mail-Verifizierung
|
- Mögliche nächste Schritte: E-Mail-Verifizierung bei Registrierung, Dokumenten-Download
|
||||||
bei Registrierung, dokumenten-Download mit echten Dateien.
|
mit echten Dateien.
|
||||||
|
|
||||||
## 9. Sonstiges
|
## 9. Sonstiges
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user