;;; genenetwork-machines --- Guix configuration for genenetwork machines ;;; Copyright © 2022 Arun Isaac ;;; ;;; This file is part of genenetwork-machines. ;;; ;;; genenetwork-machines is free software: you can redistribute it ;;; and/or modify it under the terms of the GNU General Public License ;;; as published by the Free Software Foundation, either version 3 of ;;; the License, or (at your option) any later version. ;;; ;;; genenetwork-machines is distributed in the hope that it will be ;;; useful, but WITHOUT ANY WARRANTY; without even the implied ;;; warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ;;; See the GNU General Public License for more details. ;;; ;;; You should have received a copy of the GNU General Public License ;;; along with genenetwork-machines. If not, see ;;; . (use-modules (guix records) (gnu) (gnu services web) (gnu packages admin) (gn services databases) (forge acme) (forge nginx) (forge socket)) (define %virtuoso-port 8981) (define-record-type* sparql-configuration make-sparql-configuration sparql-configuration? (server-name sparql-configuration-server-name (default "sparql.genenetwork.org")) (virtuoso-configuration sparql-configuration-virtuoso-configuration (default (virtuoso-configuration (server-port 8981) (http-server-port 8982) (number-of-buffers 4000000) (dirs-allowed "/var/lib/virtuoso") (maximum-dirty-buffers 3000000) (database-file "/var/lib/virtuoso/public-virtuoso.db") (transaction-file "/var/lib/virtuoso/public-virtuoso.trx"))))) (define (virtuoso-reverse-proxy-server-block config) "Return an to reverse proxy the Virtuoso server." (match-record config (server-name virtuoso-configuration) (list (nginx-server-configuration (server-name (list server-name)) (locations (list (nginx-location-configuration (uri "/") (body (list (string-append "proxy_pass http://localhost:" (number->string (virtuoso-configuration-http-server-port virtuoso-configuration)) ";") "proxy_set_header Host $host;"))))))))) (define sparql-service-type (service-type (name 'public-sparql) (description "Expose a virtuoso service to the public") (extensions (list (service-extension forge-nginx-service-type virtuoso-reverse-proxy-server-block))))) (let ((sparql-config (sparql-configuration))) (operating-system (host-name "sparql") (timezone "UTC") (locale "en_US.utf8") (bootloader (bootloader-configuration (bootloader grub-bootloader) (targets (list "/dev/sdX")))) (file-systems %base-file-systems) (users %base-user-accounts) (sudoers-file (mixed-text-file "sudoers" "@include " %sudoers-specification "\nacme ALL = NOPASSWD: " (file-append shepherd "/bin/herd") " restart nginx\n")) (packages %base-packages) (services (cons* (service forge-nginx-service-type (forge-nginx-configuration (http-listen (forge-ip-socket (ip "0.0.0.0") (port 8990))) (https-listen (forge-ip-socket (ip "0.0.0.0") (port 8991))))) (service acme-service-type (acme-configuration (email "arunisaac@systemreboot.net"))) (service virtuoso-service-type (sparql-configuration-virtuoso-configuration sparql-config)) (service sparql-service-type sparql-config) %base-services))))