Zum Hauptinhalt springen
Unlisted page
This page is unlisted. Search engines will not index it, and only users having a direct link can access it.

Self-Hosting

Diese Anleitung behandelt die Produktivbereitstellung von Gäld auf Ihrem eigenen Server. Für die lokale Entwicklung siehe Erste Schritte.

Serveranforderungen

KomponenteMindestversion
PHP8.2
PostgreSQL15
Redis7
Nginx (oder Caddy)
Node.js (nur Build)20

Ein einzelner VPS mit 2 vCPU, 2 GB RAM und 20 GB SSD reicht für die meisten kleinen Organisationen aus.

Installation

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

Bearbeiten Sie .env mit Ihren Produktionswerten (siehe Umgebungsvariablen unten).

php artisan gaeld:install

Nginx-Konfiguration

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;
}
}

Fügen Sie ein SSL-Zertifikat hinzu (z. B. über Certbot) und leiten Sie Port 80 auf 443 um, bevor Sie live gehen.

PHP-FPM-Pool

Erstellen oder bearbeiten Sie /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

Neustart: systemctl restart php8.2-fpm

Queue-Worker (systemd)

Gäld verwendet Laravel-Queues für Hintergrundjobs (Bankimporte, Benachrichtigungen). Führen Sie einen dauerhaften Worker aus:

# /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

Aktivieren und starten:

systemctl enable gaeld-worker
systemctl start gaeld-worker

Geplante Aufgaben (Cron)

Fügen Sie zum www-data Crontab hinzu:

* * * * * /usr/bin/php /var/www/gaeld/artisan schedule:run >> /dev/null 2>&1

Dateispeicherung und Berechtigungen

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

Generierte Dateien (Rechnungs-PDFs, Bankimporte) werden in storage/app/ gespeichert. Binden Sie dieses Verzeichnis bei Container-Einsatz in persistenten Speicher ein.

Umgebungsvariablen

VariableBeschreibungBeispiel
APP_ENVUmgebungproduction
APP_URLÖffentliche URLhttps://app.example.com
DB_HOSTPostgreSQL-Host127.0.0.1
DB_DATABASEDatenbanknamegaeld
DB_USERNAMEDB-Benutzergaeld
DB_PASSWORDDB-Passwort
REDIS_HOSTRedis-Host127.0.0.1
CACHE_DRIVERCache-Backendredis
QUEUE_CONNECTIONQueue-Backendredis
MAIL_MAILERMail-Treibersmtp oder mailgun
MAIL_FROM_ADDRESSAbsenderadressenoreply@example.com
FEATURE_BANK_SYNCBankimport aktivierentrue
FEATURE_AUTOMATIONRegelwerk aktivierentrue
PLUGINS_ENABLEDPlugin-System aktivierentrue

Aktualisieren

Nach dem Abrufen einer neuen Version:

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 führt ausstehende Migrationen durch, leert Caches und startet Queues sicher neu.

Backups

Sichern Sie:

  1. PostgreSQL-Datenbank: pg_dump gaeld > gaeld_$(date +%F).sql
  2. Storage-Verzeichnis: storage/app/ (enthält generierte PDFs und Uploads)
  3. .env-Datei: Sicher ausserhalb des Web-Root aufbewahren

Empfehlen Sie einen täglichen Cron-Job und eine Off-Site-Replikation für Produktionsumgebungen.