mirror of
https://github.com/zulip/docker-zulip.git
synced 2025-11-20 14:38:32 +00:00
Removed postgresql-9.3 from the packages to install
Fixes and tweaks for the entrypoint.sh #31 Added currently experimental Log2Zulip env vars and functions Cleand and reformatted some Zulip puppet manifests
This commit is contained in:
@@ -3,6 +3,7 @@ MAINTAINER Alexander Trost <galexrt@googlemail.com>
|
||||
|
||||
ENV ZULIP_VERSION="1.3.7" ZULIP_CHECKSUM="88bfa668eb14e07b0b806977db2ae2cd4d7e7ef8" DATA_DIR="/data"
|
||||
|
||||
ADD entrypoint.sh /entrypoint.sh
|
||||
ADD zulip-puppet /root/zulip-puppet
|
||||
RUN apt-get -qq update -q && \
|
||||
apt-get -qq dist-upgrade -y && \
|
||||
@@ -34,7 +35,6 @@ RUN apt-get -qq update -q && \
|
||||
apt-get -qq autoremove --purge -y && \
|
||||
apt-get -qq clean && \
|
||||
rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
|
||||
ADD entrypoint.sh /entrypoint.sh
|
||||
VOLUME ["$DATA_DIR"]
|
||||
EXPOSE 80 443
|
||||
|
||||
|
||||
@@ -48,6 +48,12 @@ ZULIP_CERTIFICATE_CN="${ZULIP_CERTIFICATE_CN:-}"
|
||||
# Zulip related settings
|
||||
ZULIP_AUTH_BACKENDS="${ZULIP_AUTH_BACKENDS:-EmailAuthBackend}"
|
||||
ZULIP_SECRETS_rabbitmq_password="${ZULIP_SECRETS_rabbitmq_password:-$(echo $RABBITMQ_PASS)}"
|
||||
# Log2Zulip settings
|
||||
LOG2ZULIP_ENABLED="False"
|
||||
LOG2ZULIP_EMAIL=""
|
||||
LOG2ZULIP_API_KEY=""
|
||||
LOG2ZULIP_SITE=""
|
||||
LOG2ZULIP_LOGFILES="/var/log/nginx/error.log"
|
||||
|
||||
# entrypoint.sh specific variables
|
||||
ZULIP_CURRENT_DEPLOY="/home/zulip/deployments/current"
|
||||
@@ -121,6 +127,8 @@ setConfigurationValue() {
|
||||
return 0
|
||||
}
|
||||
configureCerts() {
|
||||
echo "Exectuing certificates configuration..."
|
||||
echo "==="
|
||||
case "$ZULIP_AUTO_GENERATE_CERTS" in
|
||||
[Tt][Rr][Uu][Ee])
|
||||
export ZULIP_AUTO_GENERATE_CERTS="True"
|
||||
@@ -140,7 +148,7 @@ configureCerts() {
|
||||
ln -sfT "$DATA_DIR/certs/zulip.combined-chain.crt" /etc/ssl/certs/zulip.combined-chain.crt
|
||||
fi
|
||||
if [ ! -e "$DATA_DIR/certs/zulip.key" ] && [ ! -e "$DATA_DIR/certs/zulip.combined-chain.crt" ]; then
|
||||
if [ ! -z "$ZULIP_AUTO_GENERATE_CERTS" ] && [ "$ZULIP_AUTO_GENERATE_CERTS" == "True" ]; then
|
||||
if [ ! -z "$ZULIP_AUTO_GENERATE_CERTS" ] && ([ "$ZULIP_AUTO_GENERATE_CERTS" == "True" ] || [ "$ZULIP_AUTO_GENERATE_CERTS" == "true" ]); then
|
||||
echo "ZULIP_AUTO_GENERATE_CERTS is true and no certs where found in $DATA_DIR/certs. Autogenerating certificates ..."
|
||||
if [ -z "$ZULIP_CERTIFICATE_SUBJ" ]; then
|
||||
if [ -z "$ZULIP_CERTIFICATE_CN" ]; then
|
||||
@@ -157,9 +165,9 @@ configureCerts() {
|
||||
openssl req -new -nodes -subj "$ZULIP_CERTIFICATE_SUBJ" -key "$DATA_DIR/certs/zulip.key" -out /tmp/server.csr
|
||||
openssl x509 -req -days 365 -in /tmp/server.csr -signkey "$DATA_DIR/certs/zulip.key" -out "$DATA_DIR/certs/zulip.combined-chain.crt"
|
||||
rm -f /tmp/server.csr /tmp/server.pass.key
|
||||
echo "Certificates autogenerated."
|
||||
echo "Certificate autogeneration succeeded."
|
||||
else
|
||||
echo "Certificates already exist. No need to generate them."
|
||||
echo "Certificates already exist. No need to generate them. Continuing."
|
||||
fi
|
||||
fi
|
||||
if [ ! -e "$DATA_DIR/certs/zulip.key" ]; then
|
||||
@@ -170,11 +178,19 @@ configureCerts() {
|
||||
echo "No zulip.combined-chain.crt given in $DATA_DIR."
|
||||
return 1
|
||||
fi
|
||||
echo "==="
|
||||
echo "Certificates configuration succeeded."
|
||||
}
|
||||
secretsConfiguration() {
|
||||
echo "Setting Zulip secrets ..."
|
||||
echo "==="
|
||||
if [ ! -e "$DATA_DIR/zulip-secrets.conf" ]; then
|
||||
echo "Generating Zulip secrets ..."
|
||||
su zulip -c "/root/zulip/scripts/setup/generate_secrets.py"
|
||||
mv -f /etc/zulip/zulip-secrets.conf "$DATA_DIR/zulip-secrets.conf"
|
||||
echo "Zulip secrets generation succeeded."
|
||||
else
|
||||
echo "Zulip secrets already generated."
|
||||
fi
|
||||
ln -sfT "$DATA_DIR/zulip-secrets.conf" /etc/zulip/zulip-secrets.conf
|
||||
local SECRETS=($(env | sed -nr "s/ZULIP_SECRETS_([A-Z_a-z-]*).*/\1/p"))
|
||||
@@ -195,9 +211,11 @@ secretsConfiguration() {
|
||||
fi
|
||||
done
|
||||
unset SECRET_KEY SECRET_VAR KEY
|
||||
echo "==="
|
||||
echo "Zulip secrets configuration succeeded."
|
||||
}
|
||||
databaseConfiguration() {
|
||||
sed -i "s~psycopg2.connect\(.*\)~psycopg2.connect(\"host=$DB_HOST port=$DB_HOST_PORT dbname=$DB_NAME user=$DB_USER password=$DB_PASS\")~g" /usr/local/bin/process_fts_updates
|
||||
echo "Setting database configuration ..."
|
||||
setConfigurationValue "from zerver.lib.db import TimeTrackingConnection" "" "$ZPROJECT_SETTINGS" "literal"
|
||||
VALUE="DATABASES = {
|
||||
'default': {
|
||||
@@ -216,8 +234,11 @@ databaseConfiguration() {
|
||||
},
|
||||
}"
|
||||
setConfigurationValue "DATABASES" "$VALUE" "$ZPROJECT_SETTINGS" "array"
|
||||
sed -i "s~psycopg2.connect\(.*\)~psycopg2.connect(\"host=$DB_HOST port=$DB_HOST_PORT dbname=$DB_NAME user=$DB_USER password=$DB_PASS\")~g" /usr/local/bin/process_fts_updates
|
||||
echo "Database configuration succeeded."
|
||||
}
|
||||
cacheRatelimitConfiguration() {
|
||||
echo "Setting caches configuration ..."
|
||||
VALUE="CACHES = {
|
||||
'default': {
|
||||
'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache',
|
||||
@@ -235,27 +256,36 @@ cacheRatelimitConfiguration() {
|
||||
},
|
||||
}"
|
||||
setConfigurationValue "CACHES" "$VALUE" "$ZPROJECT_SETTINGS" "array"
|
||||
echo "Caches configuration succeeded."
|
||||
}
|
||||
authenticationBackends() {
|
||||
echo "Activating authentication backends ..."
|
||||
echo "$ZULIP_AUTH_BACKENDS" | sed -n 1'p' | tr ',' '\n' | while read AUTH_BACKEND; do
|
||||
echo "Adding authentication backend \"$AUTH_BACKEND\"."
|
||||
echo "AUTHENTICATION_BACKENDS += ('zproject.backends.${AUTH_BACKEND//\'/\'}',)" >> "$ZULIP_SETTINGS"
|
||||
echo "Adding authentication backend \"$AUTH_BACKEND\"."
|
||||
done
|
||||
echo "Authentication backend activation succeeded."
|
||||
}
|
||||
redisConfiguration() {
|
||||
echo "Setting redis configuration ..."
|
||||
setConfigurationValue "RATE_LIMITING" "$REDIS_RATE_LIMITING" "$ZPROJECT_SETTINGS" "bool"
|
||||
setConfigurationValue "REDIS_HOST" "$REDIS_HOST" "$ZPROJECT_SETTINGS"
|
||||
setConfigurationValue "REDIS_HOST_PORT" "$REDIS_HOST_PORT" "$ZPROJECT_SETTINGS" "int"
|
||||
echo "Redis configuration succeeded."
|
||||
}
|
||||
rabbitmqConfiguration() {
|
||||
echo "Setting rabbitmq configuration ..."
|
||||
setConfigurationValue "RABBITMQ_HOST" "$RABBITMQ_HOST" "$ZPROJECT_SETTINGS"
|
||||
sed -i "s~pika.ConnectionParameters('localhost',~pika.ConnectionParameters(settings.RABBITMQ_HOST,~g" "$ZULIP_CURRENT_DEPLOY/zerver/lib/queue.py"
|
||||
setConfigurationValue "RABBITMQ_USERNAME" "$RABBITMQ_USERNAME" "$ZPROJECT_SETTINGS"
|
||||
echo "Rabbitmq configuration succeeded."
|
||||
}
|
||||
camoConfiguration() {
|
||||
setConfigurationValue "CAMO_URI" "$CAMO_URI" "$ZPROJECT_SETTINGS" "emptyreturn"
|
||||
}
|
||||
zulipConfiguration() {
|
||||
echo "Executing Zulip configuration ..."
|
||||
echo "==="
|
||||
if [ ! -z "$ZULIP_CUSTOM_SETTINGS" ]; then
|
||||
echo -e "\n$ZULIP_CUSTOM_SETTINGS" >> "$ZPROJECT_SETTINGS"
|
||||
fi
|
||||
@@ -271,14 +301,39 @@ zulipConfiguration() {
|
||||
echo "Set key \"$SETTING_KEY\"."
|
||||
done
|
||||
unset SETTING_KEY SETTING_VAR KEY
|
||||
if ! su zulip -c "/home/zulip/deployments/current/manage.py checkconfig"; then
|
||||
echo "Error in Zulip configuration."
|
||||
exit 1
|
||||
fi
|
||||
echo "==="
|
||||
echo "Zulip configuration succeeded."
|
||||
}
|
||||
log2zulipConfiguration() {
|
||||
echo "log2zulip is currently not fully implemented. Stay tuned."
|
||||
if [ "$LOG2ZULIP_ENABLED" != "True" ] || [ "$LOG2ZULIP_ENABLED" != "true" ]; then
|
||||
rm -f /etc/cron/conf.d/log2zulip
|
||||
return 0
|
||||
fi
|
||||
echo "Executing Log2Zulip configuration ..."
|
||||
echo "==="
|
||||
if ([ "$LOG2ZULIP_AUTO_CREATE" != "True" ] || [ "$LOG2ZULIP_AUTO_CREATE" != "true" ]) && [ ! -z "$LOG2ZULIP_EMAIL" ] && [ ! -z "$LOG2ZULIP_API_KEY" ] && [ ! -z "$LOG2ZULIP_SITE" ]; then
|
||||
sed -i "s/email = .*/email = $LOG2ZULIP_EMAIL/g" /etc/log2zulip.zuliprc
|
||||
sed -i "s/key = .*/key = $LOG2ZULIP_API_KEY/g" /etc/log2zulip.zuliprc
|
||||
sed -i "s/site = .*/site = $LOG2ZULIP_SITE/g" /etc/log2zulip.zuliprc
|
||||
LOGFILES="["
|
||||
echo "$LOG2ZULIP_LOGFILES" | sed -n 1'p' | tr ',' '\n' | while read LOG_FILE; do
|
||||
LOGFILES="$LOGFILES\"${LOG_FILE//\"/\"}\","
|
||||
echo "Adding log file \"$LOG_FILE\"."
|
||||
done
|
||||
echo "$(echo "$LOGFILES" | sed 's/,$//g')]" > /etc/log2zulip.conf
|
||||
fi
|
||||
echo "==="
|
||||
echo "Log2Zulip configuration succeeded."
|
||||
}
|
||||
initialConfiguration() {
|
||||
echo "=== Begin Initial Configuration Phase ==="
|
||||
secretsConfiguration
|
||||
configureCerts
|
||||
if [ ! -e "$DATA_DIR/zulip-settings.py" ]; then
|
||||
mv -f /etc/zulip/settings.py "$DATA_DIR/zulip-settings.py"
|
||||
fi
|
||||
ln -sfT "$DATA_DIR/zulip-settings.py" /etc/zulip/settings.py
|
||||
databaseConfiguration
|
||||
cacheRatelimitConfiguration
|
||||
authenticationBackends
|
||||
@@ -286,6 +341,8 @@ initialConfiguration() {
|
||||
rabbitmqConfiguration
|
||||
camoConfiguration
|
||||
zulipConfiguration
|
||||
log2zulipConfiguration
|
||||
echo "=== End Initial Configuration Phase ==="
|
||||
}
|
||||
# === bootstrappingEnvironment ===
|
||||
waitingForDatabase() {
|
||||
@@ -331,7 +388,7 @@ bootstrapRabbitMQ() {
|
||||
rabbitmqctl -n "$RABBITMQ_HOST" set_user_tags "$RABBITMQ_USERNAME" administrator || :
|
||||
echo "RabbitMQ setting permissions for user \"$RABBITMQ_USERNAME\"."
|
||||
rabbitmqctl -n "$RABBITMQ_HOST" set_permissions -p / "$RABBITMQ_USERNAME" '.*' '.*' '.*' || :
|
||||
echo "RabbitMQ bootstrap done."
|
||||
echo "RabbitMQ bootstrap succeeded."
|
||||
}
|
||||
zulipFirstStartInit() {
|
||||
if [ -z "$FORCE_INIT" ] || [ -e "$DATA_DIR/.initiated" ]; then
|
||||
@@ -379,14 +436,16 @@ zulipMigration() {
|
||||
rm -rf "$DATA_DIR/.zulip-*"
|
||||
touch "$DATA_DIR/.zulip-$ZULIP_VERSION"
|
||||
echo "==="
|
||||
echo "Zulip migration done."
|
||||
echo "Zulip migration succeeded."
|
||||
}
|
||||
bootstrappingEnvironment() {
|
||||
echo "=== Begin Bootstrap Phase ==="
|
||||
waitingForDatabase
|
||||
bootstrapDatabase
|
||||
bootstrapRabbitMQ
|
||||
zulipFirstStartInit
|
||||
zulipMigration
|
||||
echo "=== End Bootstrap Phase ==="
|
||||
}
|
||||
# END appRun functionss
|
||||
appHelp() {
|
||||
|
||||
@@ -78,6 +78,7 @@ class zulip::app_frontend {
|
||||
mode => 644,
|
||||
source => "puppet:///modules/zulip/nginx/zulip-include-frontend/app",
|
||||
}
|
||||
|
||||
file { "/etc/nginx/zulip-include/upstreams":
|
||||
require => Package["nginx-full"],
|
||||
owner => "root",
|
||||
@@ -85,6 +86,7 @@ class zulip::app_frontend {
|
||||
mode => 644,
|
||||
source => "puppet:///modules/zulip/nginx/zulip-include-frontend/upstreams",
|
||||
}
|
||||
|
||||
file { "/etc/nginx/zulip-include/uploads.types":
|
||||
require => Package["nginx-full"],
|
||||
owner => "root",
|
||||
@@ -92,12 +94,14 @@ class zulip::app_frontend {
|
||||
mode => 644,
|
||||
source => "puppet:///modules/zulip/nginx/zulip-include-frontend/uploads.types",
|
||||
}
|
||||
|
||||
file { "/etc/nginx/zulip-include/app.d/":
|
||||
ensure => directory,
|
||||
owner => "root",
|
||||
group => "root",
|
||||
mode => 755,
|
||||
}
|
||||
|
||||
file { "/etc/supervisor/conf.d/zulip.conf":
|
||||
require => Package[supervisor],
|
||||
ensure => file,
|
||||
@@ -106,25 +110,30 @@ class zulip::app_frontend {
|
||||
mode => 644,
|
||||
source => "puppet:///modules/zulip/supervisor/conf.d/zulip.conf",
|
||||
}
|
||||
|
||||
file { "/home/zulip/tornado":
|
||||
ensure => directory,
|
||||
owner => "zulip",
|
||||
group => "zulip",
|
||||
mode => 755,
|
||||
}
|
||||
|
||||
file { '/home/zulip/logs':
|
||||
ensure => 'directory',
|
||||
owner => 'zulip',
|
||||
group => 'zulip',
|
||||
}
|
||||
|
||||
file { '/home/zulip/deployments':
|
||||
ensure => 'directory',
|
||||
owner => 'zulip',
|
||||
group => 'zulip',
|
||||
}
|
||||
|
||||
file { "/etc/cron.d/email-mirror":
|
||||
ensure => absent,
|
||||
}
|
||||
|
||||
file { '/etc/log2zulip.conf':
|
||||
ensure => file,
|
||||
owner => "zulip",
|
||||
@@ -132,6 +141,7 @@ class zulip::app_frontend {
|
||||
mode => 644,
|
||||
source => 'puppet:///modules/zulip/log2zulip.conf',
|
||||
}
|
||||
|
||||
file { '/etc/log2zulip.zuliprc':
|
||||
ensure => file,
|
||||
owner => "zulip",
|
||||
@@ -139,6 +149,7 @@ class zulip::app_frontend {
|
||||
mode => 600,
|
||||
source => 'puppet:///modules/zulip/log2zulip.zuliprc',
|
||||
}
|
||||
|
||||
file { "/etc/cron.d/check-apns-tokens":
|
||||
ensure => file,
|
||||
owner => "root",
|
||||
@@ -146,6 +157,7 @@ class zulip::app_frontend {
|
||||
mode => 644,
|
||||
source => "puppet:///modules/zulip/cron.d/check-apns-tokens",
|
||||
}
|
||||
|
||||
file { "/etc/supervisor/conf.d/cron.conf":
|
||||
require => Package[supervisor],
|
||||
ensure => file,
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
class zulip::postgres_common {
|
||||
$postgres_packages = [# The database itself
|
||||
"postgresql-9.3",
|
||||
# Python modules used in our monitoring/worker threads
|
||||
$postgres_packages = [# Python modules used in our monitoring/worker threads
|
||||
"python-gevent",
|
||||
"python-tz",
|
||||
"python-dateutil",
|
||||
|
||||
@@ -13,6 +13,7 @@ class zulip::rabbit {
|
||||
mode => 644,
|
||||
source => "puppet:///modules/zulip/cron.d/rabbitmq-queuesize",
|
||||
}
|
||||
|
||||
file { "/etc/cron.d/rabbitmq-numconsumers":
|
||||
require => Package[rabbitmq-server],
|
||||
ensure => file,
|
||||
|
||||
@@ -40,6 +40,7 @@ class zulip::voyager {
|
||||
mode => 644,
|
||||
source => "puppet:///modules/zulip/cron.d/restart-zulip",
|
||||
}
|
||||
|
||||
file { "/etc/supervisor/conf.d/zulip_postsetup.conf":
|
||||
require => Package[supervisor],
|
||||
ensure => file,
|
||||
@@ -48,6 +49,7 @@ class zulip::voyager {
|
||||
mode => 644,
|
||||
source => "puppet:///modules/zulip/supervisor/conf.d/zulip_postsetup.conf",
|
||||
}
|
||||
|
||||
file { "/opt/setupZulipUser.sh":
|
||||
ensure => file,
|
||||
owner => "root",
|
||||
|
||||
Reference in New Issue
Block a user