fix(expo): LAN-telefontest via scripts/expo-lan.sh

- Uppdatera .env API_BASE_URL till http://192.168.8.123:4000.
- Lägg till gitignorerad .env.telefontest med REACT_NATIVE_PACKAGER_HOSTNAME
  och API_BASE_URL.
- Lägg till scripts/expo-lan.sh som dödar gammal expo-tmux, sourcar
  .env.telefontest och startar Expo med rätt variabler.
- Uppdatera first-deploy.sh staging-sammanfattning: skriv ut API_BASE_URL
  och påminn om ./scripts/expo-lan.sh.
- Lägg till docs/RUNBOOK-STAGING-EXPO.md.
This commit is contained in:
Sven (AAMOS AI)
2026-08-07 18:02:34 +07:00
parent fadd7692b2
commit dcaae9f0ba
3 changed files with 128 additions and 0 deletions
+60
View File
@@ -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 12.
@@ -271,13 +271,17 @@ fi
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
# Klart # 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 "==============================================="
say "ALLA GRINDAR GRÖNA $MODE är uppe." say "ALLA GRINDAR GRÖNA $MODE är uppe."
say "API: http://127.0.0.1:$API_PORT (Swagger: /docs)" 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" say "Loggar: $ROOT/logs/api.log, $ROOT/logs/worker.log"
if [ "$MODE" = "staging" ]; then if [ "$MODE" = "staging" ]; then
say "Admin: bygg finns i apps/admin/dist servera med valfri statisk server." say "Admin: bygg finns i apps/admin/dist servera med valfri statisk server."
say "OBS: staging kör AAMOS_MODE=$AAMOS_MODE_VAL." say "OBS: staging kör AAMOS_MODE=$AAMOS_MODE_VAL."
say "NÄSTA (LAN-telefontest): ./scripts/expo-lan.sh (aldrig pnpm start direkt)"
else else
say "NÄSTA: peka reverse proxy (TLS) mot 127.0.0.1:$API_PORT och verifiera utifrån." say "NÄSTA: peka reverse proxy (TLS) mot 127.0.0.1:$API_PORT och verifiera utifrån."
fi fi
+64
View File
@@ -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=<datorns LAN-IP>"
echo " API_BASE_URL=http://<datorns LAN-IP>: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