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.

Diese Anleitung installiert die vollständige öffentliche Community Edition unter AGPL-3.0-or-later. Dafür sind weder ein gehostetes Abonnement noch Zugangsdaten für eine private Registry oder das kommerzielle EE-Plugin nötig. Gehostete Abrechnung, Quoten und SaaS-Betrieb gehören zur getrennten kommerziellen Bereitstellung.

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.