Merge branch 'wikijs' into 'master'

Add a type for wikijs.

See merge request ungleich-public/cdist-contrib!15
This commit is contained in:
fnux 2021-01-12 08:38:21 +01:00
commit 4918ef464f
11 changed files with 220 additions and 0 deletions

View file

@ -0,0 +1,46 @@
#!/bin/sh
if [ $# -ne 1 ];
then
echo "You have to give me the database password as an argument:"
echo "on some systems, anyone can read env(1)."
exit 1;
fi
generate_ssl_section () {
cat << EOF
ssl:
enabled: ${SSL}
EOF
if [ "$SSL" = "true" ]; then
cat << EOF
port: $HTTPS_PORT
provider: letsencrypt
domain: ${__target_host:?}
subscriberEmail: ${LE_EMAIL:?}
EOF
fi
}
cat << EOF
port: $HTTP_PORT
db:
type: postgres
host: localhost
port: 5432
user: ${DB_USER:?}
pass: $1
db: ${DB_NAME:?}
ssl: false
$(generate_ssl_section)
pool:
min: 2
max: 10
bindIP: 0.0.0.0
logLevel: warn
offline: false
ha: false
dataPath: ./data
EOF

View file

@ -0,0 +1,10 @@
#!/sbin/openrc-run
command='/usr/bin/node'
command_args='server'
command_background=true
description="Run wiki.js"
directory='/var/wiki'
error_log=/var/log/"$RC_SVCNAME".err
output_log=/var/log/"$RC_SVCNAME".log
pidfile="/run/$RC_SVCNAME.pid"

26
type/__wikijs/gencode-remote Executable file
View file

@ -0,0 +1,26 @@
#!/bin/sh
VERSION_FILE=/var/wiki/version
version=$(cat "${__object:?}/parameter/version")
# Check for installation
cat << EOF
if [ -f $VERSION_FILE ] && [ "\$(cat $VERSION_FILE)" = "$version" ];
then
# Assume everything is done already.
exit 0;
else
echo "$version" > $VERSION_FILE
fi
EOF
# Download and copy source
cat << EOF
wget -O - https://github.com/Requarks/wiki/releases/download/$version/wiki-js.tar.gz | tar xz -C /var/wiki
EOF
# Install deps and launch
cat << EOF
cd /var/wiki || exit 1
service wikijs restart
EOF

64
type/__wikijs/man.rst Normal file
View file

@ -0,0 +1,64 @@
cdist-type__wikijs(7)
========================
NAME
----
cdist-type__wikijs - Deploy the wiki.js software.
DESCRIPTION
-----------
See wiki.js.org for more information. This type deploys with a postgresql
database, since it is the upstream recommended for production, and they seem to
strongly suggest that in the next releases, they will not support anything else.
Currently, this type servers wikijs as standalone, listening on ports 80 and
443, and with a service file for OpenRC. Feel free to contribute a
generalisation if you require one.
REQUIRED PARAMETERS
-------------------
database-password
The password to the PSQL database.
version
'wikijs' version to be deployed.
OPTIONAL PARAMETERS
-------------------
database
The name of the PSQL database to connect to. If omitted, then 'wikijs' is
used.
database-user
The name of the PSQL database user to connec as. If omitted, then 'wikijs' is
used.
letsencrypt-mail
If the SSL parameter is passed, then we setup wikijs to automatically obtain
certificates: this is the email used to sign up to a LE account.
http-port
Specify HTTP port, defaults to 80.
http-port
Specify HTTPS port, defaults to 443. Only relevant if the SSL flag is enabled.
BOOLEAN PARAMETERS
------------------
ssl
Whether or not to enable the wikijs automatic obtention of LE certificates.
AUTHORS
-------
Joachim Desroches <joachim.desroches@epfl.ch>
COPYING
-------
Copyright \(C) 2020 Joachim Desroches. 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.

64
type/__wikijs/manifest Normal file
View file

@ -0,0 +1,64 @@
#!/bin/sh
os="$(cat "${__global:?}"/explorer/os)"
case "$os" in
alpine)
:
;;
*)
echo "This type has no implementation for $os. Aborting." >&2;
exit 1;
esac
DB_USER=wikijs
if [ -f "${__object:?}/parameter/database-user" ];
then
DB_USER="$(cat "${__object:?}/parameter/database-user")"
fi
export DB_USER
DB_NAME=wikijs
if [ -f "${__object:?}/parameter/database" ];
then
DB_NAME="$(cat "${__object:?}/parameter/database")"
fi
export DB_NAME
SSL=false
if [ -f "${__object:?}/parameter/ssl" ];
then
SSL=true
fi
export SSL
if [ "$SSL" = "true" ];
then
if [ -f "${__object:?}/parameter/letsencrypt-mail" ];
then
LE_EMAIL="$(cat "${__object:?}/parameter/letsencrypt-mail")"
export LE_EMAIL
else
echo "You must specify an email account if you request SSL."
echo "Hit me."
exit 1
fi
fi
HTTP_PORT=$(cat "${__object:?}/parameter/http-port")
HTTPS_PORT=$(cat "${__object:?}/parameter/https-port")
export HTTP_PORT HTTPS_PORT
db_pass="$(cat "${__object:?}/parameter/database-password")"
__package nodejs
__directory /var/wiki/
# These things are Alpine-dependant.
__file /etc/init.d/wikijs --source "${__type:?}/files/wikijs-openrc"
__package nghttp2-dev # Required for some reason, else a symbol is missing
mkdir -p "${__object:?}/files"
"${__type:?}/files/config.yml.sh" "$db_pass" > "${__object:?}/files/config.yml"
require='__directory/var/wiki' \
__file /var/wiki/config.yml --source "${__object:?}/files/config.yml"

View file

@ -0,0 +1 @@
ssl

View file

@ -0,0 +1 @@
80

View file

@ -0,0 +1 @@
443

View file

@ -0,0 +1,5 @@
database
database-user
letsencrypt-mail
http-port
https-port

View file

@ -0,0 +1,2 @@
database-password
version

0
type/__wikijs/singleton Normal file
View file