Compare commits

..

No commits in common. "eaa1d09454937f51883c5a1371abdbc701c783f1" and "a3e553fc65aa3b2e10bdad0ed8ba9ef73c03859c" have entirely different histories.

4 changed files with 1741 additions and 113 deletions

File diff suppressed because it is too large Load Diff

View File

@ -290,3 +290,17 @@ looking for a reliable platform to manage their software projects.")
(license license:gpl3+) (license license:gpl3+)
(properties (properties
'((disable-updater? . #t))))) '((disable-updater? . #t)))))
(define-public iocaine/dolly
(package
(inherit iocaine)
(name "iocaine-dolly")
(version "2.5.0")
(source
(origin
(method url-fetch)
(uri (crate-uri "iocaine" version))
(file-name (string-append name "-" version ".tar.gz"))
(sha256
(base32 "1x445vnalm323qphxfbfrdzmv9q83h2kybimwm2j39j9p9hj188s"))))
(inputs (cons* jemalloc (rosenthal-cargo-inputs 'iocaine)))))

View File

@ -3,19 +3,18 @@
;;; SPDX-License-Identifier: GPL-3.0-or-later ;;; SPDX-License-Identifier: GPL-3.0-or-later
(define-module (rosenthal services mail) (define-module (rosenthal services mail)
#:use-module (gnu home services shepherd) #:use-module (srfi srfi-26)
#:use-module (gnu home services)
#:use-module (gnu packages mail)
#:use-module (gnu services admin)
#:use-module (gnu services configuration)
#:use-module (gnu services containers)
#:use-module (gnu services docker)
#:use-module (gnu services shepherd)
#:use-module (gnu services)
#:use-module (guix gexp) #:use-module (guix gexp)
#:use-module (guix records) #:use-module (guix records)
#:use-module (rosenthal utils serializers yaml) #:use-module (rosenthal utils serializers yaml)
#:use-module (srfi srfi-26) #:use-module (gnu services)
#:use-module (gnu services admin)
#:use-module (gnu services configuration)
#:use-module (gnu services docker)
#:use-module (gnu services shepherd)
#:use-module (gnu home services)
#:use-module (gnu home services shepherd)
#:use-module (gnu packages mail)
#:export (docker-mailserver-configuration #:export (docker-mailserver-configuration
docker-mailserver-service-type docker-mailserver-service-type
@ -46,34 +45,32 @@
"List of extra Docker arguments.") "List of extra Docker arguments.")
(no-serialization)) (no-serialization))
(define docker-mailserver-oci (define docker-mailserver-oci-containers
(match-record-lambda <docker-mailserver-configuration> (match-record-lambda <docker-mailserver-configuration>
(data-directory log-file shepherd-requirement options extra-arguments) (data-directory log-file shepherd-requirement options extra-arguments)
(let ((docker-mailserver-path (let ((docker-mailserver-path
(cut string-append data-directory <>))) (cut string-append data-directory <>)))
(oci-extension (list (oci-container-configuration
(containers (environment options)
(list (oci-container-configuration (image "ghcr.io/docker-mailserver/docker-mailserver:latest")
(environment options) (provision "docker-mailserver")
(image "ghcr.io/docker-mailserver/docker-mailserver:latest") (requirement shepherd-requirement)
(provision "docker-mailserver") (log-file log-file)
(requirement shepherd-requirement) (network "host")
(log-file log-file) (volumes
(network "host") `((,(docker-mailserver-path "/data") . "/var/mail")
(volumes (,(docker-mailserver-path "/state") . "/var/mail-state")
`((,(docker-mailserver-path "/data") . "/var/mail") (,(docker-mailserver-path "/logs") . "/var/log/mail")
(,(docker-mailserver-path "/state") . "/var/mail-state") (,(docker-mailserver-path "/config") . "/tmp/docker-mailserver")
(,(docker-mailserver-path "/logs") . "/var/log/mail") ("/etc/localtime" . "/etc/localtime:ro")))
(,(docker-mailserver-path "/config") . "/tmp/docker-mailserver") (extra-arguments extra-arguments))))))
("/etc/localtime" . "/etc/localtime:ro")))
(extra-arguments extra-arguments))))))))
(define docker-mailserver-service-type (define docker-mailserver-service-type
(service-type (service-type
(name 'docker-mailserver) (name 'docker-mailserver)
(extensions (extensions
(list (service-extension oci-service-type (list (service-extension oci-container-service-type
docker-mailserver-oci) docker-mailserver-oci-containers)
(service-extension log-rotation-service-type (service-extension log-rotation-service-type
(compose list docker-mailserver-configuration-log-file)))) (compose list docker-mailserver-configuration-log-file))))
(default-value (docker-mailserver-configuration)) (default-value (docker-mailserver-configuration))

View File

@ -3,25 +3,23 @@
;;; SPDX-License-Identifier: GPL-3.0-or-later ;;; SPDX-License-Identifier: GPL-3.0-or-later
(define-module (rosenthal services web) (define-module (rosenthal services web)
#:use-module (guix gexp)
#:use-module (guix modules)
#:use-module (guix records)
#:use-module (gnu packages admin) #:use-module (gnu packages admin)
#:use-module (gnu packages guile-xyz) #:use-module (gnu packages guile-xyz)
#:use-module (gnu packages version-control) #:use-module (gnu packages version-control)
#:use-module (gnu packages video) #:use-module (gnu packages video)
#:use-module (gnu packages web) #:use-module (rosenthal packages binaries)
#:use-module (rosenthal packages web)
#:use-module (gnu services)
#:use-module (gnu services admin) #:use-module (gnu services admin)
#:use-module (gnu services configuration) #:use-module (gnu services configuration)
#:use-module (gnu services containers)
#:use-module (gnu services databases) #:use-module (gnu services databases)
#:use-module (gnu services docker) #:use-module (gnu services docker)
#:use-module (gnu services shepherd) #:use-module (gnu services shepherd)
#:use-module (gnu services)
#:use-module (gnu system privilege) #:use-module (gnu system privilege)
#:use-module (gnu system shadow) #:use-module (gnu system shadow)
#:use-module (guix gexp)
#:use-module (guix modules)
#:use-module (guix records)
#:use-module (rosenthal packages binaries)
#:use-module (rosenthal packages web)
#:use-module (rosenthal utils serializers ini) #:use-module (rosenthal utils serializers ini)
#:use-module (rosenthal utils serializers yaml) #:use-module (rosenthal utils serializers yaml)
#:export (caddy-configuration #:export (caddy-configuration
@ -270,7 +268,7 @@ reload its configuration file."))
(define-configuration/no-serialization iocaine-configuration (define-configuration/no-serialization iocaine-configuration
(iocaine (iocaine
(file-like iocaine) (file-like iocaine/dolly)
"") "")
(config (config
file-object file-object
@ -395,30 +393,28 @@ test its configuration file."))
(chown directory (passwd:uid user) (passwd:gid user)))) (chown directory (passwd:uid user) (passwd:gid user))))
'#$(list cache-directory config-directory))))) '#$(list cache-directory config-directory)))))
(define jellyfin-oci (define jellyfin-oci-containers
(match-record-lambda <jellyfin-configuration> (match-record-lambda <jellyfin-configuration>
(cache-directory config-directory (cache-directory config-directory
proxy-url log-file auto-start? extra-options) proxy-url log-file auto-start? extra-options)
(oci-extension (list (oci-container-configuration
(containers (user "jellyfin")
(list (oci-container-configuration (group "docker")
(user "jellyfin") (environment
(group "docker") (if (maybe-value-set? proxy-url)
(environment `(("http_proxy" . ,proxy-url)
(if (maybe-value-set? proxy-url) ("https_proxy" . ,proxy-url))
`(("http_proxy" . ,proxy-url) '()))
("https_proxy" . ,proxy-url)) (image "jellyfin/jellyfin:latest")
'())) (provision "jellyfin")
(image "jellyfin/jellyfin:latest") (log-file log-file)
(provision "jellyfin") (auto-start? auto-start?)
(log-file log-file) (respawn? #t)
(auto-start? auto-start?) (network "host")
(respawn? #t) (volumes
(network "host") `((,cache-directory . "/cache")
(volumes (,config-directory . "/config")))
`((,cache-directory . "/cache") (extra-arguments extra-options)))))
(,config-directory . "/config")))
(extra-arguments extra-options)))))))
(define jellyfin-service-type (define jellyfin-service-type
(service-type (service-type
@ -430,8 +426,8 @@ test its configuration file."))
jellyfin-activation) jellyfin-activation)
(service-extension log-rotation-service-type (service-extension log-rotation-service-type
(compose list jellyfin-configuration-log-file)) (compose list jellyfin-configuration-log-file))
(service-extension oci-service-type (service-extension oci-container-service-type
jellyfin-oci))) jellyfin-oci-containers)))
(default-value (jellyfin-configuration)) (default-value (jellyfin-configuration))
(description "Run Jellyfin, a media system."))) (description "Run Jellyfin, a media system.")))
@ -543,7 +539,7 @@ test its configuration file."))
(mkdir-p #$data-directory) (mkdir-p #$data-directory)
(chown #$data-directory (passwd:uid user) (passwd:gid user))))))) (chown #$data-directory (passwd:uid user) (passwd:gid user)))))))
(define misskey-oci (define misskey-oci-containers
(match-record-lambda <misskey-configuration> (match-record-lambda <misskey-configuration>
(image config data-directory log-file ) (image config data-directory log-file )
(let ((config-file (let ((config-file
@ -556,20 +552,18 @@ test its configuration file."))
(let ((emitter (make-yaml-emitter))) (let ((emitter (make-yaml-emitter)))
(yaml-emit! emitter '#$config) (yaml-emit! emitter '#$config)
(display (yaml-emitter-string emitter) port))))))))) (display (yaml-emitter-string emitter) port)))))))))
(oci-extension (list (oci-container-configuration
(containers (user "misskey")
(list (oci-container-configuration (group "docker")
(user "misskey") (image image)
(group "docker") (provision "misskey")
(image image) (requirement '(postgresql redis))
(provision "misskey") (log-file log-file)
(requirement '(postgresql redis)) (respawn? #t)
(log-file log-file) (network "host")
(respawn? #t) (volumes
(network "host") `((,(string-append data-directory "/files") . "/misskey/files")
(volumes (,config-file . "/misskey/.config/default.yml"))))))))
`((,(string-append data-directory "/files") . "/misskey/files")
(,config-file . "/misskey/.config/default.yml"))))))))))
(define misskey-service-type (define misskey-service-type
(service-type (service-type
@ -583,8 +577,8 @@ test its configuration file."))
(compose list misskey-configuration-log-file)) (compose list misskey-configuration-log-file))
(service-extension activation-service-type (service-extension activation-service-type
misskey-activation) misskey-activation)
(service-extension oci-service-type (service-extension oci-container-service-type
misskey-oci))) misskey-oci-containers)))
(description "Run Misskey, an interplanetary microblogging platform."))) (description "Run Misskey, an interplanetary microblogging platform.")))
@ -723,40 +717,38 @@ test its configuration file."))
(write-char #\newline port))) (write-char #\newline port)))
(chown #$log-file (passwd:uid user) (passwd:gid user))))))) (chown #$log-file (passwd:uid user) (passwd:gid user)))))))
(define vaultwarden-oci (define vaultwarden-oci-containers
(match-record-lambda <vaultwarden-configuration> (match-record-lambda <vaultwarden-configuration>
(admin-token database-url port data-directory log-file proxy-url extra-options) (admin-token database-url port data-directory log-file proxy-url extra-options)
(oci-extension (list (oci-container-configuration
(containers (user "vaultwarden")
(list (oci-container-configuration (group "docker")
(user "vaultwarden") (host-environment
(group "docker") `(,@(if (maybe-value-set? admin-token)
(host-environment `(("ADMIN_TOKEN" . ,admin-token))
`(,@(if (maybe-value-set? admin-token) '())
`(("ADMIN_TOKEN" . ,admin-token)) ("DATABASE_URL" . ,database-url)))
'()) (environment
("DATABASE_URL" . ,database-url))) `(,@(if (maybe-value-set? proxy-url)
(environment `(("HTTP_PROXY" . ,proxy-url))
`(,@(if (maybe-value-set? proxy-url) '())
`(("HTTP_PROXY" . ,proxy-url)) ("LOG_FILE" . "vaultwarden.log")
'()) ("ROCKET_PORT" . ,(number->string port))
("LOG_FILE" . "vaultwarden.log") ("USE_SYSLOG" . "True")
("ROCKET_PORT" . ,(number->string port)) ,@extra-options))
("USE_SYSLOG" . "True") (image "vaultwarden/server:latest-alpine")
,@extra-options)) (provision "vaultwarden")
(image "vaultwarden/server:latest-alpine") (requirement '(postgresql))
(provision "vaultwarden") (respawn? #t)
(requirement '(postgresql)) (network "host")
(respawn? #t) (volumes
(network "host") `((,data-directory . "/data")
(volumes (,log-file . "/vaultwarden.log")))
`((,data-directory . "/data") (extra-arguments
(,log-file . "/vaultwarden.log"))) `(,@(if (maybe-value-set? admin-token)
(extra-arguments '("--env" "ADMIN_TOKEN")
`(,@(if (maybe-value-set? admin-token) '())
'("--env" "ADMIN_TOKEN") "--env" "DATABASE_URL"))))))
'())
"--env" "DATABASE_URL"))))))))
(define vaultwarden-service-type (define vaultwarden-service-type
(service-type (service-type
@ -770,6 +762,6 @@ test its configuration file."))
vaultwarden-activation) vaultwarden-activation)
(service-extension log-rotation-service-type (service-extension log-rotation-service-type
(compose list vaultwarden-configuration-log-file)) (compose list vaultwarden-configuration-log-file))
(service-extension oci-service-type (service-extension oci-container-service-type
vaultwarden-oci))) vaultwarden-oci-containers)))
(description "Run Vaultwarden, a Bitwarden compatible server."))) (description "Run Vaultwarden, a Bitwarden compatible server.")))