2.4 KiB
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 inblog/).
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:
git pullin/opt/astro-blog(codice) e/opt/astro-blog-content(articoli)- copia
blog/*.md→src/content/blog/ 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 (formatDateTimeinsrc/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 privatoastro-blog-content.
🌐 Pagina web
Demo live: blog.194.164.167.80.nip.io (login Authelia).