Beispiel Caddy Webserver
verschiedene State-Module im Zusammenspiel
Vorbereitung auf dem Salt-Master
Legen Sie auf dem Salt-Master einen Ordner /srv/salt/caddy
an und laden Sie Caddy in diesen Ordner herunter.
mkdir /srv/salt/caddy
cd /srv/salt/caddy
curl -LOJ "https://caddyserver.com/api/download?os=linux&arch=amd64"
Webserver ausrollen
#
# Make sure an apropiated unprivileged user exists
#
caddy:
group.present: []
user.present:
- shell: /bin/false
- home: /var/www
- groups:
- caddy
- system: true
- createhome: false
#
# Make sure the software binary exists, copy from the master otherwise
#
/usr/local/bin/caddy:
file.managed:
- source: salt://caddy/caddy_linux_amd64
- mode: "0755"
- user: root
#
# Make sure a directory for the config exists
#
/etc/caddy:
file.directory:
- user: root
- group: root
#
# Make sure a doc-root exists
#
/var/www:
file.directory:
- user: caddy
- group: caddy
#
# Make sure an index file exists
#
/var/www/index.html:
file.managed:
- contents: <h1>Hallo Webserver</h1>
- user: caddy
- group: caddy
#
# Keep the server running
#
run-caddy:
cmd.run:
- name: nohup caddy file-server --listen 0.0.0.0:8080 --root /var/www/ 2>/dev/null &
- ignore_timeout: true
- bg: true
- runas: caddy
- cwd: /tmp
- unless: pgrep caddy
Probleme & Verbesserungen
Probleme
Der Webserver überlebt keinen Reboot
Der Webserver kann nur Ports > 1024 nutzen, weil er nicht als Root läuft. Den Webserver als Root-User starten, wäre ein unnötiges Sicherheitsrisiko.
Es existiert keine Konfiguration auf dem System. Ein Re-Start des Webservers ohne Salt setzt voraus, dass man das Startkommando aus Zeile 53 kennt.
Verbesserungen
Systemd verwenden.
Setcap verwenden, um unprivilegierten Benutzern die Verwendung von Ports < 1024 zu erlauben.
Eine lokale Konfiguration speichern.
Entfernen Sie die Zeilen 48–58 und fügen Sie folgende Erweiterung hinzu.
# snipp....
#
# Maintain a systemd service file. Shipped with caddy
# https://raw.githubusercontent.com/caddyserver/dist/master/init/caddy.service
#
/etc/systemd/system/caddy.service:
file.managed:
- source: salt://caddy/caddy.service
- require:
- file: /usr/local/bin/caddy
#
# Reload systemd if the service file has changed
#
daemon-reload:
cmd.run:
- name: systemctl daemon-reload
- onchanges:
- file: /etc/systemd/system/caddy.service
#
# Maintain a config file
#
/etc/caddy/Caddyfile:
file.managed:
- contents: |
:80 {
root * /var/www/
file_server
}
#
# Keep the server running using systemd
#
caddy-service:
service.running:
- name: caddy
- enable: true
- watch:
- file: /etc/caddy/Caddyfile
✋ Bevor Sie den optimieren State ausrollen:
Laden Sie das Caddy-Service-File herunter.
curl -O https://raw.githubusercontent.com/caddyserver/dist/master/init/caddy.service
Ändern Sie die Pfade zur Caddy-Binary im Service-File
caddy.service
zu/usr/local/bin/caddy
. Verwenden Sie einen Editor, oder sed:sed "s|/usr/bin/caddy|/usr/local/bin/caddy|g" -i caddy.service
.Stoppen Sie die laufenden Caddy Prozesse auf allen Minions. Ein Salt-Modul kann die Aufgabe ausführen:
salt '*' ps.pkill caddy
.

Last updated