Nächste: , Vorige: , Nach oben: Dienste   [Inhalt][Index]


11.10.20 Web-Dienste

Das Modul (gnu services web) stellt den Apache-HTTP-Server, den nginx-Webserver und auch einen fastcgi-Wrapperdienst bereit.

Apache-HTTP-Server

Variable: httpd-service-type

Diensttyp für den Apache-HTTP-Server httpd. Der Wert dieses Diensttyps ist ein httpd-configuration-Verbund.

Es folgt ein einfaches Beispiel der Konfiguration.

(service httpd-service-type
         (httpd-configuration
           (config
             (httpd-config-file
               (server-name "www.example.com")
               (document-root "/srv/http/www.example.com")))))

Andere Dienste können den httpd-service-type auch erweitern, um etwas zur Konfiguration hinzuzufügen.

(simple-service 'www.example.com-server httpd-service-type
                (list
                  (httpd-virtualhost
                    "*:80"
                    (list (string-join '("ServerName www.example.com"
                                         "DocumentRoot /srv/http/www.example.com")
                                       "\n")))))

Nun folgt eine Beschreibung der Verbundstypen httpd-configuration, httpd-module, httpd-config-file und httpd-virtualhost.

Datentyp: httpd-configuration

Dieser Datentyp repräsentiert die Konfiguration des httpd-Dienstes.

package (Vorgabe: httpd)

Das zu benutzende httpd-Paket.

pid-file (Vorgabe: "/var/run/httpd")

Die vom Shepherd-Dienst benutzte PID-Datei.

config (Vorgabe: (httpd-config-file))

Die vom httpd-Dienst zu benutzende Konfigurationsdatei. Vorgegeben ist ein httpd-config-file-Verbundsobjekt, aber als Wert kann auch ein anderer G-Ausdruck benutzt werden, der eine Datei erzeugt, zum Beispiel ein plain-file. Es kann auch eine Datei außerhalb des Stores mit einer Zeichenkette angegeben werden.

Datentyp: httpd-module

Dieser Datentyp steht für ein Modul des httpd-Dienstes.

name

Der Name des Moduls.

file

Die Datei, in der das Modul steht. Sie kann relativ zum benutzten httpd-Paket oder als absoluter Pfad einer Datei oder als ein G-Ausdruck für eine Datei im Store angegeben werden, zum Beispiel (file-append mod-wsgi "/modules/mod_wsgi.so").

Variable: %default-httpd-modules

Eine vorgegebene Liste von httpd-module-Objekten.

Datentyp: httpd-config-file

Dieser Datentyp repräsentiert eine Konfigurationsdatei für den httpd-Dienst.

modules (Vorgabe: %default-httpd-modules)

Welche Module geladen werden sollen. Zusätzliche Module können hier eingetragen werden oder durch eine zusätzliche Konfigurationsangabe geladen werden.

Um zum Beispiel Anfragen nach PHP-Dateien zu behandeln, können Sie das Modul mod_proxy_fcgi von Apache zusammen mit php-fpm-service-type benutzen:

