>From 13748b6bfffef19080f4fa3bde2a6ae7d5c8d067 Mon Sep 17 00:00:00 2001
From: Julien Lepiller
Date: Wed, 26 Oct 2016 21:33:34 +0200
Subject: [PATCH] services: Make nginx-service-type extensible
gnu/services/web.scm (nginx-service): Removed.
gnu/services/web.scm (nginx-service-sytsem): Make extensible.
gnu/services/web.scm (default-nginx-vhost-service-type): New variable.
---
gnu/services/web.scm | 87 ++++++++++++++++++++++++++++++++--------------------
1 file changed, 53 insertions(+), 34 deletions(-)
diff --git a/gnu/services/web.scm b/gnu/services/web.scm
index 59e1e54..0f06c99 100644
--- a/gnu/services/web.scm
+++ b/gnu/services/web.scm
@@ -28,12 +28,13 @@
#:use-module (guix records)
#:use-module (guix gexp)
#:use-module (ice-9 match)
+ #:use-module (srfi srfi-1)
#:export (nginx-configuration
nginx-configuration?
nginx-vhost-configuration
nginx-vhost-configuration?
- nginx-service
- nginx-service-type))
+ nginx-service-type
+ default-nginx-vhost-service-type))
;;; Commentary:
;;;
@@ -64,10 +65,14 @@
(define-record-type*
nginx-configuration make-nginx-configuration
nginx-configuration?
- (nginx nginx-configuration-nginx) ;
- (log-directory nginx-configuration-log-directory) ;string
- (run-directory nginx-configuration-run-directory) ;string
- (file nginx-configuration-file)) ;string | file-like
+ (nginx nginx-configuration-nginx ;
+ (default nginx))
+ (log-directory nginx-configuration-log-directory ;string
+ (default "/var/log/nginx"))
+ (run-directory nginx-configuration-run-directory ;string
+ (default "/var/run/nginx"))
+ (vhosts nginx-configuration-vhosts ;list
+ (default (list (nginx-vhost-configuration (https-port #f))))))
(define (config-domain-strings names)
"Return a string denoting the nginx config representation of NAMES, a list
@@ -102,11 +107,15 @@ of index files."
" server_name " (config-domain-strings
(nginx-vhost-configuration-server-name vhost))
";\n"
- (if (nginx-vhost-configuration-ssl-certificate vhost)
+ (if (and
+ (nginx-vhost-configuration-ssl-certificate vhost)
+ (nginx-vhost-configuration-https-port vhost))
(string-append " ssl_certificate "
(nginx-vhost-configuration-ssl-certificate vhost) ";\n")
"")
- (if (nginx-vhost-configuration-ssl-certificate-key vhost)
+ (if (and
+ (nginx-vhost-configuration-ssl-certificate-key vhost)
+ (nginx-vhost-configuration-https-port vhost))
(string-append " ssl_certificate_key "
(nginx-vhost-configuration-ssl-certificate-key vhost) ";\n")
"")
@@ -116,7 +125,7 @@ of index files."
"on" "off") ";\n"
" }\n"))
-(define (default-nginx-config log-directory run-directory vhost-list)
+(define (nginx-config-file log-directory run-directory vhost-list)
(plain-file "nginx.conf"
(string-append
"user nginx nginx;\n"
@@ -148,7 +157,7 @@ of index files."
(define nginx-activation
(match-lambda
- (($ nginx log-directory run-directory config-file)
+ (($ nginx log-directory run-directory vhosts)
#~(begin
(use-modules (guix build utils))
@@ -161,20 +170,20 @@ of index files."
(mkdir-p (string-append #$run-directory "/proxy_temp"))
(mkdir-p (string-append #$run-directory "/fastcgi_temp"))
(mkdir-p (string-append #$run-directory "/uwsgi_temp"))
- (mkdir-p (string-append #$run-directory "/scgi_temp"))
- ;; Check configuration file syntax.
- (system* (string-append #$nginx "/sbin/nginx")
- "-c" #$config-file "-t")))))
+ (mkdir-p (string-append #$run-directory "/scgi_temp"))))))
(define nginx-shepherd-service
(match-lambda
- (($ nginx log-directory run-directory config-file)
+ (($ nginx log-directory run-directory vhosts)
(let* ((nginx-binary (file-append nginx "/sbin/nginx"))
(nginx-action
(lambda args
#~(lambda _
(zero?
- (system* #$nginx-binary "-c" #$config-file address@hidden))))))
+ (system* #$nginx-binary "-c" #$(nginx-config-file
+ log-directory
+ run-directory
+ vhosts) address@hidden))))))
;; TODO: Add 'reload' action.
(list (shepherd-service
@@ -192,21 +201,31 @@ of index files."
(service-extension activation-service-type
nginx-activation)
(service-extension account-service-type
- (const %nginx-accounts))))))
-
-(define* (nginx-service #:key (nginx nginx)
- (log-directory "/var/log/nginx")
- (run-directory "/var/run/nginx")
- (vhost-list (list (nginx-vhost-configuration)))
- (config-file
- (default-nginx-config log-directory run-directory vhost-list)))
- "Return a service that runs NGINX, the nginx web server.
-
-The nginx daemon loads its runtime configuration from CONFIG-FILE, stores log
-files in LOG-DIRECTORY, and stores temporary runtime files in RUN-DIRECTORY."
- (service nginx-service-type
- (nginx-configuration
- (nginx nginx)
- (log-directory log-directory)
- (run-directory run-directory)
- (file config-file))))
+ (const %nginx-accounts))))
+ (compose concatenate)
+ (extend (lambda (config additional-vhosts)
+ (match config
+ (($ nginx log-directory
+ run-directory vhosts)
+ (nginx-configuration
+ (nginx nginx)
+ (log-directory log-directory)
+ (run-directory run-directory)
+ (vhosts (append vhosts additional-vhosts)))))))))
+
+(define (default-nginx-vhost-configuration root)
+ (lambda (_)
+ (list (nginx-vhost-configuration (https-port #f)
+ (root root)))))
+
+(define default-nginx-vhost-service-type
+ (let* ((index (plain-file "index.html"
+ ""))
+ (root (computed-file "default-nginx-vhost"
+ #~(begin
+ (mkdir #$output)
+ (symlink #$index (string-append #$output "/index.html"))))))
+ (service-type (name 'default-nginx-vhost)
+ (extensions
+ (list (service-extension nginx-service-type
+ (default-nginx-vhost-configuration root)))))))
--
2.10.1