2023-09-25 22:31:41 +03:00
|
|
|
(define-module (datarekisteri-service)
|
|
|
|
#:use-module (datarekisteri-package)
|
|
|
|
#:use-module (guix gexp)
|
|
|
|
#:use-module (guix records)
|
|
|
|
#:use-module (gnu packages admin)
|
|
|
|
#:use-module (gnu services)
|
|
|
|
#:use-module (gnu services certbot)
|
|
|
|
#:use-module (gnu services configuration)
|
|
|
|
#:use-module (gnu services databases)
|
|
|
|
#:use-module (gnu services shepherd)
|
|
|
|
#:use-module (gnu services web)
|
|
|
|
#:use-module (gnu system shadow)
|
|
|
|
|
|
|
|
#:export (plain-datarekisteri-frontend-service-type
|
|
|
|
plain-datarekisteri-frontend-configuration
|
|
|
|
|
|
|
|
plain-datarekisteri-backend-service-type
|
|
|
|
plain-datarekisteri-backend-configuration))
|
|
|
|
|
|
|
|
(define-maybe/no-serialization string)
|
|
|
|
|
|
|
|
(define-configuration/no-serialization plain-datarekisteri-frontend-configuration
|
|
|
|
(datarekisteri-frontend
|
|
|
|
(file-like datarekisteri-frontend)
|
|
|
|
"The datarekisteri-frontend package to use.")
|
|
|
|
(backend-url
|
|
|
|
(string)
|
|
|
|
"The URL for the datarekisteri backend server.")
|
|
|
|
(port
|
|
|
|
(integer 3000)
|
|
|
|
"The TCP port to listen on.")
|
|
|
|
(root-url
|
|
|
|
(string)
|
|
|
|
"The root URL for this server."))
|
|
|
|
|
|
|
|
(define (frontend-shepherd-service config)
|
|
|
|
(match-record config <plain-datarekisteri-frontend-configuration>
|
|
|
|
(backend-url port root-url datarekisteri-frontend)
|
|
|
|
(list (shepherd-service
|
|
|
|
(documentation "Run the datarekisteri frontend HTTP server")
|
|
|
|
(requirement '(networking))
|
|
|
|
(provision '(datarekisteri-frontend))
|
|
|
|
(start
|
|
|
|
#~(make-forkexec-constructor
|
|
|
|
(list #$(file-append datarekisteri-frontend "/bin/datarekisteri-frontend")
|
|
|
|
"--server-url" #$backend-url
|
|
|
|
"--port" #$(number->string port)
|
|
|
|
"--approot" #$root-url)
|
|
|
|
#:user "datarekisteri-frontend"
|
|
|
|
#:group "datarekisteri-frontend"
|
|
|
|
#:directory "/var/lib/datarekisteri-frontend"))
|
|
|
|
(stop #~(make-kill-destructor))))))
|
|
|
|
|
|
|
|
(define (frontend-accounts _)
|
|
|
|
(list (user-group
|
|
|
|
(name "datarekisteri-frontend")
|
|
|
|
(system? #t))
|
|
|
|
(user-account
|
|
|
|
(name "datarekisteri-frontend")
|
|
|
|
(system? #t)
|
|
|
|
(group "datarekisteri-frontend")
|
|
|
|
(home-directory "/var/lib/datarekisteri-frontend")
|
|
|
|
(shell (file-append shadow "/bin/nologin")))))
|
|
|
|
|
|
|
|
(define plain-datarekisteri-frontend-service-type
|
|
|
|
(service-type
|
|
|
|
(name 'plain-datarekisteri-frontend)
|
|
|
|
(extensions
|
|
|
|
(list (service-extension shepherd-root-service-type frontend-shepherd-service)
|
|
|
|
(service-extension account-service-type frontend-accounts)))
|
|
|
|
(description "Run the datarekisteri HTTP frontend server")))
|
|
|
|
|
|
|
|
(define (file-like-or-string? x)
|
|
|
|
(or (file-like? x)
|
|
|
|
(string? x)))
|
|
|
|
|
|
|
|
(define-configuration/no-serialization plain-datarekisteri-backend-configuration
|
|
|
|
(datarekisteri-backend
|
|
|
|
(file-like datarekisteri-backend)
|
|
|
|
"The datarekisteri-backend package to use.")
|
|
|
|
(email-address
|
|
|
|
(string)
|
|
|
|
"The email address to send emails from.")
|
|
|
|
(email-sender
|
|
|
|
(maybe-string)
|
|
|
|
"The display name for sending emails.")
|
|
|
|
(port
|
|
|
|
(integer 3100)
|
|
|
|
"The TCP port to listen on.")
|
|
|
|
(sendmail
|
|
|
|
(file-like-or-string)
|
|
|
|
"Path to the sendmail program to send emails with."))
|
|
|
|
|
|
|
|
(define (backend-shepherd-service config)
|
|
|
|
(match-record config <plain-datarekisteri-backend-configuration>
|
|
|
|
(email-address email-sender sendmail port datarekisteri-backend)
|
|
|
|
(list (shepherd-service
|
|
|
|
(documentation "Run the datarekisteri backend HTTP server")
|
|
|
|
(requirement '(networking postgres))
|
|
|
|
(provision '(datarekisteri-backend))
|
|
|
|
(start
|
|
|
|
#~(make-forkexec-constructor
|
|
|
|
(list #$(file-append datarekisteri-backend "/bin/datarekisteri-backend")
|
|
|
|
"--address" #$email-address
|
|
|
|
#$@(if (maybe-value-set? email-sender) (list "--sender-name" email-sender) '())
|
|
|
|
"--port" #$(number->string port)
|
|
|
|
"--sendmail" #$sendmail)
|
|
|
|
#:user "datarekisteri-backend"
|
|
|
|
#:group "datarekisteri-backend"
|
|
|
|
#:directory "/var/lib/datarekisteri-backend"))
|
|
|
|
(stop #~(make-kill-destructor))))))
|
|
|
|
|
|
|
|
(define (backend-accounts _)
|
|
|
|
(list (user-group
|
|
|
|
(name "datarekisteri-backend")
|
|
|
|
(system? #t))
|
|
|
|
(user-account
|
|
|
|
(name "datarekisteri-backend")
|
|
|
|
(system? #t)
|
|
|
|
(group "datarekisteri-backend")
|
|
|
|
(home-directory "/var/lib/datarekisteri-backend")
|
|
|
|
(shell (file-append shadow "/bin/nologin")))))
|
|
|
|
|
|
|
|
(define (backend-postgresql-roles _)
|
|
|
|
(list (postgresql-role
|
|
|
|
(name "datarekisteri-backend")
|
|
|
|
(create-database? #t))))
|
|
|
|
|
2023-09-26 17:46:19 +03:00
|
|
|
(define (backend-profile config)
|
|
|
|
(match-record config <plain-datarekisteri-backend-configuration>
|
|
|
|
(datarekisteri-backend)
|
|
|
|
(list datarekisteri-backend)))
|
|
|
|
|
2023-09-25 22:31:41 +03:00
|
|
|
(define plain-datarekisteri-backend-service-type
|
|
|
|
(service-type
|
|
|
|
(name 'plain-datarekisteri-backend)
|
|
|
|
(extensions
|
|
|
|
(list (service-extension postgresql-role-service-type backend-postgresql-roles)
|
|
|
|
(service-extension account-service-type backend-accounts)
|
2023-09-26 17:46:19 +03:00
|
|
|
(service-extension profile-service-type backend-profile)
|
2023-09-25 22:31:41 +03:00
|
|
|
(service-extension shepherd-root-service-type backend-shepherd-service)))
|
|
|
|
(description "Run the datarekisteri backend HTTP server")))
|
|
|
|
|
|
|
|
; (define datarekisteri-client-service-type
|
|
|
|
; (service-type
|
|
|
|
; (name 'datarekisteri-client)
|
|
|
|
; (extensions
|
|
|
|
; (list (service-extension certbot-service-type client-certbot)
|
|
|
|
; (service-extension nginx-service-type client-nginx)
|
|
|
|
; (service-extension shepherd-root-service-type client-shepherd-service)))
|
|
|
|
; (description "Run the datarekisteri HTTP client server")
|
|
|
|
; (default-value (datarekisteri-client-configuration))))
|
|
|
|
|
|
|
|
; (define datarekisteri-api-service-type
|
|
|
|
; (service-type
|
|
|
|
; (name 'datarekisteri-api)
|
|
|
|
; (extensions
|
|
|
|
; (list (service-extension certbot-service-type api-certbot)
|
|
|
|
; (service-extension nginx-service-type api-nginx)
|
|
|
|
; (service-extension postgresql-role-service-type api-postgresql-roles)
|
|
|
|
; (service-extension shepherd-root-service-type api-shepherd-service)))
|
|
|
|
; (description "Run the datarekisteri HTTP api server")
|
|
|
|
; (default-value (datarekisteri-api-configuration))))
|
|
|
|
|
|
|
|
; (define-configuration datarekisteri-client-configuration
|
|
|
|
; (https?
|
|
|
|
; (boolean #t)
|
|
|
|
; "Whether to configure HTTPS with certbot.")
|
|
|
|
; (nginx?
|
|
|
|
; (boolean #t)
|
|
|
|
; "Whether to configure nginx as a reverse proxy.")
|
|
|
|
; (api-url
|
|
|
|
; (string)
|
|
|
|
; "The URL for the graphql API server.")
|
|
|
|
; (port
|
|
|
|
; (integer 3000)
|
|
|
|
; "The TCP port to listen on.")
|
|
|
|
; (root-url
|
|
|
|
; (string)
|
|
|
|
; ""))
|
|
|
|
|