@@ -4,11 +4,12 @@ services:
44
55 joomla :
66 depends_on :
7- - database
8- image : ' joomla:${PHP_IMAGE_NAME}'
7+ database :
8+ condition : service_healthy
9+ image : joomla:${PHP_IMAGE_NAME}
910 container_name : joomla
1011 networks :
11- - backend
12+ - backend
1213 volumes :
1314 - ' html:${WEBSERVER_DOC_ROOT}'
1415 - type : bind
@@ -24,20 +25,24 @@ services:
2425 links :
2526 - database
2627 - redis
27- - varnish
28+ healthcheck :
29+ test : ["CMD-SHELL", "/bin/pidof php-fpm > /dev/null || exit 1"]
30+ interval : 5s
31+ timeout : 5s
32+ retries : 20
2833 environment :
2934 JOOMLA_DB_HOST : ' database'
3035 JOOMLA_DB_USER : ' ${JOOMLA_DB_USER}'
3136 JOOMLA_DB_PASSWORD : ' ${JOOMLA_DB_PASSWORD}'
3237 JOOMLA_DB_NAME : ' ${JOOMLA_DB_NAME}'
3338 TZ : ' ${LOCAL_TIMEZONE}'
34- labels :
39+ labels :
3540 - ' docker-volume-backup.stop-during-backup=true'
3641 entrypoint : bash -c "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; /entrypoint.sh 'php-fpm'"
3742
3843 webserver :
3944 depends_on :
40- - joomla
45+ - varnish
4146 image : nginx:stable
4247 container_name : webserver
4348 networks :
@@ -72,36 +77,42 @@ services:
7277 NGINX_PORT : 80
7378 TZ : ' ${LOCAL_TIMEZONE}'
7479 command : bash -c "/docker-entrypoint.sh nginx -v; sh /tmp/ssl-conf.sh '${DOMAIN_NAME}' '${LETSENCRYPT_CONF_PREFIX}' '${NGINX_PREFIX}'"
75-
80+
7681 certbot :
7782 depends_on :
7883 - webserver
79- image : certbot/certbot
84+ image : certbot/certbot:latest
8085 container_name : certbot
8186 networks :
8287 - backend
8388 volumes :
8489 - ' certbot-etc:${LETSENCRYPT_CONF_PREFIX}'
8590 - ' certbot-var:/var/lib/letsencrypt'
86- - ' /tmp/acme-challenge:/tmp/acme-challenge'
87- restart : unless-stopped
91+ - ' /tmp/acme-challenge:/tmp/acme-challenge'
92+ restart : unless-stopped
93+ healthcheck :
94+ test : ["CMD-SHELL", "test -d ${LETSENCRYPT_CONF_PREFIX}/live/${DOMAIN_NAME} || exit 1"]
95+ interval : 5s
96+ timeout : 5s
97+ retries : 20
8898 environment :
8999 TZ : ' ${LOCAL_TIMEZONE}'
90100 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} -d mail.${DOMAIN_NAME};
91101 trap exit TERM; while :; do certbot renew --dry-run; sleep 12h & wait $${!}; done;"
92-
102+
93103 phpmyadmin :
94104 depends_on :
95- - certbot
96- image : phpmyadmin/phpmyadmin
105+ certbot :
106+ condition : service_healthy
107+ image : phpmyadmin:latest
97108 container_name : phpmyadmin
98109 networks :
99110 - backend
100111 - frontend
101112 volumes :
102113 - type : bind
103114 source : ./phpmyadmin/apache2/sites-available/default-ssl.conf
104- target : ' ${APACHE_CONFDIR_PREFIX}/sites-available/default-ssl.conf'
115+ target : ' ${APACHE_CONFDIR_PREFIX}/sites-available/default-ssl.conf'
105116 - type : bind
106117 source : ./phpmyadmin/apache2/ports.conf
107118 target : ' ${APACHE_CONFDIR_PREFIX}/ports.conf'
@@ -110,13 +121,12 @@ services:
110121 target : ' ${LETSENCRYPT_CONF_PREFIX}/options-ssl-apache.conf'
111122 - type : bind
112123 source : ./phpmyadmin/config.user.inc.php
113- target : ' ${PMA_CONF_FOLDER}/config.user.inc.php'
124+ target : ' ${PMA_CONF_FOLDER}/config.user.inc.php'
114125 - type : bind
115126 source : ./phpmyadmin/php/conf.d/security.ini
116127 target : ' ${PHP_INI_DIR_PREFIX}/php/conf.d/security.ini'
117128 - ' certbot-etc:${LETSENCRYPT_CONF_PREFIX}'
118129 hostname : phpmyadmin
119- ipc : private
120130 restart : unless-stopped
121131 ports :
122132 - ' 9090:443'
@@ -137,9 +147,9 @@ services:
137147 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;
138148 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;
139149 a2enmod ssl && a2ensite default-ssl && a2dissite 000-default && /docker-entrypoint.sh 'apache2-foreground'"
140-
150+
141151 database :
142- image : ' ${DATABASE_IMAGE_NAME}:${DATABASE_VERSION}'
152+ image : ${DATABASE_IMAGE_NAME}:${DATABASE_VERSION}
143153 container_name : database
144154 networks :
145155 - backend
@@ -154,6 +164,11 @@ services:
154164 restart : unless-stopped
155165 ports :
156166 - ' 3306:3306'
167+ healthcheck :
168+ test : ["CMD-SHELL", "${DATABASE_ADMIN_COMMANDLINE} ping --silent || exit 1"]
169+ interval : 5s
170+ timeout : 5s
171+ retries : 50
157172 environment :
158173 MYSQL_ROOT_PASSWORD : ' ${MYSQL_ROOT_PASSWORD}'
159174 MYSQL_DATABASE : ' ${JOOMLA_DB_NAME}'
@@ -162,14 +177,14 @@ services:
162177 MYSQL_ALLOW_EMPTY_PASSWORD : ' No'
163178 MYSQL_ROOT_HOST : ' ${MYSQL_ROOT_HOST}'
164179 TZ : ' ${LOCAL_TIMEZONE}'
165- labels :
180+ labels :
166181 - " docker-volume-backup.stop-during-backup=true"
167182 - " docker-volume-backup.archive-pre=/bin/sh -c 'mysqldump -uroot -p${MYSQL_ROOT_PASSWORD} --all-databases > /tmp/backup/db_backup_data.sql'"
168183 - " docker-volume-backup.exec-label=database"
169- 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"
170-
184+ 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}"
185+
171186 redis :
172- image : ' redis:latest'
187+ image : redis:latest
173188 container_name : redis
174189 networks :
175190 - backend
@@ -190,7 +205,10 @@ services:
190205 command : " redis-server ${REDIS_CONF_PREFIX}/redis/redis.conf"
191206
192207 varnish :
193- image : ' varnish:stable'
208+ depends_on :
209+ wordpress :
210+ condition : service_healthy
211+ image : varnish:${VARNISH_VERSION}
194212 container_name : varnish
195213 networks :
196214 - backend
@@ -209,10 +227,10 @@ services:
209227 TZ : ' ${LOCAL_TIMEZONE}'
210228 labels :
211229 - " docker-volume-backup.stop-during-backup=true"
212- command : " -a http=:8080,HTTP -p default_ttl=3600"
213-
230+ command : " -a http=:8080,HTTP -p default_ttl=3600 -n /tmp/varnish_workdir "
231+
214232 mail :
215- image : ' mailhog/mailhog'
233+ image : mailhog/mailhog
216234 container_name : mail
217235 networks :
218236 - backend
@@ -225,7 +243,7 @@ services:
225243 MH_HOSTNAME : ' mail.${DOMAIN_NAME}'
226244 MH_AUTH_FILE : ' ${DOMAIN_NAME}-auth'
227245 entrypoint : sh -c "echo ${PMA_HTPASSWD_USERNAME}:$(MailHog bcrypt ${PMA_HTPASSWD_PASSWORD}) > ${DOMAIN_NAME}-auth && MailHog"
228-
246+
229247 backup :
230248 image : offen/docker-volume-backup:latest
231249 container_name : backup
@@ -246,7 +264,7 @@ services:
246264 BACKUP_FILENAME : ' backup-%Y-%m-%dT%H-%M-%S.tar.gz'
247265 BACKUP_RETENTION_DAYS : ' 7'
248266 EXEC_LABEL : ' database'
249- # BACKUP_EXCLUDE_REGEXP: 'folder|folder|file|\\.log$$'
267+ # BACKUP_EXCLUDE_REGEXP: 'folder|folder|file|\\.log$$'
250268
251269networks :
252270 backend : null
@@ -274,6 +292,6 @@ volumes:
274292 dtredis :
275293 name : redis-data
276294 certbot-etc :
277- external : true
295+ external : true
278296 certbot-var :
279297 name : certbot-var
0 commit comments