From 13d8cdd137a5d1fa8eb30dad7899c88c2951c9a9 Mon Sep 17 00:00:00 2001 From: Adriano Dal Pastro Date: Fri, 4 Sep 2026 10:18:00 +0000 Subject: [PATCH] Il sito lascia le piattaforme: separazione fusa in main MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fuso `feat/split-apps` (fermo dal 03/09 e mai portato in main, mentre il container delle piattaforme girava gia' da li'): il sito e le piattaforme erano online in due copie, con database diversi e ruoli divergenti — `nicola` era `admin` di la' e `piattaforme` di qua, e la promozione di ieri valeva solo su una delle due. Adesso `insanitylab.it/campus`, `/piattaforme` e `/login` fanno 404: le aree riservate stanno solo su `piattaforme.tielogic.xyz`. Il pannello `/admin` resta. Nel database del sito restano `admin` ed `editor`; `nicola` e `adriano` sono usciti. Il lavoro di oggi e' passato intatto: edizione `settembre-2026` coi cinque pacchetti, i 73 tag, il countdown al 19/09 e la correzione del sabato. Verificato sull'immagine nuova prima di metterla, chiedendo la pagina a quattro date. Tre cose che lo split del 03/09 aveva lasciato indietro, trovate eseguendo: - **`Dockerfile` del sito copiava ancora `campus-content`**, spostato sotto `apps/platforms`: il build falliva. Nel sito non c'era piu' un solo riferimento a quella cartella - solo la riga del Dockerfile. Rimossa. - **`migra-utenti.mjs --togli-dal-sito` era un no-op silenzioso**: il `continue` sugli utenti gia' presenti a destinazione saltava anche la cancellazione dall'origine. Siccome copiare e ripulire sono due passi separati apposta, l'opzione non funzionava proprio nel caso per cui esiste. Ora chi e' gia' di la' esce di qua lo stesso, e il riepilogo dice quanti ne ha tolti. - **`.env` non e' in git**, quindi il merge non lo ha spostato sotto `apps/sito/`. L'`up` e' fallito dopo che il `down` aveva gia' tolto il container: **9,7 secondi di sito giu'**, misurati. La prova con `docker run` non lo aveva visto perche' non legge `env_file`. Il rimedio - `docker compose config` prima dello swap - e' scritto nel README del sito, che prima non diceva come si fa un deploy. Sito 149 test verdi, piattaforme 202. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01FPKFABRT3y26dFNMquF3CS --- apps/platforms/node_modules | 1 + apps/platforms/scripts/migra-utenti.mjs | 14 +++++++++++--- apps/sito/Dockerfile | 2 -- apps/sito/README.md | 23 +++++++++++++++++++++++ 4 files changed, 35 insertions(+), 5 deletions(-) create mode 120000 apps/platforms/node_modules diff --git a/apps/platforms/node_modules b/apps/platforms/node_modules new file mode 120000 index 0000000..9b5e35b --- /dev/null +++ b/apps/platforms/node_modules @@ -0,0 +1 @@ +/opt/docker/insanitylab-apps/apps/platforms/node_modules \ No newline at end of file diff --git a/apps/platforms/scripts/migra-utenti.mjs b/apps/platforms/scripts/migra-utenti.mjs index 7f774ee..54a2bde 100755 --- a/apps/platforms/scripts/migra-utenti.mjs +++ b/apps/platforms/scripts/migra-utenti.mjs @@ -60,11 +60,19 @@ if (candidati.length === 0) { const ins = dst.prepare('INSERT INTO users (username, password_hash, role) VALUES (?, ?, ?)'); const del = togli ? src.prepare('DELETE FROM users WHERE username = ?') : null; -let copiati = 0, saltati = 0; +let copiati = 0, saltati = 0, tolti = 0; for (const u of candidati) { if (gia.has(u.username)) { - console.log(` = ${u.username.padEnd(16)} ${u.role.padEnd(12)} già presente a destinazione, lasciato com'è`); + // Già a destinazione: non lo si tocca di là (una migrazione che sovrascrive non si può + // rilanciare). Ma `--togli-dal-sito` riguarda l'ORIGINE, e va fatto lo stesso: chi è + // arrivato in un giro precedente non ha meno diritto di uscire dal sito di chi arriva + // adesso. Fino al 04/09/2026 questo `continue` saltava anche la cancellazione, e + // l'opzione diventava un no-op silenzioso appena la copia era già avvenuta — che è il + // caso normale, visto che copiare e ripulire sono due passi separati apposta. + const esce = togli && applica; + console.log(` = ${u.username.padEnd(16)} ${u.role.padEnd(12)} già a destinazione, lasciato com'è${esce ? ' — tolto dal sito' : ''}`); + if (esce) { del.run(u.username); tolti++; } saltati++; continue; } @@ -76,5 +84,5 @@ for (const u of candidati) { } } -console.log(`\n${applica ? `copiati ${copiati}` : `da copiare ${candidati.length - saltati}`}, saltati ${saltati}.`); +console.log(`\n${applica ? `copiati ${copiati}` : `da copiare ${candidati.length - saltati}`}, saltati ${saltati}${togli && applica ? `, tolti dal sito ${tolti + copiati}` : ''}.`); if (!applica) console.log('Niente è stato scritto.'); diff --git a/apps/sito/Dockerfile b/apps/sito/Dockerfile index b77908e..a5963b9 100644 --- a/apps/sito/Dockerfile +++ b/apps/sito/Dockerfile @@ -14,8 +14,6 @@ COPY package.json package-lock.json ./ RUN npm ci --omit=dev && npm cache clean --force COPY --from=build /app/dist ./dist COPY scripts ./scripts -# Contenuti della sezione Campus (generati con `npm run sync-campus` e committati) -COPY campus-content ./campus-content ENV HOST=0.0.0.0 \ PORT=4321 \ diff --git a/apps/sito/README.md b/apps/sito/README.md index 92e8af1..3d1b2e8 100644 --- a/apps/sito/README.md +++ b/apps/sito/README.md @@ -206,3 +206,26 @@ Gli articoli del blog non viaggiano con il codice: per caricarli in produzione, ## Licenza Proprietà di InsanityLab. + +## Deploy (dopo la separazione del 03/09/2026) + +Il progetto compose si chiama **`insanitylab`** (`name:` esplicito nel compose), non piu' +`src` come quando la cartella era `/opt/docker/insanitylab/src`. + +``` +cd /opt/docker/insanitylab/src/apps/sito +docker compose build # il sito resta in piedi: non tocca il container +docker compose up -d # sostituisce il container +``` + +⚠️ **`.env` non e' in git** (e non deve esserlo): resta dov'e' ed e' l'unico file che un +`git merge` non porta con se'. Il 04/09/2026 lo spostamento sotto `apps/sito/` ha lasciato +`.env` alla vecchia radice, l'`up` e' fallito **dopo** che il `down` aveva gia' tolto il +container, e il sito e' rimasto giu' **9,7 secondi**. Prima di ogni swap: + +``` +docker compose config >/dev/null # legge env_file e fallisce SUBITO se manca qualcosa +``` + +⚠️ Un `docker run` sull'immagine **non** e' una prova sufficiente del deploy: non legge +`env_file`, quindi passa anche quando il compose fallirebbe.