From: Robert Vollmert <rob@vllmrt.net>
To: 38423@debbugs.gnu.org
Cc: Robert Vollmert <rob@vllmrt.net>
Subject: [bug#38423] [PATCH 49/49] gnu: Add postgrest service.
Date: Fri, 29 Nov 2019 12:37:51 +0100 [thread overview]
Message-ID: <20191129113751.82405-49-rob@vllmrt.net> (raw)
In-Reply-To: <20191129113751.82405-1-rob@vllmrt.net>
* gnu/services/databases.scm: Add postgrest service and associated
record type.
---
gnu/services/databases.scm | 101 ++++++++++++++++++++++++++++++++++++-
1 file changed, 100 insertions(+), 1 deletion(-)
diff --git a/gnu/services/databases.scm b/gnu/services/databases.scm
index 6b04ae0a0f..3f938689df 100644
--- a/gnu/services/databases.scm
+++ b/gnu/services/databases.scm
@@ -28,6 +28,7 @@
#:use-module (gnu system shadow)
#:use-module (gnu packages admin)
#:use-module (gnu packages databases)
+ #:use-module (gnu packages haskell-apps)
#:use-module (guix build-system trivial)
#:use-module (guix build union)
#:use-module (guix modules)
@@ -81,7 +82,11 @@
redis-configuration
redis-configuration?
- redis-service-type))
+ redis-service-type
+
+ postgrest-configuration
+ postgrest-configuration?
+ postgrest-service-type))
;;; Commentary:
;;;
@@ -647,3 +652,97 @@ The optional @var{config} argument specifies the configuration for
(service-extension account-service-type
(const %redis-accounts))))
(default-value (redis-configuration))))
+
+\f
+;;;
+;;; PostgREST
+;;;
+
+(define-record-type* <postgrest-configuration>
+ postgrest-configuration make-postgrest-configuration
+ postgrest-configuration?
+ (postgrest postgrest-configuration-postgrest ;<package>
+ (default postgrest))
+ (db-uri postgrest-configuration-db-uri
+ (default "postgres://postgrest@localhost:5432/postgrestdb"))
+ (db-schema postgrest-configuration-db-schema
+ (default "public"))
+ (db-anon-role postgrest-configuration-db-anon-role
+ (default "postgrest-anon"))
+ (jwt-secret postgrest-configuration-jwt-secret
+ (default #f))
+ (server-host postgrest-configuration-server-host
+ (default "127.0.0.1"))
+ (server-port postgrest-configuration-server-port
+ (default 3000))
+ (config-file postgrest-configuration-config-file
+ (default #f)))
+
+(define (default-postgrest.conf db-uri db-schema db-anon-role jwt-secret server-host server-port)
+ (mixed-text-file "postgrest.conf"
+ "server-host = \"" server-host "\"\n"
+ "server-port = " (number->string server-port) "\n"
+ "db-uri = \"" db-uri "\"\n"
+ "db-schema = \"" db-schema "\"\n"
+ "db-anon-role = \"" db-anon-role "\"\n"
+ (if jwt-secret
+ (string-append "jwt-secret = \"" jwt-secret "\"\n")
+ "")))
+
+(define %postgrest-accounts
+ (list (user-group (name "postgrest") (system? #t))
+ (user-account
+ (name "postgrest")
+ (group "postgrest")
+ (system? #t)
+ (comment "PostgREST server user")
+ (home-directory "/var/empty")
+ (shell (file-append shadow "/sbin/nologin")))))
+
+(define* (logger-wrapper name exec . args)
+ "Return a derivation that builds a script to start a process with
+standard output and error redirected to syslog via logger."
+ (define exp
+ #~(begin
+ (use-modules (ice-9 popen))
+ (let* ((pid (number->string (getpid)))
+ (logger #$(file-append inetutils "/bin/logger"))
+ (args (list "-t" #$name (string-append "--id=" pid)))
+ (pipe (apply open-pipe* OPEN_WRITE logger args)))
+ (dup pipe 1)
+ (dup pipe 2)
+ (execl #$exec #$exec #$@args))))
+ (program-file (string-append name "-logger") exp))
+
+(define postgrest-shepherd-service
+ (match-lambda
+ (($ <postgrest-configuration> postgrest db-uri db-schema db-anon-role
+ jwt-secret server-port server-host config-file)
+ (let* ((config-file
+ (or config-file
+ (default-postgrest.conf db-uri db-schema db-anon-role
+ jwt-secret server-port server-host)))
+ (postgrest-logger
+ (logger-wrapper "postgrest"
+ (file-append postgrest "/bin/postgrest")
+ config-file)))
+
+ (list (shepherd-service
+ (provision '(postgrest))
+ (documentation "Run the PostgREST daemon.")
+ (requirement '(user-processes postgres))
+ (start #~(make-forkexec-constructor
+ '(#$postgrest-logger)
+ #:user "postgrest"
+ #:group "postgrest"))
+ (stop #~(make-kill-destructor))))))))
+
+(define postgrest-service-type
+ (service-type
+ (name 'postgrest)
+ (extensions
+ (list (service-extension shepherd-root-service-type
+ postgrest-shepherd-service)
+ (service-extension account-service-type
+ (const %postgrest-accounts))))
+ (default-value (postgrest-configuration))))
--
2.21.0 (Apple Git-122.2)
prev parent reply other threads:[~2019-11-29 11:40 UTC|newest]
Thread overview: 50+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-11-29 11:35 [bug#38423] add postgrest Robert Vollmert
2019-11-29 11:37 ` [bug#38423] [PATCH 01/49] gnu: Add ghc-text-printer Robert Vollmert
2019-11-29 11:37 ` [bug#38423] [PATCH 02/49] gnu: Add ghc-text-latin1 Robert Vollmert
2019-11-29 11:37 ` [bug#38423] [PATCH 03/49] gnu: Add ghc-text-builder Robert Vollmert
2019-11-29 11:37 ` [bug#38423] [PATCH 04/49] gnu: Add ghc-text-short Robert Vollmert
2019-11-29 11:37 ` [bug#38423] [PATCH 05/49] gnu: Add ghc-data-checked Robert Vollmert
2019-11-29 11:37 ` [bug#38423] [PATCH 06/49] gnu: Add ghc-deferred-folds Robert Vollmert
2019-11-29 11:37 ` [bug#38423] [PATCH 07/49] gnu: Add ghc-websockets Robert Vollmert
2019-11-29 11:37 ` [bug#38423] [PATCH 08/49] gnu: Add ghc-wai-websockets Robert Vollmert
2019-11-29 11:37 ` [bug#38423] [PATCH 09/49] gnu: Add ghc-wai-cors Robert Vollmert
2019-11-29 11:37 ` [bug#38423] [PATCH 10/49] gnu: Add ghc-wai-middleware-static Robert Vollmert
2019-11-29 11:37 ` [bug#38423] [PATCH 11/49] gnu: Add ghc-wai-app-static Robert Vollmert
2019-11-29 11:37 ` [bug#38423] [PATCH 12/49] gnu: Add ghc-expiring-cache-map Robert Vollmert
2019-11-29 11:37 ` [bug#38423] [PATCH 13/49] gnu: Add ghc-insert-ordered-containers Robert Vollmert
2019-11-29 11:37 ` [bug#38423] [PATCH 14/49] gnu: Add ghc-protolude Robert Vollmert
2019-11-29 11:37 ` [bug#38423] [PATCH 15/49] gnu: Add ghc-mtl-compat Robert Vollmert
2019-11-29 11:37 ` [bug#38423] [PATCH 16/49] gnu: Add ghc-monad-time Robert Vollmert
2019-11-29 11:37 ` [bug#38423] [PATCH 17/49] gnu: Add ghc-bug Robert Vollmert
2019-11-29 11:37 ` [bug#38423] [PATCH 18/49] gnu: Add ghc-only Robert Vollmert
2019-11-29 11:37 ` [bug#38423] [PATCH 19/49] gnu: Add ghc-data-bword Robert Vollmert
2019-11-29 11:37 ` [bug#38423] [PATCH 20/49] gnu: Add ghc-data-dword Robert Vollmert
2019-11-29 11:37 ` [bug#38423] [PATCH 21/49] gnu: Add ghc-data-endian Robert Vollmert
2019-11-29 11:37 ` [bug#38423] [PATCH 22/49] gnu: Add ghc-data-serializer Robert Vollmert
2019-11-29 11:37 ` [bug#38423] [PATCH 23/49] gnu: Add ghc-data-textual Robert Vollmert
2019-11-29 11:37 ` [bug#38423] [PATCH 24/49] gnu: Add ghc-directory Robert Vollmert
2019-11-29 11:37 ` [bug#38423] [PATCH 25/49] gnu: Add ghc-network-ip Robert Vollmert
2019-11-29 11:37 ` [bug#38423] [PATCH 26/49] gnu: Add ghc-http-media Robert Vollmert
2019-11-29 11:37 ` [bug#38423] [PATCH 27/49] gnu: Add ghc-type-hint Robert Vollmert
2019-11-29 11:37 ` [bug#38423] [PATCH 28/49] gnu: Add ghc-concise Robert Vollmert
2019-11-29 11:37 ` [bug#38423] [PATCH 29/49] gnu: Add ghc-lens-aeson Robert Vollmert
2019-11-29 11:37 ` [bug#38423] [PATCH 30/49] gnu: Add ghc-placeholders Robert Vollmert
2019-11-29 11:37 ` [bug#38423] [PATCH 31/49] gnu: Add ghc-binary-parser Robert Vollmert
2019-11-29 11:37 ` [bug#38423] [PATCH 32/49] gnu: Add ghc-bytestring-tree-builder Robert Vollmert
2019-11-29 11:37 ` [bug#38423] [PATCH 33/49] gnu: Add ghc-bytestring-strict-builder Robert Vollmert
2019-11-29 11:37 ` [bug#38423] [PATCH 34/49] gnu: Add ghc-heredoc Robert Vollmert
2019-11-29 11:37 ` [bug#38423] [PATCH 35/49] gnu: Add ghc-interpolatedstring-perl6 Robert Vollmert
2019-11-29 11:37 ` [bug#38423] [PATCH 36/49] gnu: Add ghc-loch-th Robert Vollmert
2019-11-29 11:37 ` [bug#38423] [PATCH 37/49] gnu: Add ghc-ranged-sets Robert Vollmert
2019-11-29 11:37 ` [bug#38423] [PATCH 38/49] gnu: Add ghc-postgresql-binary Robert Vollmert
2019-11-29 11:37 ` [bug#38423] [PATCH 39/49] gnu: Add ghc-postgresql-libpq Robert Vollmert
2019-11-29 11:37 ` [bug#38423] [PATCH 40/49] gnu: Add ghc-hasql Robert Vollmert
2019-11-29 11:37 ` [bug#38423] [PATCH 41/49] gnu: Add ghc-hasql-pool Robert Vollmert
2019-11-29 11:37 ` [bug#38423] [PATCH 42/49] gnu: Add ghc-hasql-transaction Robert Vollmert
2019-11-29 11:37 ` [bug#38423] [PATCH 43/49] gnu: Add ghc-swagger2 Robert Vollmert
2019-11-29 11:37 ` [bug#38423] [PATCH 44/49] gnu: Add ghc-configurator-pg Robert Vollmert
2019-11-29 11:37 ` [bug#38423] [PATCH 45/49] gnu: Add ghc-cassava Robert Vollmert
2019-11-29 11:37 ` [bug#38423] [PATCH 46/49] gnu: Add ghc-tasty-hspec Robert Vollmert
2019-11-29 11:37 ` [bug#38423] [PATCH 47/49] gnu: Add ghc-jose Robert Vollmert
2019-11-29 11:37 ` [bug#38423] [PATCH 48/49] gnu: Add postgrest Robert Vollmert
2019-11-29 11:37 ` Robert Vollmert [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://guix.gnu.org/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20191129113751.82405-49-rob@vllmrt.net \
--to=rob@vllmrt.net \
--cc=38423@debbugs.gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/guix.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).