(service httpd-service-type
         (httpd-configuration
          (config
           (httpd-config-file
            (modules (cons*
                      (httpd-module
                       (name "proxy_module")
                       (file "modules/mod_proxy.so"))
                      (httpd-module
                       (name "proxy_fcgi_module")
                       (file "modules/mod_proxy_fcgi.so"))
                      %default-httpd-modules))
            (extra-config (list "\
<FilesMatch \\.php$>
    SetHandler \"proxy:unix:/var/run/php-fpm.sock|fcgi://localhost/\"
</FilesMatch>"))))))
(service php-fpm-service-type
         (php-fpm-configuration
          (socket "/var/run/php-fpm.sock")
          (socket-group "httpd")))
server-root (Vorgabe: httpd)

Die ServerRoot in der Konfigurationsdatei, vorgegeben ist das httpd-Paket. Direktiven wie Include und LoadModule werden relativ zur ServerRoot interpretiert.

server-name (Vorgabe: #f)

Der ServerName in der Konfigurationsdatei, mit dem das Anfrageschema (Request Scheme), der Rechnername (Hostname) und Port angegeben wird, mit denen sich der Server identifiziert.

Es muss nicht als Teil der Server-Konfiguration festgelegt werden, sondern kann auch in virtuellen Rechnern (Virtual Hosts) festgelegt werden. Vorgegeben ist #f, wodurch kein ServerName festgelegt wird.

document-root (Vorgabe: "/srv/http")

Das DocumentRoot-Verzeichnis, in dem sich die Dateien befinden, die man vom Server abrufen kann.

listen (Vorgabe: '("80"))

Die Liste der Werte für die Listen-Direktive in der Konfigurationsdatei. Als Wert sollte eine Liste von Zeichenketten angegeben werden, die jeweils die Portnummer, auf der gelauscht wird, und optional auch die zu benutzende IP-Adresse und das Protokoll angeben.

pid-file (Vorgabe: "/var/run/httpd")

Hiermit wird die PID-Datei als PidFile-Direktive angegeben. Der Wert sollte mit der pid-file-Datei in der httpd-configuration übereinstimmen, damit der Shepherd-Dienst richtig konfiguriert ist.

error-log (Vorgabe: "/var/log/httpd/error_log")

Der Ort, an den der Server mit der ErrorLog-Direktive Fehlerprotokolle schreibt.

user (Vorgabe: "httpd")

Der Benutzer, als der der Server durch die User-Direktive Anfragen beantwortet.

group (Vorgabe: "httpd")

Die Gruppe, mit der der Server durch die Group-Direktive Anfragen beantwortet.

extra-config (Vorgabe: (list "TypesConfig etc/httpd/mime.types"))

Eine flache Liste von Zeichenketten und G-Ausdrücken, die am Ende der Konfigurationsdatei hinzugefügt werden.

Alle Werte, mit denen dieser Dienst erweitert wird, werden an die Liste angehängt.

Datentyp: httpd-virtualhost

Dieser Datentyp repräsentiert einen Konfigurationsblock für einen virtuellen Rechner (Virtual Host) des httpd-Dienstes.

Sie sollten zur zusätzlichen Konfiguration extra-config des httpd-Dienstes hinzugefügt werden.

(simple-service 'www.example.com-server httpd-service-type
                (list
                  (httpd-virtualhost
                    "*:80"
                    (list (string-join '("ServerName www.example.com"
                                          "DocumentRoot /srv/http/www.example.com")
                                       "\n")))))
addresses-and-ports

Adressen und Ports für die VirtualHost-Direktive.

contents

Der Inhalt der VirtualHost-Direktive. Er sollte als Liste von Zeichenketten und G-Ausdrücken angegeben werden.

NGINX

Variable: nginx-service-type

Diensttyp für den NGinx-Webserver. Der Wert des Dienstes ist ein <nginx-configuration>-Verbundsobjekt.

Es folgt ein einfaches Beispiel der Konfiguration.

(service nginx-service-type
         (nginx-configuration
           (server-blocks
             (list (nginx-server-configuration
                     (server-name '("www.example.com"))
                     (root "/srv/http/www.example.com"))))))

Außer durch direktes Hinzufügen von Server-Blöcken zur Dienstkonfiguration kann der Dienst auch durch andere Dienste erweitert werden, um Server-Blöcke hinzuzufügen, wie man im folgenden Beispiel sieht:

(simple-service 'my-extra-server nginx-service-type
                (list (nginx-server-configuration
                        (root "/srv/http/extra-website")
                        (try-files (list "$uri" "$uri/index.html")))))

Beim Starten hat nginx seine Konfigurationsdatei noch nicht gelesen und benutzt eine vorgegebene Datei, um Fehlermeldungen zu protokollieren. Wenn er seine Konfigurationsdatei nicht laden kann, landen Fehlermeldungen also dort. Nachdem die Konfigurationsdatei geladen ist, werden Fehlerprotokolle nach Voreinstellung in die Datei geschrieben, die in der Konfiguration angegeben ist. In unserem Fall können Sie Fehlermeldungen beim Starten in /var/run/nginx/logs/error.log finden und nachdem die Konfiguration eingelesen wurde, finden Sie sie in /var/log/nginx/error.log. Letzterer Ort kann mit der Konfigurationsoption log-directory geändert werden.

Datentyp: nginx-configuration

Dieser Datentyp repräsentiert die Konfiguration von NGinx. Ein Teil der Konfiguration kann hierüber und über die anderen zu Ihrer Verfügung stehenden Verbundstypen geschehen, alternativ können Sie eine Konfigurationsdatei mitgeben.

nginx (Vorgabe: nginx)

Das zu benutzende nginx-Paket.

shepherd-requirement (Vorgabe: '())

Eine Liste von Symbolen, die angeben, von welchen anderen Shepherd-Diensten der nginx-Dienst abhängen soll.

Das können Sie dann gebrauchen, wenn Sie wollen, dass nginx erst dann gestartet wird, wenn Web-Server im Hintergrund oder Protokollierungsdienste wie Anonip bereits gestartet wurden.

log-directory (Vorgabe: "/var/log/nginx")

In welches Verzeichnis NGinx Protokolldateien schreiben wird.

log-level (Vorgabe: 'error) (Typ: Symbol)

Die Protokollierungsstufe. Zur Auswahl stehen folgende Werte: 'debug (Fehlersuche), 'info (Informationen), 'notice (Benachrichtigungen), 'warn (Warnungen), 'error (Fehler), 'crit (kritische Fehler), 'alert (Alarme) oder 'emerg (Notfälle).

run-directory (Vorgabe: "/var/run/nginx")

In welchem Verzeichnis NGinx eine PID-Datei anlegen und temporäre Dateien ablegen wird.

server-blocks (Vorgabe: '())

Eine Liste von Server-Blöcken, die in der erzeugten Konfigurationsdatei stehen sollen. Die Elemente davon sollten den Typ <nginx-server-configuration> haben.

Im folgenden Beispiel wäre NGinx so eingerichtet, dass Anfragen an www.example.com mit Dateien aus dem Verzeichnis /srv/http/www.example.com beantwortet werden, ohne HTTPS zu benutzen.

(service nginx-service-type
         (nginx-configuration
           (server-blocks
             (list (nginx-server-configuration
                     (server-name '("www.example.com"))
                     (root "/srv/http/www.example.com"))))))
upstream-blocks (Vorgabe: '())

Eine Liste von Upstream-Blöcken, die in der erzeugten Konfigurationsdatei stehen sollen. Ihre Elemente sollten den Typ <nginx-upstream-configuration> haben.

Upstreams als upstream-blocks zu konfigurieren, kann hilfreich sein, wenn es mit locations in <nginx-server-configuration> verbunden wird. Das folgende Beispiel erzeugt eine Server-Konfiguration mit einer Location-Konfiguration, bei der Anfragen als Proxy entsprechend einer Upstream-Konfiguration weitergeleitet werden, wodurch zwei Server diese beantworten können.

(service
  nginx-service-type
  (nginx-configuration
    (server-blocks
      (list (nginx-server-configuration
              (server-name '("www.example.com"))
              (root "/srv/http/www.example.com")
              (locations
                (list
                  (nginx-location-configuration
                  (uri "/path1")
                  (body '("proxy_pass http://server-proxy;"))))))))
    (upstream-blocks
      (list (nginx-upstream-configuration
              (name "server-proxy")
              (servers (list "server1.example.com"
                             "server2.example.com")))))))
file (Vorgabe: #f)

Wenn eine Konfigurationsdatei als file angegeben wird, dann wird diese benutzt und keine Konfigurationsdatei anhand der angegebenen log-directory, run-directory, server-blocks und upstream-blocks erzeugt. Trotzdem sollten diese Argumente bei einer richtigen Konfiguration mit denen in der Datei file übereinstimmen, damit die Verzeichnisse bei Aktivierung des Dienstes erzeugt werden.

Das kann nützlich sein, wenn Sie schon eine bestehende Konfigurationsdatei haben oder das, was Sie brauchen, nicht mit anderen Teilen eines nginx-configuration-Verbundsobjekts umgesetzt werden kann.

server-names-hash-bucket-size (Vorgabe: #f)

Größe der Behälter (englisch „Buckets“) für die Hashtabelle der Servernamen; vorgegeben ist #f, wodurch die Größe der Cache-Lines des Prozessors verwendet wird.

server-names-hash-bucket-max-size (Vorgabe: #f)

Maximale Behältergröße für die Hashtabelle der Servernamen.

modules (Vorgabe: '())

Die Liste zu ladender dynamisch gebundener Module für nginx. Die dynamischen Module sollten als Liste von Dateinamen ladbarer Module angegeben werden. Zum Beispiel:

(modules
 (list
  (file-append nginx-accept-language-module "\
/etc/nginx/modules/ngx_http_accept_language_module.so")
  (file-append nginx-lua-module "\
/etc/nginx/modules/ngx_http_lua_module.so")))
lua-package-path (Vorgabe: '())

Die Liste zu ladender nginx-Lua-Pakete. Hier sollte eine Liste von Paketnamen ladbarer Lua-Module angegeben werden. Zum Beispiel:

(lua-package-path (list lua-resty-core
                        lua-resty-lrucache
                        lua-resty-signal
                        lua-tablepool
                        lua-resty-shell))
lua-package-cpath (Vorgabe: '())

Die Liste zu ladender nginx-Lua-C-Pakete. Hier sollte eine Liste von Paketnamen ladbarer Lua-C-Module angegeben werden. Zum Beispiel:

(lua-package-cpath (list lua-resty-signal))
global-directives (Vorgabe: '((events . ())))

Assoziative Liste von globalen Direktiven für die oberste Ebene der nginx-Konfiguration. Als Werte können wiederum assoziative Listen angegeben werden.

(global-directives
 `((worker_processes . 16)
   (pcre_jit . on)
   (events . ((worker_connections . 1024)))))
extra-content (Vorgabe: "")

Additional content to be appended to the http block. Can either be a value that can be lowered into a string or a list of such values. In the former case, it is inserted directly. In the latter, it is prefixed with indentation and suffixed with a newline. Nested lists are flattened into one line.

(extra-content "include /etc/nginx/custom-config.conf;")
(extra-content `("include /etc/nginx/custom-config.conf;"
                 ("include " ,%custom-config.conf ";")))
Datentyp: nginx-server-configuration

Der Datentyp, der die Konfiguration eines nginx-Serverblocks repräsentiert. Dieser Typ hat die folgenden Parameter:

listen (Vorgabe: '("80" "443 ssl"))

Jede listen-Direktive legt Adresse und Port für eine IP fest oder gibt einen Unix-Socket an, auf dem der Server Anfragen beantwortet. Es können entweder sowohl Adresse als auch Port oder nur die Adresse oder nur der Port angegeben werden. Als Adresse kann auch ein Rechnername („Hostname“) angegeben werden, zum Beispiel:

'("127.0.0.1:8000" "127.0.0.1" "8000" "*:8000" "localhost:8000")
server-name (Vorgabe: (list 'default))

Eine Liste von Servernamen, die dieser Server repräsentiert. 'default repräsentiert den voreingestellten Server, der für Verbindungen verwendet wird, die zu keinem anderen Server passen.

root (Vorgabe: "/srv/http")

Wurzelverzeichnis des Webauftritts, der über nginx abgerufen werden kann.

locations (Vorgabe: '())

Eine Liste von nginx-location-configuration- oder nginx-named-location-configuration-Verbundsobjekten, die innerhalb des Serverblocks benutzt werden.

index (Vorgabe: (list "index.html"))

Index-Dateien, mit denen Anfragen nach einem Verzeichnis beantwortet werden. Wenn keine davon gefunden wird, antwortet Nginx mit der Liste der Dateien im Verzeichnis.

try-files (Vorgabe: '())

Eine Liste der Dateien, bei denen in der angegebenen Reihenfolge geprüft wird, ob sie existieren. nginx beantwortet die Anfrage mit der ersten Datei, die es findet.

ssl-certificate (Vorgabe: #f)

Wo das Zertifikat für sichere Verbindungen gespeichert ist. Sie sollten es auf #f setzen, wenn Sie kein Zertifikat haben oder kein HTTPS benutzen möchten.

ssl-certificate-key (Vorgabe: #f)

Wo der private Schlüssel für sichere Verbindungen gespeichert ist. Sie sollten ihn auf #f setzen, wenn Sie keinen Schlüssel haben oder kein HTTPS benutzen möchten.

server-tokens? (Vorgabe: #f)

Ob der Server Informationen über seine Konfiguration bei Antworten beilegen soll.

raw-content (Vorgabe: '())

A list of strings or file-like objects to be appended to the server block. Each item is prefixed with indentation and suffixed with a new line. Nested lists are flattened.

Datentyp: nginx-upstream-configuration

Der Datentyp, der die Konfiguration eines nginx-upstream-Blocks repräsentiert. Dieser Typ hat folgende Parameter:

name

Der Name dieser Servergruppe.

servers

Gibt die Adressen der Server in der Gruppe an. Die Adresse kann als IP-Adresse (z.B. ‘127.0.0.1’), Domänenname (z.B. ‘backend1.example.com’) oder als Pfad eines Unix-Sockets mit dem vorangestellten Präfix ‘unix:’ angegeben werden. Wenn Adressen eine IP-Adresse oder einen Domänennamen benutzen, ist der voreingestellte Port 80, aber ein abweichender Port kann auch explizit angegeben werden.

extra-content

Additional content to be appended to the upstream block. Can be a string or file-like object or list of thereof. In case of list, each item is prefixed with indentation and suffixed with a new line. Nested lists are flattened.

(extra-content "include /etc/nginx/custom-config.conf;")
(extra-content `("include /etc/nginx/custom-config.conf;"
                 ("include " ,%custom-config.conf ";")))
Datentyp: nginx-location-configuration

Der Datentyp, der die Konfiguration eines nginx-location-Blocks angibt. Der Typ hat die folgenden Parameter:

uri

Die URI, die auf diesen Block passt.

body

Body of the location block, specified as a list of strings or file-like objects. Each item is prefixed with indentation and suffixed with a new line. Nested lists are flattened.

For example, to pass requests to a upstream server group defined using an nginx-upstream-configuration block, the following directive would be specified in the body ‘(list "proxy_pass http://upstream-name;")’.

Datentyp: nginx-named-location-configuration

Der Datentyp repräsentiert die Konfiguration eines mit Namen versehenen nginx-location-Blocks („Named Location Block“). Ein mit Namen versehener location-Block wird zur Umleitung von Anfragen benutzt und nicht für die normale Anfrageverarbeitung. Dieser Typ hat die folgenden Parameter:

name

Der Name, mit dem dieser location-Block identifiziert wird.

body

Siehe nginx-location-configuration body, weil der Rumpf („Body“) eines mit Namen versehenen location-Blocks wie ein nginx-location-configuration body benutzt werden kann. Eine Einschränkung ist, dass der Rumpf eines mit Namen versehenen location-Blocks keine location-Blöcke enthalten kann.

Varnish Cache

Varnish ist ein schneller zwischenspeichernder Server, der zwischen Web-Anwendungen und deren Endbenutzern sitzt. Er leitet Anfragen von Clients weiter und lagert die URLs, auf die zugegriffen wird, in einen Zwischenspeicher ein, damit bei mehreren Anfragen auf dieselbe Ressource nur eine Anfrage an die Hintergrundanwendung gestellt wird.

Variable: varnish-service-type

Diensttyp für den Varnish-Daemon.

Datentyp: varnish-configuration

Der Datentyp, der die Konfiguration des varnish-Dienstes repräsentiert. Dieser Typ hat die folgenden Parameter:

package (Vorgabe: varnish)

Das Varnish-Paket, was benutzt werden soll.

name (Vorgabe: "default")

Ein Name für diese Varnish-Instanz. Varnish wird ein Verzeichnis in /var/varnish/ mit diesem Namen erzeugen und dort temporäre Dateien speichern. Wenn der Name mit einem Schrägstrich beginnt, wird er als absoluter Verzeichnispfad interpretiert.

Übergeben Sie die Befehlszeilenoption -n an andere Varnish-Programme, um sich mit der Instanz diesen Namens zu verbinden, z.B. varnishncsa -n default.

backend (Vorgabe: "localhost:8080")

Welcher Hintergrunddienst benutzt werden soll. Diese Option wird ignoriert, wenn vcl gesetzt ist.

vcl (Vorgabe: #f)

Das VCL-Programm (in der Varnish Configuration Language), das ausgeführt werden soll. Ist dies auf #f gesetzt, fungiert Varnish als Proxy für den Hintergrunddienst backend mit der voreingestellten Konfiguration. Andernfalls muss dies ein dateiartiges Objekt mit gültiger VCL-Syntax sein.

Um zum Beispiel mit VCL einen Spiegelserver für www.gnu.org einzurichten, können Sie so etwas benutzen:

(define %gnu-mirror
  (plain-file "gnu.vcl"
              "vcl 4.1;
backend gnu { .host = \"www.gnu.org\"; }"))

(operating-system
  ;; …
  (services (cons (service varnish-service-type
                           (varnish-configuration
                            (listen '(":80"))
                            (vcl %gnu-mirror)))
                  %base-services)))

Die Konfiguration einer bereits laufenden Varnish-Instanz kann mit dem Programm varnishadm eingesehen und verändert werden.

Ziehen Sie die Varnish User Guide und das Varnish Book zu Rate, wenn Sie eine umfassende Dokumentation zu Varnish und seiner Konfigurationssprache suchen.

listen (Vorgabe: '("localhost:80"))

Liste der Adressen, auf denen Varnish lauschen soll.

storage (Vorgabe: '("malloc,128m"))

Liste der Speicher-Hintergrunddienste („Storage Backends“), die von der VCL aus benutzt werden können.

parameters (Vorgabe: '())

Liste der Laufzeitparameter von der Form '(("Parameter" . "Wert")).

extra-options (Vorgabe: '())

Zusätzliche Argumente, die an den varnishd-Prozess übergeben werden.

Whoogle Search

Whoogle Search ist eine selbstbetriebene, werbefreie, datenschutzfreundliche Meta-Suchmaschine, die Suchergebnisse von Google sammelt und anzeigt. Sie können sie in ihren Vorgabeeinstellungen konfigurieren, indem Sie diese Zeile in das Feld services Ihrer Betriebssystemdeklaration eintragen:

(service whoogle-service-type)

Dadurch wird Whoogle Search als lokaler Web-Server laufen, auf den Sie durch Öffnen von ‘http://localhost:5000’ in Ihrem Browser zugreifen können. Die Referenz der Konfiguration folgt.

Variable: whoogle-service-type

Der Diensttyp des Whoogle-Search-Dienstes. Sein Wert muss ein whoogle-configuration-Verbundsobjekt sein, siehe unten.

Datentyp: whoogle-configuration

Der Datentyp repräsentiert die Konfiguration für den Whoogle-Search-Dienst.

package (Vorgabe: whoogle-search)

Das zu verwendende Whoogle-Search-Paket.

host (Vorgabe: "127.0.0.1")

Die IP-Adresse des Rechners, auf dem Whoogle laufen wird.

port (Vorgabe: 5000)

Der Port, auf dem Whoogle zugänglich sein wird.

environment-variables (Vorgabe: '())

Eine Liste von Zeichenketten mit den Umgebungsvariablen, mit denen Sie Einstellungen an Whoogle vornehmen. Sehen Sie in den Vorlagen für dessen Umgebungsvariable nach, was zur Verfügung steht.

Patchwork

Patchwork ist ein System, um eingereichten Patches zu folgen. Es kann an eine Mailing-Liste geschickte Patches sammeln und auf einer Web-Oberfläche anzeigen.

Variable: patchwork-service-type

Diensttyp für Patchwork.

Es folgt ein Minimalbeispiel für einen Patchwork-Dienst, der auf der Domain patchwork.example.com läuft.

(service patchwork-service-type
         (patchwork-configuration
          (domain "patchwork.example.com")
          (settings-module
           (patchwork-settings-module
            (allowed-hosts (list domain))
            (default-from-email "patchwork@patchwork.example.com")))
          (getmail-retriever-config
           (getmail-retriever-configuration
            (type "SimpleIMAPSSLRetriever")
            (server "imap.example.com")
            (port 993)
            (username "patchwork")
            (password-command
             (list (file-append coreutils "/bin/cat")
                   "/etc/getmail-patchwork-imap-password"))
            (extra-parameters
            '((mailboxes . ("Patches"))))))))

Der Patchwork-Dienst wird über drei Verbundsobjekte konfiguriert. Die <patchwork-configuration> hat mit der Konfiguration von Patchwork innerhalb des HTTPD-Dienstes zu tun.

Das settings-module-Feld innerhalb des <patchwork-configuration>-Verbundsobjekts kann mit einem <patchwork-settings-module>-Verbundsobjekt ausgefüllt werden, das ein im Guix-Store angelegtes Einstellungsmodul beschreibt.

Für das database-configuration-Feld innerhalb des <patchwork-settings-module> muss eine <patchwork-database-configuration> benutzt werden.

Datentyp: patchwork-configuration

Der Datentyp, der die Konfiguration des Patchwork-Dienstes repräsentiert. Dieser Typ hat die folgenden Parameter:

patchwork (Vorgabe: patchwork)

Welches Patchwork-Paket benutzt werden soll.

domain

Welche Domain für Patchwork benutzt werden soll. Sie findet Verwendung in Patchworks virtuellen Rechner („Virtual Host“) für den HTTPD-Dienst.

settings-module

Das durch Patchwork benutzte Einstellungsmodul. Als eine Django-Anwendung wird Patchwork mit einem Python-Modul konfiguriert, das die Einstellungen speichert. Es kann entweder eine Instanz des <patchwork-settings-module>-Verbundstyps sein, ein beliebiges anderes Verbundsobjekt sein, das die Einstellungen im Store repräsentiert, oder ein Verzeichnis außerhalb des Stores.

static-path (Vorgabe: "/static/")

Der Pfad, auf dem der HTTPD-Dienst die statischen Dateien anbieten soll.

getmail-retriever-config

Das durch Patchwork benutzte getmail-retriever-configuration-Verbundsobjekt. Getmail wird mit diesem Wert konfiguriert. Die Mitteilungen werden mit Patchwork als Empfänger zugestellt.

Datentyp: patchwork-settings-module

Der Datentyp, der das Einstellungsmodul für Patchwork repräsentiert. Manche dieser Einstellungen haben direkt mit Patchwork zu tun, andere beziehen sich auf Django, dem Web-Framework auf dem Patchwork aufsetzt, oder dessen Django-Rest-Framework-Bibliothek. Dieser Typ verfügt über die folgenden Parameter:

database-configuration (Vorgabe: (patchwork-database-configuration))

Die für Patchwork benutzten Datenbankverbindungseinstellungen. Siehe den <patchwork-database-configuration>-Verbundstyp für weitere Informationen.

secret-key-file (Vorgabe: "/etc/patchwork/django-secret-key")

Patchwork benutzt als eine Django-Webanwendung einen geheimen Schlüssel, um Werte kryptographisch zu signieren. Diese Datei sollte einen einzigartigen, unvorhersehbaren Wert enthalten.

Wenn diese Datei nicht existiert, wird sie erzeugt und ein zufälliger Wert wird durch den Shepherd-Dienst für patchwork-setup hineingeschrieben.

Diese Einstellung bezieht sich auf Django.

allowed-hosts

Eine Liste zulässiger Netzwerkschnittstellen (Hosts), auf denen dieser Patchwork-Dienst antwortet. Sie sollte wenigstens die im <patchwork-configuration>-Verbundsobjekt genannte Domain enthalten.

Dies ist eine Django-Einstellung.

default-from-email

Die E-Mail-Adresse, von der aus Patchwork nach Voreinstellung E-Mails verschicken soll.

Dies ist eine Patchwork-Einstellung.

static-url (Vorgabe: #f)

Die URL, über die statische Dokumente angeboten werden. Es kann eine teilweise URL oder eine vollständige URL angegeben werden, aber sie muss auf / enden.

Wenn der Vorgabewert benutzt wird, wird der static-path-Wert aus dem <patchwork-configuration>-Verbundsobjekt benutzt.

Dies ist eine Django-Einstellung.

admins (Vorgabe: '())

Die E-Mail-Adressen, an die Details zu auftretenden Fehlern versendet werden. Jeder Wert sollte eine zweielementige Liste mit dem Namen und der E-Mail-Adresse sein.

Dies ist eine Django-Einstellung.

debug? (Vorgabe: #f)

Ob Patchwork im Fehlersuchmodus („Debug Mode“) ausgeführt werden soll. Wenn dies auf #t steht, werden detaillierte Fehlermeldungen angezeigt.

Dies ist eine Django-Einstellung.

enable-rest-api? (Vorgabe: #t)

Ob Patchworks REST-Programmschnittstelle („REST-API“) aktiviert werden soll.

Dies ist eine Patchwork-Einstellung.

enable-xmlrpc? (Vorgabe: #t)

Ob die XML-Programmschnittstelle für entfernte Prozeduraufrufe („XML-RPC-API“) aktiviert werden soll.

Dies ist eine Patchwork-Einstellung.

force-https-links? (Vorgabe: #t)

Ob auf den Webseiten von Patchwork die Verweise auf andere Seiten HTTPS verwenden sollen.

Dies ist eine Patchwork-Einstellung.

extra-settings (Vorgabe: "")

Zusätzlicher Code, der am Ende des Patchwork-Einstellungsmoduls platziert werden soll.

Datentyp: patchwork-database-configuration

Der Datentyp, der die Datenbankkonfiguration für Patchwork repräsentiert.

engine (Vorgabe: "django.db.backends.postgresql_psycopg2")

Welcher Datenbanktreiber („Engine“) benutzt werden soll.

name (Vorgabe: "patchwork")

Der Name der zu benutzenden Datenbank.

user (Vorgabe: "httpd")

Der Benutzer, als der sich Patchwork mit der Datenbank verbindet.

password (Vorgabe: "")

Das Passwort, das zum Herstellen einer Verbindung zur Datenbank verwendet werden soll.

host (Vorgabe: "")

Der Rechner, mit dem die Datenbankverbindung hergestellt wird.

port (Vorgabe: "")

Der Port, auf dem sich Patchwork mit der Datenbank verbindet.

Mumi

Mumi ist eine Weboberfläche für Debbugs, einem System, um Fehlerberichte zu verwalten. Nach Vorgabe zeigt es die bei GNU angebotene Debbugs-Instanz. Mumi ist ein Web-Server, er lädt aber auch E-Mails von Debbugs herunter und indiziert diese.

Variable: mumi-service-type

Dies ist der Diensttyp für Mumi.

Datentyp: mumi-configuration

Der Datentyp, der die Konfiguration des Mumi-Dienstes repräsentiert. Dieser Typ hat die folgenden Felder:

mumi (Vorgabe: mumi)

Das zu verwendende Mumi-Paket.

mailer? (Vorgabe: #true)

Ob die Komponente zum Mailversand aktiviert sein soll oder nicht.

mumi-configuration-sender

Die E-Mail-Adresse, die bei Kommentaren als Absender angegeben wird.

mumi-configuration-smtp

Eine URI, um die SMTP-Einstellungen für Mailutils einzurichten. Hierfür könnte etwas wie sendmail:///path/to/bin/msmtp angegeben werden, oder eine beliebige andere URI, die von Mailutils unterstützt wird. Siehe SMTP-Postfächer in GNU Mailutils.

FastCGI

FastCGI ist eine Schnittstelle zwischen den Anwendungen im Vordergrund („Front-End“) und Hintergrund („Back-End“) eines Webdienstes. Die Rolle, die es ausübt, ist nicht mehr ganz aktuell, weil neue Webdienste im Allgemeinen einfach über HTTP zwischen Vorder- und Hintergrund kommunizieren sollten. Allerdings gibt es eine Menge von Hintergrunddiensten wie PHP oder den optimierten Git-Repository-Zugang über HTTP, welche FastCGI benutzen, also wird es auch in Guix unterstützt.

Um FastCGI zu benutzen, konfigurieren Sie den Webserver im Vordergrund (z.B. nginx) so, dass er eine Teilmenge der Anfragen an die fastcgi-Hintergrundanwendung weiterleitet, dass auf einem lokalen TCP- oder Unix-Socket lauscht. Ein dazwischenliegendes fcgiwrap-Programm sitzt zwischen dem eigentlichen Hintergrundprozess und dem Webserver. Vom Vordergrund wird angezeigt, welches Hintergrundprogramm ausgeführt werden soll. Diese Informationen werden an den fcgiwrap-Prozess übermittelt.

Variable: fcgiwrap-service-type

Ein Diensttyp für den fcgiwrap-FastCGI-Proxy.

Datentyp: fcgiwrap-configuration

Der Datentyp, der die Konfiguration des fcgiwrap-Dienstes repräsentiert. Dieser Typ hat die folgenden Parameter:

package (Vorgabe: fcgiwrap)

Welches fcgiwrap-Paket benutzt werden soll.

socket (Vorgabe: tcp:127.0.0.1:9000)

Der Socket, auf dem der fcgiwrap-Prozess lauschen soll, als eine Zeichenkette. Gültige Werte für socket wären unter anderem unix:/pfad/zum/unix/socket, tcp:vier.teile.gepunkt.et:Port und tcp6:[IPv6-Adresse]:Port.

user (Vorgabe: fcgiwrap)
group (Vorgabe: fcgiwrap)

Die Benutzerkonten- und Gruppennamen als Zeichenketten, unter denen der fcgiwrap-Prozess ausgeführt werden soll. Der fastcgi-Dienst wird sicherstellen, dass, wenn der Nutzer den Benutzer- oder Gruppennamen fcgiwrap verlangt, der entsprechende Benutzer und/oder Gruppe auch auf dem System existiert.

Es ist möglich, einen FastCGI-gestützten Webdienst so zu konfigurieren, dass er HTTP-Authentisierungsinformationen vom Vordergrundserver an das Hintergrundsystem weiterreicht und es fcgiwrap möglich macht, den Hintergrundprozess als ein entsprechender lokaler Nutzer auszuführen. Um dem Hintergrundsystem diese Funktionalität anzubieten, lassen Sie fcgiwrap als der Administratornutzer root mit selbiger Gruppe ausführen. Beachten Sie, dass die Funktionalität auch auf dem Vordergrundsystem erst eingerichtet werden muss.

PHP-FPM

PHP-FPM (FastCGI Process Manager) ist eine alternative PHP-FastCGI-Implementierung, die über einige zusätzliche Funktionalitäten verfügt, die für Webauftritte jeder Größe nützlich sind.

Zu diesen Funktionalitäten gehören:

… und vieles mehr.

Variable: php-fpm-service-type

Ein Diensttyp für php-fpm.

Datentyp: php-fpm-configuration

Datentyp für die Konfiguration des php-fpm-Dienstes.

php (Vorgabe: php)

Das zu benutzende PHP-Paket.

socket (Vorgabe: (string-append "/var/run/php" (version-major (package-version php)) "-fpm.sock"))

Die Adresse, auf der FastCGI-Anfragen angenommen werden. Gültige Syntax hierfür ist:

"ip.ad.res.se:Port"

Lässt auf einem TCP-Socket auf der angegebenen Adresse auf dem angegebenen Port lauschen.

"port"

Lässt auf einem TCP-Socket auf allen Adressen auf dem angegebenen Port lauschen.

"/pfad/zum/unix/socket"

Lässt auf einem Unix-Socket lauschen.

user (Vorgabe: php-fpm)

Der Benutzer, dem die PHP-Arbeiterprozesse gehören werden.

group (Vorgabe: php-fpm)

Die Gruppe für die Arbeiterprozesse.

socket-user (Vorgabe: php-fpm)

Der Benutzer, der mit dem php-fpm-Socket kommunizieren kann.

socket-group (Vorgabe: nginx)

Die Gruppe, die mit dem php-fpm-Socket kommunizieren kann.

pid-file (Vorgabe: (string-append "/var/run/php" (version-major (package-version php)) "-fpm.pid"))

Der Prozessidentifikator des php-fpm-Prozesses wird in diese Datei geschrieben, sobald der Dienst gestartet wurde.

log-file (Vorgabe: (string-append "/var/log/php" (version-major (package-version php)) "-fpm.log"))

Wohin das Protokoll für den php-fpm-Hauptprozess geschrieben wird.

process-manager (Vorgabe: (php-fpm-dynamic-process-manager-configuration))

Detaillierte Einstellungen für die php-fpm-Prozessverwaltung. Sie müssen eines der Folgenden sein:

<php-fpm-dynamic-process-manager-configuration>
<php-fpm-static-process-manager-configuration>
<php-fpm-on-demand-process-manager-configuration>
display-errors (Vorgabe: #f)

Legt fest, ob PHP-Fehler und Warnungen an Clients geschickt und in ihren Browsern angezeigt werden. Dies ist nützlich für lokale PHP-Entwicklung, aber ein Sicherheitsrisiko für öffentliche Webauftritte, weil Fehlermeldungen Passwörter und Passwortdaten offenlegen können.

timezone (Vorgabe: #f)

Legt den Parameter php_admin_value[date.timezone] fest.

workers-logfile (Vorgabe: (string-append "/var/log/php" (version-major (package-version php)) "-fpm.www.log"))

In dieser Datei werden stderr-Ausgaben von PHP-Arbeiterprozessen protokolliert. Das Feld kann auf #f gesetzt werden, damit nicht protokolliert wird.

file (Vorgabe: #f)

Optional kann hier ein vorrangig benutzter Ersatz für die gesamte Konfigurationsdatei angegeben werden. Sie können dafür die mixed-text-file-Funktion oder einen absoluten Dateipfad verwenden.

php-ini-file (Vorgabe: #f)

Hier können optional die PHP-Voreinstellungen geändert werden. Geben Sie dazu eine beliebige Art von „dateiartigem“ Objekt an (siehe dateiartige Objekte). Sie können dafür die mixed-text-file-Funktion oder einen absoluten Dateipfad verwenden.

Bei der Entwicklung mit dem lokalen Rechner bietet es sich an, die Zeit- und Speicherbegrenzung erzeugter PHP-Prozesse anzuheben. Benutzen Sie dazu folgndes Code-Schnipsel in Ihrer Betriebssystemkonfiguration:

(define %local-php-ini
  (plain-file "php.ini"
              "memory_limit = 2G
max_execution_time = 1800"))

(operating-system
  ;; …
  (services (cons (service php-fpm-service-type
                           (php-fpm-configuration
                            (php-ini-file %local-php-ini)))
                  %base-services)))

Umfassende Dokumentation dazu, welche Direktiven Sie in der php.ini verwenden dürfen, sollten Sie unter den php.ini-Kerndirektiven nachschlagen.

Datentyp: php-fpm-dynamic-process-manager-configuration

Datentyp für die dynamische Prozessverwaltung durch php-fpm. Bei der dynamischen Prozessverwaltung bleiben Arbeiterprozesse nach Abschluss ihrer Aufgabe weiterhin erhalten, solange die konfigurierten Beschränkungen eingehalten werden.

max-children (Vorgabe: 5)

Die maximale Anzahl an Arbeiterprozessen.

start-servers (Vorgabe: 2)

Wie viele Arbeiterprozesse gleich zu Beginn gestartet werden sollen.

min-spare-servers (Vorgabe: 1)

Wie viele untätige Arbeiterprozesse mindestens weiterhin vorgehalten bleiben sollen.

max-spare-servers (Vorgabe: 3)

Wie viele untätige Arbeiterprozesse höchstens weiterhin vorgehalten bleiben sollen.

Datentyp: php-fpm-static-process-manager-configuration

Datentyp für die statische Prozessverwaltung durch php-fpm. Bei der statischen Prozessverwaltung wird eine unveränderliche Anzahl an Arbeiterprozessen erzeugt.

max-children (Vorgabe: 5)

Die maximale Anzahl an Arbeiterprozessen.

Datentyp: php-fpm-on-demand-process-manager-configuration

Datentyp für die Prozessverwaltung nach Bedarf durch php-fpm. Bei der Prozessverwaltung nach Bedarf werden Arbeiterprozesse erst erzeugt, wenn Anfragen vorliegen.

max-children (Vorgabe: 5)

Die maximale Anzahl an Arbeiterprozessen.

process-idle-timeout (Vorgabe: 10)

Die Zeit in Sekunden, nach der ein Prozess ohne Anfragen erzwungen beendet wird.

Prozedur: nginx-php-location [#:nginx-package nginx] [socket (string-append "/var/run/php"  (version-major (package-version

php)) "-fpm.sock")] Eine Hilfsfunktion, mit der in kurzer Zeit PHP zu einer nginx-server-configuration hinzugefügt werden kann.

Eine einfache Art, die Dienste für nginx mit PHP einzurichten, kann so aussehen:

(services (cons* (service dhcp-client-service-type)
                 (service php-fpm-service-type)
                 (service nginx-service-type
                          (nginx-server-configuration
                           (server-name '("example.com"))
                           (root "/srv/http/")
                           (locations
                            (list (nginx-php-location)))
                           (listen '("80"))
                           (ssl-certificate #f)
                           (ssl-certificate-key #f)))
                 %base-services))

Der Cat Avatar Generator („Katzenavatargenerator“) ist ein einfacher Dienst, um die Nutzung von php-fpm in Nginx zu demonstrieren. Mit ihm können Katzenavatarbilder aus einem Startwert („Seed“) heraus erzeugt werden, zum Beispiel aus dem Hash der E-Mail-Adresse eines Benutzers.

Prozedur: cat-avatar-generator-service [#:cache-dir "/var/cache/cat-avatar-generator"]  [#:package

cat-avatar-generator]  [#:configuration (nginx-server-configuration)] Liefert ein nginx-server-configuration-Objekt, das von der in configuration angegebenen Konfiguration erbt. Es erweitert die Nginx-Konfiguration, indem es einen Server-Block hinzufügt, der die in package angegebene Version vom cat-avatar-generator anbietet. Bei der Ausführung wird dem cat-avatar-generator Zugriff auf sein in cache-dir angegebenes Zwischenspeicherverzeichnis gewährt.

Eine einfache Konfiguration des cat-avatar-generator kann so aussehen:

(services (cons* (cat-avatar-generator-service
                  #:configuration
                  (nginx-server-configuration
                    (server-name '("example.com"))))
                 ...
                 %base-services))

Hpcguix-web

Das Programm hpcguix-web ist eine anpassbare Weboberfläche, um Guix-Pakete zu suchen. Am Anfang war es für Nutzer von Hochleistungs-Rechenclustern gedacht („High-Performance Computing“, kurz HPC).

Variable: hpcguix-web-service-type

Der Diensttyp für hpcguix-web.

Datentyp: hpcguix-web-configuration

Datentyp für die Konfiguration des hpcguix-web-Dienstes.

specs (Vorgabe: #f)

Entweder #f oder ein G-Ausdruck (siehe G-Ausdrücke), der die Konfiguration des hpcguix-web-Dienstes als hpcguix-web-configuration-Verbundsobjekt festlegt. Die wichtigsten Felder in diesem Verbundsobjekt sind:

title-prefix (Vorgabe: "hpcguix | ")

Das Präfix der Webseitentitel.

guix-command (Vorgabe: "guix")

Welcher Befehl zum Aufrufen von guix in Beispielen auf den HTML-Seiten dargestellt wird.

package-filter-proc (Vorgabe: (const #t))

Eine Prozedur, die festlegt, wie anzuzeigende Pakete gefiltert werden.

package-page-extension-proc (Vorgabe: (const '()))

Erweiterungspaket für hpcguix-web.

menu (Vorgabe: '())

Zusätzlicher Eintrag auf der Menüseite.

channels (Vorgabe: %default-channels)

Liste der Kanäle, aus denen die Paketliste erstellt wird (siehe Kanäle).

package-list-expiration (Vorgabe: (* 12 3600))

Nach wie viel Zeit in Sekunden die Paketliste aus den neuesten Instanzen der angegebenen Kanäle neu erzeugt wird.

Siehe das Repository von hpcguix-web für ein vollständiges Beispiel.

package (Vorgabe: hpcguix-web)

Das hpcguix-web-Paket, was benutzt werden soll.

address (Vorgabe: "127.0.0.1")

Die IP-Adresse, auf die gelauscht werden soll.

port (Vorgabe: 5000)

Die Portnummer, auf der gelauscht werden soll.

Eine typische Deklaration eines hpcguix-web-Dienstes sieht so aus:

(service hpcguix-web-service-type
         (hpcguix-web-configuration
          (specs
           #~(hpcweb-configuration
              (title-prefix "Guix-HPC - ")
              (menu '(("/about" "ABOUT")))))))

Anmerkung: Der hpcguix-web-Dienst aktualisiert die Liste der Pakete, die er veröffentlicht, periodisch, indem er die Kanäle über einen Git-„Pull“ lädt. Dazu muss er auf X.509-Zertifikate zugreifen, damit Git-Server authentifiziert werden können, wenn mit diesen über HTTPS kommuniziert wird, wofür der Dienst davon ausgeht, dass sich jene Zertifikate in /etc/ssl/certs befinden.

Dass ein Zertifikatspaket, nss-certs, verwendet wird, ist als Teil der %base-packages vorgegeben. Siehe X.509-Zertifikate für weitere Informationen zu X.509-Zertifikaten.

gmnisrv

Das Programm gmnisrv ist ein einfacher Server für das Gemini-Protokoll.

Variable: gmnisrv-service-type

Dies ist der Diensttyp des gmnisrv-Dienstes, dessen Wert ein gmnisrv-configuration-Objekt wie in diesem Beispiel sein sollte:

(service gmnisrv-service-type
         (gmnisrv-configuration
           (config-file (local-file "./my-gmnisrv.ini"))))
Datentyp: gmnisrv-configuration

Datentyp, der die Konfiguration von gmnisrv repräsentiert.

package (Vorgabe: gmnisrv)

Das Paketobjekt des gmnisrv-Servers.

config-file (Vorgabe: %default-gmnisrv-config-file)

Ein dateiartiges Objekt mit der zu nutzenden gmnisrv-Konfigurationsdatei. Die Vorgabekonfiguration lauscht auf Port 1965 und bietet die Dateien in /srv/gemini an. Zertifikate werden in /var/lib/gemini/certs gespeichert. Führen Sie für mehr Informationen man gmnisrv und man gmnisrv.ini aus.

Agate

Das Programm Agate (GitHub-Seite über HTTPS) ist ein einfacher Server für das Gemini-Protokoll, der in Rust geschrieben ist.

Variable: agate-service-type

Dies ist der Diensttyp des agate-Dienstes, dessen Wert ein agate-configuration-Objekt wie in diesem Beispiel sein sollte:

(service agate-service-type
	 (agate-configuration
	   (content "/srv/gemini")
	   (certificates "/srv/gemini-certs")))

Das obige Beispiel steht für die minimalen Abänderungen, um Agate lauffähig zu machen. Den Pfad zum Zertifikat und zum Schlüsselverzeichnis anzugeben, ist auf jeden Fall nötig, denn das Gemini-Protokoll setzt standardmäßig TLS voraus.

If the specified certificates path is writable by Agate, and contains no valid pre-generated key and certificate, Agate will try to generate them on the first start. In this case you should pass at least one hostname using the hostnames option. If the specified directory is read-only, key and certificate should be pre-generated by the user.

To obtain a certificate and a key in DER format, you could, for example, use OpenSSL, running commands similar to the following example:

openssl genpkey -out key.der -outform DER -algorithm RSA \
    -pkeyopt rsa_keygen_bits:4096
openssl req -x509 -key key.der -outform DER -days 3650 -out cert.der \
    -subj "/CN=example.com"

Of course, you’ll have to replace example.com with your own domain name, and then point the Agate configuration towards the path of the directory with the generated key and certificate using the certificates option.

Datentyp: agate-configuration

Der Datentyp, der die Konfiguration von Agate repräsentiert.

package (Vorgabe: agate)

Das Paketobjekt des Agate-Servers.

content (Vorgabe: "/srv/gemini")

Aus welchem Verzeichnis Agate Dateien anbieten soll.

certificates (default: "/srv/gemini-certs")

Root of the certificate directory. Must be filled in with a value from the user.

addresses (default: '("[::]:1965" "0.0.0.0:1965"))

Liste der Adressen, auf denen gelauscht werden soll.

hostnames (default: '())

Virtual hosts for the Gemini server. If multiple values are specified, corresponding directory names should be present in the content directory. Optional.

languages (default: #f)

RFC-4646-Sprachcode(s) für Dokumente des Typs text/gemini. Optional.

only-tls13? (default: #f)

Set to #t to disable support for TLSv1.2.

serve-secret? (Vorgabe: #f)

Setzen Sie dies auf #t, um geheime Dateien (mit einem Punkt beginnende Dateien und Verzeichnisse) anzubieten.

central-configuration? (default: #f)

Set to #t to look for the .meta configuration file in the content root directory and will ignore .meta files in other directories

ed25519? (default: #f)

Set to #t to generate keys using the Ed25519 signature algorithm instead of the default ECDSA.

skip-port-check? (default: #f)

Set to #t to skip URL port check even when a hostname is specified.

log-ip? (Vorgabe: #t)

Ob in die Protokolle auch IP-Adressen geschrieben werden sollen.

user (Vorgabe: "agate")

Besitzer des agate-Prozesses.

group (Vorgabe: "agate")

Gruppe des Besitzers des agate-Prozesses.

log-file (Vorgabe: "/var/log/agate.log")

Die Datei, in die die Protokollierung von Agate ausgegeben werden soll.


Nächste: Zertifikatsdienste, Vorige: LDAP-Dienste, Nach oben: Dienste   [Inhalt][Index]