Skip to content

Instantly share code, notes, and snippets.

@htuscher
Created September 25, 2017 06:29
Show Gist options
  • Save htuscher/5ec90da9dafb8fdddd403bd7711711c2 to your computer and use it in GitHub Desktop.
Save htuscher/5ec90da9dafb8fdddd403bd7711711c2 to your computer and use it in GitHub Desktop.
Zammad docker-compose merged entrypoint script
version: '3'
services:
zammad:
image: 1drop/zammad:zammad-211
volumes:
- data-zammad:/home/zammad
depends_on:
- zammad-postgresql
- zammad-elasticsearch
labels:
io.rancher.container.pull_image: always
io.rancher.container.start_once: 'true'
restart: on-failure
zammad-railsserver:
image: 1drop/zammad:zammad-211
volumes:
- data-zammad:/home/zammad
depends_on:
- zammad
- zammad-elasticsearch
- zammad-postgresql
labels:
io.rancher.container.pull_image: always
restart: always
command: ["zammad-railsserver"]
zammad-scheduler:
image: 1drop/zammad:zammad-211
volumes:
- data-zammad:/home/zammad
depends_on:
- zammad
- zammad-elasticsearch
- zammad-postgresql
labels:
io.rancher.container.pull_image: always
restart: always
command: ["zammad-scheduler"]
zammad-websocket:
image: 1drop/zammad:zammad-211
volumes:
- data-zammad:/home/zammad
depends_on:
- zammad
- zammad-elasticsearch
- zammad-postgresql
labels:
io.rancher.container.pull_image: always
restart: always
command: ["zammad-websocket"]
zammad-backup:
image: 1drop/zammad:zammad-211
volumes:
- data-zammad:/home/zammad
- backup-zammad:/var/tmp/zammad
depends_on:
- zammad
- zammad-elasticsearch
- zammad-postgresql
labels:
io.rancher.container.pull_image: always
restart: always
command: ["zammad-backup"]
zammad-nginx:
image: 1drop/zammad:nginx
volumes:
- data-zammad:/home/zammad
environment:
- VIRTUAL_HOST=zammad.docker
depends_on:
- zammad
links:
- zammad-railsserver
- zammad-websocket
restart: always
labels:
io.rancher.container.pull_image: always
zammad-postgresql:
image: postgres:9.6
restart: always
volumes:
- data-postgres:/var/lib/postgres/data
labels:
io.rancher.container.pull_image: always
zammad-elasticsearch:
image: 1drop/zammad:elasticsearch
restart: always
volumes:
- data-elasticsearch:/usr/share/elasticsearch/data
labels:
io.rancher.container.pull_image: always
volumes:
data-zammad:
driver: local
data-elasticsearch:
driver: local
backup-zammad:
driver: local
data-postgres:
driver: local
#!/bin/bash
if [ "$1" = 'zammad-scheduler' ]; then
# wait for zammad process coming up
until (echo > /dev/tcp/zammad-railsserver/3000) &> /dev/null; do
echo "scheduler waiting for zammads railsserver to be ready..."
sleep 2
done
echo "scheduler can access raillsserver now..."
# start scheduler
cd ${ZAMMAD_DIR}
exec gosu ${ZAMMAD_USER}:${ZAMMAD_USER} bundle exec script/scheduler.rb run
fi
if [ "$1" = 'zammad-websocket' ]; then
# wait for zammad process coming up
until (echo > /dev/tcp/zammad-railsserver/3000) &> /dev/null; do
echo "websocket server waiting for zammads railsserver to be ready..."
sleep 5
done
echo "websocket server can access raillsserver now..."
cd ${ZAMMAD_DIR}
exec gosu ${ZAMMAD_USER}:${ZAMMAD_USER} bundle exec script/websocket-server.rb -b 0.0.0.0 start
fi
if [ "$1" = 'zammad-railsserver' ]; then
# wait for postgres process coming up on zammad-postgresql
until (echo > /dev/tcp/zammad-postgresql/5432) &> /dev/null; do
echo "zammad railsserver waiting for postgresql server to be ready..."
sleep 5
done
echo "railsserver can access postgresql server now..."
rsync -a --delete --exclude 'storage/fs/*' ${ZAMMAD_TMP_DIR}/ ${ZAMMAD_DIR}
cd ${ZAMMAD_DIR}
# update zammad
gem update bundler
bundle install
# db mirgrate
bundle exec rake db:migrate &> /dev/null
if [ $? != 0 ]; then
echo "creating db & searchindex..."
bundle exec rake db:create
bundle exec rake db:migrate
bundle exec rake db:seed
fi
# es config
bundle exec rails r "Setting.set('es_url', 'http://zammad-elasticsearch:9200')"
bundle exec rake searchindex:rebuild
chown -R ${ZAMMAD_USER}:${ZAMMAD_USER} ${ZAMMAD_DIR}
# run zammad
echo "starting zammad..."
echo "zammad will be accessable on http://localhost in some seconds"
if [ "${RAILS_SERVER}" == "puma" ]; then
exec gosu ${ZAMMAD_USER}:${ZAMMAD_USER} bundle exec puma -b tcp://0.0.0.0:3000 -e ${RAILS_ENV}
elif [ "${RAILS_SERVER}" == "unicorn" ]; then
exec gosu ${ZAMMAD_USER}:${ZAMMAD_USER} bundle exec unicorn -p 3000 -c config/unicorn.rb -E ${RAILS_ENV}
fi
fi
if [ "$1" = 'zammad-backup' ]; then
# wait for zammad process coming up
until (echo > /dev/tcp/zammad-railsserver/3000) &> /dev/null; do
echo "backup waiting for zammads railsserver to be ready..."
sleep 2
done
while true; do
TIMESTAMP="$(date +'%Y%m%d%H%M%S')"
echo "${TIMESTAMP} - backuping zammad..."
# delete old backups
test -d ${BACKUP_DIR} && find ${BACKUP_DIR}/*_zammad_*.gz -type f -mtime +${HOLD_DAYS} -exec rm {} \;
# tar files
tar -czf ${BACKUP_DIR}/${TIMESTAMP}_zammad_files.tar.gz ${ZAMMAD_DIR}
#db backup
pg_dump --dbname=postgresql://postgres@zammad-postgresql:5432/zammad_production | gzip > ${BACKUP_DIR}/${TIMESTAMP}_zammad_db.psql.gz
# wait until next backup
sleep ${BACKUP_SLEEP}
done
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment