diff --git a/DEPLOY_TESTUMGEBUNG_ANLEITUNG.md b/DEPLOY_TESTUMGEBUNG_ANLEITUNG.md index 8f816fa..a1de3ff 100644 --- a/DEPLOY_TESTUMGEBUNG_ANLEITUNG.md +++ b/DEPLOY_TESTUMGEBUNG_ANLEITUNG.md @@ -7,6 +7,59 @@ mit einer eigenen, leeren Datenbank. Die laufende Produktion wird dabei **nicht angefasst**. Alle Schritte hier legen neue Container, ein neues Volume und ein neues Verzeichnis an. +## Kurzfassung zum Abhaken + +Wer die Begründungen nicht braucht, arbeitet diese Liste ab. Die ausführlichen Abschnitte +darunter erklären jeden Schritt und was schiefgehen kann. + +- [ ] **1.** Repo klonen, Branch `test`, **eigenes Verzeichnis** neben der Produktion +- [ ] **2.** `.env.test` von Timo dort ablegen und die vier Kernwerte prüfen +- [ ] **3.** Stack bauen und starten (`-p qrmaster-test`) +- [ ] **4.** Schema aus Prod dumpen und einspielen - **kein** `prisma migrate` +- [ ] **5.** Testaccount per SQL anlegen (Registrierungsformular funktioniert nicht) +- [ ] **6.** Caddy-Block ergänzen und neu laden +- [ ] **7.** Abnahme: DB-Trennung, keine Migrationen, robots.txt, Browser-Test + +### Alle Befehle am Stück + +```bash +# 1 - Checkout (NICHT im Produktionsverzeichnis) +git clone -b test https://git.bizmatch.net/tknuth/QR-master.git qrmaster-test +cd qrmaster-test +git branch --show-current # muss "test" zeigen + +# 2 - .env.test hier ablegen, dann pruefen +grep -E "NEXT_PUBLIC_WWW_URL|NEXT_PUBLIC_APP_URL|AUTH_COOKIE_NAME|POSTGRES_DB" .env.test +# Erwartet: beide URLs auf testmodul, AUTH_COOKIE_NAME=userId_test, +# POSTGRES_DB=qrmaster_test. Steht dort app./www. -> STOPP, siehe Schritt 2. + +# 3 - Stack starten +docker compose -p qrmaster-test --env-file .env.test \ + -f docker-compose.yml -f docker-compose.test.yml up -d --build +docker ps --filter "name=qrmaster-test" --format "table {{.Names}}\t{{.Status}}" + +# 4 - Schema (nur Struktur, keine Kundendaten) +docker exec qrmaster-db pg_dump -U postgres --schema-only qrmaster > schema.sql +docker exec -i qrmaster-test-db psql -U postgres -d qrmaster_test < schema.sql +docker exec qrmaster-test-db psql -U postgres -d qrmaster_test -c "\dt" | head -20 + +# 5 - Testaccount: erst Hash erzeugen, dann in den INSERT einsetzen +docker exec qrmaster-test-web node -e "console.log(require('bcryptjs').hashSync('DEIN_TESTPASSWORT',12))" +docker exec -i qrmaster-test-db psql -U postgres -d qrmaster_test -c "INSERT INTO \"User\" (id,email,name,password,\"emailVerified\",\"updatedAt\") VALUES ('testuser1','test@qrmaster.net','Test','HIER_DER_HASH',now(),now());" + +# 6 - Caddy: Block ergaenzen (siehe Schritt 6), dann +caddy reload --config /etc/caddy/Caddyfile + +# 7 - Abnahme +docker exec qrmaster-test-db psql -U postgres -d qrmaster_test -c 'SELECT count(*) FROM "User";' +docker exec qrmaster-db psql -U postgres -d qrmaster -c 'SELECT count(*) FROM "User";' +docker logs qrmaster-test-web 2>&1 | head -20 +curl -s https://testmodul.qrmaster.net/robots.txt +``` + +Die beiden `count(*)` müssen sich unterscheiden, in den Logs darf kein "Applying Prisma +migrations" stehen, und `robots.txt` muss `Disallow: /` liefern. + ## Voraussetzungen - SSH-Zugang zum Server, auf dem QR Master läuft