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-10-16 09:56:58 +02:00
|
|
|
# setup-apt-repo does an `apt-get update`
|
2016-08-05 22:27:03 +02:00
|
|
|
/root/zulip/scripts/lib/setup-apt-repo
|
|
|
|
|
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
|
travis: Remove rabbitmq nodename dependency on hostname.
Because rabbitmq doesn't support changing the nodename of a running
rabbitmq node, Zulip installations suffered a plague of issues where
e.g. a Zulip server would reboot, the hostname would change, and
suddenly the local rabbitmq instance being used by Zulip would stop
working.
We address this problem by using, by default, a fixed rabbitmq
nodename, but providing server administrators the option to set the
rabbitmq nodename used by Zulip however they choose.
To upgrade an existing server to use this new configuration, one will
need to add something like the following to /etc/zulip/zulip.conf:
[rabbitmq]
nodename = zulip@localhost
However, I don't believe we have the puppet code in place to make this
work correctly at initial installation without rabbitmq-server being
already installed (but off), as we can easily setup in Travis CI but I
haven't been willing to do for the installer. So for now, this just
fixes our Travis CI problems.
Fixes: #1579.
2016-08-10 03:40:07 +02:00
|
|
|
(
|
|
|
|
echo -e "[machine]\npuppet_classes = $PUPPET_CLASSES\ndeploy_type = $DEPLOYMENT_TYPE";
|
|
|
|
if [ -n "$TRAVIS" ]; then
|
|
|
|
echo -e "\n[rabbitmq]\nnodename = zulip@localhost"
|
|
|
|
fi
|
|
|
|
) > /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
|
2016-10-05 11:13:19 +02:00
|
|
|
/root/zulip/scripts/setup/generate_secrets.py --production
|
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
|
2016-08-13 17:46:19 +02:00
|
|
|
deploy_path=$(/root/zulip/scripts/lib/zulip_tools.py make_deploy_path)
|
2016-07-12 05:35:14 +02:00
|
|
|
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
|