zammad-docker-compose/containers/zammad/docker-entrypoint.sh

159 lines
5.1 KiB
Bash
Raw Normal View History

2019-02-15 15:11:49 +00:00
#!/usr/bin/env bash
2016-12-17 11:10:51 +00:00
set -e
2017-11-20 22:59:01 +00:00
2019-02-04 20:29:24 +00:00
: "${AUTOWIZARD_JSON:=''}"
: "${ELASTICSEARCH_HOST:=zammad-elasticsearch}"
2018-04-14 13:17:42 +00:00
: "${ELASTICSEARCH_PORT:=9200}"
: "${MEMCACHED_HOST:=zammad-memcached}"
2018-04-14 14:23:15 +00:00
: "${MEMCACHED_PORT:=11211}"
: "${POSTGRESQL_HOST:=zammad-postgresql}"
: "${POSTGRESQL_PORT:=5432}"
: "${POSTGRESQL_USER:=postgres}"
: "${POSTGRESQL_PASS:=}"
2018-04-09 16:07:40 +00:00
: "${POSTGRESQL_DB:=zammad_production}"
2018-04-10 09:17:23 +00:00
: "${POSTGRESQL_DB_CREATE:=true}"
: "${ZAMMAD_RAILSSERVER_HOST:=zammad-railsserver}"
2018-04-14 15:40:53 +00:00
: "${ZAMMAD_RAILSSERVER_PORT:=3000}"
: "${ZAMMAD_WEBSOCKET_HOST:=zammad-websocket}"
2018-04-14 15:40:53 +00:00
: "${ZAMMAD_WEBSOCKET_PORT:=6042}"
: "${NGINX_SERVER_NAME:=_}"
function check_zammad_ready {
sleep 15
until [ -f "${ZAMMAD_READY_FILE}" ]; do
echo "waiting for init container to finish install or update..."
sleep 10
2017-11-20 22:59:01 +00:00
done
}
# zammad init
if [ "$1" = 'zammad-init' ]; then
2017-12-24 14:04:09 +00:00
# install / update zammad
2019-02-04 20:45:33 +00:00
test -f "${ZAMMAD_READY_FILE}" && rm "${ZAMMAD_READY_FILE}"
2019-02-05 19:58:48 +00:00
rsync -a --delete --exclude 'public/assets/images/*' --exclude 'storage/fs/*' "${ZAMMAD_TMP_DIR}/" "${ZAMMAD_DIR}"
2019-02-04 20:45:33 +00:00
rsync -a "${ZAMMAD_TMP_DIR}"/public/assets/images/ "${ZAMMAD_DIR}"/public/assets/images
2019-02-04 20:45:33 +00:00
until (echo > /dev/tcp/"${POSTGRESQL_HOST}"/"${POSTGRESQL_PORT}") &> /dev/null; do
echo "zammad railsserver waiting for postgresql server to be ready..."
2017-03-08 18:37:05 +00:00
sleep 5
done
2019-02-04 20:45:33 +00:00
cd "${ZAMMAD_DIR}"
2018-04-14 14:23:15 +00:00
# configure database
2019-02-04 20:45:33 +00:00
sed -e "s#.*adapter:.*# adapter: postgresql#g" -e "s#.*database:.*# database: ${POSTGRESQL_DB}#g" -e "s#.*username:.*# username: ${POSTGRESQL_USER}#g" -e "s#.*password:.*# password: ${POSTGRESQL_PASS}\\n host: ${POSTGRESQL_HOST}\\n#g" < contrib/packager.io/database.yml.pkgr > config/database.yml
2018-04-14 14:23:15 +00:00
# configure memcache
2019-02-04 20:45:33 +00:00
sed -i -e "s/.*config.cache_store.*file_store.*cache_file_store.*/ config.cache_store = :dalli_store, '${MEMCACHED_HOST}:${MEMCACHED_PORT}'\\n config.session_store = :dalli_store, '${MEMCACHED_HOST}:${MEMCACHED_PORT}'/" config/application.rb
echo "initialising / updating database..."
2018-12-11 17:57:18 +00:00
2019-02-04 20:29:24 +00:00
# check if database exists / update to new version
2017-11-21 15:19:57 +00:00
set +e
bundle exec rake db:migrate &> /dev/null
2018-12-11 17:57:18 +00:00
DB_MIGRATE="$?"
2019-02-04 20:29:24 +00:00
# check if database is populated
2018-12-11 17:57:18 +00:00
if [ "${DB_MIGRATE}" == "0" ]; then
bundle exec rails r "Setting.set('es_url', 'http://${ELASTICSEARCH_HOST}:${ELASTICSEARCH_PORT}')" &> /dev/null
DB_SETTINGS="$?"
fi
2017-11-21 15:24:57 +00:00
set -e
2017-03-08 18:37:05 +00:00
2019-02-04 20:29:24 +00:00
# create database if not exists
2019-02-04 20:45:33 +00:00
if [ "${DB_MIGRATE}" != "0" ] && [ "${POSTGRESQL_DB_CREATE}" == "true" ]; then
2018-12-11 17:57:18 +00:00
echo "creating database..."
2018-04-10 09:17:23 +00:00
bundle exec rake db:create
2018-12-11 17:57:18 +00:00
fi
2019-02-04 20:29:24 +00:00
# populate database and create autowizard.json on first install
2018-12-11 17:57:18 +00:00
if [ "${DB_SETTINGS}" != "0" ]; then
echo "seeding database..."
bundle exec rake db:seed
2019-02-04 20:29:24 +00:00
if [ -n "${AUTOWIZARD_JSON}" ]; then
echo "${AUTOWIZARD_JSON}" | base64 -d > auto_wizard.json
fi
2017-03-08 18:37:05 +00:00
fi
# es config
2019-02-04 20:29:24 +00:00
echo "changing settings..."
2018-04-14 13:17:42 +00:00
bundle exec rails r "Setting.set('es_url', 'http://${ELASTICSEARCH_HOST}:${ELASTICSEARCH_PORT}')"
if [ -n "${ELASTICSEARCH_USER}" ] && [ -n "${ELASTICSEARCH_PASS}" ]; then
bundle exec rails r "Setting.set('es_user', \"${ELASTICSEARCH_USER}\")"
bundle exec rails r "Setting.set('es_password', \"${ELASTICSEARCH_PASS}\")"
fi
2018-04-14 13:17:42 +00:00
until (echo > /dev/tcp/${ELASTICSEARCH_HOST}/${ELASTICSEARCH_PORT}) &> /dev/null; do
echo "zammad railsserver waiting for elasticsearch server to be ready..."
sleep 5
done
2019-02-09 18:05:32 +00:00
if ! curl -s ${ELASTICSEARCH_HOST}:${ELASTICSEARCH_PORT}/_cat/indices | grep -q zammad; then
2018-04-14 13:17:42 +00:00
echo "rebuilding es searchindex..."
bundle exec rake searchindex:rebuild
fi
# chown everything to zammad user
2019-02-04 20:45:33 +00:00
chown -R "${ZAMMAD_USER}":"${ZAMMAD_USER}" "${ZAMMAD_DIR}"
# create install ready file
2019-02-04 20:45:33 +00:00
su -c "echo 'zammad-init' > ${ZAMMAD_READY_FILE}" "${ZAMMAD_USER}"
fi
2019-02-04 20:29:24 +00:00
# zammad nginx
if [ "$1" = 'zammad-nginx' ]; then
check_zammad_ready
# configure nginx
2019-02-09 17:56:25 +00:00
if ! env | grep -q KUBERNETES; then
2018-04-14 15:40:53 +00:00
sed -e "s#server .*:3000#server ${ZAMMAD_RAILSSERVER_HOST}:${ZAMMAD_RAILSSERVER_PORT}#g" -e "s#server .*:6042#server ${ZAMMAD_WEBSOCKET_HOST}:${ZAMMAD_WEBSOCKET_PORT}#g" -e "s#server_name .*#server_name ${NGINX_SERVER_NAME};#g" -e 's#/var/log/nginx/zammad.\(access\|error\).log#/dev/stdout#g' < contrib/nginx/zammad.conf > /etc/nginx/sites-enabled/default
fi
echo "starting nginx..."
exec /usr/sbin/nginx -g 'daemon off;'
fi
# zammad-railsserver
if [ "$1" = 'zammad-railsserver' ]; then
test -f /opt/zammad/tmp/pids/server.pid && rm /opt/zammad/tmp/pids/server.pid
check_zammad_ready
2019-02-04 20:45:33 +00:00
cd "${ZAMMAD_DIR}"
echo "starting railsserver..."
2019-02-15 15:11:49 +00:00
#shellcheck disable=SC2101
2019-02-04 20:45:33 +00:00
exec gosu "${ZAMMAD_USER}":"${ZAMMAD_USER}" bundle exec rails server puma -b [::] -p "${ZAMMAD_RAILSSERVER_PORT}" -e "${RAILS_ENV}"
fi
2016-12-17 11:10:51 +00:00
# zammad-scheduler
if [ "$1" = 'zammad-scheduler' ]; then
check_zammad_ready
2019-02-04 20:45:33 +00:00
cd "${ZAMMAD_DIR}"
echo "starting scheduler..."
2019-02-04 20:45:33 +00:00
exec gosu "${ZAMMAD_USER}":"${ZAMMAD_USER}" bundle exec script/scheduler.rb run
fi
# zammad-websocket
if [ "$1" = 'zammad-websocket' ]; then
check_zammad_ready
2019-02-04 20:45:33 +00:00
cd "${ZAMMAD_DIR}"
echo "starting websocket server..."
2019-02-04 20:45:33 +00:00
exec gosu "${ZAMMAD_USER}":"${ZAMMAD_USER}" bundle exec script/websocket-server.rb -b 0.0.0.0 -p "${ZAMMAD_WEBSOCKET_PORT}" start
2016-12-17 11:10:51 +00:00
fi