Skip to content

Staging-inlog wisselen

Staging (staging.freezedesign.nl) zit achter basic auth van nginx. De gebruikers staan in /opt/webshop/nginx/.htpasswd op de stagingserver. Die is gemount als /etc/nginx/.htpasswd, zie docker-compose.staging.yml. De workflows e2e-staging.yml en staging-perf-gate.yml en de load-tests loggen in met het repository-secret STAGING_BASIC_AUTH_BASE64, de base64 van naam:wachtwoord.

Gebruik dit runbook als het wachtwoord gelekt kan zijn, of als je naam en wachtwoord gewoon wilt vernieuwen. Alleen Ivar voert het uit. Een agent ziet, typt en bewaart het wachtwoord nooit. Hij leest de terminal niet en krijgt alleen de uitkomst van stap 2 en 4.

Doe alles in hetzelfde terminalvenster op je Mac, want stap 2 tot en met 4 gebruiken de waarden uit stap 1. Je hebt de SSH-alias freeze-staging nodig (gebruiker deploy) en gh met beheerrechten op de repo.

1. Nieuwe naam en wachtwoord maken

Zet ze meteen in 1Password.

NAAM="fd$(openssl rand -hex 5)"; WW="$(openssl rand -base64 40 | tr -dc 'A-Za-z0-9' | cut -c1-28)"; echo "Naam: $NAAM  Wachtwoord: $WW"

2. Op de server zetten en de oude naam weghalen

Het wachtwoord gaat via stdin mee, dus niet in de procesregel. Vervang staging door de oude naam als die anders is. Aan het eind toont de opdracht alleen de gebruikersnamen die overblijven.

printf '%s\n' "$WW" | ssh freeze-staging "cd /opt/webshop && htpasswd -i -m nginx/.htpasswd '$NAAM' && htpasswd -D nginx/.htpasswd staging && echo 'Gebruikers nu:' && cut -d: -f1 nginx/.htpasswd"

Krijg je "Permission denied", zet dan sudo voor beide htpasswd-opdrachten. Gebruik -m (apr1), niet -B: bcrypt werkt niet in elke nginx-image. Laat andere gebruikers, zoals een tester, staan.

3. GitHub-secret bijwerken

gh secret set STAGING_BASIC_AUTH_BASE64 -R Voorman/webshop_freeze_design --body "$(printf '%s:%s' "$NAAM" "$WW" | base64)"

4. Controleren

Met de nieuwe naam hoort 200 terug te komen, met de oude 401.

echo "nieuw: $(curl -s -o /dev/null -w '%{http_code}' -u "$NAAM:$WW" https://staging.freezedesign.nl/)  oud: $(curl -s -o /dev/null -w '%{http_code}' -u 'staging:x' https://staging.freezedesign.nl/)"

Geeft de nieuwe naam toch 401, start nginx dan opnieuw en herhaal stap 4:

ssh freeze-staging "cd /opt/webshop && docker compose -f docker-compose.staging.yml restart nginx"

5. Daarna

  • Laat een agent de smoke-run starten. Die moet slagen met het nieuwe secret: gh workflow run e2e-staging.yml --ref staging -f spec=e2e/staging-smoke.spec.ts
  • Gebruikte iemand anders de oude naam om in te loggen, geef die persoon dan de nieuwe gegevens.
  • Sluit het terminalvenster, dan zijn $NAAM en $WW weg.