2016-01-12 13:08:43 +01:00
|
|
|
#!/usr/bin/env bash
|
|
|
|
set -xe
|
2013-11-14 06:32:49 +01:00
|
|
|
|
|
|
|
# Assumes we've already been untarred
|
|
|
|
|
2016-04-27 00:04:32 +02:00
|
|
|
# Specify options for apt.
|
2016-04-27 00:02:28 +02:00
|
|
|
APT_OPTIONS="${APT_OPTIONS:-}"
|
2016-04-27 00:04:32 +02:00
|
|
|
# Install additional packages using apt.
|
2016-04-27 00:02:28 +02:00
|
|
|
ADDITIONAL_PACKAGES=${ADDITIONAL_PACKAGES:-}
|
2016-04-27 00:04:32 +02:00
|
|
|
# Deployment type is almost always voyager.
|
|
|
|
DEPLOYMENT_TYPE="${DEPLOYMENT_TYPE:-voyager}"
|
2016-04-27 00:06:37 +02:00
|
|
|
# Comma-separated list of puppet manifests to install. default is
|
|
|
|
# zulip::voyager for an all-in-one system or zulip::dockervoyager for
|
|
|
|
# Docker. Use e.g. zulip::app_frontend for a Zulip frontend server.
|
|
|
|
PUPPET_CLASSES="${PUPPET_CLASSES:-zulip::voyager}"
|
2016-07-12 20:46:49 +02:00
|
|
|
VIRTUALENV_NEEDED="${VIRTUALENV_NEEDED:-yes}"
|
2016-04-27 00:02:28 +02:00
|
|
|
|
2016-08-05 22:27:03 +02:00
|
|
|
/root/zulip/scripts/lib/setup-apt-repo
|
|
|
|
|
2013-11-14 06:32:49 +01:00
|
|
|
apt-get update
|
2015-10-15 01:47:42 +02:00
|
|
|
apt-get -y dist-upgrade $APT_OPTIONS
|
2016-07-31 04:48:46 +02:00
|
|
|
apt-get install -y puppet git python python-six crudini $ADDITIONAL_PACKAGES
|
2013-11-14 06:32:49 +01:00
|
|
|
|
2016-06-22 21:00:50 +02:00
|
|
|
# Create and activate a virtualenv
|
2016-07-12 20:46:49 +02:00
|
|
|
if [ "$VIRTUALENV_NEEDED" = "yes" ]; then
|
|
|
|
/root/zulip/scripts/lib/create-production-venv /root/zulip/zulip-venv
|
|
|
|
fi
|
2016-06-22 21:00:50 +02:00
|
|
|
|
|
|
|
# puppet apply
|
2013-11-14 06:32:49 +01:00
|
|
|
mkdir -p /etc/zulip
|
2016-04-27 00:06:37 +02:00
|
|
|
echo -e "[machine]\npuppet_classes = $PUPPET_CLASSES\ndeploy_type = $DEPLOYMENT_TYPE" > /etc/zulip/zulip.conf
|
2013-11-14 06:32:49 +01:00
|
|
|
/root/zulip/scripts/zulip-puppet-apply -f
|
|
|
|
|
2016-07-12 05:35:14 +02:00
|
|
|
# Detect which features were selected for the below
|
2016-07-20 04:05:02 +02:00
|
|
|
set +e
|
2016-07-12 05:35:14 +02:00
|
|
|
[ -e "/etc/init.d/camo" ]; has_camo=$?
|
|
|
|
[ -e "/etc/init.d/nginx" ]; has_nginx=$?
|
|
|
|
[ -e "/etc/supervisor/conf.d/zulip.conf" ]; has_appserver=$?
|
|
|
|
[ -e "/etc/cron.d/rabbitmq-numconsumers" ]; has_rabbit=$?
|
|
|
|
[ -e "/etc/init.d/postgresql" ]; has_postgres=$?
|
2016-07-20 04:05:02 +02:00
|
|
|
set -e
|
2016-07-12 05:35:14 +02:00
|
|
|
|
2016-07-20 11:55:45 +02:00
|
|
|
# Docker service setup is done in the docker config, not here
|
|
|
|
if [ "$DEPLOYMENT_TYPE" = "dockervoyager" ]; then
|
|
|
|
has_camo=1
|
|
|
|
has_nginx=1
|
|
|
|
has_appserver=1
|
|
|
|
has_rabbit=1
|
|
|
|
has_postgres=1
|
|
|
|
fi
|
|
|
|
|
2013-11-14 06:32:49 +01:00
|
|
|
# These server restarting bits should be moveable into puppet-land, ideally
|
|
|
|
apt-get -y upgrade
|
2016-07-12 05:35:14 +02:00
|
|
|
|
|
|
|
if [ "$has_nginx" = 0 ]; then
|
2015-10-21 08:23:24 +02:00
|
|
|
# Check nginx was configured properly now that we've installed it.
|
|
|
|
# Most common failure mode is certs not having been installed.
|
|
|
|
nginx -t
|
2013-11-14 06:32:49 +01:00
|
|
|
service nginx restart
|
|
|
|
fi
|
|
|
|
|
2016-07-12 05:35:14 +02:00
|
|
|
if [ "$has_appserver" = 0 ]; then
|
|
|
|
/root/zulip/scripts/setup/generate_secrets.py
|
2016-07-20 05:45:50 +02:00
|
|
|
cp -a /root/zulip/zproject/prod_settings_template.py /etc/zulip/settings.py
|
2016-07-20 05:42:43 +02:00
|
|
|
ln -nsf /etc/zulip/settings.py /root/zulip/zproject/prod_settings.py
|
2016-07-12 05:35:14 +02:00
|
|
|
fi
|
2013-11-14 06:32:49 +01:00
|
|
|
|
2016-04-28 07:32:27 +02:00
|
|
|
# Restart camo since generate_secrets.py likely replaced its secret key
|
2016-07-12 05:35:14 +02:00
|
|
|
if [ "$has_camo" = 0 ] && [ -z "$TRAVIS" ]; then
|
2016-04-28 07:32:27 +02:00
|
|
|
# We don't run this in Travis CI due to a weird hang bug
|
|
|
|
service camo restart
|
|
|
|
fi
|
|
|
|
|
2016-07-12 05:35:14 +02:00
|
|
|
if [ "$has_rabbit" = 0 ]; then
|
|
|
|
if ! rabbitmqctl status >/dev/null; then
|
|
|
|
set +x
|
|
|
|
echo; echo "RabbitMQ seems to not have started properly after the installation process."
|
|
|
|
echo "Often, this can be caused by misconfigured /etc/hosts in virtualized environments"
|
|
|
|
echo "See https://github.com/zulip/zulip/issues/53#issuecomment-143805121"
|
|
|
|
echo "for more information"
|
|
|
|
echo
|
|
|
|
set -x
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
/root/zulip/scripts/setup/configure-rabbitmq
|
2015-09-30 03:41:31 +02:00
|
|
|
fi
|
|
|
|
|
2016-07-12 05:35:14 +02:00
|
|
|
if [ "$has_postgres" = 0 ]; then
|
|
|
|
/root/zulip/scripts/setup/postgres-init-db
|
|
|
|
fi
|
2013-11-14 06:32:49 +01:00
|
|
|
|
2016-07-12 05:35:14 +02:00
|
|
|
if [ "$has_appserver" = 0 ]; then
|
|
|
|
deploy_path=$(/root/zulip/zulip_tools.py make_deploy_path)
|
|
|
|
mv /root/zulip "$deploy_path"
|
|
|
|
ln -nsf /home/zulip/deployments/next /root/zulip
|
|
|
|
ln -nsf "$deploy_path" /home/zulip/deployments/next
|
|
|
|
ln -nsf "$deploy_path" /home/zulip/deployments/current
|
2016-07-20 05:42:43 +02:00
|
|
|
ln -nsf /etc/zulip/settings.py "$deploy_path"/zproject/prod_settings.py
|
2016-07-12 05:35:14 +02:00
|
|
|
mkdir -p "$deploy_path"/prod-static/serve
|
|
|
|
cp -rT "$deploy_path"/prod-static/serve /home/zulip/prod-static
|
|
|
|
chown -R zulip:zulip /home/zulip /var/log/zulip /etc/zulip/settings.py
|
|
|
|
fi
|
2013-11-14 06:32:49 +01:00
|
|
|
|
2016-04-27 00:20:06 +02:00
|
|
|
if [ -e "/var/run/supervisor.sock" ]; then
|
|
|
|
# If supervisor isn't running, no need to chown its socket
|
|
|
|
chown zulip:zulip /var/run/supervisor.sock
|
|
|
|
fi
|
2013-11-14 06:32:49 +01:00
|
|
|
|
|
|
|
set +x
|
|
|
|
cat <<EOF
|
|
|
|
|
|
|
|
Installation complete!
|
|
|
|
|
|
|
|
Now edit /etc/zulip/settings.py and fill in the mandatory values.
|
|
|
|
|
|
|
|
Once you've done that, please run:
|
|
|
|
|
|
|
|
su zulip -c /home/zulip/deployments/current/scripts/setup/initialize-database
|
|
|
|
|
2015-09-30 07:23:25 +02:00
|
|
|
To configure the initial database.
|
2013-11-14 06:32:49 +01:00
|
|
|
EOF
|