From 07bdd72e3eed721f318bb5beef8675735c09fc68 Mon Sep 17 00:00:00 2001 From: Andrea Manzi Date: Fri, 23 Oct 2026 20:17:17 +0200 Subject: [PATCH] make deploy: l'ultimo commit su 50037.manzolo.it, immagine costruita e provata sul PC Il deploy prende HEAD (git archive, mai la cartella di lavoro), fa girare i test su quella copia, costruisce l'immagine qui, la prova su una porta di passaggio (pagina, motore, voci, musichetta) e solo se risponde la spedisce con docker save | docker load al container leggenda-regolo di home-server, sulla rete nginx-net. Host in deploy.local.mk, fuori da git. In STATO: online e consenso dei vecchietti confermato da Andrea. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01UdeKd62opy9PKgpQXtVctF --- .gitignore | 1 + Makefile | 35 ++++++++++++++++++++++++++++++++++- docker-compose.homeserver.yml | 13 +++++++++++++ docs/STATO.md | 7 +++++-- 4 files changed, 53 insertions(+), 3 deletions(-) create mode 100644 docker-compose.homeserver.yml diff --git a/.gitignore b/.gitignore index 1d0ee0e..aae70f6 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,4 @@ node_modules/ assets/generated/ .venv/ .env +deploy.local.mk diff --git a/Makefile b/Makefile index ceff14f..debe7c4 100644 --- a/Makefile +++ b/Makefile @@ -24,7 +24,7 @@ CROP ?= COLORS ?= 64 .PHONY: help serve open test browser verify voci voci-elenco sfondi sfondi-genera sfondi-confronto background character \ - build up down restart logs ps shell image-size clean distclean + build up down restart logs ps shell image-size deploy deploy-logs clean distclean ## ------------------------------------------------------------ sviluppo @@ -107,6 +107,39 @@ shell: ## Shell dentro il container image-size: ## Dimensione dell'immagine @docker image ls $(IMAGE):$(TAG) --format '{{.Repository}}:{{.Tag}} {{.Size}}' +## ------------------------------------------------------------ deploy su un server proprio + +# Host e indirizzo stanno in deploy.local.mk, fuori da git, per esempio: +# DEPLOY_HOST = root@mio-server +# DEPLOY_URL = https://gioco.esempio +-include deploy.local.mk +DEPLOY_DIR ?= /root/leggenda-regolo +DEPLOY_TMP := $(shell mktemp -d -u /tmp/regolo-deploy.XXXXXX) + +# Si pubblica l'ultimo commit (git archive HEAD), mai la cartella di lavoro: un'altra sessione può avere modifiche a +# metà. Test su quella copia, immagine costruita e provata qui, poi spedita già pronta (docker save | docker load): +# sul server non si compila niente. +SMOKE_PORT ?= 18737 +deploy: ## Pubblica l'ultimo commit: test, immagine costruita e provata qui, spedita al server e riavviata + @test -n "$(DEPLOY_HOST)" || { echo "manca DEPLOY_HOST: scrivilo in deploy.local.mk"; exit 2; } + mkdir -p $(DEPLOY_TMP) && git archive HEAD | tar -x -C $(DEPLOY_TMP) + cd $(DEPLOY_TMP) && $(NODE) --test tests/*.test.mjs + docker build -q -t $(IMAGE):latest -t $(IMAGE):$$(git rev-parse --short HEAD) $(DEPLOY_TMP) + @docker rm -f $(IMAGE)-prova >/dev/null 2>&1 || true + docker run -d --rm --name $(IMAGE)-prova -p 127.0.0.1:$(SMOKE_PORT):80 $(IMAGE):latest >/dev/null + @ok=1; sleep 1; for u in / /src/main.js /assets/voices/index.json /assets/audio/cartello.mp3; do \ + c=$$(curl -s -o /dev/null -w '%{http_code}' http://127.0.0.1:$(SMOKE_PORT)$$u); echo " prova $$u → $$c"; [ "$$c" = 200 ] || ok=0; done; \ + docker rm -f $(IMAGE)-prova >/dev/null; [ $$ok = 1 ] || { echo "l'immagine non risponde come deve: non la spedisco"; exit 1; } + ssh $(DEPLOY_HOST) 'mkdir -p $(DEPLOY_DIR)' + scp -q $(DEPLOY_TMP)/docker-compose.homeserver.yml $(DEPLOY_HOST):$(DEPLOY_DIR)/docker-compose.yml + docker save $(IMAGE):latest | gzip | ssh $(DEPLOY_HOST) 'gunzip | docker load -q && cd $(DEPLOY_DIR) && docker compose up -d && docker image prune -f >/dev/null' + rm -rf $(DEPLOY_TMP) + @echo "→ $(DEPLOY_URL) ($$(git log -1 --format='%h %s'))" + +deploy-logs: ## Log del container sul server di deploy + @test -n "$(DEPLOY_HOST)" || { echo "manca DEPLOY_HOST: scrivilo in deploy.local.mk"; exit 2; } + ssh $(DEPLOY_HOST) 'cd $(DEPLOY_DIR) && docker compose logs -f --tail 50' + ## ------------------------------------------------------------ pulizia clean: ## Rimuove file temporanei diff --git a/docker-compose.homeserver.yml b/docker-compose.homeserver.yml new file mode 100644 index 0000000..a7fff47 --- /dev/null +++ b/docker-compose.homeserver.yml @@ -0,0 +1,13 @@ +# Deploy dietro un reverse proxy (make deploy): l'immagine arriva già costruita dal PC (docker load), niente porte esposte, il container sta sulla rete esterna nginx-net, +# dove l'NPM interno di home-server lo pubblica col suo nome (50037.manzolo.it → leggenda-regolo:80). +services: + leggenda-regolo: + image: leggenda-regolo:latest + container_name: leggenda-regolo + restart: unless-stopped + networks: + - nginx-net + +networks: + nginx-net: + external: true diff --git a/docs/STATO.md b/docs/STATO.md index 5999e60..2059c06 100644 --- a/docs/STATO.md +++ b/docs/STATO.md @@ -4,7 +4,10 @@ Ultimo aggiornamento: 23 ottobre 2026. Da leggere insieme a `PROGETTO.md` all'in ## Dove siamo arrivati -**Si gioca** in Docker su http://localhost:8080 (`make up`; Manzolo Rush è stato fermato per liberare la porta). +**Si gioca** in Docker su http://localhost:8080 (`make up`; Manzolo Rush è stato fermato per liberare la porta) e, +**online dal 2026-10-23**, su https://50037.manzolo.it (50037 è il CAP di San Piero), finché non va su GitHub Pages. +Si aggiorna con `make deploy`: pubblica l'ultimo commit, immagine costruita e provata sul PC e spedita al container +`leggenda-regolo` di home-server (NPM centrale → NPM interno di home-server → container). - **Motore** (`src/engine/`): camminata con percorsi su aree concave, profondità, sette verbi + clic intelligente, clic destro / pressione lunga = guarda, inventario con "usa… con" e "dai… a", dialoghi a scelte (anche una @@ -73,7 +76,7 @@ I prompt fissi (stile, scene, foglio sprite) sono in `prompts/STILE.md`, escluso ### Prossimi passi - Vecchietta e vecchietto sono in gioco sulla panchina della Piazza (`assets/characters/`, da - `assets/raw/vecchiett?-sheet.png`): manca il consenso delle persone ritratte prima di pubblicare, e i loro nomi. + `assets/raw/vecchiett?-sheet.png`): consenso delle persone ritratte confermato da Andrea il 2026-10-23; mancano i loro nomi. - Andrea rifatto dalla sua foto del 2007 (`assets/raw/andrea-sheet-prova-2.png`; il vecchio foglio resta in `andrea-sheet.png`). - Strada del campeggio (poi Bosco ai Frati) e strada della scuola: per ora battute, scene da fare con le foto di Andrea.