diff --git a/felsokning/deploy/README.md b/felsokning/deploy/README.md index 33fbd68..eea0647 100644 --- a/felsokning/deploy/README.md +++ b/felsokning/deploy/README.md @@ -15,7 +15,8 @@ bash felsokning/deploy/paketera.sh | `00-plan.zip` | Driftsättningsplanen + SHA256-summor för övriga paket | Läses först, verifierar leveransen | | `01-aws-bas.zip` | `infra/aws` + `infra/postgres-init.sql` | Terraform: VPC, EKS, Aurora, S3, ECR, KMS, hemligheter, domän, larm | | `02-tjanster.zip` | `services/` — plattform, ai-orkester, gemensam | Bygg och publicera backendbilderna till ECR, initiera schemat | -| `03-webb.zip` | `app/` (utan `node_modules`/`dist`) + `supabase/` | Bygg och publicera webbilden | +| `03-webb-kalla.zip` | `app/` (utan `node_modules`/`dist`/`src/assets`) + `supabase/` | Bygg och publicera webbilden | +| `03-webb-resurser-*.zip` | `app/src/assets` i delar om högst `DELBUDGET` byte (standard 4 MB) | Hör till 03 — packas upp i samma träd före bygget | | `04-arbetslast.zip` | `infra/terraform` | Terraform: arbetslasten i klustret, ingress, DNS | | `05-verifiering.zip` | `docs/` | Slutkontroll av den driftsatta miljön, driftdokumentation | diff --git a/felsokning/deploy/anvisningar/00-plan.md b/felsokning/deploy/anvisningar/00-plan.md index 8c29509..97f037b 100644 --- a/felsokning/deploy/anvisningar/00-plan.md +++ b/felsokning/deploy/anvisningar/00-plan.md @@ -10,7 +10,7 @@ extern byggtjänst, inget externt register. | --- | --- | --- | | `01-aws-bas.zip` | AWS-basen: VPC, EKS, Aurora, S3, ECR, KMS, Secrets Manager, Route 53, larm | Agent med AWS-behörighet | | `02-tjanster.zip` | Backendbilderna (plattform, ai-orkester) byggs, testas och publiceras; databasschemat initieras | Agent med Docker + ECR-push | -| `03-webb.zip` | Webbilden byggs med miljöns byggargument och publiceras | Agent med Docker + ECR-push | +| `03-webb-kalla.zip` + `03-webb-resurser-*.zip` | Webbilden byggs med miljöns byggargument och publiceras — delarna är ETT steg, alla packas upp först | Agent med Docker + ECR-push | | `04-arbetslast.zip` | Arbetslasten i klustret: tjänster, ingress, DNS, nätverkspolicyer | Agent med kluster-behörighet | | `05-verifiering.zip` | Slutkontroll av den driftsatta miljön | Valfri agent, läsbehörighet räcker | diff --git a/felsokning/deploy/anvisningar/03-webb.md b/felsokning/deploy/anvisningar/03-webb.md index beb63f7..8b5ad3f 100644 --- a/felsokning/deploy/anvisningar/03-webb.md +++ b/felsokning/deploy/anvisningar/03-webb.md @@ -7,6 +7,26 @@ publiceras webbilden — en statisk SPA bakom oprivilegierad nginx. Kräver att paket 01 är klart. Oberoende av paket 02 — får köras parallellt, men med SAMMA bildtagg. +## Delarna — packa upp allihop innan något byggs + +Paket 03 levereras i flera zip-filer: `03-webb-kalla` (källkoden) och +`03-webb-resurser-1…N` (bildresurserna i `app/src/assets`, delade i +storleksbegränsade delar för överföringens skull). Delningen är +teknisk, inte logisk — de är ETT steg: + +1. Packa upp samtliga `03-webb-*`-filer i samma arbetsträd som övriga + paket. Vilka delar som finns framgår av `SHA256SUMS.txt` i paket 00. +2. Kontrollera fullständigheten mot delarnas fillistor: + ```sh + cat paket/03-webb-*/INNEHALL.txt | grep '^app/src/assets/' | sort | while read -r f; do + [ -f "$f" ] || echo "SAKNAS: $f" + done # ingen utskrift = komplett + ``` + +Saknas en resursfil faller för övrigt bygget på importfel — men +kontrollera FÖRE, så att felmeddelandet är "del saknas", inte en +kryptisk byggutskrift. + ## Steg 1 — testa före bygge ```sh diff --git a/felsokning/deploy/paketera.sh b/felsokning/deploy/paketera.sh index 453fa33..f9668d5 100755 --- a/felsokning/deploy/paketera.sh +++ b/felsokning/deploy/paketera.sh @@ -17,13 +17,20 @@ VERSION="$(node -e 'import(process.argv[1]).then(m => console.log(m.PLATTFORMSVE SHA="$(git -C "$ROT" rev-parse --short HEAD 2>/dev/null || echo "utan-git")" STAMPEL="$(date -u +%Y-%m-%dT%H:%M:%SZ)" +# Största tillåtna innehåll per resursdel. Mottagarsidans kanal sätter +# gränsen — 10 MB gick inte att ta emot; standarden ligger med marginal +# under det och kan sänkas per körning: DELBUDGET=2000000 bash paketera.sh … +DELBUDGET="${DELBUDGET:-4000000}" + # paketera ... — vägarna är relativa ROT. +# EXKLUDERA (miljövariabel) läggs till tar-exkluderingarna för anropet. paketera() { local namn="$1" anvisning="$2"; shift 2 local arbets; arbets="$(mktemp -d)" # node_modules återskapas ur package-lock; dist byggs i webbilden. - tar -C "$ROT" -cf - --exclude=node_modules --exclude=app/dist "$@" | + tar -C "$ROT" -cf - --exclude=node_modules --exclude=app/dist \ + ${EXKLUDERA:+--exclude="$EXKLUDERA"} "$@" | tar -C "$arbets" -xf - # Metafilerna ligger under paket// så att alla paket kan packas @@ -45,7 +52,25 @@ rm -f "$UT"/0[0-5]-*.zip paketera 01-aws-bas 01-aws-bas.md infra/aws infra/postgres-init.sql paketera 02-tjanster 02-tjanster.md services -paketera 03-webb 03-webb.md app supabase + +# Webbklienten delas: koden för sig och bildresurserna i delar om högst +# DELBUDGET byte — helheten var större än mottagarkanalen tålde. Delarna +# fylls i namnordning, så samma träd ger samma delar. +EXKLUDERA="app/src/assets" paketera 03-webb-kalla 03-webb.md app supabase +del=0 ack=0 resurser=() +slut_resursdel() { + ((${#resurser[@]})) || return 0 + del=$((del + 1)) + paketera "03-webb-resurser-$del" 03-webb.md "${resurser[@]}" + ack=0 resurser=() +} +while IFS= read -r fil; do + storlek=$(stat -c%s "$ROT/$fil") + ((ack > 0 && ack + storlek > DELBUDGET)) && slut_resursdel + resurser+=("$fil"); ack=$((ack + storlek)) +done < <(cd "$ROT" && find app/src/assets -type f | sort) +slut_resursdel + paketera 04-arbetslast 04-arbetslast.md infra/terraform paketera 05-verifiering 05-verifiering.md docs