unofficial mirror of guix-patches@gnu.org 
 help / color / mirror / code / Atom feed
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)

      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).