# astro-blog Blog statico in **Astro**, containerizzato, ospitato su **Forgejo** e servito via **Traefik** sul VPS my-vps (194.164.167.80). - Repo **pubblico** (questo): solo il **codice** del blog. - Repo **privato**: `forgejo-admin/astro-blog-content` — gli **articoli** (Markdown in `blog/`). ## Accesso al blog | Canale | URL | Autenticazione | |---|---|---| | Web (pubblico) | https://blog.194.164.167.80.nip.io | password Authelia (SSO) | | VPN | http://100.64.0.2:8083 | nessuna (rete privata) | ## Struttura ``` astro-blog/ ├── Dockerfile # build multistage: Node.js → nginx ├── nginx.conf # config nginx del container ├── docker-compose.yml # deploy con label Traefik (+ Authelia) ├── astro.config.mjs ├── src/ │ ├── content/config.ts # schema collezione blog │ ├── content/blog/ # NON versionato qui (arriva dal repo privato in build) │ ├── layouts/ # BaseLayout, PostLayout │ ├── lib/posts.ts # ordinamento post │ ├── consts.ts # titolo, descrizione, timezone, formatDateTime │ ├── pages/ # index, archivio, posts/[...slug], rss.xml.js │ └── styles/global.css └── public/favicon.svg ``` ## Come funziona la build (separazione codice/contenuti) A ogni push su `main` (di QUESTO repo **o** del repo contenuti), il runner Forgejo Actions esegue `/root/.hermes/scripts/deploy-blog.sh` che: 1. `git pull` in `/opt/astro-blog` (codice) e `/opt/astro-blog-content` (articoli) 2. copia `blog/*.md` → `src/content/blog/` 3. `podman build -t astro-blog:latest` + `systemctl restart container-astro-blog.service` ## Comandi (fallback manuale, sul server) ```sh cd /opt/astro-blog && git pull origin main git -C /opt/astro-blog-content pull origin main rm -f src/content/blog/*.md && cp /opt/astro-blog-content/blog/*.md src/content/blog/ podman build -t astro-blog:latest . systemctl restart container-astro-blog.service ``` ## Note - Tutti gli orari nel sito sono in `Europe/Rome`, al secondo (`formatDateTime` in `src/consts.ts`). - L'immagine è stateless: ogni articolo richiede una nuova build (automatica). - Scrivere articoli: vedi `GUIDA-REDATTORE-BLOG.md` (pubblica) e il README del repo privato `astro-blog-content`.