Dieses Repository installiert einen Snom-Provisioning-Server auf einem Ubuntu-Container. Die Domain zeigt ausschließlich auf den automatisch erzeugten Ordner www; die aus dem privaten Git-Repository geladenen XML-Dateien liegen daneben in private/config und können deshalb niemals als statische Dateien vom Webserver ausgeliefert werden.
Bei den Standardwerten entsteht folgende Trennung:
/srv/snom-config/ # FTPS-/SFTP-Chroot, root-owned
├── www/ # einziger Webroot; PHP-Endpunkte
└── private/config/ # sensible Repo-Daten; nicht öffentlich
/opt/snom-config-server/ # Anwendung und Betriebs-Skripte
/etc/snom-config/ # Deploy Key und Secrets (0600)
Nginx lauscht auf HTTP-Port 8080; TLS und die öffentliche Domain können weiterhin am vorgeschalteten Proxy enden. Dateiübertragung ist per explizitem FTPS auf Port 21 (passive Ports 40000–40100) und SFTP auf Port 22 möglich. Beide verwenden den beim Setup abgefragten Benutzer. Dessen SFTP-Sitzung ist auf den Site-Root beschränkt. Das Verzeichnis private ist nur für root und PHP lesbar.
Auf einem frischen Ubuntu-CT kann die komplette Installation mit diesem einen Befehl gestartet werden:
curl -fsSL https://raw.githubusercontent.com/dataklo/snom-config-server/main/install-ubuntu-ct.sh \
-o /tmp/install-snom-config.sh \
&& sudo bash /tmp/install-snom-config.shDas Bootstrap-Skript installiert zunächst Git und CA-Zertifikate, lädt dieses öffentliche Repository über HTTPS in ein temporäres Verzeichnis und startet anschließend den interaktiven Installer. Es benötigt für das Server-Repository keinen GitHub-Schlüssel. Optional können vor dem Start SERVER_REPO_URL und SERVER_REPO_BRANCH gesetzt werden.
Der Container erzeugt während der Installation selbst einen neuen Ed25519-Schlüssel. Nur der öffentliche Teil wird deutlich im Terminal ausgegeben. Nach dem Einfügen unter GitHub → privates Config-Repository → Settings → Deploy keys → Add deploy key wartet das Setup auf Enter und prüft den Zugriff. Die Option für Schreibzugriff darf nicht aktiviert werden.
Auf einem frischen Ubuntu-CT das Repository übertragen/klonen und ausführen:
cd snom-config-server
sudo bash ops/install.shDer Installer fragt interaktiv ab:
- Installations- und Site-Root-Pfad;
- gemeinsamen FTPS-/SFTP-Benutzer und Passwort;
- SSH-URL und Branch des privaten Config-Repositories;
- Sync-Intervall;
- Nginx-Bind-Adresse und HTTP-Basic-Auth-Zugang;
- Zugangsdaten, die in
http_user/http_passder Telefon-XML eingesetzt werden.
Falls noch nicht vorhanden, erzeugt er einen separaten Ed25519 Deploy Key. Er zeigt den öffentlichen Schlüssel an und wartet, bis dieser im privaten GitHub-Repository als read-only Deploy Key eingetragen wurde. Der private Schlüssel verlässt den Container nicht. Das Config-Repo muss enthalten:
Config/fkey/*.xml
Config/global-settings/*.xml
Config/macs.json
Danach richtet das Skript Nginx, PHP-FPM, OpenSSH/SFTP, vsftpd/FTPS und den systemd-Sync-Timer ein. Es erkennt den installierten PHP-FPM-Socket dynamisch und funktioniert daher ohne fest codierte PHP-Version auf unterstützten Ubuntu-Versionen.
Die Domain bzw. der externe Proxy muss auf
<SITE_ROOT>/wwwzeigen. Niemals den Site-Root selbst als Webroot konfigurieren.
Standard-Endpunkte:
GET /global-settings.php?file=defaultGET /fkey.php?file=defaultGET /snomD385.php?version=10.1.215.13GET /snomD785.php?version=10.1.215.13
Alle Endpunkte sind durch den abgefragten HTTP-Basic-Auth-Zugang geschützt.
# Sync sofort ausführen
sudo systemctl start snom-config-sync.service
# Timer und letzten Lauf prüfen
systemctl status snom-config-sync.timer
journalctl -u snom-config-sync.service
# Konfiguration sperren/entsperren
sudo touch /etc/snom-config/maintenance.on
sudo rm /etc/snom-config/maintenance.onDer Sync prüft zuerst den Remote-Commit, klont nur bei Änderungen in ein temporäres Verzeichnis, validiert die erwartete Struktur und veröffentlicht anschließend atomarm mit restriktiven Rechten. Telefon-Zugangsdaten werden bei jedem Sync in der temporären Kopie eingesetzt; sie müssen daher nicht im Git-Repository stehen und werden nicht beim nächsten Update überschrieben.
Freizugeben sind nur die tatsächlich benötigten Ports:
22/tcpfür SFTP/SSH;21/tcpund40000:40100/tcpfür explizites FTPS;8080/tcpmöglichst ausschließlich für den Reverse Proxy.
Das automatisch vorhandene Snakeoil-Zertifikat ermöglicht die Erstinstallation von FTPS, sollte für den Produktivbetrieb aber in /etc/vsftpd.conf durch ein eigenes vertrauenswürdiges Zertifikat ersetzt werden. Weitere Härtungshinweise stehen in SECURITY.md.