@@ -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
@@ -27,6 +28,11 @@ services:
2728 links :
2829 - database
2930 - redis
31+ healthcheck :
32+ test : ["CMD-SHELL", "/bin/pidof php-fpm > /dev/null || exit 1"]
33+ interval : 5s
34+ timeout : 5s
35+ retries : 20
3036 environment :
3137 JOOMLA_DB_HOST : ' database'
3238 JOOMLA_DB_USER : ' ${JOOMLA_DB_USER}'
@@ -39,17 +45,17 @@ services:
3945
4046 webserver :
4147 depends_on :
42- - joomla
43- image : ' httpd:latest'
48+ - varnish
49+ image : httpd:latest
4450 container_name : webserver
4551 networks :
46- - backend
52+ - backend
4753 volumes :
4854 - ' html:${WEBSERVER_DOC_ROOT}'
4955 - type : bind
5056 source : ./webserver
51- target : ' ${HTTPD_PREFIX}/conf'
52- hostname : webserver
57+ target : ' ${HTTPD_PREFIX}/conf'
58+ hostname : webserver
5359 restart : unless-stopped
5460 ports :
5561 - ' 8070:80'
@@ -63,15 +69,20 @@ services:
6369 certbot :
6470 depends_on :
6571 - proxy
66- image : certbot/certbot
72+ image : certbot/certbot:latest
6773 container_name : certbot
6874 networks :
6975 - backend
7076 volumes :
7177 - ' certbot-etc:${LETSENCRYPT_CONF_PREFIX}'
7278 - ' certbot-var:/var/lib/letsencrypt'
73- - ' /tmp/acme-challenge:/tmp/acme-challenge'
79+ - ' /tmp/acme-challenge:/tmp/acme-challenge'
7480 restart : unless-stopped
81+ healthcheck :
82+ test : ["CMD-SHELL", "test -d ${LETSENCRYPT_CONF_PREFIX}/live/${DOMAIN_NAME} || exit 1"]
83+ interval : 5s
84+ timeout : 5s
85+ retries : 20
7586 environment :
7687 TZ : ' ${LOCAL_TIMEZONE}'
7788 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};
@@ -106,25 +117,26 @@ services:
106117 - ' 80:80'
107118 - ' 443:443'
108119 links :
109- - webserver
120+ - webserver
110121 environment :
111122 NGINX_HOST : ${DOMAIN_NAME}
112123 NGINX_PORT : 80
113124 TZ : ' ${LOCAL_TIMEZONE}'
114125 command : bash -c "/docker-entrypoint.sh nginx -v; sh /tmp/ssl-proxyconf.sh '${DOMAIN_NAME}' '${LETSENCRYPT_CONF_PREFIX}' '${PROXY_PREFIX}'"
115-
126+
116127 phpmyadmin :
117128 depends_on :
118- - certbot
119- image : phpmyadmin/phpmyadmin
129+ certbot :
130+ condition : service_healthy
131+ image : phpmyadmin:latest
120132 container_name : phpmyadmin
121133 networks :
122134 - backend
123135 - frontend
124136 volumes :
125137 - type : bind
126138 source : ./phpmyadmin/apache2/sites-available/default-ssl.conf
127- target : ' ${APACHE_CONFDIR_PREFIX}/sites-available/default-ssl.conf'
139+ target : ' ${APACHE_CONFDIR_PREFIX}/sites-available/default-ssl.conf'
128140 - type : bind
129141 source : ./phpmyadmin/apache2/ports.conf
130142 target : ' ${APACHE_CONFDIR_PREFIX}/ports.conf'
@@ -133,13 +145,12 @@ services:
133145 target : ' ${LETSENCRYPT_CONF_PREFIX}/options-ssl-apache.conf'
134146 - type : bind
135147 source : ./phpmyadmin/config.user.inc.php
136- target : ' ${PMA_CONF_FOLDER}/config.user.inc.php'
148+ target : ' ${PMA_CONF_FOLDER}/config.user.inc.php'
137149 - type : bind
138150 source : ./phpmyadmin/php/conf.d/security.ini
139151 target : ' ${PHP_INI_DIR_PREFIX}/php/conf.d/security.ini'
140152 - ' certbot-etc:${LETSENCRYPT_CONF_PREFIX}'
141153 hostname : phpmyadmin
142- ipc : private
143154 restart : unless-stopped
144155 ports :
145156 - ' 9090:443'
@@ -160,9 +171,9 @@ services:
160171 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;
161172 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;
162173 a2enmod ssl && a2ensite default-ssl && a2dissite 000-default && /docker-entrypoint.sh 'apache2-foreground'"
163-
174+
164175 database :
165- image : ' ${DATABASE_IMAGE_NAME}:${DATABASE_VERSION}'
176+ image : ${DATABASE_IMAGE_NAME}:${DATABASE_VERSION}
166177 container_name : database
167178 networks :
168179 - backend
@@ -177,6 +188,11 @@ services:
177188 restart : unless-stopped
178189 ports :
179190 - ' 3306:3306'
191+ healthcheck :
192+ test : ["CMD-SHELL", "${DATABASE_ADMIN_COMMANDLINE} ping --silent || exit 1"]
193+ interval : 5s
194+ timeout : 5s
195+ retries : 50
180196 environment :
181197 MYSQL_ROOT_PASSWORD : ' ${MYSQL_ROOT_PASSWORD}'
182198 MYSQL_DATABASE : ' ${JOOMLA_DB_NAME}'
@@ -185,14 +201,14 @@ services:
185201 MYSQL_ALLOW_EMPTY_PASSWORD : ' No'
186202 MYSQL_ROOT_HOST : ' ${MYSQL_ROOT_HOST}'
187203 TZ : ' ${LOCAL_TIMEZONE}'
188- labels :
204+ labels :
189205 - " docker-volume-backup.stop-during-backup=true"
190206 - " docker-volume-backup.archive-pre=/bin/sh -c 'mysqldump -uroot -p${MYSQL_ROOT_PASSWORD} --all-databases > /tmp/backup/db_backup_data.sql'"
191207 - " docker-volume-backup.exec-label=database"
192- 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"
193-
208+ 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}"
209+
194210 redis :
195- image : ' redis:latest'
211+ image : redis:latest
196212 container_name : redis
197213 networks :
198214 - backend
@@ -211,9 +227,12 @@ services:
211227 ALLOW_EMPTY_PASSWORD : ' yes'
212228 TZ : ' ${LOCAL_TIMEZONE}'
213229 command : " redis-server ${REDIS_CONF_PREFIX}/redis/redis.conf"
214-
230+
215231 varnish :
216- image : ' varnish:stable'
232+ depends_on :
233+ joomla :
234+ condition : service_healthy
235+ image : varnish:${VARNISH_VERSION}
217236 container_name : varnish
218237 networks :
219238 - backend
@@ -230,10 +249,10 @@ services:
230249 environment :
231250 VARNISH_SIZE : ' ${VARNISH_SIZE}'
232251 TZ : ' ${LOCAL_TIMEZONE}'
233- command : " -a http=:8080,HTTP -p default_ttl=3600"
252+ command : " -a http=:8080,HTTP -p default_ttl=3600 -n /tmp/varnish_workdir "
234253
235254 mail :
236- image : ' mailhog/mailhog'
255+ image : mailhog/mailhog:latest
237256 container_name : mail
238257 networks :
239258 - backend
@@ -267,7 +286,7 @@ services:
267286 BACKUP_FILENAME : ' backup-%Y-%m-%dT%H-%M-%S.tar.gz'
268287 BACKUP_RETENTION_DAYS : ' 7'
269288 EXEC_LABEL : ' database'
270- # BACKUP_EXCLUDE_REGEXP: 'folder|folder|file|\\.log$$'
289+ # BACKUP_EXCLUDE_REGEXP: 'folder|folder|file|\\.log$$'
271290
272291networks :
273292 backend : null
@@ -295,6 +314,6 @@ volumes:
295314 dtredis :
296315 name : redis-data
297316 certbot-etc :
298- external : true
317+ external : true
299318 certbot-var :
300319 name : certbot-var
0 commit comments