@@ -4,8 +4,9 @@ services:
44
55 laravel :
66 depends_on :
7- - database
8- image : ' ${PHP_IMAGE_NAME}'
7+ database :
8+ condition : service_healthy
9+ image : ${PHP_IMAGE_NAME}
910 container_name : laravel
1011 networks :
1112 - backend
@@ -28,24 +29,24 @@ services:
2829 - database
2930 - redis
3031 healthcheck :
31- test : ["CMD-SHELL", "curl -fk https://${DOMAIN_NAME} || exit 1"]
32- interval : 10s
32+ test : ["CMD-SHELL", "/bin/pidof php-fpm > /dev/null || exit 1"]
33+ interval : 5s
3334 timeout : 5s
34- retries : 8
35- start_period : 60s
35+ retries : 50
3636 environment :
3737 TZ : ' ${LOCAL_TIMEZONE}'
38- labels :
38+ labels :
3939 - ' docker-volume-backup.stop-during-backup=true'
4040 command : >
41- bash -c "apt-get -y update && sh /tmp/packagecheck.sh 'zip unzip' && curl -sSL https://github.com/mlocati/docker-php-extension-installer/releases/latest/download/install-php-extensions -o - | sh -s intl pdo_mysql && if pecl install -p -- redis; then pecl install -o -f redis && rm -rf /tmp/pear && docker-php-ext-enable redis; fi; curl -sS https://getcomposer.org/installer | php && mv composer.phar /usr/local/bin/composer &&
42- if [ -f \"${WEBSERVER_DOC_ROOT}/webapp/ .env\" ]; then composer update --working-dir=${WEBSERVER_DOC_ROOT}/webapp ; else composer create-project laravel/laravel webapp && chmod -R 777 ${WEBSERVER_DOC_ROOT}/webapp/ storage/framework ${WEBSERVER_DOC_ROOT}/webapp /storage/logs; fi;
43- sed -i \"s/DB_HOST=127.0.0.1/DB_HOST=database/;s/REDIS_HOST=127.0.0.1/REDIS_HOST=redis/\" ${WEBSERVER_DOC_ROOT}/webapp/ .env; 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; php-fpm"
41+ bash -c "apt-get update && sh /tmp/packagecheck.sh 'zip unzip' && curl -sSL https://github.com/mlocati/docker-php-extension-installer/releases/latest/download/install-php-extensions -o - | sh -s intl pdo_mysql && if pecl install -p -- redis; then pecl install -o -f redis && rm -rf /tmp/pear && docker-php-ext-enable redis; fi; curl -sS https://getcomposer.org/installer | php && mv composer.phar /usr/local/bin/composer &&
42+ if [ -f \"${WEBSERVER_DOC_ROOT}/.env\" ]; then composer update --working-dir=${WEBSERVER_DOC_ROOT}; else rm -f ${WEBSERVER_DOC_ROOT}/README.md && composer create-project laravel/laravel . --working-dir=${WEBSERVER_DOC_ROOT} && chmod -R 777 ${WEBSERVER_DOC_ROOT}/storage/framework ${WEBSERVER_DOC_ROOT}/storage/logs; fi;
43+ sed -i \"s/DB_HOST=127.0.0.1/DB_HOST=database/;s/REDIS_HOST=127.0.0.1/REDIS_HOST=redis/\" ${WEBSERVER_DOC_ROOT}/.env; 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; php-fpm"
4444
4545 webserver :
4646 depends_on :
47- - laravel
48- image : ' httpd:latest'
47+ laravel :
48+ condition : service_healthy
49+ image : httpd:latest
4950 container_name : webserver
5051 networks :
5152 - backend
@@ -73,36 +74,42 @@ services:
7374 environment :
7475 TZ : ' ${LOCAL_TIMEZONE}'
7576 command : bash -c "sh /tmp/ssl-conf.sh '${DOMAIN_NAME}' '${LETSENCRYPT_CONF_PREFIX}' '${HTTPD_PREFIX}/conf'"
76-
77+
7778 certbot :
7879 depends_on :
7980 - webserver
80- image : certbot/certbot
81+ image : certbot/certbot:latest
8182 container_name : certbot
8283 networks :
8384 - backend
8485 volumes :
8586 - ' certbot-etc:${LETSENCRYPT_CONF_PREFIX}'
8687 - ' certbot-var:/var/lib/letsencrypt'
87- - ' /tmp/acme-challenge:/tmp/acme-challenge'
88- restart : unless-stopped
88+ - ' /tmp/acme-challenge:/tmp/acme-challenge'
89+ restart : unless-stopped
90+ healthcheck :
91+ test : ["CMD-SHELL", "test -d ${LETSENCRYPT_CONF_PREFIX}/live/${DOMAIN_NAME} || exit 1"]
92+ interval : 5s
93+ timeout : 5s
94+ retries : 20
8995 environment :
9096 TZ : ' ${LOCAL_TIMEZONE}'
9197 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};
9298 trap exit TERM; while :; do certbot renew --dry-run; sleep 12h & wait $${!}; done;"
93-
99+
94100 phpmyadmin :
95101 depends_on :
96- - certbot
97- image : phpmyadmin/phpmyadmin
102+ certbot :
103+ condition : service_healthy
104+ image : phpmyadmin:latest
98105 container_name : phpmyadmin
99106 networks :
100107 - backend
101108 - frontend
102109 volumes :
103110 - type : bind
104111 source : ./phpmyadmin/apache2/sites-available/default-ssl.conf
105- target : ' ${APACHE_CONFDIR_PREFIX}/sites-available/default-ssl.conf'
112+ target : ' ${APACHE_CONFDIR_PREFIX}/sites-available/default-ssl.conf'
106113 - type : bind
107114 source : ./phpmyadmin/apache2/ports.conf
108115 target : ' ${APACHE_CONFDIR_PREFIX}/ports.conf'
@@ -137,9 +144,9 @@ services:
137144 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;
138145 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;
139146 a2enmod ssl && a2ensite default-ssl && a2dissite 000-default && /docker-entrypoint.sh 'apache2-foreground'"
140-
147+
141148 database :
142- image : ' ${DATABASE_IMAGE_NAME}:${DATABASE_VERSION}'
149+ image : ${DATABASE_IMAGE_NAME}:${DATABASE_VERSION}
143150 container_name : database
144151 networks :
145152 - backend
@@ -154,6 +161,11 @@ services:
154161 restart : unless-stopped
155162 ports :
156163 - ' 3306:3306'
164+ healthcheck :
165+ test : ["CMD-SHELL", "${DATABASE_ADMIN_COMMANDLINE} ping --silent || exit 1"]
166+ interval : 5s
167+ timeout : 5s
168+ retries : 50
157169 environment :
158170 MYSQL_ROOT_PASSWORD : ' ${MYSQL_ROOT_PASSWORD}'
159171 MYSQL_DATABASE : ' ${DB_NAME}'
@@ -162,14 +174,14 @@ services:
162174 MYSQL_ALLOW_EMPTY_PASSWORD : ' No'
163175 MYSQL_ROOT_HOST : ' ${MYSQL_ROOT_HOST}'
164176 TZ : ' ${LOCAL_TIMEZONE}'
165- labels :
177+ labels :
166178 - " docker-volume-backup.stop-during-backup=true"
167179 - " docker-volume-backup.archive-pre=/bin/sh -c 'mysqldump -uroot -p${MYSQL_ROOT_PASSWORD} --all-databases > /tmp/backup/db_backup_data.sql'"
168180 - " 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-
181+ 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} "
182+
171183 redis :
172- image : ' redis:latest'
184+ image : redis:latest
173185 container_name : redis
174186 networks :
175187 - backend
@@ -209,7 +221,7 @@ services:
209221 BACKUP_FILENAME : ' backup-%Y-%m-%dT%H-%M-%S.tar.gz'
210222 BACKUP_RETENTION_DAYS : ' 7'
211223 EXEC_LABEL : ' database'
212- # BACKUP_EXCLUDE_REGEXP: 'folder|folder|file|\\.log$$'
224+ # BACKUP_EXCLUDE_REGEXP: 'folder|folder|file|\\.log$$'
213225
214226networks :
215227 backend : null
@@ -237,6 +249,6 @@ volumes:
237249 dtredis :
238250 name : redis-data
239251 certbot-etc :
240- external : true
252+ external : true
241253 certbot-var :
242254 name : certbot-var
0 commit comments