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

/srv/salt/caddy/init.sls
#
# 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

  1. Der Webserver überlebt keinen Reboot

  2. 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.

  3. 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

  1. Systemd verwenden.

  2. Setcap verwenden, um unprivilegierten Benutzern die Verwendung von Ports < 1024 zu erlauben.

  3. Eine lokale Konfiguration speichern.

Entfernen Sie die Zeilen 48–58 und fügen Sie folgende Erweiterung hinzu.

/srv/salt/caddy/init.sls
# 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:

  1. Laden Sie das Caddy-Service-File herunter. curl -O https://raw.githubusercontent.com/caddyserver/dist/master/init/caddy.service

  2. Ä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.

  3. Stoppen Sie die laufenden Caddy Prozesse auf allen Minions. Ein Salt-Modul kann die Aufgabe ausführen: salt '*' ps.pkill caddy.

Last updated