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

66 lines
2.4 KiB
Markdown

# 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`.
## 🌐 Pagina web
Demo live: [blog.194.164.167.80.nip.io](https://blog.194.164.167.80.nip.io) (login Authelia).