netgescon-day0/docs/03-scripts-automazione/INSTALLAZIONE-UBUNTU2404-AUTOMATICA.md

195 lines
7.5 KiB
Markdown

# Installazione Ubuntu 24.04 automatica
Questa famiglia di script separa tre problemi diversi:
1. `scripts/install/ubuntu2404-laravel-base.sh`
Prepara una macchina Ubuntu 24.04 nuova per progetti Laravel in generale.
Installa stack di base: PHP, Composer, Node.js, MySQL, Nginx, Redis, Supervisor.
Se non disattivato, installa anche XFCE, XRDP e Visual Studio Code.
2. `scripts/install/laravel-site-bootstrap.sh`
Pubblica un singolo progetto Laravel su una macchina gia pronta.
Usa chiavi univoche per sito, file Nginx, cron e Supervisor.
Di default si rifiuta di sovrascrivere directory, vhost e database gia esistenti.
3. `scripts/install/netgescon-node-bootstrap.sh`
Prende una macchina gia pronta con lo stack Laravel e installa un nodo NetGescon pronto per il login iniziale e per la pagina `admin-filament/supporto/aggiornamento-nodo`.
## Installazione via curl
Se il nodo che espone l'applicazione e raggiungibile, puoi usare direttamente gli endpoint pubblici in `public/installers`.
Indice rapido browser:
- `http://192.168.0.200:8000/installers/`
- `https://staging.netgescon.it/installers/`
Script base macchina:
```bash
curl -fsSL http://192.168.0.200:8000/installers/ubuntu2404-laravel-base.php -o /tmp/ubuntu2404-laravel-base.sh
sudo bash /tmp/ubuntu2404-laravel-base.sh
curl -fsSL https://staging.netgescon.it/installers/ubuntu2404-laravel-base.php -o /tmp/ubuntu2404-laravel-base.sh
sudo bash /tmp/ubuntu2404-laravel-base.sh
```
Versione server-only senza XFCE, VS Code e XRDP:
```bash
curl -fsSL http://192.168.0.200:8000/installers/ubuntu2404-laravel-base.php -o /tmp/ubuntu2404-laravel-base.sh
sudo bash /tmp/ubuntu2404-laravel-base.sh --without-xfce --without-vscode --without-xrdp
```
Bootstrap sito Laravel generico:
```bash
curl -fsSL http://192.168.0.200:8000/installers/laravel-site-bootstrap.php -o /tmp/laravel-site-bootstrap.sh
sudo bash /tmp/laravel-site-bootstrap.sh \
--site-key demo-app \
--project-name "Demo App" \
--repo-url git@your-gitea:studio/demo-app.git \
--branch main \
--app-url http://demo.example.local \
--server-name demo.example.local \
--db-password 'StrongDbPass123!'
```
Bootstrap nodo NetGescon:
```bash
curl -fsSL http://192.168.0.200:8000/installers/netgescon-node-bootstrap.php -o /tmp/netgescon-node-bootstrap.sh
sudo bash /tmp/netgescon-node-bootstrap.sh \
--site-key netgescon-prod \
--repo-url git@your-gitea:studio/netgescon.git \
--branch main \
--app-url http://192.168.0.200 \
--server-name 192.168.0.200 \
--db-password 'StrongDbPass123!' \
--admin-email admin@netgescon.local \
--admin-password 'StrongAdminPass123!'
```
La stessa chiamata su staging puo diventare:
```bash
curl -fsSL https://staging.netgescon.it/installers/netgescon-node-bootstrap.php -o /tmp/netgescon-node-bootstrap.sh
sudo bash /tmp/netgescon-node-bootstrap.sh \
--site-key netgescon-staging \
--repo-url git@your-gitea:studio/netgescon.git \
--branch main \
--app-url https://staging.netgescon.it \
--server-name staging.netgescon.it \
--db-password 'StrongDbPass123!' \
--admin-email admin@netgescon.local \
--admin-password 'StrongAdminPass123!'
```
## 1. Base machine Laravel
Esecuzione consigliata:
```bash
sudo bash scripts/install/ubuntu2404-laravel-base.sh
```
Varianti utili:
```bash
sudo bash scripts/install/ubuntu2404-laravel-base.sh --without-xfce --without-vscode
sudo bash scripts/install/ubuntu2404-laravel-base.sh --projects-dir /srv/laravel-projects
```
Cosa fa:
- aggiorna Ubuntu 24.04
- mostra una schermata iniziale con stato corrente macchina e componenti gia presenti
- chiede prima di partire quali blocchi installare o saltare
- installa PHP 8.3 e moduli Laravel comuni
- installa Composer e Node.js
- installa MySQL, Nginx, Redis e Supervisor
- apre firewall per SSH, HTTP, HTTPS e XRDP se richiesto
- crea una base di lavoro per progetti Laravel in `/srv/laravel-projects`
- opzionalmente installa XFCE, XRDP e VS Code
Se vuoi saltare la schermata interattiva e usare lo script in automazione, puoi aggiungere `--non-interactive` al comando.
## 2. Bootstrap sito Laravel generico
Esempio completo:
```bash
sudo bash scripts/install/laravel-site-bootstrap.sh \
--site-key frontoffice-demo \
--project-name "Frontoffice Demo" \
--repo-url git@your-gitea:studio/frontoffice-demo.git \
--branch main \
--app-url https://frontoffice-demo.example.it \
--server-name frontoffice-demo.example.it \
--db-password 'StrongDbPass123!'
```
Cosa fa:
- clona il repository applicativo in una directory dedicata, di default `/var/www/<site-key>`
- crea un database e un utente MySQL dedicati al sito
- prepara `.env`, chiave applicativa e cache Laravel
- installa dipendenze Composer e, se presenti, builda gli asset frontend
- crea un file Nginx dedicato e separato dagli altri siti pubblicati
- configura cron scheduler e, se richiesto, un worker Supervisor dedicato
- rifiuta per default di sovrascrivere directory applicative, database o vhost gia esistenti
Flag utili per riuso controllato:
- `--allow-existing-app-dir` permette di riusare una worktree git Laravel gia esistente
- `--allow-existing-database` permette di riusare database e utente MySQL gia presenti
- `--replace-nginx-site` permette di sostituire esplicitamente un vhost gia presente
- `--with-queue-worker` abilita un worker Supervisor dedicato al sito
Questo e il pezzo da usare per avere 2 o 3 siti diversi sulla stessa macchina, per esempio frontoffice, demo e produzione, senza collisioni sui file di servizio.
## 3. Bootstrap nodo NetGescon
Esempio completo:
```bash
sudo bash scripts/install/netgescon-node-bootstrap.sh \
--site-key netgescon-prod \
--repo-url git@your-gitea:studio/netgescon.git \
--branch main \
--app-url https://netgescon.example.it \
--server-name netgescon.example.it \
--db-password 'StrongDbPass123!' \
--admin-email admin@netgescon.example.it \
--admin-password 'StrongAdminPass123!'
```
Cosa fa:
- clona il repository applicativo in `/var/www/netgescon`
- clona una seconda copia Git sorgente in `/var/www/netgescon-git-source`
- collega il repository sorgente a `storage/app/support/git-source`
- configura `.env` con `NETGESCON_GIT_SYNC_SOURCE_REPO`
- crea database e utente MySQL
- installa dipendenze Composer e, se presenti, builda gli asset frontend
- esegue migrazioni
- crea un utente iniziale con ruoli `super-admin` e `admin`
- configura Nginx, cron scheduler e Supervisor queue worker
- lascia il nodo pronto per aprire `admin-filament/supporto/aggiornamento-nodo`
Guard-rail aggiunti:
- usa `--site-key` per rendere univoci file Nginx, cron e Supervisor
- non sovrascrive piu automaticamente directory, database o vhost gia esistenti
- per riusare una installazione esistente servono flag espliciti come `--allow-existing-app-dir`, `--allow-existing-database` e `--replace-nginx-site`
## Note operative
- Gli script sono pensati per Ubuntu 24.04.
- Lo script NetGescon presuppone che la macchina abbia gia PHP, Composer, Node, MySQL e Nginx installati.
- Lo script Laravel generico e quello da riusare per altri progetti non NetGescon sulla stessa macchina.
- Se il repository Gitea usa SSH, la macchina deve avere gia la chiave deploy o la chiave utente autorizzata.
- Se vuoi una macchina solo server senza desktop, usa la base machine con `--without-xfce --without-vscode --without-xrdp`.
- Dopo il bootstrap del nodo conviene configurare subito HTTPS e backup automatici.
- Gli endpoint curl leggono direttamente gli script versionati nel repository, quindi dopo pull/deploy espongono sempre la versione aggiornata senza copiare file a mano.