- 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