astro-blog/README.md
forgejo-admin 5723ffe402
All checks were successful
deploy-blog / deploy (push) Successful in 9s
README: link demo blog
2026-08-10 08:17:15 +00:00

2.4 KiB

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/*.mdsrc/content/blog/
  3. podman build -t astro-blog:latest + systemctl restart container-astro-blog.service

Comandi (fallback manuale, sul server)

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.

🌐 Pagina web

Demo live: blog.194.164.167.80.nip.io (login Authelia).