Self-hosting
Questa guida copre la distribuzione in produzione di Gäld sul proprio server. Per lo sviluppo locale, consulta Per iniziare.
Questa procedura installa la Community Edition pubblica completa con licenza AGPL-3.0-or-later. Non richiede un abbonamento ospitato, credenziali per un registry privato o il plugin commerciale EE. Fatturazione ospitata, quote e operazioni SaaS appartengono alla distribuzione commerciale separata.
Requisiti del server
| Componente | Versione minima |
|---|---|
| PHP | 8.2 |
| PostgreSQL | 15 |
| Redis | 7 |
| Nginx (o Caddy) | — |
| Node.js (solo build) | 20 |
Un VPS con 2 vCPU, 2 GB di RAM e 20 GB SSD è sufficiente per la maggior parte delle piccole organizzazioni.
Installazione
git clone https://github.com/Scanix/Gaeld.git /var/www/gaeld
cd /var/www/gaeld
composer install --no-dev --optimize-autoloader
npm install && npm run build
cp .env.example .env
php artisan key:generate
Modifica .env con i valori di produzione (vedi Variabili d'ambiente in basso).
php artisan gaeld:install
Configurazione Nginx
server {
listen 80;
server_name app.example.com;
root /var/www/gaeld/public;
index index.php;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.(?!well-known).* {
deny all;
}
}
Aggiungi un certificato SSL (p. es. tramite Certbot) e reindirizza la porta 80 a 443 prima di andare in produzione.
Pool PHP-FPM
Crea o modifica /etc/php/8.2/fpm/pool.d/gaeld.conf:
[gaeld]
user = www-data
group = www-data
listen = /run/php/php8.2-fpm.sock
listen.owner = www-data
listen.group = www-data
pm = dynamic
pm.max_children = 10
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
Riavvia: systemctl restart php8.2-fpm
Worker della coda (systemd)
Gäld utilizza le code Laravel per i lavori in background (importazioni bancarie, notifiche). Avvia un worker persistente:
# /etc/systemd/system/gaeld-worker.service
[Unit]
Description=Gäld Queue Worker
After=network.target
[Service]
User=www-data
WorkingDirectory=/var/www/gaeld
ExecStart=/usr/bin/php artisan queue:work --sleep=3 --tries=3 --max-time=3600
Restart=on-failure
RestartSec=5s
[Install]
WantedBy=multi-user.target
Abilita e avvia:
systemctl enable gaeld-worker
systemctl start gaeld-worker
Attività pianificate (Cron)
Aggiungi al crontab di www-data:
* * * * * /usr/bin/php /var/www/gaeld/artisan schedule:run >> /dev/null 2>&1
Archiviazione e permessi
chown -R www-data:www-data /var/www/gaeld/storage /var/www/gaeld/bootstrap/cache
chmod -R 775 /var/www/gaeld/storage /var/www/gaeld/bootstrap/cache
I file generati (PDF delle fatture, importazioni bancarie) sono archiviati in storage/app/. In un deployment con container, monta questa directory su un volume persistente.
Variabili d'ambiente
| Variabile | Descrizione | Esempio |
|---|---|---|
APP_ENV | Ambiente | production |
APP_URL | URL pubblico | https://app.example.com |
DB_HOST | Host PostgreSQL | 127.0.0.1 |
DB_DATABASE | Nome del database | gaeld |
DB_USERNAME | Utente DB | gaeld |
DB_PASSWORD | Password DB | … |
REDIS_HOST | Host Redis | 127.0.0.1 |
CACHE_DRIVER | Backend della cache | redis |
QUEUE_CONNECTION | Backend della coda | redis |
MAIL_MAILER | Driver di posta | smtp o mailgun |
MAIL_FROM_ADDRESS | Indirizzo mittente | noreply@example.com |
FEATURE_BANK_SYNC | Attiva importazione bancaria | true |
FEATURE_AUTOMATION | Attiva regole automatiche | true |
PLUGINS_ENABLED | Attiva i plugin | true |
Aggiornamento
Dopo aver scaricato una nuova versione:
cd /var/www/gaeld
git pull
composer install --no-dev --optimize-autoloader
npm install && npm run build
php artisan gaeld:update
systemctl restart gaeld-worker
gaeld:update esegue le migrazioni in sospeso, svuota le cache e riavvia le code in modo sicuro.
Backup
Esegui il backup di:
- Database PostgreSQL:
pg_dump gaeld > gaeld_$(date +%F).sql - Directory di archiviazione:
storage/app/(contiene PDF generati e file caricati) - File
.env: conservalo in modo sicuro fuori dalla root web
Si raccomanda un cron giornaliero con replica fuori sede per gli ambienti di produzione.