Obelica Docs
Applicazioni

Alessandro Zucchini

Scheda operativa per alessandro-zucchini

Alessandro Zucchini

Stato operativo

VPS pronta al cutover. Il cliente controlla il dominio e deve cambiare nameserver a DigitalOcean.

Runtime e deploy

VoceValore
Repo/opt/obelica/repos/alessandro-zucchini
Containeralessandro-zucchini
StackNext.js
Porta interna3000
Env file/opt/obelica/secrets/apps/alessandro-zucchini.env
Deploynext-docker

DNS e TLS

Dominio produzione: alessandrozucchini.com, www.alessandrozucchini.com.

Nameserver attuali prima del cutover: ns4.wixdns.net, ns5.wixdns.net.

Target: ns1.digitalocean.com, ns2.digitalocean.com, ns3.digitalocean.com.

La zona DigitalOcean e' pronta con A apex/www verso 129.212.141.97, MX Google, SPF e Google site verification. Router Traefik pronto con TLS main alessandrozucchini.com e SAN www.alessandrozucchini.com.

Database, storage e backup

Database su DigitalOcean Managed PostgreSQL. Storage media: Cloudinary secondo stato corrente, con layer Spaces disponibile nel codice. Backup Obelica copre repository/config; database e Cloudinary seguono le rispettive policy esterne.

Aggiornamento 2026-07-03: aggiunto il blocco SPACES_* completo all'env file (mancava del tutto; backup in alessandro-zucchini.env.bak-20260703), container staging ricreato e verificato con HTTP 200 su alessandro-zucchini.vps.obelica.com.

Verifiche

Pre-cutover:

alessandro-zucchini.vps.obelica.com  200 -> /it
alessandrozucchini.com               200 -> /it con --resolve
www.alessandrozucchini.com           200 -> /it con --resolve

Runbook: Pre-cutover Alessandro Zucchini.

Router Traefik — modifica 2026-07-03

I domini production sono stati RIMOSSI dal router Traefik: il DNS punta ancora all'hosting precedente e la challenge ACME falliva in loop ogni ora (rischio rate-limit Let's Encrypt, 22 errori/24h sui log Traefik). Il compose contiene un commento AL CUTOVER accanto alla rule con le righe esatte da riattivare (Host production + label tls.domains). Al cutover: riattivare le label, docker compose up -d, verificare emissione certificato.

Punti aperti

  • attendere cambio nameserver da parte del cliente;
  • dopo cambio verificare NS, A, certificato Let's Encrypt e HTTPS pubblico.
  • al cutover: riattivare i domini production nel router Traefik (commento AL CUTOVER nel compose).

Upload media / Storage Spaces (risolto 2026-07-19)

Gli upload dell'area admin (media library) usano DigitalOcean Spaces via presigned URL (src/lib/storage/servercreateUploadTarget, client src/lib/storage/client-upload). Il client chiede un target di upload alla route, riceve un uploadUrl presigned (ACL public-read) e fa il PUT direttamente su Spaces.

Bug risolto: in produzione SPACES_ACCESS_KEY_ID e SPACES_SECRET_ACCESS_KEY erano vuote ("") — le chiavi c'erano ma i valori no. Con STORAGE_PROVIDER=spaces, createUploadTarget chiamava requireEnv('SPACES_ACCESS_KEY_ID') e lanciava Missing required environment variable: SPACES_ACCESS_KEY_ID, quindi la generazione del target falliva e l'upload non partiva. Nessuno l'aveva ancora notato (nessun errore nei log: feature non usata di recente).

Fix (env-only, nessun rebuild): popolate le due credenziali riusando quelle del bucket condiviso obelica-assets-prod (già in uso da wash-dog), backup dell'env salvato accanto al file, container ricreato (docker compose up -d --force-recreate --no-build).

Verifica: route upload-target raggiungibile (401 senza auth = modulo storage ok, nessun problema di bundling del presigner); flusso presigned reale testato con le credenziali → PUT 200 + GET pubblica 200 image/png sul prefisso dell'app.

Nota: stesso identico problema che aveva sonja-trekking (vedi sua scheda). Tutte le app condividono il bucket obelica-assets-prod, namespacato con SPACES_APP_PREFIX.

On this page