Saltstack
  • Willkommen
  • Einführung
  • Testumgebung
    • Salt-Master öffentlicher FQDN
  • Salt installieren
    • Minions und Master "verheiraten"
  • Salt Module
    • Beispiel Benutzer anlegen
    • Dateien hin und her kopieren
  • Salt States
    • Yaml verstehen
    • Editoren anpassen
    • Beispiel Benutzer verwalten
    • Abhängigkeiten
    • Dateien editieren
    • Shell Kommandos
    • Beispiel Caddy Webserver
  • Linter
  • Minions adressieren
    • Grains
    • Hostgruppen - Node Groups
  • Jinja
    • Beispiel Caddy PHP
  • top.sls
  • Output
  • Pillars
    • Hosts Pillars
    • GPG
    • Vault
    • Datenbanken
    • Beispiel Benutzerverwaltung
  • Salt-Mine
  • Eigene Module erstellen
  • Orchestrierung
  • Returner & Job-Cache
  • Salt SSH
  • Salt API
  • Salt Cloud
    • Hinweise und Fallen
    • KVM und Libvirt
    • Scaleway
    • Digitalocean
    • Hetzner Cloud
    • eigene Deploymentscripte
    • Dynamische Portforwarding
    • Keys automatisch aufräumen
    • Start Aktionen
  • GIT
    • Alternative CD
  • Salt Reactor
  • Salt für Windows
    • Software ohne Repository installieren
    • PowerShell
    • Chocolatey Paktemanager
    • Lokales Logon Skript
    • Software Repository
  • Beispiele
    • Restic Backup
    • Apache Web-Proxy
    • Wartungstunnel
    • Unattended Upgrades
  • Salt & Etcd
  • Salt ACS
Powered by GitBook
On this page
  • Vorbereitung auf dem Salt-Master
  • Webserver ausrollen
  • Probleme & Verbesserungen
  1. Salt States

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.

PreviousShell KommandosNextLinter

Last updated 5 months ago

Caddy Server verwalten