aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArun Isaac2022-06-10 16:55:21 +0530
committerArun Isaac2022-06-10 19:50:33 +0530
commit0041ace0ab0595d6010b724714a2673460ae9775 (patch)
tree9e3d4787753d963c3ea5a45d3f00d727677e23af
parent99acd2e0e0669e47b107d6b6baaedec05cfe8c6d (diff)
downloadgn-machines-0041ace0ab0595d6010b724714a2673460ae9775.tar.gz
Publish channels.scm for laminar.
* genenetwork-development.scm: Import (gnu services web) and (guix channels). (channels-scm-gexp, laminar-reverse-proxy-server-block): New functions. (operating-system)[services]: Bind laminar service to 9089. Add nginx service on 9090 to reverse proxy laminar.
-rw-r--r--genenetwork-development.scm59
1 files changed, 58 insertions, 1 deletions
diff --git a/genenetwork-development.scm b/genenetwork-development.scm
index eae1357..5036c13 100644
--- a/genenetwork-development.scm
+++ b/genenetwork-development.scm
@@ -45,7 +45,9 @@
(gnu services ci)
(gnu services databases)
(gnu services shepherd)
+ (gnu services web)
(guix build-system gnu)
+ (guix channels)
(guix git-download)
((guix licenses) #:prefix license:)
(guix modules)
@@ -692,6 +694,55 @@ menu link to the issue tracker at ISSUE-TRACKER-URI."
(mkdir-p "/var/lib/laminar/custom")
(switch-symlinks "/var/lib/laminar/custom/index.html" #$template))))
+(define (channels-scm-gexp published-channel-names)
+ "Return a G-expression that builds a directory with a channels.scm
+file to be served by the laminar reverse
+proxy. PUBLISHED-CHANNEL-NAMES is a list of names of channels which
+should be included in the channels.scm file."
+ (with-imported-modules '((guix build utils))
+ #~(begin
+ (use-modules (ice-9 pretty-print)
+ (guix build utils))
+
+ (mkdir-p #$output)
+ (call-with-output-file (string-append #$output "/channels.scm")
+ (lambda (port)
+ (pretty-print
+ '#$`(list ,@(filter-map (lambda (channel)
+ (and (memq (channel-name channel)
+ published-channel-names)
+ (channel->code channel)))
+ (profile-channels
+ (or (getenv "GUIX_PROFILE")
+ (string-append %profile-directory "/current-guix")))))
+ port))))))
+
+(define (laminar-reverse-proxy-server-block listen laminar-bind-http published-channel-names)
+ "Return an <nginx-server-configuration> object to reverse proxy
+laminar. The nginx server will listen on LISTEN and reverse proxy to
+laminar listening on LAMINAR-BIND-HTTP. PUBLISHED-CHANNEL-NAMES is a
+list of channel names for which a channels.scm should be published."
+ (nginx-server-configuration
+ (server-name '("localhost"))
+ (listen (list listen))
+ (locations
+ (list (nginx-location-configuration
+ (uri "/")
+ (body (list (string-append "proxy_pass http://" laminar-bind-http ";")
+ ;; We need these to allow Laminar's Server-Sent
+ ;; Events to pass through.
+ "proxy_http_version 1.1;"
+ "proxy_set_header Connection \"\";"
+ "proxy_buffering off;")))
+ ;; Publish the channels.scm used to build this container.
+ (nginx-location-configuration
+ (uri "= /channels.scm")
+ (body (list #~(string-append
+ "root "
+ #$(computed-file "channels.scm"
+ (channels-scm-gexp published-channel-names))
+ ";"))))))))
+
(operating-system
(host-name "genenetwork-development")
(timezone "UTC")
@@ -718,7 +769,7 @@ menu link to the issue tracker at ISSUE-TRACKER-URI."
(service laminar-service-type
(laminar-configuration
(title "GeneNetwork CI")
- (bind-http "localhost:9090")))
+ (bind-http "localhost:9089")))
(simple-service 'install-laminar-template
activation-service-type
(install-laminar-template-gexp
@@ -752,4 +803,10 @@ menu link to the issue tracker at ISSUE-TRACKER-URI."
(passwd:uid (getpw "laminar"))
(passwd:gid (getpw "laminar"))))
(find-files #$%dump-genenetwork-database-export-directory)))))
+ (service nginx-service-type
+ (nginx-configuration
+ (server-blocks
+ (list (laminar-reverse-proxy-server-block
+ "9090" "localhost:9089"
+ (list 'gn-bioinformatics 'guix))))))
%base-services)))