66 lines
2.4 KiB
Markdown
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).
|