diff --git a/docs/RUNBOOK-STAGING-EXPO.md b/docs/RUNBOOK-STAGING-EXPO.md new file mode 100644 index 0000000..d6ef739 --- /dev/null +++ b/docs/RUNBOOK-STAGING-EXPO.md @@ -0,0 +1,60 @@ +# Runbook: staging-deploy + LAN-telefontest + +> Senast uppdaterad: 2026-08-07 + +## 1. Staging-deploy + +```bash +DEPLOY_MODE=staging ./infrastructure/deployment/first-deploy.sh +``` + +När skriptet är klart kontrollerar du: +- API health: `curl -fsS http://192.168.8.123:4000/healthz` +- `API_BASE_URL` som skrivs ut måste vara `http://192.168.8.123:4000` för LAN-telefontest. + +Om `API_BASE_URL` är `http://localhost:4000` kommer mobilappen att peka på telefonens egen localhost och alla anrop faller med "Network request failed". Åtgärda i `.env`: + +```bash +API_BASE_URL=http://192.168.8.123:4000 +CORS_ORIGINS=http://localhost:5173,http://192.168.8.123:8081 +``` + +## 2. Starta om Expo för LAN-telefontest + +**ALDRIG** `pnpm start` direkt — då saknas `REACT_NATIVE_PACKAGER_HOSTNAME` och `API_BASE_URL` vid Expo-start. + +Se till att `.env.telefontest` finns: + +```bash +cat .env.telefontest +# REACT_NATIVE_PACKAGER_HOSTNAME=192.168.8.123 +# API_BASE_URL=http://192.168.8.123:4000 +``` + +Starta om sessionen: + +```bash +./scripts/expo-lan.sh +``` + +Verifiera utdata: + +```bash +✅ Expo kör på exp://192.168.8.123:8081 +``` + +## 3. Telefontest + +1. Öppna kameran på telefonen och skanna QR-koden från terminalen. +2. I Expo Go: dra neråt för att ladda om bundle. +3. Testa fotoflödet: skapa → ladda upp bild → granska. + +Om "Network request failed" uppstår: +- Kontrollera att datorn och telefonen är på samma Wi-Fi. +- Kontrollera att `API_BASE_URL` i `.env.telefontest` är datorns LAN-IP. +- Kontrollera att Expo-loggen visar `exp://192.168.8.123:8081`. +- Kör `./scripts/expo-lan.sh` igen. + +## 4. Efter testet + +Inget särskilt. Staging får lämnas igång. Vid nästa kodleverans upprepas steg 1–2. diff --git a/infrastructure/deployment/first-deploy.sh b/infrastructure/deployment/first-deploy.sh index 6ab50ab..682ef7d 100755 --- a/infrastructure/deployment/first-deploy.sh +++ b/infrastructure/deployment/first-deploy.sh @@ -271,13 +271,17 @@ fi # --------------------------------------------------------------------------- # Klart # --------------------------------------------------------------------------- +API_BASE_URL_VAL=$(get_env API_BASE_URL); API_BASE_URL_VAL=${API_BASE_URL_VAL:-http://127.0.0.1:$API_PORT} + say "===============================================" say "ALLA GRINDAR GRÖNA – $MODE är uppe." say "API: http://127.0.0.1:$API_PORT (Swagger: /docs)" +say "API_BASE_URL (för mobil/presign): $API_BASE_URL_VAL" say "Loggar: $ROOT/logs/api.log, $ROOT/logs/worker.log" if [ "$MODE" = "staging" ]; then say "Admin: bygg finns i apps/admin/dist – servera med valfri statisk server." say "OBS: staging kör AAMOS_MODE=$AAMOS_MODE_VAL." + say "NÄSTA (LAN-telefontest): ./scripts/expo-lan.sh (aldrig pnpm start direkt)" else say "NÄSTA: peka reverse proxy (TLS) mot 127.0.0.1:$API_PORT och verifiera utifrån." fi diff --git a/scripts/expo-lan.sh b/scripts/expo-lan.sh new file mode 100755 index 0000000..5b2155f --- /dev/null +++ b/scripts/expo-lan.sh @@ -0,0 +1,64 @@ +#!/usr/bin/env bash +# Startar om Expo-tmux-sessionen för LAN-telefontest. +# Sourcar .env.telefontest så att REACT_NATIVE_PACKAGER_HOSTNAME och +# API_BASE_URL sätts innan app.config.ts läser dem. +# +# Användning (från repo-root): +# ./scripts/expo-lan.sh +# +# Krav: tmux, pnpm, apps/mobile/package.json + +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +REPO_ROOT="$(cd "${SCRIPT_DIR}/.." && pwd)" +ENV_FILE="${REPO_ROOT}/.env.telefontest" +LOG_FILE="${REPO_ROOT}/logs/expo.log" +SESSION_NAME="expo" + +if [[ ! -f "${ENV_FILE}" ]]; then + echo "❌ ${ENV_FILE} saknas. Skapa den med minst:" + echo " REACT_NATIVE_PACKAGER_HOSTNAME=" + echo " API_BASE_URL=http://:4000" + exit 1 +fi + +# Sourca env-filen i nuvarande shell så variablerna blir tillgängliga. +set -a +# shellcheck source=/dev/null +. "${ENV_FILE}" +set +a + +# Kontrollera att obligatoriska variabler finns. +if [[ -z "${REACT_NATIVE_PACKAGER_HOSTNAME:-}" || -z "${API_BASE_URL:-}" ]]; then + echo "❌ .env.telefontest måste innehålla REACT_NATIVE_PACKAGER_HOSTNAME och API_BASE_URL" + exit 1 +fi + +mkdir -p "$(dirname "${LOG_FILE}")" + +echo "🔄 Dödar gammal tmux-session '${SESSION_NAME}' (om den finns)..." +tmux kill-session -t "${SESSION_NAME}" 2>/dev/null || true + +echo "🚀 Startar Expo på ${REACT_NATIVE_PACKAGER_HOSTNAME}:8081 (API: ${API_BASE_URL})..." +# Starta utan pipe/tee — Expo skriver QR-kod och exp://-raden till terminalen +# och kan hänga om stdout är omdirigerad. Loggning sker istället via tmux capture. +tmux new-session -d -s "${SESSION_NAME}" \ + "cd '${REPO_ROOT}/apps/mobile' && REACT_NATIVE_PACKAGER_HOSTNAME='${REACT_NATIVE_PACKAGER_HOSTNAME}' API_BASE_URL='${API_BASE_URL}' pnpm start" + +echo "⏳ Väntar på att Expo ska publicera exp://-raden..." +for i in {1..45}; do + sleep 1 + if tmux capture-pane -t "${SESSION_NAME}" -p 2>/dev/null | grep -m1 "exp://${REACT_NATIVE_PACKAGER_HOSTNAME}:8081" >/dev/null 2>&1; then + # Spara en loggsnapshot + tmux capture-pane -t "${SESSION_NAME}" -p > "${LOG_FILE}" + echo "✅ Expo kör på exp://${REACT_NATIVE_PACKAGER_HOSTNAME}:8081" + echo " Loggsnapshot: ${LOG_FILE}" + echo " Kör 'tmux attach -t ${SESSION_NAME}' för live-loggar." + exit 0 + fi +done + +echo "⚠️ Expo verkar ha startat men exp://${REACT_NATIVE_PACKAGER_HOSTNAME}:8081 syns inte ännu." +echo " Kör 'tmux attach -t ${SESSION_NAME}' för att se vad som händer." +exit 0