Passa al contenuto principale
Pagina non in elenco
Questa pagina non è in elenco. I motori di ricerca non lo indicheranno e solo gli utenti con collegamento diretto possono accedervi.

Self-hosting

Questa guida copre la distribuzione in produzione di Gäld sul proprio server. Per lo sviluppo locale, consulta Per iniziare.

Requisiti del server

ComponenteVersione minima
PHP8.2
PostgreSQL15
Redis7
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

VariabileDescrizioneEsempio
APP_ENVAmbienteproduction
APP_URLURL pubblicohttps://app.example.com
DB_HOSTHost PostgreSQL127.0.0.1
DB_DATABASENome del databasegaeld
DB_USERNAMEUtente DBgaeld
DB_PASSWORDPassword DB
REDIS_HOSTHost Redis127.0.0.1
CACHE_DRIVERBackend della cacheredis
QUEUE_CONNECTIONBackend della codaredis
MAIL_MAILERDriver di postasmtp o mailgun
MAIL_FROM_ADDRESSIndirizzo mittentenoreply@example.com
FEATURE_BANK_SYNCAttiva importazione bancariatrue
FEATURE_AUTOMATIONAttiva regole automatichetrue
PLUGINS_ENABLEDAttiva i plugintrue

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:

  1. Database PostgreSQL: pg_dump gaeld > gaeld_$(date +%F).sql
  2. Directory di archiviazione: storage/app/ (contiene PDF generati e file caricati)
  3. File .env: conservalo in modo sicuro fuori dalla root web

Si raccomanda un cron giornaliero con replica fuori sede per gli ambienti di produzione.