@@ -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
@@ -25,55 +26,60 @@ services:
2526 - database
2627 - redis
2728 healthcheck :
28- test : ["CMD-SHELL", "curl -fk https://${DOMAIN_NAME} || exit 1"]
29- interval : 10s
29+ test : ["CMD-SHELL", "/bin/pidof php-fpm > /dev/null || exit 1"]
30+ interval : 5s
3031 timeout : 5s
31- retries : 4
32- start_period : 40s
32+ retries : 50
3333 environment :
3434 TZ : ' ${LOCAL_TIMEZONE}'
35- labels :
35+ labels :
3636 - ' docker-volume-backup.stop-during-backup=true'
3737 command : >
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 '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 ;
3939 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 &&
4040 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;
4141 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'"
4242
4343 webserver :
4444 depends_on :
45- - drupal
46- image : ' httpd:latest'
45+ - varnish
46+ image : httpd:latest
4747 container_name : webserver
4848 networks :
49- - backend
49+ - backend
5050 volumes :
5151 - ' html:${WEBSERVER_DOC_ROOT}'
5252 - type : bind
5353 source : ./webserver
54- target : ' ${HTTPD_PREFIX}/conf'
55- hostname : webserver
54+ target : ' ${HTTPD_PREFIX}/conf'
55+ hostname : webserver
5656 restart : unless-stopped
5757 ports :
58- - ' 8080:80'
58+ - ' 80:80'
59+ - ' 90:90'
5960 links :
6061 - drupal
6162 environment :
6263 TZ : ' ${LOCAL_TIMEZONE}'
6364 command : bash -c "sed -i 's/example.com/${DOMAIN_NAME}/g' ${HTTPD_PREFIX}/conf/extra/httpd-vhosts.conf && httpd -t; httpd-foreground"
64-
65+
6566 certbot :
6667 depends_on :
6768 - proxy
68- image : certbot/certbot
69+ image : certbot/certbot:latest
6970 container_name : certbot
7071 networks :
7172 - backend
7273 volumes :
7374 - ' certbot-etc:${LETSENCRYPT_CONF_PREFIX}'
7475 - ' certbot-var:/var/lib/letsencrypt'
75- - ' /tmp/acme-challenge:/tmp/acme-challenge'
76- restart : unless-stopped
76+ - ' /tmp/acme-challenge:/tmp/acme-challenge'
77+ restart : unless-stopped
78+ healthcheck :
79+ test : ["CMD-SHELL", "test -d ${LETSENCRYPT_CONF_PREFIX}/live/${DOMAIN_NAME} || exit 1"]
80+ interval : 5s
81+ timeout : 5s
82+ retries : 20
7783 environment :
7884 TZ : ' ${LOCAL_TIMEZONE}'
7985 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};
@@ -106,25 +112,28 @@ services:
106112 restart : unless-stopped
107113 ports :
108114 - ' 80:80'
109- - ' 443:443'
115+ - ' 443:443'
116+ links :
117+ - webserver
110118 environment :
111119 NGINX_HOST : ${DOMAIN_NAME}
112120 NGINX_PORT : 80
113121 TZ : ' ${LOCAL_TIMEZONE}'
114122 command : bash -c "/docker-entrypoint.sh nginx -v; sh /tmp/ssl-proxyconf.sh '${DOMAIN_NAME}' '${LETSENCRYPT_CONF_PREFIX}' '${PROXY_PREFIX}'"
115-
123+
116124 phpmyadmin :
117125 depends_on :
118- - certbot
119- image : phpmyadmin/phpmyadmin
126+ certbot :
127+ condition : service_healthy
128+ image : phpmyadmin:latest
120129 container_name : phpmyadmin
121130 networks :
122131 - backend
123132 - frontend
124133 volumes :
125134 - type : bind
126135 source : ./phpmyadmin/apache2/sites-available/default-ssl.conf
127- target : ' ${APACHE_CONFDIR_PREFIX}/sites-available/default-ssl.conf'
136+ target : ' ${APACHE_CONFDIR_PREFIX}/sites-available/default-ssl.conf'
128137 - type : bind
129138 source : ./phpmyadmin/apache2/ports.conf
130139 target : ' ${APACHE_CONFDIR_PREFIX}/ports.conf'
@@ -159,9 +168,9 @@ services:
159168 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;
160169 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;
161170 a2enmod ssl && a2ensite default-ssl && a2dissite 000-default && /docker-entrypoint.sh 'apache2-foreground'"
162-
171+
163172 database :
164- image : ' ${DATABASE_IMAGE_NAME}:${DATABASE_VERSION}'
173+ image : ${DATABASE_IMAGE_NAME}:${DATABASE_VERSION}
165174 container_name : database
166175 networks :
167176 - backend
@@ -171,11 +180,16 @@ services:
171180 - type : bind
172181 source : ./database/conf.d/z-mysql.cnf
173182 target : ' ${MYSQL_CONF_PREFIX}/z-mysql.cnf'
174- - ' phpmyadmin-sql:/docker-entrypoint-initdb.d'
183+ - ' phpmyadmin-sql:/docker-entrypoint-initdb.d'
175184 hostname : database
176185 restart : unless-stopped
177186 ports :
178187 - ' 3306:3306'
188+ healthcheck :
189+ test : ["CMD-SHELL", "${DATABASE_ADMIN_COMMANDLINE} ping --silent || exit 1"]
190+ interval : 5s
191+ timeout : 5s
192+ retries : 50
179193 environment :
180194 MYSQL_ROOT_PASSWORD : ' ${MYSQL_ROOT_PASSWORD}'
181195 MYSQL_DATABASE : ' ${DB_NAME}'
@@ -184,14 +198,14 @@ services:
184198 MYSQL_ALLOW_EMPTY_PASSWORD : ' No'
185199 MYSQL_ROOT_HOST : ' ${MYSQL_ROOT_HOST}'
186200 TZ : ' ${LOCAL_TIMEZONE}'
187- labels :
201+ labels :
188202 - " docker-volume-backup.stop-during-backup=true"
189203 - " docker-volume-backup.archive-pre=/bin/sh -c 'mysqldump -uroot -p${MYSQL_ROOT_PASSWORD} --all-databases > /tmp/backup/db_backup_data.sql'"
190204 - " docker-volume-backup.exec-label=database"
191- 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 "
192-
205+ 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} "
206+
193207 redis :
194- image : ' redis:latest'
208+ image : redis:latest
195209 container_name : redis
196210 networks :
197211 - backend
@@ -210,7 +224,30 @@ services:
210224 ALLOW_EMPTY_PASSWORD : ' yes'
211225 TZ : ' ${LOCAL_TIMEZONE}'
212226 command : " redis-server ${REDIS_CONF_PREFIX}/redis/redis.conf"
213-
227+
228+ varnish :
229+ depends_on :
230+ drupal :
231+ condition : service_healthy
232+ image : varnish:${VARNISH_VERSION}
233+ container_name : varnish
234+ networks :
235+ - backend
236+ volumes :
237+ - type : bind
238+ source : ./varnish/default.vcl
239+ target : ' ${VARNISH_CONF_PREFIX}/default.vcl'
240+ hostname : varnish
241+ tmpfs :
242+ - /var/lib/varnish:exec
243+ restart : unless-stopped
244+ ports :
245+ - ' 8080:80'
246+ environment :
247+ VARNISH_SIZE : ' ${VARNISH_SIZE}'
248+ TZ : ' ${LOCAL_TIMEZONE}'
249+ command : " -a http=:8080,HTTP -p default_ttl=3600 -n /tmp/varnish_workdir"
250+
214251 backup :
215252 image : offen/docker-volume-backup:latest
216253 container_name : backup
@@ -259,6 +296,6 @@ volumes:
259296 dtredis :
260297 name : redis-data
261298 certbot-etc :
262- external : true
299+ external : true
263300 certbot-var :
264301 name : certbot-var
0 commit comments