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

7.5 KiB

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:

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:

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:

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:

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:

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:

sudo bash scripts/install/ubuntu2404-laravel-base.sh

Varianti utili:

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:

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:

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.