@@ -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,19 +20,25 @@ services:
1920 links :
2021 - database
2122 - redis
23+ healthcheck :
24+ test : ["CMD-SHELL", "ps aux | grep -q "[p]uma" > /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'"
31-
37+
3238 webserver :
3339 depends_on :
34- - rails
40+ rails :
41+ condition : service_healthy
3542 image : nginx:stable
3643 container_name : webserver
3744 networks :
@@ -64,36 +71,42 @@ services:
6471 NGINX_PORT : 80
6572 TZ : ' ${LOCAL_TIMEZONE}'
6673 command : bash -c "/docker-entrypoint.sh nginx -v; sh /tmp/ssl-conf.sh '${DOMAIN_NAME}' '${LETSENCRYPT_CONF_PREFIX}' '${NGINX_PREFIX}'"
67-
74+
6875 certbot :
6976 depends_on :
7077 - webserver
71- image : certbot/certbot
78+ image : certbot/certbot:latest
7279 container_name : certbot
7380 networks :
7481 - backend
7582 volumes :
7683 - ' certbot-etc:${LETSENCRYPT_CONF_PREFIX}'
7784 - ' certbot-var:/var/lib/letsencrypt'
78- - ' /tmp/acme-challenge:/tmp/acme-challenge'
79- restart : unless-stopped
85+ - ' /tmp/acme-challenge:/tmp/acme-challenge'
86+ restart : unless-stopped
87+ healthcheck :
88+ test : ["CMD-SHELL", "test -d ${LETSENCRYPT_CONF_PREFIX}/live/${DOMAIN_NAME} || exit 1"]
89+ interval : 5s
90+ timeout : 5s
91+ retries : 20
8092 environment :
8193 TZ : ' ${LOCAL_TIMEZONE}'
8294 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};
8395 trap exit TERM; while :; do certbot renew --dry-run; sleep 12h & wait $${!}; done;"
84-
96+
8597 phpmyadmin :
8698 depends_on :
87- - certbot
88- image : phpmyadmin/phpmyadmin
99+ certbot :
100+ condition : service_healthy
101+ image : phpmyadmin:latest
89102 container_name : phpmyadmin
90103 networks :
91104 - backend
92105 - frontend
93106 volumes :
94107 - type : bind
95108 source : ./phpmyadmin/apache2/sites-available/default-ssl.conf
96- target : ' ${APACHE_CONFDIR_PREFIX}/sites-available/default-ssl.conf'
109+ target : ' ${APACHE_CONFDIR_PREFIX}/sites-available/default-ssl.conf'
97110 - type : bind
98111 source : ./phpmyadmin/apache2/ports.conf
99112 target : ' ${APACHE_CONFDIR_PREFIX}/ports.conf'
@@ -128,9 +141,9 @@ services:
128141 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;
129142 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;
130143 a2enmod ssl && a2ensite default-ssl && a2dissite 000-default && /docker-entrypoint.sh 'apache2-foreground'"
131-
144+
132145 database :
133- image : ' ${DATABASE_IMAGE_NAME}:${DATABASE_VERSION}'
146+ image : ${DATABASE_IMAGE_NAME}:${DATABASE_VERSION}
134147 container_name : database
135148 networks :
136149 - backend
@@ -145,6 +158,11 @@ services:
145158 restart : unless-stopped
146159 ports :
147160 - ' 3306:3306'
161+ healthcheck :
162+ test : ["CMD-SHELL", "${DATABASE_ADMIN_COMMANDLINE} ping --silent || exit 1"]
163+ interval : 5s
164+ timeout : 5s
165+ retries : 50
148166 environment :
149167 MYSQL_ROOT_PASSWORD : ' ${MYSQL_ROOT_PASSWORD}'
150168 MYSQL_DATABASE : ' ${DB_NAME}'
@@ -153,14 +171,14 @@ services:
153171 MYSQL_ALLOW_EMPTY_PASSWORD : ' No'
154172 MYSQL_ROOT_HOST : ' ${MYSQL_ROOT_HOST}'
155173 TZ : ' ${LOCAL_TIMEZONE}'
156- labels :
174+ labels :
157175 - " docker-volume-backup.stop-during-backup=true"
158176 - " docker-volume-backup.archive-pre=/bin/sh -c 'mysqldump -uroot -p${MYSQL_ROOT_PASSWORD} --all-databases > /tmp/backup/db_backup_data.sql'"
159177 - " docker-volume-backup.exec-label=database"
160- 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 "
161-
178+ 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} "
179+
162180 redis :
163- image : ' redis:latest'
181+ image : redis:latest
164182 container_name : redis
165183 networks :
166184 - backend
@@ -179,7 +197,7 @@ services:
179197 ALLOW_EMPTY_PASSWORD : ' yes'
180198 TZ : ' ${LOCAL_TIMEZONE}'
181199 command : " redis-server ${REDIS_CONF_PREFIX}/redis/redis.conf"
182-
200+
183201 backup :
184202 image : offen/docker-volume-backup:latest
185203 container_name : backup
@@ -200,7 +218,7 @@ services:
200218 BACKUP_FILENAME : ' backup-%Y-%m-%dT%H-%M-%S.tar.gz'
201219 BACKUP_RETENTION_DAYS : ' 7'
202220 EXEC_LABEL : ' database'
203- BACKUP_EXCLUDE_REGEXP : ' bin|test|tmp|log|\\.log$$'
221+ BACKUP_EXCLUDE_REGEXP : ' bin|test|tmp|log|\\.log$$'
204222
205223networks :
206224 backend : null
@@ -228,6 +246,6 @@ volumes:
228246 dtredis :
229247 name : redis-data
230248 certbot-etc :
231- external : true
249+ external : true
232250 certbot-var :
233251 name : certbot-var
0 commit comments