@@ -4,8 +4,9 @@ services:
44
55 symfony :
66 depends_on :
7- - database
8- image : ' ${PHP_IMAGE_NAME}'
7+ database :
8+ condition : service_healthy
9+ image : ${PHP_IMAGE_NAME}
910 container_name : symfony
1011 networks :
1112 - backend
@@ -28,33 +29,32 @@ 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 : 6
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'
40- 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 && pecl install -o -f redis && rm -rf /tmp/pear && docker-php-ext-enable redis; 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 symfony/skeleton:"6.1.*" webapp && composer require --working-dir=${WEBSERVER_DOC_ROOT}/webapp ${SKELETON_WEBAPP} && cp ${WEBSERVER_DOC_ROOT}/htaccess ${WEBSERVER_DOC_ROOT}/webapp/public/.htaccess; fi;
43- sed -i 's/DATABASE_URL=\"postgresql/# DATABASE_URL=\"postgresql/;s/# DATABASE_URL=\"mysql/DATABASE_URL=\"mysql/;s/app:/${DB_USER}:/;s/!ChangeMe!/${DB_PASSWORD}/;s/127.0.0.1/database/;s/app?/${DB_NAME}?/;s/serverVersion=.*\&charset/serverVersion=mariadb-10\&charset/' ${WEBSERVER_DOC_ROOT}/webapp/.env;
40+ command : >
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 symfony/skeleton . --working-dir=${WEBSERVER_DOC_ROOT} && composer require --working-dir=${WEBSERVER_DOC_ROOT} ${SKELETON_WEBAPP}; fi;
4443 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"
4544
4645 webserver :
4746 depends_on :
48- - symfony
49- image : ' httpd:latest'
47+ symfony :
48+ condition : service_healthy
49+ image : httpd:latest
5050 container_name : webserver
5151 networks :
5252 - backend
5353 volumes :
5454 - ' html:${WEBSERVER_DOC_ROOT}'
5555 - type : bind
5656 source : ./webserver
57- target : ' ${HTTPD_PREFIX}/conf'
57+ target : ' ${HTTPD_PREFIX}/conf'
5858 hostname : webserver
5959 restart : unless-stopped
6060 ports :
@@ -64,19 +64,24 @@ services:
6464 environment :
6565 TZ : ' ${LOCAL_TIMEZONE}'
6666 command : bash -c "sed -i 's/example.com/${DOMAIN_NAME}/g' ${HTTPD_PREFIX}/conf/extra/httpd-vhosts.conf && httpd -t; httpd-foreground"
67-
67+
6868 certbot :
6969 depends_on :
7070 - proxy
71- image : certbot/certbot
71+ image : certbot/certbot:latest
7272 container_name : certbot
7373 networks :
7474 - backend
7575 volumes :
7676 - ' certbot-etc:${LETSENCRYPT_CONF_PREFIX}'
7777 - ' certbot-var:/var/lib/letsencrypt'
78- - ' /tmp/acme-challenge:/tmp/acme-challenge'
78+ - ' /tmp/acme-challenge:/tmp/acme-challenge'
7979 restart : unless-stopped
80+ healthcheck :
81+ test : ["CMD-SHELL", "test -d ${LETSENCRYPT_CONF_PREFIX}/live/${DOMAIN_NAME} || exit 1"]
82+ interval : 5s
83+ timeout : 5s
84+ retries : 20
8085 environment :
8186 TZ : ' ${LOCAL_TIMEZONE}'
8287 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};
@@ -120,16 +125,17 @@ services:
120125
121126 phpmyadmin :
122127 depends_on :
123- - certbot
124- image : phpmyadmin/phpmyadmin
128+ certbot :
129+ condition : service_healthy
130+ image : phpmyadmin:latest
125131 container_name : phpmyadmin
126132 networks :
127133 - backend
128134 - frontend
129135 volumes :
130136 - type : bind
131137 source : ./phpmyadmin/apache2/sites-available/default-ssl.conf
132- target : ' ${APACHE_CONFDIR_PREFIX}/sites-available/default-ssl.conf'
138+ target : ' ${APACHE_CONFDIR_PREFIX}/sites-available/default-ssl.conf'
133139 - type : bind
134140 source : ./phpmyadmin/apache2/ports.conf
135141 target : ' ${APACHE_CONFDIR_PREFIX}/ports.conf'
@@ -164,9 +170,9 @@ services:
164170 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;
165171 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;
166172 a2enmod ssl && a2ensite default-ssl && a2dissite 000-default && /docker-entrypoint.sh 'apache2-foreground'"
167-
173+
168174 database :
169- image : ' ${DATABASE_IMAGE_NAME}:${DATABASE_VERSION}'
175+ image : ${DATABASE_IMAGE_NAME}:${DATABASE_VERSION}
170176 container_name : database
171177 networks :
172178 - backend
@@ -181,6 +187,11 @@ services:
181187 restart : unless-stopped
182188 ports :
183189 - ' 3306:3306'
190+ healthcheck :
191+ test : ["CMD-SHELL", "${DATABASE_ADMIN_COMMANDLINE} ping --silent || exit 1"]
192+ interval : 5s
193+ timeout : 5s
194+ retries : 50
184195 environment :
185196 MYSQL_ROOT_PASSWORD : ' ${MYSQL_ROOT_PASSWORD}'
186197 MYSQL_DATABASE : ' ${DB_NAME}'
@@ -189,14 +200,14 @@ services:
189200 MYSQL_ALLOW_EMPTY_PASSWORD : ' No'
190201 MYSQL_ROOT_HOST : ' ${MYSQL_ROOT_HOST}'
191202 TZ : ' ${LOCAL_TIMEZONE}'
192- labels :
203+ labels :
193204 - " docker-volume-backup.stop-during-backup=true"
194205 - " docker-volume-backup.archive-pre=/bin/sh -c 'mysqldump -uroot -p${MYSQL_ROOT_PASSWORD} --all-databases > /tmp/backup/db_backup_data.sql'"
195206 - " docker-volume-backup.exec-label=database"
196- 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 "
197-
207+ 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} "
208+
198209 redis :
199- image : ' redis:latest'
210+ image : redis:latest
200211 container_name : redis
201212 networks :
202213 - backend
@@ -236,7 +247,7 @@ services:
236247 BACKUP_FILENAME : ' backup-%Y-%m-%dT%H-%M-%S.tar.gz'
237248 BACKUP_RETENTION_DAYS : ' 7'
238249 EXEC_LABEL : ' database'
239- BACKUP_EXCLUDE_REGEXP : ' webapp/bin|webapp/migrations|webapp/src|webapp/tests|webapp/var|webapp/vendor |\\.log$$'
250+ # BACKUP_EXCLUDE_REGEXP: 'folder|folder|file |\\.log$$'
240251
241252networks :
242253 backend : null
@@ -264,6 +275,6 @@ volumes:
264275 dtredis :
265276 name : redis-data
266277 certbot-etc :
267- external : true
278+ external : true
268279 certbot-var :
269280 name : certbot-var
0 commit comments