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:
@@ -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.
|
||||||
@@ -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
|
||||||
|
|||||||
Executable
+64
@@ -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
|
||||||
Reference in New Issue
Block a user