@@ -4,7 +4,8 @@ services:
44
55 rails :
66 depends_on :
7- - database
7+ database :
8+ condition : service_healthy
89 build : ./docker/7.0
910 # image: 'damalis/rails:7.0'
1011 container_name : rails
@@ -19,20 +20,26 @@ services:
1920 links :
2021 - database
2122 - redis
23+ healthcheck :
24+ test : ["CMD-SHELL", "ps aux | grep rails > /dev/null || exit 1"]
25+ interval : 5s
26+ timeout : 5s
27+ retries : 50
2228 environment :
2329 DB_HOST : ' database'
2430 DB_USER : ' ${DB_USER}'
2531 DB_PASSWORD : ' ${DB_PASSWORD}'
2632 DB_NAME : ' ${DB_NAME}'
2733 TZ : ' ${LOCAL_TIMEZONE}'
28- labels :
34+ labels :
2935 - ' docker-volume-backup.stop-during-backup=true'
3036 command : bash -c "if [ -f \"/app/Gemfile.lock\" ]; then bundle install; else rails new . && echo -en \"gem 'redis', '~> 5.0', '>= 5.0.5'\\ngem 'mysql2', '~> 0.5.4'\\n\" >> /app/Gemfile; fi && rails s -p 9000 -b '0.0.0.0'"
3137
3238 webserver :
3339 depends_on :
34- - rails
35- image : ' httpd:latest'
40+ rails :
41+ condition : service_healthy
42+ image : httpd:latest
3643 container_name : webserver
3744 networks :
3845 - backend
@@ -59,36 +66,42 @@ services:
5966 environment :
6067 TZ : ' ${LOCAL_TIMEZONE}'
6168 command : bash -c "sh /tmp/ssl-conf.sh '${DOMAIN_NAME}' '${LETSENCRYPT_CONF_PREFIX}' '${HTTPD_PREFIX}/conf'"
62-
69+
6370 certbot :
6471 depends_on :
6572 - webserver
66- image : certbot/certbot
73+ image : certbot/certbot:latest
6774 container_name : certbot
6875 networks :
6976 - backend
7077 volumes :
7178 - ' certbot-etc:${LETSENCRYPT_CONF_PREFIX}'
7279 - ' certbot-var:/var/lib/letsencrypt'
73- - ' /tmp/acme-challenge:/tmp/acme-challenge'
74- restart : unless-stopped
80+ - ' /tmp/acme-challenge:/tmp/acme-challenge'
81+ restart : unless-stopped
82+ healthcheck :
83+ test : ["CMD-SHELL", "test -d ${LETSENCRYPT_CONF_PREFIX}/live/${DOMAIN_NAME} || exit 1"]
84+ interval : 5s
85+ timeout : 5s
86+ retries : 20
7587 environment :
7688 TZ : ' ${LOCAL_TIMEZONE}'
7789 entrypoint : /bin/sh -c "certbot certonly --webroot --webroot-path /tmp/acme-challenge --rsa-key-size 4096 --non-interactive --agree-tos --no-eff-email --force-renewal --email ${LETSENCRYPT_EMAIL} -d ${DOMAIN_NAME} -d www.${DOMAIN_NAME};
7890 trap exit TERM; while :; do certbot renew --dry-run; sleep 12h & wait $${!}; done;"
79-
91+
8092 phpmyadmin :
8193 depends_on :
82- - certbot
83- image : phpmyadmin/phpmyadmin
94+ certbot :
95+ condition : service_healthy
96+ image : phpmyadmin:latest
8497 container_name : phpmyadmin
8598 networks :
8699 - backend
87100 - frontend
88101 volumes :
89102 - type : bind
90103 source : ./phpmyadmin/apache2/sites-available/default-ssl.conf
91- target : ' ${APACHE_CONFDIR_PREFIX}/sites-available/default-ssl.conf'
104+ target : ' ${APACHE_CONFDIR_PREFIX}/sites-available/default-ssl.conf'
92105 - type : bind
93106 source : ./phpmyadmin/apache2/ports.conf
94107 target : ' ${APACHE_CONFDIR_PREFIX}/ports.conf'
@@ -123,9 +136,9 @@ services:
123136 mkdir -p ${WEBSERVER_DOC_ROOT}/../upload && chown www-data:www-data ${WEBSERVER_DOC_ROOT}/../upload && chmod a+w ${WEBSERVER_DOC_ROOT}/../upload; mkdir -p ${WEBSERVER_DOC_ROOT}/../save && chown www-data:www-data ${WEBSERVER_DOC_ROOT}/../save && chmod a+w ${WEBSERVER_DOC_ROOT}/../save;
124137 grep -qxF 'ServerName 127.0.0.1' ${APACHE_CONFDIR_PREFIX}/apache2.conf || echo -e '\\nServerName 127.0.0.1' >> ${APACHE_CONFDIR_PREFIX}/apache2.conf; grep -qe 'date.timezone = ${LOCAL_TIMEZONE}' ${PHP_INI_DIR_PREFIX}/php/conf.d/security.ini || echo 'date.timezone = ${LOCAL_TIMEZONE}' >> ${PHP_INI_DIR_PREFIX}/php/conf.d/security.ini;
125138 a2enmod ssl && a2ensite default-ssl && a2dissite 000-default && /docker-entrypoint.sh 'apache2-foreground'"
126-
139+
127140 database :
128- image : ' ${DATABASE_IMAGE_NAME}:${DATABASE_VERSION}'
141+ image : ${DATABASE_IMAGE_NAME}:${DATABASE_VERSION}
129142 container_name : database
130143 networks :
131144 - backend
@@ -140,6 +153,11 @@ services:
140153 restart : unless-stopped
141154 ports :
142155 - ' 3306:3306'
156+ healthcheck :
157+ test : ["CMD-SHELL", "${DATABASE_ADMIN_COMMANDLINE} ping --silent || exit 1"]
158+ interval : 5s
159+ timeout : 5s
160+ retries : 50
143161 environment :
144162 MYSQL_ROOT_PASSWORD : ' ${MYSQL_ROOT_PASSWORD}'
145163 MYSQL_DATABASE : ' ${DB_NAME}'
@@ -148,14 +166,14 @@ services:
148166 MYSQL_ALLOW_EMPTY_PASSWORD : ' No'
149167 MYSQL_ROOT_HOST : ' ${MYSQL_ROOT_HOST}'
150168 TZ : ' ${LOCAL_TIMEZONE}'
151- labels :
169+ labels :
152170 - " docker-volume-backup.stop-during-backup=true"
153171 - " docker-volume-backup.archive-pre=/bin/sh -c 'mysqldump -uroot -p${MYSQL_ROOT_PASSWORD} --all-databases > /tmp/backup/db_backup_data.sql'"
154172 - " docker-volume-backup.exec-label=database"
155- command : bash -c "apt-get -y update && apt-get install -y gettext-base && export PMA_CONTROLUSER=${PMA_CONTROLUSER} export PMA_CONTROLPASS=${PMA_CONTROLPASS} && envsubst '$$PMA_CONTROLUSER,$$PMA_CONTROLPASS' < /docker-entrypoint-initdb.d/create_tables.sql.template > /docker-entrypoint-initdb.d/create_tables.sql && docker-entrypoint.sh --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --default-authentication-plugin=mysql_native_password "
156-
173+ command : bash -c "${DATABASE_PACKAGE_MANAGER} && export PMA_CONTROLUSER=${PMA_CONTROLUSER} export PMA_CONTROLPASS=${PMA_CONTROLPASS} && envsubst '$$PMA_CONTROLUSER,$$PMA_CONTROLPASS' < /docker-entrypoint-initdb.d/create_tables.sql.template > /docker-entrypoint-initdb.d/create_tables.sql && docker-entrypoint.sh --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --default-authentication-plugin=${DATABASE_AUTHENTICATION_PLUGIN} "
174+
157175 redis :
158- image : ' redis:latest'
176+ image : redis:latest
159177 container_name : redis
160178 networks :
161179 - backend
@@ -174,7 +192,7 @@ services:
174192 ALLOW_EMPTY_PASSWORD : ' yes'
175193 TZ : ' ${LOCAL_TIMEZONE}'
176194 command : " redis-server ${REDIS_CONF_PREFIX}/redis/redis.conf"
177-
195+
178196 backup :
179197 image : offen/docker-volume-backup:latest
180198 container_name : backup
@@ -195,7 +213,7 @@ services:
195213 BACKUP_FILENAME : ' backup-%Y-%m-%dT%H-%M-%S.tar.gz'
196214 BACKUP_RETENTION_DAYS : ' 7'
197215 EXEC_LABEL : ' database'
198- BACKUP_EXCLUDE_REGEXP : ' bin|test|tmp|log|\\.log$$'
216+ BACKUP_EXCLUDE_REGEXP : ' bin|test|tmp|log|\\.log$$'
199217
200218networks :
201219 backend : null
@@ -223,6 +241,6 @@ volumes:
223241 dtredis :
224242 name : redis-data
225243 certbot-etc :
226- external : true
244+ external : true
227245 certbot-var :
228246 name : certbot-var
0 commit comments