- fixed ipv6 in google kubernetes engine
- replaced wget with curl - made zammad image smaller by using tar.gz install instead of git clone - moved sed commands to entrypoint - added variables to entrypoint to set used servers dynamically - added kubernetes backup cronjob - added postgresql volume to compose file - write nginx logs to stdout & stderr - create zammad user & group manually with uid/gid 1000
This commit is contained in:
parent
ce474aabef
commit
1f5c9036c2
@ -2,8 +2,10 @@
|
|||||||
|
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
|
: "${ZAMMAD_RAILSSERVER_HOST:=zammad-railsserver}"
|
||||||
|
|
||||||
function check_railsserver_available {
|
function check_railsserver_available {
|
||||||
until (echo > /dev/tcp/zammad-railsserver/3000) &> /dev/null; do
|
until (echo > /dev/tcp/${ZAMMAD_RAILSSERVER_HOST}/3000) &> /dev/null; do
|
||||||
echo "waiting for railsserver to be ready..."
|
echo "waiting for railsserver to be ready..."
|
||||||
sleep 60
|
sleep 60
|
||||||
done
|
done
|
||||||
@ -19,8 +21,10 @@ function zammad_backup {
|
|||||||
find ${BACKUP_DIR}/*_zammad_*.gz -type f -mtime +${HOLD_DAYS} -exec rm {} \;
|
find ${BACKUP_DIR}/*_zammad_*.gz -type f -mtime +${HOLD_DAYS} -exec rm {} \;
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ "${NO_FILE_BACKUP}" != "yes" ]; then
|
||||||
# tar files
|
# tar files
|
||||||
tar -czf ${BACKUP_DIR}/${TIMESTAMP}_zammad_files.tar.gz ${ZAMMAD_DIR}
|
tar -czf ${BACKUP_DIR}/${TIMESTAMP}_zammad_files.tar.gz ${ZAMMAD_DIR}
|
||||||
|
fi
|
||||||
|
|
||||||
#db backup
|
#db backup
|
||||||
pg_dump --dbname=postgresql://postgres@zammad-postgresql:5432/zammad_production | gzip > ${BACKUP_DIR}/${TIMESTAMP}_zammad_db.psql.gz
|
pg_dump --dbname=postgresql://postgres@zammad-postgresql:5432/zammad_production | gzip > ${BACKUP_DIR}/${TIMESTAMP}_zammad_db.psql.gz
|
||||||
@ -43,3 +47,9 @@ if [ "$1" = 'zammad-backup-once' ]; then
|
|||||||
|
|
||||||
zammad_backup
|
zammad_backup
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ "$1" = 'zammad-backup-db' ]; then
|
||||||
|
NO_FILE_BACKUP="yes"
|
||||||
|
|
||||||
|
zammad_backup
|
||||||
|
fi
|
||||||
|
@ -3,12 +3,14 @@ MAINTAINER Zammad <info@zammad.org>
|
|||||||
ARG BUILD_DATE
|
ARG BUILD_DATE
|
||||||
|
|
||||||
ENV ZAMMAD_DIR /opt/zammad
|
ENV ZAMMAD_DIR /opt/zammad
|
||||||
ENV ZAMMAD_TMP_DIR /tmp/zammad
|
|
||||||
ENV ZAMMAD_USER zammad
|
ENV ZAMMAD_USER zammad
|
||||||
ENV RAILS_ENV production
|
ENV RAILS_ENV production
|
||||||
ENV RAILS_SERVER puma
|
ENV RAILS_SERVER puma
|
||||||
ENV GIT_URL https://github.com/zammad/zammad.git
|
ENV PROJECT_URL https://github.com/zammad/zammad
|
||||||
|
ENV GIT_URL ${PROJECT_URL}.git
|
||||||
ENV GIT_BRANCH develop
|
ENV GIT_BRANCH develop
|
||||||
|
ENV ZAMMAD_TMP_DIR /tmp/zammad-${GIT_BRANCH}
|
||||||
|
ENV TAR_GZ_URL ${PROJECT_URL}/archive/${GIT_BRANCH}.tar.gz
|
||||||
ENV GOSU_VERSION 1.10
|
ENV GOSU_VERSION 1.10
|
||||||
ENV ZAMMAD_READY_FILE tmp/zammad.ready
|
ENV ZAMMAD_READY_FILE tmp/zammad.ready
|
||||||
|
|
||||||
@ -23,31 +25,32 @@ LABEL org.label-schema.build-date="$BUILD_DATE" \
|
|||||||
org.label-schema.schema-version="1.2" \
|
org.label-schema.schema-version="1.2" \
|
||||||
org.label-schema.docker.cmd="sysctl -w vm.max_map_count=262144;docker-compose up"
|
org.label-schema.docker.cmd="sysctl -w vm.max_map_count=262144;docker-compose up"
|
||||||
|
|
||||||
# install dependencies, GOSU & zammad
|
# install dependencies & gosu
|
||||||
RUN BUILD_DEPENDENCIES="git build-essential libffi-dev libpq5 libpq-dev nginx rsync" \
|
RUN BUILD_DEPENDENCIES="build-essential ca-certificates curl git libffi-dev libpq5 libpq-dev nginx rsync" \
|
||||||
GOSU_DEPENDENCIES="ca-certificates wget" \
|
|
||||||
set -ex \
|
set -ex \
|
||||||
&& apt-get update && apt-get install -y --force-yes --no-install-recommends ${BUILD_DEPENDENCIES} ${GOSU_DEPENDENCIES} && rm -rf /var/lib/apt/lists/* \
|
&& apt-get update && apt-get install -y --force-yes --no-install-recommends ${BUILD_DEPENDENCIES} && rm -rf /var/lib/apt/lists/* \
|
||||||
&& wget -O /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$(dpkg --print-architecture)" \
|
&& curl -s -J -L -o /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/${GOSU_VERSION}/gosu-$(dpkg --print-architecture)" \
|
||||||
&& wget -O /usr/local/bin/gosu.asc "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$(dpkg --print-architecture).asc" \
|
&& curl -s -J -L -o /usr/local/bin/gosu.asc "https://github.com/tianon/gosu/releases/download/${GOSU_VERSION}/gosu-$(dpkg --print-architecture).asc" \
|
||||||
&& export GNUPGHOME="$(mktemp -d)" \
|
&& export GNUPGHOME="$(mktemp -d)" \
|
||||||
&& gpg --keyserver ha.pool.sks-keyservers.net --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4 \
|
&& gpg --keyserver ha.pool.sks-keyservers.net --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4 \
|
||||||
&& gpg --batch --verify /usr/local/bin/gosu.asc /usr/local/bin/gosu \
|
&& gpg --batch --verify /usr/local/bin/gosu.asc /usr/local/bin/gosu \
|
||||||
&& rm -rf "${GNUPGHOME}" /usr/local/bin/gosu.asc \
|
&& rm -rf "${GNUPGHOME}" /usr/local/bin/gosu.asc \
|
||||||
&& chmod +x /usr/local/bin/gosu \
|
&& chmod +x /usr/local/bin/gosu \
|
||||||
&& gosu nobody true \
|
&& gosu nobody true
|
||||||
&& useradd -M -d ${ZAMMAD_DIR} -s /bin/bash ${ZAMMAD_USER} \
|
|
||||||
|
# install zammad
|
||||||
|
RUN groupadd -g 1000 ${ZAMMAD_USER} \
|
||||||
|
&& useradd -M -d ${ZAMMAD_DIR} -s /bin/bash -u 1000 -g 1000 ${ZAMMAD_USER} \
|
||||||
&& cd $(dirname ${ZAMMAD_TMP_DIR}) \
|
&& cd $(dirname ${ZAMMAD_TMP_DIR}) \
|
||||||
&& git clone --depth 1 -b "${GIT_BRANCH}" "${GIT_URL}" \
|
&& curl -s -J -L -O "${TAR_GZ_URL}" \
|
||||||
|
&& tar -xzf zammad-${GIT_BRANCH}.tar.gz \
|
||||||
|
&& rm zammad-${GIT_BRANCH}.tar.gz \
|
||||||
&& cd ${ZAMMAD_TMP_DIR} \
|
&& cd ${ZAMMAD_TMP_DIR} \
|
||||||
&& bundle install --without test development mysql \
|
&& bundle install --without test development mysql \
|
||||||
&& contrib/packager.io/fetch_locales.rb \
|
&& contrib/packager.io/fetch_locales.rb \
|
||||||
&& sed -e 's#.*adapter: postgresql# adapter: nulldb#g' -e 's#.*username:.*# username: postgres#g' -e 's#.*password:.*# password: \n host: zammad-postgresql\n#g' < config/database.yml.pkgr > config/database.yml \
|
&& sed -e 's#.*adapter: postgresql# adapter: nulldb#g' -e 's#.*username:.*# username: postgres#g' -e 's#.*password:.*# password: \n host: zammad-postgresql\n#g' < config/database.yml.pkgr > config/database.yml \
|
||||||
&& bundle exec rake assets:precompile \
|
&& bundle exec rake assets:precompile \
|
||||||
&& sed -e 's#.*adapter: postgresql# adapter: postgresql#g' -e 's#.*username:.*# username: postgres#g' -e 's#.*password:.*# password: \n host: zammad-postgresql\n#g' < config/database.yml.pkgr > config/database.yml \
|
|
||||||
&& rm -r tmp/cache \
|
&& rm -r tmp/cache \
|
||||||
&& sed -i -e "s/.*config.cache_store.*file_store.*cache_file_store.*/ config.cache_store = :dalli_store, 'zammad-memcached:11211'\n config.session_store = :dalli_store, 'zammad-memcached:11211'/" config/application.rb \
|
|
||||||
&& sed -e 's#server localhost:3000#server zammad-railsserver:3000#g' -e 's#localhost:6042#zammad-websocket:6042#g' -e 's#server_name localhost#server_name _#g' -e 's#.*\(access\|error\)_log.*log;##g' < contrib/nginx/zammad.conf > /etc/nginx/sites-enabled/default \
|
|
||||||
&& chown -R ${ZAMMAD_USER}:${ZAMMAD_USER} ${ZAMMAD_TMP_DIR}
|
&& chown -R ${ZAMMAD_USER}:${ZAMMAD_USER} ${ZAMMAD_TMP_DIR}
|
||||||
|
|
||||||
# docker init
|
# docker init
|
||||||
|
@ -2,6 +2,15 @@
|
|||||||
|
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
|
: "${ELASTICSEARCH_HOST:=zammad-elasticsearch}"
|
||||||
|
: "${MEMCACHED_HOST:=zammad-memcached}"
|
||||||
|
: "${POSTGRESQL_HOST:=zammad-postgresql}"
|
||||||
|
: "${POSTGRESQL_USER:=postgres}"
|
||||||
|
: "${POSTGRESQL_PASS:=}"
|
||||||
|
: "${ZAMMAD_RAILSSERVER_HOST:=zammad-railsserver}"
|
||||||
|
: "${ZAMMAD_WEBSOCKET_HOST:=zammad-websocket}"
|
||||||
|
: "${NGINX_SERVER_NAME:=_}"
|
||||||
|
|
||||||
function check_zammad_ready {
|
function check_zammad_ready {
|
||||||
until [ -f "${ZAMMAD_DIR}/${ZAMMAD_READY_FILE}" ]; do
|
until [ -f "${ZAMMAD_DIR}/${ZAMMAD_READY_FILE}" ]; do
|
||||||
echo "waiting for install or update to be ready..."
|
echo "waiting for install or update to be ready..."
|
||||||
@ -11,7 +20,7 @@ function check_zammad_ready {
|
|||||||
|
|
||||||
# zammad init
|
# zammad init
|
||||||
if [ "$1" = 'zammad-init' ]; then
|
if [ "$1" = 'zammad-init' ]; then
|
||||||
until (echo > /dev/tcp/zammad-postgresql/5432) &> /dev/null; do
|
until (echo > /dev/tcp/${POSTGRESQL_HOST}/5432) &> /dev/null; do
|
||||||
echo "zammad railsserver waiting for postgresql server to be ready..."
|
echo "zammad railsserver waiting for postgresql server to be ready..."
|
||||||
sleep 5
|
sleep 5
|
||||||
done
|
done
|
||||||
@ -22,6 +31,10 @@ if [ "$1" = 'zammad-init' ]; then
|
|||||||
|
|
||||||
cd ${ZAMMAD_DIR}
|
cd ${ZAMMAD_DIR}
|
||||||
|
|
||||||
|
# configure database & cache
|
||||||
|
sed -e "s#.*adapter:.*# adapter: postgresql#g" -e "s#.*username:.*# username: ${POSTGRESQL_USER}#g" -e "s#.*password:.*# password: ${POSTGRESQL_PASS}\n host: ${POSTGRESQL_HOST}\n#g" < config/database.yml.pkgr > config/database.yml
|
||||||
|
sed -i -e "s/.*config.cache_store.*file_store.*cache_file_store.*/ config.cache_store = :dalli_store, '${MEMCACHED_HOST}:11211'\n config.session_store = :dalli_store, '${MEMCACHED_HOST}:11211'/" config/application.rb
|
||||||
|
|
||||||
echo "initialising / updating database..."
|
echo "initialising / updating database..."
|
||||||
# db mirgrate
|
# db mirgrate
|
||||||
set +e
|
set +e
|
||||||
@ -37,9 +50,14 @@ if [ "$1" = 'zammad-init' ]; then
|
|||||||
|
|
||||||
echo "changing settings..."
|
echo "changing settings..."
|
||||||
# es config
|
# es config
|
||||||
bundle exec rails r "Setting.set('es_url', 'http://zammad-elasticsearch:9200')"
|
bundle exec rails r "Setting.set('es_url', 'http://${ELASTICSEARCH_HOST}:9200')"
|
||||||
|
|
||||||
until (echo > /dev/tcp/zammad-elasticsearch/9200) &> /dev/null; do
|
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
|
||||||
|
|
||||||
|
until (echo > /dev/tcp/${ELASTICSEARCH_HOST}/9200) &> /dev/null; do
|
||||||
echo "zammad railsserver waiting for elasticsearch server to be ready..."
|
echo "zammad railsserver waiting for elasticsearch server to be ready..."
|
||||||
sleep 5
|
sleep 5
|
||||||
done
|
done
|
||||||
@ -57,6 +75,11 @@ fi
|
|||||||
|
|
||||||
# zammad nginx
|
# zammad nginx
|
||||||
if [ "$1" = 'zammad-nginx' ]; then
|
if [ "$1" = 'zammad-nginx' ]; then
|
||||||
|
# configure nginx
|
||||||
|
if [ -z "$(env|grep KUBERNETES)" ]; then
|
||||||
|
sed -e "s#server .*:3000#server ${ZAMMAD_RAILSSERVER_HOST}:3000#g" -e "s#server .*:6042#server ${ZAMMAD_WEBSOCKET_HOST}:6042#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
|
||||||
|
|
||||||
until [ -f "${ZAMMAD_DIR}/${ZAMMAD_READY_FILE}" ] && [ -n "$(grep zammad-railsserver < ${ZAMMAD_DIR}/${ZAMMAD_READY_FILE})" ] && [ -n "$(grep zammad-scheduler < ${ZAMMAD_DIR}/${ZAMMAD_READY_FILE})" ] && [ -n "$(grep zammad-websocket < ${ZAMMAD_DIR}/${ZAMMAD_READY_FILE})" ] ; do
|
until [ -f "${ZAMMAD_DIR}/${ZAMMAD_READY_FILE}" ] && [ -n "$(grep zammad-railsserver < ${ZAMMAD_DIR}/${ZAMMAD_READY_FILE})" ] && [ -n "$(grep zammad-scheduler < ${ZAMMAD_DIR}/${ZAMMAD_READY_FILE})" ] && [ -n "$(grep zammad-websocket < ${ZAMMAD_DIR}/${ZAMMAD_READY_FILE})" ] ; do
|
||||||
echo "waiting for all zammad services to start..."
|
echo "waiting for all zammad services to start..."
|
||||||
sleep 5
|
sleep 5
|
||||||
@ -80,7 +103,7 @@ if [ "$1" = 'zammad-railsserver' ]; then
|
|||||||
|
|
||||||
echo "zammad-railsserver" >> ${ZAMMAD_DIR}/${ZAMMAD_READY_FILE}
|
echo "zammad-railsserver" >> ${ZAMMAD_DIR}/${ZAMMAD_READY_FILE}
|
||||||
|
|
||||||
exec gosu ${ZAMMAD_USER}:${ZAMMAD_USER} bundle exec puma -b tcp://0.0.0.0:3000 -e ${RAILS_ENV}
|
exec gosu ${ZAMMAD_USER}:${ZAMMAD_USER} bundle exec rails server puma -b [::] -p 3000 -e ${RAILS_ENV}
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
@ -108,5 +131,5 @@ if [ "$1" = 'zammad-websocket' ]; then
|
|||||||
|
|
||||||
echo "zammad-websocket" >> ${ZAMMAD_DIR}/${ZAMMAD_READY_FILE}
|
echo "zammad-websocket" >> ${ZAMMAD_DIR}/${ZAMMAD_READY_FILE}
|
||||||
|
|
||||||
exec gosu ${ZAMMAD_USER}:${ZAMMAD_USER} bundle exec script/websocket-server.rb -b 0.0.0.0 start
|
exec gosu ${ZAMMAD_USER}:${ZAMMAD_USER} bundle exec script/websocket-server.rb -b 0.0.0.0 -p 6042 start
|
||||||
fi
|
fi
|
||||||
|
@ -65,6 +65,8 @@ services:
|
|||||||
labels:
|
labels:
|
||||||
io.rancher.container.pull_image: always
|
io.rancher.container.pull_image: always
|
||||||
restart: always
|
restart: always
|
||||||
|
volumes:
|
||||||
|
- postgresql-data:/var/lib/postgresql/data
|
||||||
|
|
||||||
zammad-railsserver:
|
zammad-railsserver:
|
||||||
command: ["zammad-railsserver"]
|
command: ["zammad-railsserver"]
|
||||||
@ -116,6 +118,8 @@ services:
|
|||||||
volumes:
|
volumes:
|
||||||
elasticsearch-data:
|
elasticsearch-data:
|
||||||
driver: local
|
driver: local
|
||||||
|
postgresql-data:
|
||||||
|
driver: local
|
||||||
zammad-backup:
|
zammad-backup:
|
||||||
driver: local
|
driver: local
|
||||||
zammad-data:
|
zammad-data:
|
||||||
|
@ -12,6 +12,20 @@ spec:
|
|||||||
requests:
|
requests:
|
||||||
storage: 10G
|
storage: 10G
|
||||||
|
|
||||||
|
---
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
apiVersion: v1
|
||||||
|
metadata:
|
||||||
|
name: zammad-backup
|
||||||
|
namespace: zammad
|
||||||
|
spec:
|
||||||
|
storageClassName: standard
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteOnce
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: 10G
|
||||||
|
|
||||||
---
|
---
|
||||||
kind: PersistentVolumeClaim
|
kind: PersistentVolumeClaim
|
||||||
apiVersion: v1
|
apiVersion: v1
|
||||||
|
@ -26,6 +26,9 @@ data:
|
|||||||
|
|
||||||
root /opt/zammad/public;
|
root /opt/zammad/public;
|
||||||
|
|
||||||
|
access_log /dev/stdout;
|
||||||
|
error_log /dev/stderr;
|
||||||
|
|
||||||
client_max_body_size 50M;
|
client_max_body_size 50M;
|
||||||
|
|
||||||
location ~ ^/(assets/|robots.txt|humans.txt|favicon.ico) {
|
location ~ ^/(assets/|robots.txt|humans.txt|favicon.ico) {
|
||||||
|
23
kubernetes/60_cronjob_backup.yaml
Normal file
23
kubernetes/60_cronjob_backup.yaml
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
apiVersion: batch/v1beta1
|
||||||
|
kind: CronJob
|
||||||
|
metadata:
|
||||||
|
name: backup
|
||||||
|
namespace: zammad
|
||||||
|
spec:
|
||||||
|
schedule: "0 0 * * *"
|
||||||
|
jobTemplate:
|
||||||
|
spec:
|
||||||
|
template:
|
||||||
|
spec:
|
||||||
|
restartPolicy: OnFailure
|
||||||
|
volumes:
|
||||||
|
- name: zammad-backup
|
||||||
|
persistentVolumeClaim:
|
||||||
|
claimName: zammad-backup
|
||||||
|
containers:
|
||||||
|
- name: zammad-backup
|
||||||
|
image: zammad/zammad-docker-compose:zammad-postgresql
|
||||||
|
args: [ "zammad-backup-db" ]
|
||||||
|
volumeMounts:
|
||||||
|
- name: zammad-backup
|
||||||
|
mountPath: /var/tmp/zammad
|
@ -37,8 +37,6 @@ beta and not ready for production.
|
|||||||
|
|
||||||
|
|
||||||
## If you want to help to improve the Kuberntes deployments here are some todos:
|
## If you want to help to improve the Kuberntes deployments here are some todos:
|
||||||
* create a zammad helm chart
|
|
||||||
* document steps to use existing helm charts for elasticsearch, postgresql and so on
|
|
||||||
* add cpu & mem limits
|
* add cpu & mem limits
|
||||||
* add rolling upgrade strategy to deployments
|
* add rolling upgrade strategy to deployments
|
||||||
* add RBAC
|
* add RBAC
|
||||||
|
Loading…
Reference in New Issue
Block a user