@@ -4,11 +4,12 @@ services:
44
55 drupal :
66 depends_on :
7- - database
8- image : ' drupal:${PHP_IMAGE_NAME}'
7+ database :
8+ condition : service_healthy
9+ image : drupal:${PHP_IMAGE_NAME}
910 container_name : drupal
1011 networks :
11- - backend
12+ - backend
1213 volumes :
1314 - ' html:${WEBSERVER_DOC_ROOT}'
1415 - type : bind
@@ -24,26 +25,24 @@ services:
2425 links :
2526 - database
2627 - redis
27- - varnish
2828 healthcheck :
29- test : ["CMD-SHELL", "curl -fk https://${DOMAIN_NAME} || exit 1"]
30- interval : 10s
29+ test : ["CMD-SHELL", "/bin/pidof php-fpm > /dev/null || exit 1"]
30+ interval : 5s
3131 timeout : 5s
32- retries : 4
33- start_period : 40s
32+ retries : 50
3433 environment :
3534 TZ : ' ${LOCAL_TIMEZONE}'
36- labels :
35+ labels :
3736 - ' docker-volume-backup.stop-during-backup=true'
3837 command : >
39- bash -c "if pecl install -p -- redis; then pecl install -o -f redis && rm -rf /tmp/pear && docker-php-ext-enable redis; fi; composer require 'drupal/redis:^1.6'; composer require drush/drush; composer require ' drupal/purge:^3.4' && composer require ' drupal/purge_purger_http:^1.0' ;
38+ bash -c "if pecl install -p -- redis; then pecl install -o -f redis && rm -rf /tmp/pear && docker-php-ext-enable redis; fi; composer require drush/drush; composer require drupal/purge drupal/purge_purger_http drupal/redis ;
4039 if [ ! -f \"${WEBSERVER_DOC_ROOT}/sites/default/settings.php\" ]; then install -m 777 ${WEBSERVER_DOC_ROOT}/sites/default/default.settings.php ${WEBSERVER_DOC_ROOT}/sites/default/settings.php && sed -i 's/#/\\/\\/#/g' ${WEBSERVER_DOC_ROOT}/sites/default/settings.php &&
4140 echo -e \"\\n\\$$settings['trusted_host_patterns'] = [\\n\\t'^$$(echo \"${DOMAIN_NAME}\" | sed 's/\\./\\\\./g')$$',\\n\\t'^.+\\.$$(echo \"${DOMAIN_NAME}\" | sed 's/\\./\\\\./g')$$',\\n];\" >> ${WEBSERVER_DOC_ROOT}/sites/default/settings.php;
4241 mkdir -p -m 777 ${WEBSERVER_DOC_ROOT}/sites/default/files; fi; 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; docker-php-entrypoint 'php-fpm'"
4342
4443 webserver :
4544 depends_on :
46- - drupal
45+ - varnish
4746 image : nginx:stable
4847 container_name : webserver
4948 networks :
@@ -78,36 +77,42 @@ services:
7877 NGINX_PORT : 80
7978 TZ : ' ${LOCAL_TIMEZONE}'
8079 command : bash -c "/docker-entrypoint.sh nginx -v; sh /tmp/ssl-conf.sh '${DOMAIN_NAME}' '${LETSENCRYPT_CONF_PREFIX}' '${NGINX_PREFIX}'"
81-
80+
8281 certbot :
8382 depends_on :
8483 - webserver
85- image : certbot/certbot
84+ image : certbot/certbot:latest
8685 container_name : certbot
8786 networks :
8887 - backend
8988 volumes :
9089 - ' certbot-etc:${LETSENCRYPT_CONF_PREFIX}'
9190 - ' certbot-var:/var/lib/letsencrypt'
92- - ' /tmp/acme-challenge:/tmp/acme-challenge'
93- 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
9498 environment :
9599 TZ : ' ${LOCAL_TIMEZONE}'
96100 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};
97101 trap exit TERM; while :; do certbot renew --dry-run; sleep 12h & wait $${!}; done;"
98-
102+
99103 phpmyadmin :
100104 depends_on :
101- - certbot
102- image : phpmyadmin/phpmyadmin
105+ certbot :
106+ condition : service_healthy
107+ image : phpmyadmin:latest
103108 container_name : phpmyadmin
104109 networks :
105110 - backend
106111 - frontend
107112 volumes :
108113 - type : bind
109114 source : ./phpmyadmin/apache2/sites-available/default-ssl.conf
110- target : ' ${APACHE_CONFDIR_PREFIX}/sites-available/default-ssl.conf'
115+ target : ' ${APACHE_CONFDIR_PREFIX}/sites-available/default-ssl.conf'
111116 - type : bind
112117 source : ./phpmyadmin/apache2/ports.conf
113118 target : ' ${APACHE_CONFDIR_PREFIX}/ports.conf'
@@ -139,12 +144,12 @@ services:
139144 command : >
140145 bash -c "echo ${PMA_HTPASSWD_USERNAME}:phpmyadmin:$$( printf \"%s:%s:%s\" \"${PMA_HTPASSWD_USERNAME}\" \"phpmyadmin\" \"${PMA_HTPASSWD_PASSWORD}\" | md5sum | awk '{print $$1}' ) > ${PMA_CONF_FOLDER}/.htpasswd
141146 && printf 'AuthType Digest\\nAuthName \"phpmyadmin\"\\nAuthDigestProvider file\\nAuthUserFile ${PMA_CONF_FOLDER}/.htpasswd\\nRequire valid-user\\n' > ${WEBSERVER_DOC_ROOT}/.htaccess && a2enmod auth_digest;
142- 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;
147+ 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;
143148 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;
144149 a2enmod ssl && a2ensite default-ssl && a2dissite 000-default && /docker-entrypoint.sh 'apache2-foreground'"
145-
150+
146151 database :
147- image : ' ${DATABASE_IMAGE_NAME}:${DATABASE_VERSION}'
152+ image : ${DATABASE_IMAGE_NAME}:${DATABASE_VERSION}
148153 container_name : database
149154 networks :
150155 - backend
@@ -159,6 +164,11 @@ services:
159164 restart : unless-stopped
160165 ports :
161166 - ' 3306:3306'
167+ healthcheck :
168+ test : ["CMD-SHELL", "${DATABASE_ADMIN_COMMANDLINE} ping --silent || exit 1"]
169+ interval : 5s
170+ timeout : 5s
171+ retries : 50
162172 environment :
163173 MYSQL_ROOT_PASSWORD : ' ${MYSQL_ROOT_PASSWORD}'
164174 MYSQL_DATABASE : ' ${DB_NAME}'
@@ -167,14 +177,14 @@ services:
167177 MYSQL_ALLOW_EMPTY_PASSWORD : ' No'
168178 MYSQL_ROOT_HOST : ' ${MYSQL_ROOT_HOST}'
169179 TZ : ' ${LOCAL_TIMEZONE}'
170- labels :
180+ labels :
171181 - " docker-volume-backup.stop-during-backup=true"
172182 - " docker-volume-backup.archive-pre=/bin/sh -c 'mysqldump -uroot -p${MYSQL_ROOT_PASSWORD} --all-databases > /tmp/backup/db_backup_data.sql'"
173183 - " docker-volume-backup.exec-label=database"
174- 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 "
175-
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+
176186 redis :
177- image : ' redis:latest'
187+ image : redis:latest
178188 container_name : redis
179189 networks :
180190 - backend
@@ -195,7 +205,10 @@ services:
195205 command : " redis-server ${REDIS_CONF_PREFIX}/redis/redis.conf"
196206
197207 varnish :
198- image : ' varnish:stable'
208+ depends_on :
209+ drupal :
210+ condition : service_healthy
211+ image : varnish:${VARNISH_VERSION}
199212 container_name : varnish
200213 networks :
201214 - backend
@@ -212,8 +225,8 @@ services:
212225 environment :
213226 VARNISH_SIZE : ' ${VARNISH_SIZE}'
214227 TZ : ' ${LOCAL_TIMEZONE}'
215- command : " -a http=:8080,HTTP -p default_ttl=3600"
216-
228+ command : " -a http=:8080,HTTP -p default_ttl=3600 -n /tmp/varnish_workdir "
229+
217230 backup :
218231 image : offen/docker-volume-backup:latest
219232 container_name : backup
@@ -234,7 +247,7 @@ services:
234247 BACKUP_FILENAME : ' backup-%Y-%m-%dT%H-%M-%S.tar.gz'
235248 BACKUP_RETENTION_DAYS : ' 7'
236249 EXEC_LABEL : ' database'
237- BACKUP_EXCLUDE_REGEXP : ' core|modules|\\.log$$'
250+ BACKUP_EXCLUDE_REGEXP : ' core|modules|\\.log$$'
238251
239252networks :
240253 backend : null
@@ -262,6 +275,6 @@ volumes:
262275 dtredis :
263276 name : redis-data
264277 certbot-etc :
265- external : true
278+ external : true
266279 certbot-var :
267280 name : certbot-var
0 commit comments