Compare commits

...

36 Commits

Author SHA1 Message Date
ffee650e60 Merge pull request #765 from cytopia/release/v1.9.0
Devilbox Release v1.9.0
2020-12-13 13:03:01 +01:00
50ae11f95f Retry network tasks 2020-12-12 19:13:31 +01:00
09b8803f21 Adjust test and examples according to Xdebug 3.0 2020-12-12 19:04:35 +01:00
75aa5139e2 Sort correctly when updating modules 2020-12-12 18:14:15 +01:00
f9b4a9d9f4 Fix lint job 2020-12-12 17:54:32 +01:00
0151167635 Devilbox Release v1.9.0 2020-12-12 17:53:36 +01:00
9c6711c948 Update php images 2020-12-12 17:53:32 +01:00
22f5c945ef Fixes #761 missing varnish config env var 2020-12-12 17:53:28 +01:00
1b768425b2 Added checks for TLD_SUFFIX in check-config.sh 2020-12-12 17:53:24 +01:00
a05f3eea47 Merge pull request #760 from avierr/patch-1
Updated docs for Mac SSL
2020-12-01 19:12:20 +01:00
e3c1e18ae3 Update for Mac 2020-12-01 16:46:29 +00:00
a78bccfd33 Merge pull request #757 from cytopia/release/v1.8.3
Release v1.8.3
2020-11-22 17:08:56 +01:00
2679acc569 Fix symlink handling with watcherd 2020-11-22 14:36:13 +01:00
6b18f7b71d CI: wordpress: increase retries and be more verbose 2020-11-22 12:40:02 +01:00
df6ee3fb36 Intranet: show custom Httpd configuration files 2020-11-22 11:54:56 +01:00
fda37efc64 Check supervisor configs with check-config.sh 2020-11-22 11:13:04 +01:00
e9281c9b40 Bump versions 2020-11-22 10:57:37 +01:00
dfd3e27882 Fixes #753 handle symlinks with watcherd 2020-11-22 10:57:06 +01:00
8e7069f893 Fixes #692 Add custom supervisor configs 2020-11-22 10:56:08 +01:00
c96f740c39 check-config.sh: debug mode 2020-11-20 15:15:45 +01:00
fe54bbf714 check-config: custom configs 2020-11-20 15:09:21 +01:00
9660c37937 check-config.sh: verify LOCAL_LISTEN_ADDR 2020-11-20 14:46:29 +01:00
0d6ecf23e3 check-config.sh: check customizations 2020-11-20 14:35:53 +01:00
3a2dacf748 Fix shellcheck for check-config 2020-11-20 13:37:09 +01:00
467fc03640 Validate htdocs dir in check-config 2020-11-20 13:18:19 +01:00
7480eb4e08 Add project checks 2020-11-20 13:06:06 +01:00
f348fa7814 Fixes #751 check-config output duplication 2020-11-17 12:51:15 +01:00
b8055a175b Merge pull request #750 from cytopia/release/v1.8.2
Devilbox Release v1.8.2
2020-11-14 15:19:52 +01:00
9b58e2daa8 Fix typos 2020-11-14 15:17:38 +01:00
30e2b08c72 Fixes #547 Added link to official Contao Devilbox docs 2020-11-14 11:59:32 +01:00
1f0676de4a Fixes #707 Move Backups out of Devilbox directory 2020-11-14 11:51:33 +01:00
6735daaaeb Bump release 2020-11-14 10:49:50 +01:00
657ba28afd Fix entrypoint in MySQL image 2020-11-14 10:34:09 +01:00
14259518c6 check-config: allow paths to be outside Devilbox dir 2020-11-14 10:33:46 +01:00
d406eac805 Provide updating information 2020-11-14 10:33:22 +01:00
dfb2a1097d Various fixes on PHP-FPM images 2020-11-14 10:32:52 +01:00
32 changed files with 977 additions and 132 deletions

View File

@ -13,8 +13,8 @@ error_reporting(-1);
putenv('RES_OPTIONS=retrans:1 retry:1 timeout:1 attempts:1');
$DEVILBOX_VERSION = 'v1.8.1';
$DEVILBOX_DATE = '2020-11-12';
$DEVILBOX_VERSION = 'v1.9.0';
$DEVILBOX_DATE = '2020-12-12';
$DEVILBOX_API_PAGE = 'devilbox-api/status.json';
//

View File

@ -0,0 +1,62 @@
<?php require '../config.php'; ?>
<?php loadClass('Helper')->authPage(); ?>
<!DOCTYPE html>
<html lang="en">
<head>
<?php echo loadClass('Html')->getHead(); ?>
</head>
<body>
<?php echo loadClass('Html')->getNavbar(); ?>
<div class="container">
<h1>Httpd custom configs</h1>
<br/>
<br/>
<p>Shows your currently custom configuration files applied to the Httpd container.</p>
<div class="row">
<div class="col-md-12">
<?php $vHosts = loadClass('Httpd')->getVirtualHosts(); ?>
<?php $custom = false; ?>
<?php foreach ($vHosts as $vHost): ?>
<?php if (($vhostGen = loadClass('Httpd')->getVhostgenTemplatePath($vHost['name'])) !== false): ?>
<?php $custom = true; ?>
<?php endif; ?>
<?php endforeach; ?>
<?php if ($custom): ?>
<table class="table table-striped">
<thead class="thead-inverse">
<tr>
<th>Project</th>
<th>Host</th>
<th>Container</th>
<th>Files</th>
</tr>
</thead>
<tbody>
<?php foreach ($vHosts as $vHost): ?>
<?php if (($vhostGen = loadClass('Httpd')->getVhostgenTemplatePath($vHost['name'])) !== false): ?>
<tr>
<th><?php echo $vHost['domain']; ?></th>
<td><?php echo loadClass('Helper')->getEnv('HOST_PATH_HTTPD_DATADIR').'/'.$vHost['name'].'/'.loadClass('Helper')->getEnv('HTTPD_TEMPLATE_DIR');?></td>
<td><?php echo dirname($vhostGen); ?></td>
<td><code><?php echo basename($vhostGen); ?></code></td>
</tr>
<?php endif; ?>
<?php endforeach; ?>
</tbody>
</table>
<?php else: ?>
<p>No custom configurations applied.</p>
<?php endif; ?>
</div>
</div>
</div><!-- /.container -->
<?php echo loadClass('Html')->getFooter(); ?>
</body>
</html>

View File

@ -0,0 +1,126 @@
<?php require '../config.php'; ?>
<?php loadClass('Helper')->authPage(); ?>
<!DOCTYPE html>
<html lang="en">
<head>
<?php echo loadClass('Html')->getHead(); ?>
</head>
<body>
<?php echo loadClass('Html')->getNavbar(); ?>
<div class="container">
<h1>PHP custom configs</h1>
<br/>
<br/>
<p>Shows your currently custom configuration files applied to the PHP-FPM container.</p>
<div class="row">
<div class="col-md-12">
<table class="table table-striped">
<thead class="thead-inverse">
<tr>
<th>Section</th>
<th>Host</th>
<th>Container</th>
<th>Files</th>
</tr>
</thead>
<tbody>
<tr>
<th>Supervisord</th>
<td>supervisor/</td>
<td>/etc/supervisor/custom.d/</td>
<td>
<?php
$files = glob('/etc/supervisor/custom.d/*.conf');
if ($files) {
foreach ($files as $file) {
echo '<code>'.basename($file). '</code><br/>';
}
} else {
echo 'No custom files';
}
?>
</td>
</tr>
<tr>
<th>Autostart (global)</th>
<td>autostart/</td>
<td>/startup.2.d/</td>
<td>
<?php
$files = glob('/startup.2.d/*.sh');
if ($files) {
foreach ($files as $file) {
echo '<code>'.basename($file). '</code><br/>';
}
} else {
echo 'No custom files';
}
?>
</td>
</tr>
<tr>
<th>Autostart (version)</th>
<td>cfg/php-startup-<?php echo PHP_MAJOR_VERSION.'.'.PHP_MINOR_VERSION;?>/</td>
<td>/startup.1.d/</td>
<td>
<?php
$files = glob('/startup.1.d/*.sh');
if ($files) {
foreach ($files as $file) {
echo '<code>'.basename($file). '</code><br/>';
}
} else {
echo 'No custom files';
}
?>
</td>
</tr>
<tr>
<th>PHP-FPM</th>
<td>cfg/php-fpm-<?php echo PHP_MAJOR_VERSION.'.'.PHP_MINOR_VERSION;?>/</td>
<td>/etc/php-fpm-custom.d/</td>
<td>
<?php
$files = glob('/etc/php-fpm-custom.d/*.conf');
if ($files) {
foreach ($files as $file) {
echo '<code>'.basename($file). '</code><br/>';
}
} else {
echo 'No custom files';
}
?>
</td>
</tr>
<tr>
<th>PHP</th>
<td>cfg/php-ini-<?php echo PHP_MAJOR_VERSION.'.'.PHP_MINOR_VERSION;?>/</td>
<td>/etc/php-custom.d/</td>
<td>
<?php
$files = glob('/etc/php-custom.d/*.ini');
if ($files) {
foreach ($files as $file) {
echo '<code>'.basename($file). '</code><br/>';
}
} else {
echo 'No custom files';
}
?>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div><!-- /.container -->
<?php echo loadClass('Html')->getFooter(); ?>
</body>
</html>

View File

@ -23,6 +23,19 @@ class Html
'path' => '/mail.php'
)
),
array(
'name' => 'Configs',
'menu' => array(
array(
'name' => 'PHP',
'path' => '/config_php.php'
),
array(
'name' => 'Httpd',
'path' => '/config_httpd.php'
),
),
),
array(
'name' => 'Databases',
'menu' => array(

View File

@ -48,7 +48,22 @@ jobs:
- name: Check documentation
shell: bash
run: |
retry() {
for n in $(seq ${RETRIES}); do
echo "[${n}/${RETRIES}] ${*}";
if eval "${*}"; then
echo "[SUCC] ${n}/${RETRIES}";
return 0;
fi;
sleep ${PAUSE};
echo "[FAIL] ${n}/${RETRIES}";
done;
return 1;
}
cd docs
make ${TARGET}
retry make ${TARGET}
env:
TARGET: ${{ matrix.target }}
RETRIES: 20
PAUSE: 10

View File

@ -25,16 +25,8 @@ on:
# -------------------------------------------------------------------------------------------------
jobs:
lint:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
jobs:
- tests
name: "[Lint ${{ matrix.jobs }}]"
name: "[Lint]"
steps:
# ------------------------------------------------------------
@ -46,13 +38,68 @@ jobs:
- name: Lint
shell: bash
run: |
retry() {
for n in $(seq ${RETRIES}); do
echo "[${n}/${RETRIES}] ${*}";
if eval "${*}"; then
echo "[SUCC] ${n}/${RETRIES}";
return 0;
fi;
sleep ${PAUSE};
echo "[FAIL] ${n}/${RETRIES}";
done;
return 1;
}
cd .tests/
make lint-tests
retry make lint-tests
env:
RETRIES: 20
PAUSE: 10
- name: Update Readme
shell: bash
run: |
retry() {
for n in $(seq ${RETRIES}); do
echo "[${n}/${RETRIES}] ${*}";
if eval "${*}"; then
echo "[SUCC] ${n}/${RETRIES}";
return 0;
fi;
sleep ${PAUSE};
echo "[FAIL] ${n}/${RETRIES}";
done;
return 1;
}
cd .tests/
retry make update-readme
git diff --quiet || { echo "Build Changes"; git diff; git status; false; };
env:
RETRIES: 20
PAUSE: 10
- name: Check configuration
shell: bash
run: |
retry() {
for n in $(seq ${RETRIES}); do
echo "[${n}/${RETRIES}] ${*}";
if eval "${*}"; then
echo "[SUCC] ${n}/${RETRIES}";
return 0;
fi;
sleep ${PAUSE};
echo "[FAIL] ${n}/${RETRIES}";
done;
return 1;
}
cp env-example .env
sed -i'' "s/^NEW_UID=.*/NEW_UID=$(id -u)/g" .env
sed -i'' "s/^NEW_GID=.*/NEW_GID=$(id -g)/g" .env
./check-config.sh
retry ./check-config.sh
env:
RETRIES: 20
PAUSE: 10

3
.gitignore vendored
View File

@ -137,6 +137,9 @@
/mod/php-fpm-8.0/*.so
/mod/php-fpm-8.1/*.so
# Ignore supervisord configs
/supervisor/*.conf
# Ignore custom bash and other confi files
/bash/*
!/bash/bashrc.sh-example

View File

@ -226,3 +226,29 @@ run_fail() {
fi
return 1
}
###
### Create and validate vhost directory
###
create_vhost_dir() {
local vhost="${1}"
echo "Ensure vhost '${vhost}' is created"
# Clean vhost dir
cd "${DVLBOX_PATH}"
while docker-compose exec --user devilbox -T php curl -sS --fail "http://php/vhosts.php" | grep ">${vhost}<" >/dev/null; do
echo "Deleting vhost: ${vhost}"
run "docker-compose exec --user devilbox -T php bash -c 'rm -rf /shared/httpd/${vhost} && sleep 5;'" "1" "${DVLBOX_PATH}"
done
# Create vhost dir
cd "${DVLBOX_PATH}"
while ! docker-compose exec --user devilbox -T php curl -sS --fail "http://php/vhosts.php" | grep ">${vhost}<" >/dev/null; do
echo "Recreating vhost: ${vhost}"
run "docker-compose exec --user devilbox -T php bash -c 'rm -rf /shared/httpd/${vhost} && sleep 5;'" "1" "${DVLBOX_PATH}"
run "docker-compose exec --user devilbox -T php bash -c 'mkdir -p /shared/httpd/${vhost} && sleep 5;'" "1" "${DVLBOX_PATH}"
done
echo "Vhost is present: ${vhost}"
}

View File

@ -320,7 +320,7 @@ fi
###
### Todo: add ioncube
###
MODS="$( echo "${PHP52_MODS}, ${PHP53_MODS}, ${PHP54_MODS}, ${PHP55_MODS}, ${PHP56_MODS}, ${PHP70_MODS}, ${PHP71_MODS}, ${PHP72_MODS}, ${PHP73_MODS}, ${PHP74_MODS}, ${PHP80_MODS}, ${PHP81_MODS}" | sed 's/,/\n/g' | sed -e 's/^\s*//g' -e 's/\s*$//g' | sort -u )"
MODS="$( echo "${PHP52_MODS}, ${PHP53_MODS}, ${PHP54_MODS}, ${PHP55_MODS}, ${PHP56_MODS}, ${PHP70_MODS}, ${PHP71_MODS}, ${PHP72_MODS}, ${PHP73_MODS}, ${PHP74_MODS}, ${PHP80_MODS}, ${PHP81_MODS}" | sed 's/,/\n/g' | sed -e 's/^\s*//g' -e 's/\s*$//g' | sort -uf )"
###

View File

@ -60,18 +60,18 @@ fi
### Xdebug default disabled
###
printf "[TEST] Xdebug default disabled"
if [ "${PHP_VERSION}" = "8.0" ] || [ "${PHP_VERSION}" = "8.1" ]; then
if ! run "curl -sS --fail 'http://localhost:${HOST_PORT_HTTPD}/info_php.php' | tac | tac | grep 'xdebug.mode' | grep -E 'develop.+develop' >/dev/null" "${RETRIES}" "" "0"; then
if [ "${PHP_VERSION}" = "5.2" ] || [ "${PHP_VERSION}" = "5.3" ] || [ "${PHP_VERSION}" = "5.4" ] || [ "${PHP_VERSION}" = "5.5" ] || [ "${PHP_VERSION}" = "5.6" ] || [ "${PHP_VERSION}" = "7.0" ] || [ "${PHP_VERSION}" = "7.1" ]; then
if ! run "curl -sS --fail 'http://localhost:${HOST_PORT_HTTPD}/info_php.php' | tac | tac | grep 'xdebug.remote_enable' | grep -E 'Off.+Off' >/dev/null" "${RETRIES}" "" "0"; then
printf "\\r[FAIL] Xdebug default disabled\\n"
run "curl -sS 'http://localhost:${HOST_PORT_HTTPD}/info_php.php' | grep 'xdebug.mode' || true"
run "curl -sS 'http://localhost:${HOST_PORT_HTTPD}/info_php.php' | grep 'xdebug.remote_enable' || true"
exit 1
else
printf "\\r[OK] Xdebug default disabled\\n"
fi
else
if ! run "curl -sS --fail 'http://localhost:${HOST_PORT_HTTPD}/info_php.php' | tac | tac | grep 'xdebug.remote_enable' | grep -E 'Off.+Off' >/dev/null" "${RETRIES}" "" "0"; then
if ! run "curl -sS --fail 'http://localhost:${HOST_PORT_HTTPD}/info_php.php' | tac | tac | grep 'xdebug.mode' | grep -E 'develop.+develop' >/dev/null" "${RETRIES}" "" "0"; then
printf "\\r[FAIL] Xdebug default disabled\\n"
run "curl -sS 'http://localhost:${HOST_PORT_HTTPD}/info_php.php' | grep 'xdebug.remote_enable' || true"
run "curl -sS 'http://localhost:${HOST_PORT_HTTPD}/info_php.php' | grep 'xdebug.mode' || true"
exit 1
else
printf "\\r[OK] Xdebug default disabled\\n"
@ -82,15 +82,7 @@ fi
### Xdebug autostart disabled
###
printf "[TEST] Xdebug autostart disabled"
if [ "${PHP_VERSION}" = "8.0" ] || [ "${PHP_VERSION}" = "8.1" ]; then
if ! run "curl -sS --fail 'http://localhost:${HOST_PORT_HTTPD}/info_php.php' | tac | tac | grep 'xdebug.start_with_request' | grep -E 'default.+default' >/dev/null" "${RETRIES}" "" "0"; then
printf "\\r[FAIL] Xdebug autostart disabled\\n"
run "curl 'http://localhost:${HOST_PORT_HTTPD}/info_php.php' | grep 'xdebug.start_with_request' || true"
exit 1
else
printf "\\r[OK] Xdebug autostart disabled\\n"
fi
else
if [ "${PHP_VERSION}" = "5.2" ] || [ "${PHP_VERSION}" = "5.3" ] || [ "${PHP_VERSION}" = "5.4" ] || [ "${PHP_VERSION}" = "5.5" ] || [ "${PHP_VERSION}" = "5.6" ] || [ "${PHP_VERSION}" = "7.0" ] || [ "${PHP_VERSION}" = "7.1" ]; then
if ! run "curl -sS --fail 'http://localhost:${HOST_PORT_HTTPD}/info_php.php' | tac | tac | grep 'xdebug.remote_autostart' | grep -E 'Off.+Off' >/dev/null" "${RETRIES}" "" "0"; then
printf "\\r[FAIL] Xdebug autostart disabled\\n"
run "curl 'http://localhost:${HOST_PORT_HTTPD}/info_php.php' | grep 'xdebug.remote_autostart' || true"
@ -98,4 +90,12 @@ else
else
printf "\\r[OK] Xdebug autostart disabled\\n"
fi
else
if ! run "curl -sS --fail 'http://localhost:${HOST_PORT_HTTPD}/info_php.php' | tac | tac | grep 'xdebug.start_with_request' | grep -E 'default.+default' >/dev/null" "${RETRIES}" "" "0"; then
printf "\\r[FAIL] Xdebug autostart disabled\\n"
run "curl 'http://localhost:${HOST_PORT_HTTPD}/info_php.php' | grep 'xdebug.start_with_request' || true"
exit 1
else
printf "\\r[OK] Xdebug autostart disabled\\n"
fi
fi

View File

@ -43,42 +43,45 @@ fi
###
MYSQL_ROOT_PASSWORD="$( "${SCRIPT_PATH}/../scripts/env-getvar.sh" "MYSQL_ROOT_PASSWORD" )"
TLD_SUFFIX="$( "${SCRIPT_PATH}/../scripts/env-getvar.sh" "TLD_SUFFIX" )"
VHOST="my-cakephp"
# Create vhost dir
create_vhost_dir "${VHOST}"
# Setup CakePHP project
run "docker-compose exec --user devilbox -T php bash -c 'mkdir -p /shared/httpd/cakephp'" "${RETRIES}" "${DVLBOX_PATH}"
run "docker-compose exec --user devilbox -T php bash -c 'cd /shared/httpd/cakephp; rm -rf cakephp; composer create-project --no-interaction --prefer-dist cakephp/app cakephp 3.8'" "${RETRIES}" "${DVLBOX_PATH}"
run "docker-compose exec --user devilbox -T php bash -c 'cd /shared/httpd/cakephp; ln -sf cakephp/webroot htdocs'" "${RETRIES}" "${DVLBOX_PATH}"
run "docker-compose exec --user devilbox -T php bash -c 'cd /shared/httpd/${VHOST}; composer create-project --no-interaction --prefer-dist cakephp/app cakephp 3.8'" "${RETRIES}" "${DVLBOX_PATH}"
run "docker-compose exec --user devilbox -T php bash -c 'cd /shared/httpd/${VHOST}; ln -sf cakephp/webroot htdocs'" "${RETRIES}" "${DVLBOX_PATH}"
run "docker-compose exec --user devilbox -T php mysql -u root -h mysql --password=\"${MYSQL_ROOT_PASSWORD}\" -e \"DROP DATABASE IF EXISTS my_cake; CREATE DATABASE my_cake;\"" "${RETRIES}" "${DVLBOX_PATH}"
# Configure CakePHP database settings
run "docker-compose exec --user devilbox -T php sed -i\"\" \"s/'host' =>.*/'host' => 'mysql',/g\" /shared/httpd/cakephp/cakephp/config/app.php" "${RETRIES}" "${DVLBOX_PATH}"
run "docker-compose exec --user devilbox -T php sed -i\"\" \"s/'username' =>.*/'username' => 'root',/g\" /shared/httpd/cakephp/cakephp/config/app.php" "${RETRIES}" "${DVLBOX_PATH}"
run "docker-compose exec --user devilbox -T php sed -i\"\" \"s/'password' =>.*/'password' => '${MYSQL_ROOT_PASSWORD}',/g\" /shared/httpd/cakephp/cakephp/config/app.php" "${RETRIES}" "${DVLBOX_PATH}"
run "docker-compose exec --user devilbox -T php sed -i\"\" \"s/'database' =>.*/'database' => 'my_cake',/g\" /shared/httpd/cakephp/cakephp/config/app.php" "${RETRIES}" "${DVLBOX_PATH}"
run "docker-compose exec --user devilbox -T php sed -i\"\" \"s/'host' =>.*/'host' => 'mysql',/g\" /shared/httpd/${VHOST}/cakephp/config/app.php" "${RETRIES}" "${DVLBOX_PATH}"
run "docker-compose exec --user devilbox -T php sed -i\"\" \"s/'username' =>.*/'username' => 'root',/g\" /shared/httpd/${VHOST}/cakephp/config/app.php" "${RETRIES}" "${DVLBOX_PATH}"
run "docker-compose exec --user devilbox -T php sed -i\"\" \"s/'password' =>.*/'password' => '${MYSQL_ROOT_PASSWORD}',/g\" /shared/httpd/${VHOST}/cakephp/config/app.php" "${RETRIES}" "${DVLBOX_PATH}"
run "docker-compose exec --user devilbox -T php sed -i\"\" \"s/'database' =>.*/'database' => 'my_cake',/g\" /shared/httpd/${VHOST}/cakephp/config/app.php" "${RETRIES}" "${DVLBOX_PATH}"
# Test CakePHP
ERROR=0
if ! run "docker-compose exec --user devilbox -T php curl -sS --fail 'http://cakephp.${TLD_SUFFIX}' | tac | tac | grep '\"bullet success\"' | grep 'mbstring'" "${RETRIES}" "${DVLBOX_PATH}"; then
if ! run "docker-compose exec --user devilbox -T php curl -sS --fail 'http://${VHOST}.${TLD_SUFFIX}' | tac | tac | grep '\"bullet success\"' | grep 'mbstring'" "${RETRIES}" "${DVLBOX_PATH}"; then
ERROR=1
fi
if ! run "docker-compose exec --user devilbox -T php curl -sS --fail 'http://cakephp.${TLD_SUFFIX}' | tac | tac | grep '\"bullet success\"' | grep 'openssl'" "${RETRIES}" "${DVLBOX_PATH}"; then
if ! run "docker-compose exec --user devilbox -T php curl -sS --fail 'http://${VHOST}.${TLD_SUFFIX}' | tac | tac | grep '\"bullet success\"' | grep 'openssl'" "${RETRIES}" "${DVLBOX_PATH}"; then
ERROR=1
fi
if ! run "docker-compose exec --user devilbox -T php curl -sS --fail 'http://cakephp.${TLD_SUFFIX}' | tac | tac | grep '\"bullet success\"' | grep 'intl'" "${RETRIES}" "${DVLBOX_PATH}"; then
if ! run "docker-compose exec --user devilbox -T php curl -sS --fail 'http://${VHOST}.${TLD_SUFFIX}' | tac | tac | grep '\"bullet success\"' | grep 'intl'" "${RETRIES}" "${DVLBOX_PATH}"; then
ERROR=1
fi
if ! run "docker-compose exec --user devilbox -T php curl -sS --fail 'http://cakephp.${TLD_SUFFIX}' | tac | tac | grep '\"bullet success\"' | grep 'tmp directory'" "${RETRIES}" "${DVLBOX_PATH}"; then
if ! run "docker-compose exec --user devilbox -T php curl -sS --fail 'http://${VHOST}.${TLD_SUFFIX}' | tac | tac | grep '\"bullet success\"' | grep 'tmp directory'" "${RETRIES}" "${DVLBOX_PATH}"; then
ERROR=1
fi
if ! run "docker-compose exec --user devilbox -T php curl -sS --fail 'http://cakephp.${TLD_SUFFIX}' | tac | tac | grep '\"bullet success\"' | grep 'logs directory'" "${RETRIES}" "${DVLBOX_PATH}"; then
if ! run "docker-compose exec --user devilbox -T php curl -sS --fail 'http://${VHOST}.${TLD_SUFFIX}' | tac | tac | grep '\"bullet success\"' | grep 'logs directory'" "${RETRIES}" "${DVLBOX_PATH}"; then
ERROR=1
fi
if ! run "docker-compose exec --user devilbox -T php curl -sS --fail 'http://cakephp.${TLD_SUFFIX}' | tac | tac | grep '\"bullet success\"' | grep 'connect to the database'" "${RETRIES}" "${DVLBOX_PATH}"; then
if ! run "docker-compose exec --user devilbox -T php curl -sS --fail 'http://${VHOST}.${TLD_SUFFIX}' | tac | tac | grep '\"bullet success\"' | grep 'connect to the database'" "${RETRIES}" "${DVLBOX_PATH}"; then
ERROR=1
fi
if [ "${ERROR}" = "1" ]; then
run "docker-compose exec --user devilbox -T php curl 'http://cakephp.${TLD_SUFFIX}' || true" "1" "${DVLBOX_PATH}"
run "docker-compose exec --user devilbox -T php curl 'http://${VHOST}.${TLD_SUFFIX}' || true" "1" "${DVLBOX_PATH}"
exit 1
fi

View File

@ -67,19 +67,22 @@ fi
###
MYSQL_ROOT_PASSWORD="$( "${SCRIPT_PATH}/../scripts/env-getvar.sh" "MYSQL_ROOT_PASSWORD" )"
TLD_SUFFIX="$( "${SCRIPT_PATH}/../scripts/env-getvar.sh" "TLD_SUFFIX" )"
VHOST="my-drupal"
# Create vhost dir
create_vhost_dir "${VHOST}"
# Setup Drupal project
run "docker-compose exec --user devilbox -T php bash -c 'mkdir -p /shared/httpd/drupal'" "${RETRIES}" "${DVLBOX_PATH}"
run "docker-compose exec --user devilbox -T php bash -c 'cd /shared/httpd/drupal; sudo rm -rf drupal; composer-1 create-project --no-interaction --prefer-dist drupal-composer/drupal-project drupal 8.x-dev'" "${RETRIES}" "${DVLBOX_PATH}"
run "docker-compose exec --user devilbox -T php bash -c 'cd /shared/httpd/drupal; ln -sf drupal/web htdocs'" "${RETRIES}" "${DVLBOX_PATH}"
run "docker-compose exec --user devilbox -T php bash -c 'cd /shared/httpd/${VHOST}; composer-1 create-project --no-interaction --prefer-dist drupal-composer/drupal-project drupal 8.x-dev'" "${RETRIES}" "${DVLBOX_PATH}"
run "docker-compose exec --user devilbox -T php bash -c 'cd /shared/httpd/${VHOST}; ln -sf drupal/web htdocs'" "${RETRIES}" "${DVLBOX_PATH}"
run "docker-compose exec --user devilbox -T php mysql -u root -h mysql --password=\"${MYSQL_ROOT_PASSWORD}\" -e \"DROP DATABASE IF EXISTS my_drupal; CREATE DATABASE my_drupal;\"" "${RETRIES}" "${DVLBOX_PATH}"
# Configure Drupal
run "docker-compose exec --user devilbox -T php bash -c 'cd /shared/httpd/drupal/htdocs/; ${DRUSH} site-install standard --db-url='mysql://root:${MYSQL_ROOT_PASSWORD}@mysql/my_drupal' --site-name=Example -y'" "${RETRIES}" "${DVLBOX_PATH}"
run "docker-compose exec --user devilbox -T php bash -c 'cd /shared/httpd/${VHOST}/htdocs/; ${DRUSH} site-install standard --db-url='mysql://root:${MYSQL_ROOT_PASSWORD}@mysql/my_drupal' --site-name=Example -y'" "${RETRIES}" "${DVLBOX_PATH}"
# Test Drupal
if ! run "docker-compose exec --user devilbox -T php curl -sS --fail 'http://drupal.${TLD_SUFFIX}' | tac | tac | grep 'Welcome to Example'" "${RETRIES}" "${DVLBOX_PATH}"; then
run "docker-compose exec --user devilbox -T php curl 'http://drupal.${TLD_SUFFIX}' || true"
if ! run "docker-compose exec --user devilbox -T php curl -sS --fail 'http://${VHOST}.${TLD_SUFFIX}' | tac | tac | grep 'Welcome to Example'" "${RETRIES}" "${DVLBOX_PATH}"; then
run "docker-compose exec --user devilbox -T php curl 'http://${VHOST}.${TLD_SUFFIX}' || true"
exit 1
fi

View File

@ -12,7 +12,7 @@ DVLBOX_PATH="$( cd "${SCRIPT_PATH}/../.." && pwd -P )"
# shellcheck disable=SC1090
. "${SCRIPT_PATH}/../scripts/.lib.sh"
RETRIES=10
RETRIES=20
DISABLED_VERSIONS=("8.0" "8.1")
@ -49,16 +49,17 @@ TLD_SUFFIX="$( "${SCRIPT_PATH}/../scripts/env-getvar.sh" "TLD_SUFFIX" )"
###
### Custom variables
###
VHOST="my-wordpress"
DB_NAME="my_wp"
PROJECT_NAME="this-is-my-grepable-project-name"
VHOST="my-wordpress"
# Create vhost dir
create_vhost_dir "${VHOST}"
# Download Wordpress
run "docker-compose exec --user devilbox -T php bash -c ' \
rm -rf /shared/httpd/${VHOST} \
&& mkdir -p /shared/httpd/${VHOST} \
&& git clone https://github.com/WordPress/WordPress /shared/httpd/${VHOST}/wordpress \
git clone https://github.com/WordPress/WordPress /shared/httpd/${VHOST}/wordpress \
&& ln -sf wordpress /shared/httpd/${VHOST}/htdocs'" \
"${RETRIES}" "${DVLBOX_PATH}"
@ -95,7 +96,13 @@ if ! run "docker-compose exec --user devilbox -T php curl -sS --fail -L -XPOST -
--data 'language=1' >/dev/null" "${RETRIES}" "${DVLBOX_PATH}"; then
run "docker-compose exec --user devilbox -T php curl -sS --fail -L -XPOST -c cookie.txt -b cookie.txt \
'http://${VHOST}.${TLD_SUFFIX}/wp-admin/install.php?step=1'\
--data 'language=1' >/dev/null" "1" "${DVLBOX_PATH}"
--data 'language=1' >/dev/null" "1" "${DVLBOX_PATH}" || true
run "docker-compose exec --user devilbox -T php curl -sS --fail -L -I \
'http://${VHOST}.${TLD_SUFFIX}/wp-admin/install.php?step=1'" "1" "${DVLBOX_PATH}" || true
run "docker-compose exec --user devilbox -T php curl -sS --fail -L \
'http://${VHOST}.${TLD_SUFFIX}/'" "1" "${DVLBOX_PATH}" || true
run "docker-compose logs php" || true
run "docker-compose logs httpd" || true
exit 1
fi
@ -119,7 +126,9 @@ if ! run "docker-compose exec --user devilbox -T php curl -sS --fail -L -XPOST -
--data 'admin_email=test%40test.com' \
--data 'blog_public=0' \
--data 'Submit=Install+WordPress' \
--data 'language='" "1" "${DVLBOX_PATH}"
--data 'language='" "1" "${DVLBOX_PATH}" || true
run "docker-compose logs php" || true
run "docker-compose logs httpd" || true
exit 1
fi

View File

@ -1,12 +1,88 @@
# Changelog
Make sure to have a look at [UPDATING](https://github.com/cytopia/devilbox/blob/master/UPDATING.md) to see any required steps for updating
major versions.
Make sure to have a look at [UPDATING.md](https://github.com/cytopia/devilbox/blob/master/UPDATING.md) to see any required steps for updating major or minor versions.
## Unreleased
## Release v1.9.0 (2020-12-12)
#### Fixed
- [#761](https://github.com/cytopia/devilbox/issues/761) Fixed missing Varnish config env var
- [#10](https://github.com/devilbox/watcherd/issues/10) watcherd performance issues
- Fixed `mdl` rubygen for PHP images
- Fixed `drupal` (Drupal Console Launcher) for PHP images
#### Added
- Added `ioncube` extension to PHP 7.4
- Added `sqlsrv` extension to PHP 7.4
- Added `apcu` extension to PHP 8.0
- Added `blackfire` extension to PHP 8.0
- Added `igbinary` extension to PHP 8.0
- Added `imap` extension to PHP 8.0
- Added `mcrypt` extension to PHP 8.0
- Added `memcache` extension to PHP 8.0
- Added `msgpack` extension to PHP 8.0
- Added `oauth` extension to PHP 8.0
- Added `psr` extension to PHP 8.0
- Added `solr` extension to PHP 8.0
- Added `xlswriter` extension to PHP 8.0
- Added `yaml` extension to PHP 8.0
- Added `apcu` extension to PHP 8.1
- Added `igbinary` extension to PHP 8.1
- Added `imap` extension to PHP 8.1
- Added `mcrypt` extension to PHP 8.1
- Added `memcache` extension to PHP 8.1
- Added `msgpack` extension to PHP 8.1
- Added `oauth` extension to PHP 8.1
- Added `psr` extension to PHP 8.1
- Added `solr` extension to PHP 8.1
- Added `xlswriter` extension to PHP 8.1
- Added `yaml` extension to PHP 8.1
- Added checks for TLD_SUFFIX in check-config.sh
#### Changed
- [#763](https://github.com/cytopia/devilbox/issues/764) `redis` extension compiles with `msgpack` and `igbinary` as available serializers
- Updated xdebug to latest version
- Updated `watcherd` to latest version
- Updated `vhost-gen` to latest version
## Release v1.8.3 (2020-11-22)
#### Fixed
- [#753](https://github.com/cytopia/devilbox/issues/753) Fixed symlink handling in watcherd
- [#751](https://github.com/cytopia/devilbox/issues/751) Fixed duplicate output in check-config.sh
#### Added
- [#755](https://github.com/cytopia/devilbox/issues/755) Added ~/.composer/vendor/bin to $PATH
- [#692](https://github.com/cytopia/devilbox/issues/692) Added custom supervisor configs
- Added project and customization checks in check-config.sh
- Intranet: show custom PHP configuration files
- Intranet: show custom Httpd configuration files
## Release v1.8.2 (2020-11-14)
#### Fixed
- [#643](https://github.com/cytopia/devilbox/issues/643) Wrong entrypoint in mysql images
- [#703](https://github.com/cytopia/devilbox/issues/703) Don't fail on uid/gid change
- [#749](https://github.com/cytopia/devilbox/issues/749) Fix to disable PHP modules without `*.so` ext
- Fixed `check-config.sh` to properly expand `~` character in path
#### Added
- [#707](https://github.com/cytopia/devilbox/issues/707) New `.env` variable: `HOST_PATH_BACKUPDIR`
#### Changed
- [#547](https://github.com/cytopia/devilbox/issues/547) Added link to official Contao Devilbox Documentation
## Release v1.8.1 (2020-11-12)
#### Fixed

View File

@ -724,9 +724,9 @@ The Devilbox is a development stack, so it is made sure that a lot of PHP module
|-------------------------------|---------|---------|---------|---------|---------|---------|---------|---------|---------|---------|---------|---------|
| <small>amqp</small> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | | |
| <small>apc</small> | | 🗸 | 🗸 | 🗸 | 🗸 | | | | | | | |
| <small>apcu</small> | | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | | |
| <small>apcu</small> | | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
| <small>bcmath</small> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
| <small>blackfire</small> | | | | | d | d | d | d | d | d | | |
| <small>blackfire</small> | | | | | d | d | d | d | d | d | d | |
| <small>bz2</small> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
| <small>calendar</small> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
| <small>Core</small> | | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
@ -747,27 +747,27 @@ The Devilbox is a development stack, so it is made sure that a lot of PHP module
| <small>gmp</small> | | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
| <small>hash</small> | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
| <small>iconv</small> | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
| <small>igbinary</small> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | | |
| <small>igbinary</small> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
| <small>imagick</small> | | | | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | | |
| <small>imap</small> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | | |
| <small>imap</small> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
| <small>interbase</small> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | | | |
| <small>intl</small> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
| <small>ioncube</small> | d | d | d | d | d | d | d | d | d | | | |
| <small>ioncube</small> | d | d | d | d | d | d | d | d | d | d | | |
| <small>json</small> | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
| <small>ldap</small> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
| <small>libxml</small> | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
| <small>mbstring</small> | ✔ | 🗸 | 🗸 | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
| <small>mcrypt</small> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | | |
| <small>memcache</small> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | | |
| <small>mcrypt</small> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
| <small>memcache</small> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
| <small>memcached</small> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
| <small>mhash</small> | | | | | ✔ | | | | | | | |
| <small>mongo</small> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | | | | | | | |
| <small>mongodb</small> | | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
| <small>msgpack</small> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | | |
| <small>msgpack</small> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
| <small>mysql</small> | ✔ | ✔ | 🗸 | 🗸 | 🗸 | | | | | | | |
| <small>mysqli</small> | ✔ | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
| <small>mysqlnd</small> | | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
| <small>OAuth</small> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | | |
| <small>OAuth</small> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
| <small>oci8</small> | | d | d | d | d | d | d | d | d | d | d | d |
| <small>openssl</small> | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
| <small>pcntl</small> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
@ -785,7 +785,7 @@ The Devilbox is a development stack, so it is made sure that a lot of PHP module
| <small>Phar</small> | 🗸 | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
| <small>posix</small> | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
| <small>pspell</small> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
| <small>psr</small> | | | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | | |
| <small>psr</small> | | | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
| <small>rdkafka</small> | | d | d | d | d | d | d | d | d | d | | |
| <small>readline</small> | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
| <small>recode</small> | 🗸 | ✔ | ✔ | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | | | |
@ -798,11 +798,11 @@ The Devilbox is a development stack, so it is made sure that a lot of PHP module
| <small>soap</small> | ✔ | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
| <small>sockets</small> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
| <small>sodium</small> | | | | | | | | ✔ | ✔ | ✔ | ✔ | ✔ |
| <small>solr</small> | | | | | | | 🗸 | 🗸 | 🗸 | 🗸 | | |
| <small>solr</small> | | | | | | | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
| <small>SPL</small> | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
| <small>SQLite</small> | ✔ | ✔ | | | | | | | | | | |
| <small>sqlite3</small> | | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
| <small>sqlsrv</small> | | | | | | d | d | d | d | | | |
| <small>sqlsrv</small> | | | | | | d | d | d | d | d | | |
| <small>ssh2</small> | | | | | | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | | |
| <small>standard</small> | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
| <small>swoole</small> | | d | d | d | d | d | d | d | d | d | | |
@ -815,13 +815,13 @@ The Devilbox is a development stack, so it is made sure that a lot of PHP module
| <small>vips</small> | | | | | | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | | |
| <small>wddx</small> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | | | |
| <small>xdebug</small> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
| <small>xlswriter</small> | | | | | | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | | |
| <small>xlswriter</small> | | | | | | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
| <small>xml</small> | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
| <small>xmlreader</small> | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
| <small>xmlrpc</small> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | | |
| <small>xmlwriter</small> | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
| <small>xsl</small> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
| <small>yaml</small> | | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | | |
| <small>yaml</small> | | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
| <small>Zend OPcache</small> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
| <small>zip</small> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
| <small>zlib</small> | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |

View File

@ -3,6 +3,31 @@
This document will hold all information on how to update between major versions.
## Update from `v1.8.1` to `v1.8.2`
**PR:** https://github.com/cytopia/devilbox/pull/750
This PR adds many new images, ensure to remove your current old state before running them:
```bash
docker-compose stop
docker-compose rm -f
```
## Update from `v1.8.0` to `v1.8.1`
**PR:** https://github.com/cytopia/devilbox/pull/747
This PR ensures to have all directories in log/ mod/ cfg/ added by default. Prior this, some
of those directories might have been created by Docker (running as root) and they have the wrong
permissions (root instead of local user).
To mitigate this, you need to adjust directory permissions prior pulling this tag.
```bash
sudo chown -R <user>:<group> .
```
## Update from `v1.6.2` to `v1.6.3`
**PR:** https://github.com/cytopia/devilbox/pull/689

View File

@ -21,13 +21,12 @@
[PHP]
; Xdebug
; https://3.xdebug.org/docs/upgrade_guide
; Use these settings to enable Xdebug for PHP
; Make sure to read up on Xdebug some settings might significantly slow down requests.
; The following is just an example configuration and should be adjusted
xdebug.default_enable = On
xdebug.profiler_enable = On
xdebug.remote_enable = On
xdebug.remote_autostart = On
xdebug.mode = debug
xdebug.start_with_request = yes
xdebug.remote_handler = dbgp
xdebug.remote_port = 9000
xdebug.idekey = PHPSTORM

View File

@ -21,13 +21,12 @@
[PHP]
; Xdebug
; https://3.xdebug.org/docs/upgrade_guide
; Use these settings to enable Xdebug for PHP
; Make sure to read up on Xdebug some settings might significantly slow down requests.
; The following is just an example configuration and should be adjusted
xdebug.default_enable = On
xdebug.profiler_enable = On
xdebug.remote_enable = On
xdebug.remote_autostart = On
xdebug.mode = debug
xdebug.start_with_request = yes
xdebug.remote_handler = dbgp
xdebug.remote_port = 9000
xdebug.idekey = PHPSTORM

View File

@ -21,13 +21,12 @@
[PHP]
; Xdebug
; https://3.xdebug.org/docs/upgrade_guide
; Use these settings to enable Xdebug for PHP
; Make sure to read up on Xdebug some settings might significantly slow down requests.
; The following is just an example configuration and should be adjusted
xdebug.default_enable = On
xdebug.profiler_enable = On
xdebug.remote_enable = On
xdebug.remote_autostart = On
xdebug.mode = debug
xdebug.start_with_request = yes
xdebug.remote_handler = dbgp
xdebug.remote_port = 9000
xdebug.idekey = PHPSTORM

View File

@ -11,6 +11,7 @@ set -o pipefail
RET_CODE=0
MY_UID="$( id -u )"
MY_GID="$( id -g )"
DEBUG=0
#--------------------------------------------------------------------------------------------------
@ -21,15 +22,24 @@ MY_GID="$( id -g )"
### Logger functions
###
log_err() {
>&2 printf "\\e[1;31m[ERR] %s\\e[0m\\n" "${1}"
>&2 printf "\\e[1;31m[ERR] %s\\e[0m\\n" "${1}"
}
log_note() {
>&2 printf "\\e[1;33m[NOTE] %s\\e[0m\\n" "${1}"
}
log_info() {
printf "\\e[;34m[INFO] %s\\e[0m\\n" "${1}"
printf "\\e[;34m[INFO] %s\\e[0m\\n" "${1}"
}
log_ok() {
printf "\\e[;32m[SUCC] %s\\e[0m\\n" "${1}"
printf "\\e[;32m[SUCC] %s\\e[0m\\n" "${1}"
}
log_debug() {
if [ "${DEBUG}" -eq "1" ]; then
printf "[DEBUG] %s\\n" "${1}"
fi
}
###
@ -51,11 +61,19 @@ print_head_1() {
### File functions
###
file_get_uid() {
stat -c '%u' "${1}"
if [ "$(uname)" = "Linux" ]; then
stat --format '%u' "${1}"
else
stat -f '%u' "${1}"
fi
}
file_get_gid() {
stat -c '%g' "${1}"
if [ "$(uname)" = "Linux" ]; then
stat --format '%g' "${1}"
else
stat -f '%g' "${1}"
fi
}
# Returns 4-digit format
@ -80,6 +98,52 @@ file_get_perm() {
echo "${perm}"
}
# Get path with '~' replace with correct home path
get_path() {
echo "${1/#\~/${HOME}}"
}
# Returns sub directories by one level
# Also returns symlinks if they point to a directory
get_sub_dirs_level_1() {
local dir="${1}"
dir="${dir#./}" # Remove leading './' if it exists
dir="${dir%/}" # Remove trailing '/' if it exists
# shellcheck disable=SC2016
find "${dir}" \
| grep -Ev "^${dir}\$" \
| grep -Ev "^${dir}/.+/" \
| xargs -n1 sh -c 'if [ -d "${1}" ]; then echo "${1}"; fi' -- \
| sort
}
# Returns sub directories by two level
# Also returns symlinks if they point to a directory
get_sub_dirs_level_2() {
local dir="${1}"
dir="${dir#./}" # Remove leading './' if it exists
dir="${dir%/}" # Remove trailing '/' if it exists
# shellcheck disable=SC2016
find "${dir}" \
| grep -Ev "^${dir}\$" \
| grep -Ev "^${dir}/.+/.+/" \
| xargs -n1 sh -c 'if [ -d "${1}" ]; then echo "${1}"; fi' -- \
| sort
}
# Returns the value of .env var
get_env_value() {
local val
val="$( grep -E "^${1}=" .env )"
echo "${val#*=}"
}
# Validate a DNS record
validate_dns() {
ping -c1 "${1}" >/dev/null 2>&1
}
#--------------------------------------------------------------------------------------------------
# Check git
@ -88,7 +152,7 @@ print_head_1 "Checking git"
GIT_STATUS="$( git status -s )"
if [ -z "${GIT_STATUS}" ]; then
log_info "git is clean"
log_ok "git is clean"
else
log_err "git is unclean"
echo "${GIT_STATUS}"
@ -123,6 +187,8 @@ while read -r env_var; do
log_err "Variable '${env_var}' missing in .env file"
RET_CODE=$(( RET_CODE + 1))
ENV_VAR_MISSING=1
else
log_debug "Variable '${env_var}' is present in '.env file"
fi
done < <(grep -E '^[A-Z].+=' env-example | awk -F'=' '{print $1}')
if [ "${ENV_VAR_MISSING}" = "0" ]; then
@ -137,6 +203,8 @@ while read -r env_var; do
log_err "Variable '${env_var}' should only be defined once. Occurances: ${OCCURANCES}"
RET_CODE=$(( RET_CODE + 1))
ENV_VAR_DUPLICATED=1
else
log_debug "Variable '${env_var}' is defined exactly once."
fi
done < <(grep -E '^[A-Z].+=' env-example | awk -F'=' '{print $1}')
if [ "${ENV_VAR_DUPLICATED}" = "0" ]; then
@ -150,139 +218,221 @@ fi
print_head_1 "Checking .env file values"
WRONG_ENV_FILES_VALUES=0
DEBUG_COMPOSE_ENTRYPOINT="$( grep -E '^DEBUG_COMPOSE_ENTRYPOINT=' .env | awk -F'=' '{print $2}' )"
DEBUG_COMPOSE_ENTRYPOINT="$( get_env_value "DEBUG_COMPOSE_ENTRYPOINT" )"
if [ "${DEBUG_COMPOSE_ENTRYPOINT}" != "0" ] && [ "${DEBUG_COMPOSE_ENTRYPOINT}" != "1" ] && [ "${DEBUG_COMPOSE_ENTRYPOINT}" != "2" ]; then
log_err "Variable 'DEBUG_COMPOSE_ENTRYPOINT' should be 0, 1 or 2. Has: ${DEBUG_COMPOSE_ENTRYPOINT}"
RET_CODE=$(( RET_CODE + 1))
WRONG_ENV_FILES_VALUES=1
else
log_debug "Variable 'DEBUG_COMPOSE_ENTRYPOINT' has correct value: ${DEBUG_COMPOSE_ENTRYPOINT}"
fi
DOCKER_LOGS="$( grep -E '^DOCKER_LOGS=' .env | awk -F'=' '{print $2}' )"
DOCKER_LOGS="$( get_env_value "DOCKER_LOGS" )"
if [ "${DOCKER_LOGS}" != "0" ] && [ "${DOCKER_LOGS}" != "1" ]; then
log_err "Variable 'DOCKER_LOGS' should be 0 or 1. Has: ${DOCKER_LOGS}"
RET_CODE=$(( RET_CODE + 1))
WRONG_ENV_FILES_VALUES=1
else
log_debug "Variable 'DOCKER_LOGS' has correct value: ${DOCKER_LOGS}"
fi
DEVILBOX_PATH="$( grep -E '^DEVILBOX_PATH=' .env | awk -F'=' '{print $2}' )"
DEVILBOX_PATH="$( get_env_value "DEVILBOX_PATH" )"
if [ ! -d "${DEVILBOX_PATH}" ]; then
log_err "Variable 'DEVILBOX_PATH' directory does not exist: ${DEVILBOX_PATH}"
RET_CODE=$(( RET_CODE + 1))
WRONG_ENV_FILES_VALUES=1
else
log_debug "Variable 'DEVILBOX_PATH' directory exists: ${DEVILBOX_PATH}"
fi
DEVILBOX_PATH_PERM="$( file_get_perm "${DEVILBOX_PATH}" )"
if [ "${DEVILBOX_PATH_PERM}" != "0755" ] && [ "${DEVILBOX_PATH_PERM}" != "0775" ] && [ "${DEVILBOX_PATH_PERM}" != "0777" ]; then
log_err "Variable 'DEVILBOX_PATH' directory must be 0755, 0775 or 0777. Has: ${DEVILBOX_PATH_PERM}"
RET_CODE=$(( RET_CODE + 1))
WRONG_ENV_FILES_VALUES=1
else
log_debug "Variable 'DEVILBOX_PATH' directory has correct permissions: ${DEVILBOX_PATH_PERM}"
fi
DEVILBOX_PATH_PERM="$( file_get_uid "${DEVILBOX_PATH}" )"
if [ "${DEVILBOX_PATH_PERM}" != "${MY_UID}" ]; then
log_err "Variable 'DEVILBOX_PATH' directory uid must be ${MY_UID}. Has: ${DEVILBOX_PATH_PERM}"
RET_CODE=$(( RET_CODE + 1))
WRONG_ENV_FILES_VALUES=1
else
log_debug "Variable 'DEVILBOX_PATH' diretory has correct uid: ${DEVILBOX_PATH_PERM}"
fi
DEVILBOX_PATH_PERM="$( file_get_gid "${DEVILBOX_PATH}" )"
if [ "${DEVILBOX_PATH_PERM}" != "${MY_GID}" ]; then
log_err "Variable 'DEVILBOX_PATH' directory gid must be ${MY_GID}. Has: ${DEVILBOX_PATH_PERM}"
RET_CODE=$(( RET_CODE + 1))
WRONG_ENV_FILES_VALUES=1
else
log_debug "Variable 'DEVILBOX_PATH' diretory has correct gid: ${DEVILBOX_PATH_PERM}"
fi
if [ "${WRONG_ENV_FILES_VALUES}" = "0" ]; then
log_ok "All .env file variables have correct values"
LOCAL_LISTEN_ADDR="$( get_env_value "LOCAL_LISTEN_ADDR" )"
if [ -n "${LOCAL_LISTEN_ADDR}" ]; then
if ! echo "${LOCAL_LISTEN_ADDR}" | grep -E ':$' >/dev/null; then
log_err "Variable 'LOCAL_LISTEN_ADDR' is not empty and missing trailing ':'"
RET_CODE=$(( RET_CODE + 1))
WRONG_ENV_FILES_VALUES=1
elif ! echo "${LOCAL_LISTEN_ADDR}" | grep -E '^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+:$' >/dev/null; then
log_err "Variable 'LOCAL_LISTEN_ADDR' has wrong value: '${LOCAL_LISTEN_ADDR}'"
RET_CODE=$(( RET_CODE + 1))
WRONG_ENV_FILES_VALUES=1
else
log_debug "Variable 'LOCAL_LISTEN_ADDR' has correct value: ${LOCAL_LISTEN_ADDR}"
fi
else
log_debug "Variable 'LOCAL_LISTEN_ADDR' has correct value: ${LOCAL_LISTEN_ADDR}"
fi
HOST_PATH_HTTPD_DATADIR="$( grep -E '^HOST_PATH_HTTPD_DATADIR=' .env | awk -F'=' '{print $2}' )"
HOST_PATH_HTTPD_DATADIR="$( get_path "$( get_env_value "HOST_PATH_HTTPD_DATADIR" )" )"
if [ ! -d "${HOST_PATH_HTTPD_DATADIR}" ]; then
log_err "Variable 'HOST_PATH_HTTPD_DATADIR' directory does not exist: ${HOST_PATH_HTTPD_DATADIR}"
RET_CODE=$(( RET_CODE + 1))
WRONG_ENV_FILES_VALUES=1
else
log_debug "Variable 'HOST_PATH_HTTPD_DATADIR' directory exists: ${HOST_PATH_HTTPD_DATADIR}"
fi
HOST_PATH_HTTPD_DATADIR_PERM="$( file_get_perm "${HOST_PATH_HTTPD_DATADIR}" )"
if [ "${HOST_PATH_HTTPD_DATADIR_PERM}" != "0755" ] && [ "${HOST_PATH_HTTPD_DATADIR_PERM}" != "0775" ] && [ "${HOST_PATH_HTTPD_DATADIR_PERM}" != "0777" ]; then
log_err "Variable 'HOST_PATH_HTTPD_DATADIR' directory must be 0755, 0775 or 0777. Has: ${HOST_PATH_HTTPD_DATADIR_PERM}"
RET_CODE=$(( RET_CODE + 1))
WRONG_ENV_FILES_VALUES=1
else
log_debug "Variable 'HOST_PATH_HTTPD_DATADIR' directory has correct permissions: ${HOST_PATH_HTTPD_DATADIR_PERM}"
fi
HOST_PATH_HTTPD_DATADIR_PERM="$( file_get_uid "${HOST_PATH_HTTPD_DATADIR}" )"
if [ "${HOST_PATH_HTTPD_DATADIR_PERM}" != "${MY_UID}" ]; then
log_err "Variable 'HOST_PATH_HTTPD_DATADIR' directory uid must be ${MY_UID}. Has: ${HOST_PATH_HTTPD_DATADIR_PERM}"
RET_CODE=$(( RET_CODE + 1))
WRONG_ENV_FILES_VALUES=1
else
log_debug "Variable 'HOST_PATH_HTTPD_DATADIR' directory has correct uid: ${HOST_PATH_HTTPD_DATADIR_PERM}"
fi
HOST_PATH_HTTPD_DATADIR_PERM="$( file_get_gid "${HOST_PATH_HTTPD_DATADIR}" )"
if [ "${HOST_PATH_HTTPD_DATADIR_PERM}" != "${MY_GID}" ]; then
log_err "Variable 'HOST_PATH_HTTPD_DATADIR' directory gid must be ${MY_GID}. Has: ${HOST_PATH_HTTPD_DATADIR_PERM}"
RET_CODE=$(( RET_CODE + 1))
WRONG_ENV_FILES_VALUES=1
else
log_debug "Variable 'HOST_PATH_HTTPD_DATADIR' directory has correct gid: ${HOST_PATH_HTTPD_DATADIR_PERM}"
fi
PHP_SERVER="$( grep -E '^PHP_SERVER=' .env | awk -F'=' '{print $2}' )"
PHP_SERVER="$( get_env_value "PHP_SERVER" )"
if ! grep -E "^#?PHP_SERVER=${PHP_SERVER}\$" env-example >/dev/null; then
log_err "Variable 'PHP_SERVER' has wrong value: ${PHP_SERVER}"
RET_CODE=$(( RET_CODE + 1))
WRONG_ENV_FILES_VALUES=1
else
log_debug "Variable 'PHP_SERVER' has correct value: ${PHP_SERVER}"
fi
HTTPD_SERVER="$( grep -E '^HTTPD_SERVER=' .env | awk -F'=' '{print $2}' )"
HTTPD_SERVER="$( get_env_value "HTTPD_SERVER" )"
if ! grep -E "^#?HTTPD_SERVER=${HTTPD_SERVER}\$" env-example >/dev/null; then
log_err "Variable 'HTTPD_SERVER' has wrong value: ${HTTPD_SERVER}"
RET_CODE=$(( RET_CODE + 1))
WRONG_ENV_FILES_VALUES=1
else
log_debug "Variable 'HTTPD_SERVER' has correct value: ${HTTPD_SERVER}"
fi
MYSQL_SERVER="$( grep -E '^MYSQL_SERVER=' .env | awk -F'=' '{print $2}' )"
MYSQL_SERVER="$( get_env_value "MYSQL_SERVER" )"
if ! grep -E "^#?MYSQL_SERVER=${MYSQL_SERVER}\$" env-example >/dev/null; then
log_err "Variable 'MYSQL_SERVER' has wrong value: ${MYSQL_SERVER}"
RET_CODE=$(( RET_CODE + 1))
WRONG_ENV_FILES_VALUES=1
else
log_debug "Variable 'MYSQL_SERVER' has correct value: ${MYSQL_SERVER}"
fi
PGSQL_SERVER="$( grep -E '^PGSQL_SERVER=' .env | awk -F'=' '{print $2}' )"
PGSQL_SERVER="$( get_env_value "PGSQL_SERVER" )"
if ! grep -E "^#?PGSQL_SERVER=${PGSQL_SERVER}\$" env-example >/dev/null; then
log_err "Variable 'PGSQL_SERVER' has wrong value: ${PGSQL_SERVER}"
RET_CODE=$(( RET_CODE + 1))
WRONG_ENV_FILES_VALUES=1
else
log_debug "Variable 'PGSQL_SERVER' has correct value: ${PGSQL_SERVER}"
fi
REDIS_SERVER="$( grep -E '^REDIS_SERVER=' .env | awk -F'=' '{print $2}' )"
REDIS_SERVER="$( get_env_value "REDIS_SERVER" )"
if ! grep -E "^#?REDIS_SERVER=${REDIS_SERVER}\$" env-example >/dev/null; then
log_err "Variable 'REDIS_SERVER' has wrong value: ${REDIS_SERVER}"
RET_CODE=$(( RET_CODE + 1))
WRONG_ENV_FILES_VALUES=1
else
log_debug "Variable 'REDIS_SERVER' has correct value: ${REDIS_SERVER}"
fi
MEMCD_SERVER="$( grep -E '^MEMCD_SERVER=' .env | awk -F'=' '{print $2}' )"
MEMCD_SERVER="$( get_env_value "MEMCD_SERVER" )"
if ! grep -E "^#?MEMCD_SERVER=${MEMCD_SERVER}\$" env-example >/dev/null; then
log_err "Variable 'MEMCD_SERVER' has wrong value: ${MEMCD_SERVER}"
RET_CODE=$(( RET_CODE + 1))
WRONG_ENV_FILES_VALUES=1
else
log_debug "Variable 'MEMCD_SERVER' has correct value: ${MEMCD_SERVER}"
fi
MONGO_SERVER="$( grep -E '^MONGO_SERVER=' .env | awk -F'=' '{print $2}' )"
MONGO_SERVER="$( get_env_value "MONGO_SERVER" )"
if ! grep -E "^#?MONGO_SERVER=${MONGO_SERVER}\$" env-example >/dev/null; then
log_err "Variable 'MONGO_SERVER' has wrong value: ${MONGO_SERVER}"
RET_CODE=$(( RET_CODE + 1))
WRONG_ENV_FILES_VALUES=1
else
log_debug "Variable 'MONGO_SERVER' has correct value: ${MONGO_SERVER}"
fi
NEW_UID="$( grep -E '^NEW_UID=' .env | awk -F'=' '{print $2}' )"
NEW_UID="$( get_env_value "NEW_UID" )"
if [ "${NEW_UID}" != "${MY_UID}" ]; then
log_err "Variable 'NEW_UID' has wrong value: '${NEW_UID}'. Should have: ${MY_UID}"
RET_CODE=$(( RET_CODE + 1))
WRONG_ENV_FILES_VALUES=1
else
log_debug "Variable 'NEW_UID' has correct value: '${NEW_UID}'"
fi
NEW_GID="$( grep -E '^NEW_GID=' .env | awk -F'=' '{print $2}' )"
NEW_GID="$( get_env_value "NEW_GID" )"
if [ "${NEW_GID}" != "${MY_GID}" ]; then
log_err "Variable 'NEW_GID' has wrong value: '${NEW_GID}'. Should have: ${MY_GID}"
RET_CODE=$(( RET_CODE + 1))
WRONG_ENV_FILES_VALUES=1
else
log_debug "Variable 'NEW_GID' has correct value: '${NEW_GID}'"
fi
TLD_SUFFIX="$( get_env_value "TLD_SUFFIX" )"
TLD_SUFFIX_BLACKLIST="dev|com|org|net|int|edu|de"
if echo "${TLD_SUFFIX}" | grep -E "^(${TLD_SUFFIX_BLACKLIST})\$" >/dev/null; then
log_err "Variable 'TLD_SUFFX' should not be set to '${TLD_SUFFIX}'. It is a real tld domain."
log_err "All DNS requests will be intercepted to this tld domain and re-routed to the HTTP container."
log_info "Consider using a subdomain value of e.g.: 'mydev.${TLD_SUFFIX}' instead."
RET_CODE=$(( RET_CODE + 1))
WRONG_ENV_FILES_VALUES=1
elif [ "${TLD_SUFFIX}" = "localhost" ]; then
log_err "Variable 'TLD_SUFFX' should not be set to '${TLD_SUFFIX}'. It is a loopback address."
log_info "See: https://tools.ietf.org/html/draft-west-let-localhost-be-localhost-06"
RET_CODE=$(( RET_CODE + 1))
WRONG_ENV_FILES_VALUES=1
else
log_debug "Variable 'TLD_SUFFIX' has correct value: '${TLD_SUFFIX}'"
fi
if [ "${WRONG_ENV_FILES_VALUES}" = "0" ]; then
log_ok "All .env file variables have correct values"
fi
#--------------------------------------------------------------------------------------------------
# Ensure cfg/, mod/ and log/ directories exist
#--------------------------------------------------------------------------------------------------
print_head_1 "Checking required directories"
print_head_1 "Checking required Devilbox core directories exist"
# /cfg/php-fpm-VERSION
DIR_MISSING=0
@ -291,6 +441,8 @@ while read -r php_version; do
log_err "Directory 'cfg/php-fpm-${php_version}' is missing"
RET_CODE=$(( RET_CODE + 1))
DIR_MISSING=1
else
log_debug "Directory 'cfg/php-fpm-${php_version}' is present"
fi
done < <(grep -E '^#?PHP_SERVER=' env-example | awk -F'=' '{print $2}')
if [ "${DIR_MISSING}" = "0" ]; then
@ -304,6 +456,8 @@ while read -r php_version; do
log_err "Directory 'log/php-fpm-${php_version}' is missing"
RET_CODE=$(( RET_CODE + 1))
DIR_MISSING=1
else
log_debug "Directory 'log/php-fpm-${php_version}' is present"
fi
done < <(grep -E '^#?PHP_SERVER=' env-example | awk -F'=' '{print $2}')
if [ "${DIR_MISSING}" = "0" ]; then
@ -317,6 +471,8 @@ while read -r php_version; do
log_err "Directory 'mod/php-fpm-${php_version}' is missing"
RET_CODE=$(( RET_CODE + 1))
DIR_MISSING=1
else
log_debug "Directory 'mod/php-fpm-${php_version}' is present"
fi
done < <(grep -E '^#?PHP_SERVER=' env-example | awk -F'=' '{print $2}')
if [ "${DIR_MISSING}" = "0" ]; then
@ -330,6 +486,8 @@ while read -r httpd_version; do
log_err "Directory 'cfg/${httpd_version}' is missing"
RET_CODE=$(( RET_CODE + 1))
DIR_MISSING=1
else
log_debug "Directory 'cfg/${httpd_version}' is present"
fi
done < <(grep -E '^#?HTTPD_SERVER=' env-example | awk -F'=' '{print $2}')
if [ "${DIR_MISSING}" = "0" ]; then
@ -343,6 +501,8 @@ while read -r httpd_version; do
log_err "Directory 'log/${httpd_version}' is missing"
RET_CODE=$(( RET_CODE + 1))
DIR_MISSING=1
else
log_debug "Directory 'log/${httpd_version}' is present"
fi
done < <(grep -E '^#?HTTPD_SERVER=' env-example | awk -F'=' '{print $2}')
if [ "${DIR_MISSING}" = "0" ]; then
@ -351,19 +511,19 @@ fi
#--------------------------------------------------------------------------------------------------
# Directory permissions
# Devilbox Directory permissions
#--------------------------------------------------------------------------------------------------
print_head_1 "Checking directory permissions"
print_head_1 "Checking devilbox core directory permissions"
DEVILBOX_DIRS=(
"autostart"
"backups"
"bash"
"ca"
"cfg"
"compose"
"log"
"mod"
"supervisor"
)
# Check allowed directory permissions: 0755 0775 0777
@ -375,6 +535,8 @@ for search_dir in "${DEVILBOX_DIRS[@]}"; do
log_err "Directory '${my_dir}' should have 0755, 0775 or 0777 permissions. Has: ${PERM} permissions"
RET_CODE=$(( RET_CODE + 1))
DEVILBOX_DIR_PERM_WRONG=1
else
log_debug "Directory '${my_dir}' has correct permissions: ${PERM}"
fi
done < <(find "${search_dir}" -type d)
done
@ -391,6 +553,8 @@ for search_dir in "${DEVILBOX_DIRS[@]}"; do
log_err "Directory '${my_dir}' should have uid '${MY_UID}' Has: '${PERM}'"
RET_CODE=$(( RET_CODE + 1))
DEVILBOX_DIR_PERM_WRONG=1
else
log_debug "Directory '${my_dir}' has correct uid: ${PERM}"
fi
done < <(find "${search_dir}" -type d)
done
@ -407,6 +571,8 @@ for search_dir in "${DEVILBOX_DIRS[@]}"; do
log_err "Directory '${my_dir}' should have gid '${MY_GID}' Has: '${PERM}'"
RET_CODE=$(( RET_CODE + 1))
DEVILBOX_DIR_PERM_WRONG=1
else
log_debug "Directory '${my_dir}' has correct gid: ${PERM}"
fi
done < <(find "${search_dir}" -type d)
done
@ -416,17 +582,17 @@ fi
#--------------------------------------------------------------------------------------------------
# File permissions
# Devilbox File permissions
#--------------------------------------------------------------------------------------------------
print_head_1 "Checking file permissions"
print_head_1 "Checking devilbox core file permissions"
DEVILBOX_DIRS=(
"autostart"
"backups"
"ca"
"cfg"
"compose"
"mod"
"supervisor"
)
# Check allowed directory permissions: 0644 0664 0666
@ -440,6 +606,8 @@ for search_file in "${DEVILBOX_DIRS[@]}"; do
log_err "File '${my_file}' should have 0600 permissions. Has: ${PERM} permissions"
RET_CODE=$(( RET_CODE + 1))
DEVILBOX_DIR_PERM_WRONG=1
else
log_debug "File '${my_file}' has correct permissions: ${PERM}"
fi
# Executable files
elif echo "${my_file}" | grep -E '.+\.sh(-example)?$' >/dev/null; then
@ -447,6 +615,8 @@ for search_file in "${DEVILBOX_DIRS[@]}"; do
log_err "File '${my_file}' should have 0755, 0775 or 0777 permissions. Has: ${PERM} permissions"
RET_CODE=$(( RET_CODE + 1))
DEVILBOX_DIR_PERM_WRONG=1
else
log_debug "File '${my_file}' has correct permissions: ${PERM}"
fi
# All other files
else
@ -454,6 +624,8 @@ for search_file in "${DEVILBOX_DIRS[@]}"; do
log_err "File '${my_file}' should have 0644, 0664 or 0666 permissions. Has: ${PERM} permissions"
RET_CODE=$(( RET_CODE + 1))
DEVILBOX_DIR_PERM_WRONG=1
else
log_debug "File '${my_file}' has correct permissions: ${PERM}"
fi
fi
done < <(find "${search_file}" -type f)
@ -471,6 +643,8 @@ for search_file in "${DEVILBOX_DIRS[@]}"; do
log_err "File '${my_file}' should have uid '${MY_UID}' Has: '${PERM}'"
RET_CODE=$(( RET_CODE + 1))
DEVILBOX_DIR_PERM_WRONG=1
else
log_debug "File '${my_file}' has correct uid: ${PERM}"
fi
done < <(find "${search_file}" -type f)
done
@ -487,6 +661,8 @@ for search_file in "${DEVILBOX_DIRS[@]}"; do
log_err "File '${my_file}' should have gid '${MY_GID}' Has: '${PERM}'"
RET_CODE=$(( RET_CODE + 1))
DEVILBOX_DIR_PERM_WRONG=1
else
log_debug "File '${my_file}' has correct gid: ${PERM}"
fi
done < <(find "${search_file}" -type f)
done
@ -496,11 +672,11 @@ fi
#--------------------------------------------------------------------------------------------------
# Check projects
# Check projects permissions
#--------------------------------------------------------------------------------------------------
print_head_1 "Checking projects"
print_head_1 "Checking projects permissions"
HOST_PATH_HTTPD_DATADIR="$( grep -E '^HOST_PATH_HTTPD_DATADIR=' .env | awk -F'=' '{print $2}' )"
HOST_PATH_HTTPD_DATADIR="$( get_path "$( get_env_value "HOST_PATH_HTTPD_DATADIR" )" )"
DATA_DIR_PERM_WRONG=0
while read -r project; do
@ -509,8 +685,10 @@ while read -r project; do
log_err "Directory '${project}' should have 0755, 0775 or 0777 permissions. Has: ${PERM} permissions"
RET_CODE=$(( RET_CODE + 1))
DATA_DIR_PERM_WRONG=1
else
log_debug "Directory '${project}' has correct permissions: ${PERM}"
fi
done < <(find "${HOST_PATH_HTTPD_DATADIR}" -type d | grep -Ev "${HOST_PATH_HTTPD_DATADIR}/.+/.+")
done < <(get_sub_dirs_level_1 "${HOST_PATH_HTTPD_DATADIR}")
if [ "${DATA_DIR_PERM_WRONG}" = "0" ]; then
log_ok "All project dirs have correct permissions"
fi
@ -522,8 +700,10 @@ while read -r project; do
log_err "Directory '${project}' should have uid '${MY_UID}' Has: '${PERM}'"
RET_CODE=$(( RET_CODE + 1))
DATA_DIR_PERM_WRONG=1
else
log_debug "Directory '${project}' has correct uid: ${PERM}"
fi
done < <(find "${HOST_PATH_HTTPD_DATADIR}" -type d | grep -Ev "${HOST_PATH_HTTPD_DATADIR}/.+/.+")
done < <(get_sub_dirs_level_1 "${HOST_PATH_HTTPD_DATADIR}")
if [ "${DATA_DIR_PERM_WRONG}" = "0" ]; then
log_ok "All project dirs have correct uid"
fi
@ -535,13 +715,167 @@ while read -r project; do
log_err "Directory '${project}' should have gid '${MY_GID}' Has: '${PERM}'"
RET_CODE=$(( RET_CODE + 1))
DATA_DIR_PERM_WRONG=1
else
log_debug "Directory '${project}' has correct gid: ${PERM}"
fi
done < <(find "${HOST_PATH_HTTPD_DATADIR}" -type d | grep -Ev "${HOST_PATH_HTTPD_DATADIR}/.+/.+")
done < <(get_sub_dirs_level_1 "${HOST_PATH_HTTPD_DATADIR}")
if [ "${DATA_DIR_PERM_WRONG}" = "0" ]; then
log_ok "All project dirs have correct gid"
fi
#--------------------------------------------------------------------------------------------------
# Check projects settings
#--------------------------------------------------------------------------------------------------
print_head_1 "Checking projects settings"
HOST_PATH_HTTPD_DATADIR="$( get_path "$( get_env_value "HOST_PATH_HTTPD_DATADIR" )" )"
TLD_SUFFIX="$( get_env_value "TLD_SUFFIX" )"
DNS_RECORD_WRONG=0
while read -r project; do
VHOST="$( basename "${project}" ).${TLD_SUFFIX}"
if ! validate_dns "${VHOST}"; then
log_err "Project '${VHOST}' has no valid DNS record"
RET_CODE=$(( RET_CODE + 1))
DNS_RECORD_WRONG=1
else
log_debug "Project '${VHOST}' has valid DNS record"
fi
done < <(get_sub_dirs_level_1 "${HOST_PATH_HTTPD_DATADIR}")
if [ "${DNS_RECORD_WRONG}" = "0" ]; then
log_ok "All projects have valid DNS records"
fi
HTTPD_DOCROOT_DIR="$( get_env_value "HTTPD_DOCROOT_DIR" )"
DOCROOT_WRONG=0
while read -r project; do
if [ ! -d "${project}/${HTTPD_DOCROOT_DIR}" ]; then
log_err "Missing HTTPD_DOCROOT_DIR '${HTTPD_DOCROOT_DIR}' in: ${project}"
RET_CODE=$(( RET_CODE + 1))
DOCROOT_WRONG=1
else
log_debug "HTTPD_DOCROOT_DIR '${HTTPD_DOCROOT_DIR}' present in: ${project}"
fi
done < <(get_sub_dirs_level_1 "${HOST_PATH_HTTPD_DATADIR}")
if [ "${DOCROOT_WRONG}" = "0" ]; then
log_ok "All projects have valid HTTPD_DOCROOT_DIR"
fi
#--------------------------------------------------------------------------------------------------
# Check Customizations
#--------------------------------------------------------------------------------------------------
print_head_1 "Checking customizations"
CUSTOMIZATIONS=0
# vhost-gen
HOST_PATH_HTTPD_DATADIR="$( get_path "$( get_env_value "HOST_PATH_HTTPD_DATADIR" )" )"
HTTPD_TEMPLATE_DIR="$( get_env_value "HTTPD_TEMPLATE_DIR" )"
while read -r project; do
if [ -f "${project}/${HTTPD_TEMPLATE_DIR}/apache22.yml" ]; then
log_note "[vhost-gen] Custom Apache 2.2 vhost-gen config present in: ${project}/"
CUSTOMIZATIONS=$(( CUSTOMIZATIONS + 1 ))
elif [ -f "${project}/${HTTPD_TEMPLATE_DIR}/apache24.yml" ]; then
log_note "[vhost-gen] Custom Apache 2.4 vhost-gen config present in: ${project}/"
CUSTOMIZATIONS=$(( CUSTOMIZATIONS + 1 ))
elif [ -f "${project}/${HTTPD_TEMPLATE_DIR}/nginx.yml" ]; then
log_note "[vhost-gen] Custom Nginx vhost-gen config present in: ${project}/"
CUSTOMIZATIONS=$(( CUSTOMIZATIONS + 1 ))
else
log_debug "[vhost-gen] No custom configuration for: ${project}/"
fi
done < <(get_sub_dirs_level_1 "${HOST_PATH_HTTPD_DATADIR}")
# docker-compose.override.yml
if [ -f "docker-compose.override.yml" ]; then
log_note "[docker] Custom docker-compose.override.yml present"
CUSTOMIZATIONS=$(( CUSTOMIZATIONS + 1 ))
else
log_debug "[docker] No custom docker-compose.override.yml present"
fi
# cfg/HTTPD/
while read -r httpd; do
if find "cfg/${httpd}" | grep -E '\.conf$' >/dev/null; then
log_note "[httpd] Custom config present in cfg/${httpd}/"
CUSTOMIZATIONS=$(( CUSTOMIZATIONS + 1 ))
else
log_debug "[httpd] No custom config present in cfg/${httpd}/"
fi
done < <(grep -E '^#?HTTPD_SERVER=' env-example | awk -F'=' '{print $2}')
# cfg/php-ini-${version}/
while read -r php_version; do
if find "cfg/php-ini-${php_version}" | grep -E '\.ini$' >/dev/null; then
log_note "[php.ini] Custom config present in cfg/php-ini-${php_version}/"
CUSTOMIZATIONS=$(( CUSTOMIZATIONS + 1 ))
else
log_debug "[php.ini] No custom config present in cfg/php-ini-${php_version}/"
fi
done < <(grep -E '^#?PHP_SERVER=' env-example | awk -F'=' '{print $2}')
# cfg/php-fpm-${version}/
while read -r php_version; do
if find "cfg/php-fpm-${php_version}" | grep -E '\.conf$' >/dev/null; then
log_note "[php-fpm] Custom config present in cfg/php-fpm-${php_version}/"
CUSTOMIZATIONS=$(( CUSTOMIZATIONS + 1 ))
else
log_debug "[php-fpm] No custom config present in cfg/php-fpm-${php_version}/"
fi
done < <(grep -E '^#?PHP_SERVER=' env-example | awk -F'=' '{print $2}')
# cfg/MYSQL/
while read -r mysql; do
if find "cfg/${mysql}" | grep -E '\.cnf$' >/dev/null; then
log_note "[mysql] Custom config present in cfg/${mysql}/"
CUSTOMIZATIONS=$(( CUSTOMIZATIONS + 1 ))
else
log_debug "[mysql] No custom config present in cfg/${mysql}/"
fi
done < <(grep -E '^#?MYSQL_SERVER=' env-example | awk -F'=' '{print $2}')
# cfg/php-startup-${version}/
while read -r php_version; do
if find "cfg/php-startup-${php_version}" | grep -E '\.sh$' >/dev/null; then
log_note "[startup] Custom script present in cfg/php-startup-${php_version}/"
CUSTOMIZATIONS=$(( CUSTOMIZATIONS + 1 ))
else
log_debug "[startup] No custom script present in cfg/php-startup-${php_version}/"
fi
done < <(grep -E '^#?PHP_SERVER=' env-example | awk -F'=' '{print $2}')
# autostart/
if find "autostart" | grep -E '\.sh$' >/dev/null; then
log_note "[startup] Custom script present in autostart/"
CUSTOMIZATIONS=$(( CUSTOMIZATIONS + 1 ))
else
log_debug "[startup] No custom script present in autostart/"
fi
# supervisor/
if find "supervisor" | grep -E '\.conf$' >/dev/null; then
log_note "[supervisor] Custom config present in supervisor/"
CUSTOMIZATIONS=$(( CUSTOMIZATIONS + 1 ))
else
log_debug "[supervisor] No custom config present in supervisor/"
fi
# bash/
if find "bash" | grep -E '\.sh$' >/dev/null; then
log_note "[bash] Custom script present in bash/"
CUSTOMIZATIONS=$(( CUSTOMIZATIONS + 1 ))
else
log_debug "[bash] No custom script present in bash/"
fi
# Total?
if [ "${CUSTOMIZATIONS}" = "0" ]; then
log_info "No custom configurations applied"
fi
#--------------------------------------------------------------------------------------------------
# Summary
#--------------------------------------------------------------------------------------------------
@ -551,10 +885,20 @@ if [ "${RET_CODE}" -gt "0" ]; then
log_err "Found ${RET_CODE} error(s)"
log_err "Devilbox might not work properly"
log_err "Fix the issues before submitting a bug report"
log_info "Ensure to run 'docker-compose stop; docker-compose rm -f' on changes in .env"
if [ "${CUSTOMIZATIONS}" -gt "0" ]; then
log_note "${CUSTOMIZATIONS} custom configurations applied. If you encounter issues, reset them first."
else
log_info "No custom configurations applied"
fi
log_info "Ensure to run 'docker-compose stop; docker-compose rm -f' on .env changes or custom configs"
exit 1
else
log_ok "Found no errors"
log_info "Ensure to run 'docker-compose stop; docker-compose rm -f' when .env was changed"
if [ "${CUSTOMIZATIONS}" -gt "0" ]; then
log_note "${CUSTOMIZATIONS} custom configurations applied. If you encounter issues, reset them first."
else
log_info "No custom configurations applied"
fi
log_info "Ensure to run 'docker-compose stop; docker-compose rm -f' on .env changes or custom configs"
exit 0
fi

View File

@ -119,7 +119,7 @@ services:
app_net:
ipv4_address: 172.16.238.230
environment:
- VARNISH_CONFIG=/etc/varnish/default.vcl
- VARNISH_CONFIG=${VARNISH_CONFIG:-/etc/varnish/default.vcl}
- CACHE_SIZE=${VARNISH_CACHE_SIZE:-128m}
- VARNISHD_PARAMS=${VARNISH_PARAMS:--p default_ttl=3600 -p default_grace=3600}
- BACKEND_HOST=httpd

View File

@ -16,7 +16,7 @@ services:
app_net:
ipv4_address: 172.16.238.230
environment:
- VARNISH_CONFIG=/etc/varnish/default.vcl
- VARNISH_CONFIG=${VARNISH_CONFIG:-/etc/varnish/default.vcl}
- CACHE_SIZE=${VARNISH_CACHE_SIZE:-128m}
- VARNISHD_PARAMS=${VARNISH_PARAMS:--p default_ttl=3600 -p default_grace=3600}
- BACKEND_HOST=httpd

View File

@ -95,7 +95,7 @@ services:
# PHP
# ------------------------------------------------------------
php:
image: devilbox/php-fpm:${PHP_SERVER}-work-0.114
image: devilbox/php-fpm:${PHP_SERVER}-work-0.122
hostname: php
##
@ -183,7 +183,7 @@ services:
- devilbox-mail:/var/mail:rw${MOUNT_OPTIONS}
# Mount DB Backup directory
- ${DEVILBOX_PATH}/backups:/shared/backups:rw${MOUNT_OPTIONS}
- ${HOST_PATH_BACKUPDIR:-./backups}:/shared/backups:rw${MOUNT_OPTIONS}
# Mount devilbox user-defined *.ini files in order
# to overwrite the default PHP.ini configuration
@ -204,6 +204,9 @@ services:
# Mount devilbox user-defined bash config
- ${DEVILBOX_PATH}/bash:/etc/bashrc-devilbox.d:rw${MOUNT_OPTIONS}
# Mount devilbox user-defined supervisord config
- ${DEVILBOX_PATH}/supervisor:/etc/supervisor/custom.d:rw${MOUNT_OPTIONS}
# Certificate Authority public key
- ${DEVILBOX_PATH}/ca:/ca:rw${MOUNT_OPTIONS}
@ -218,7 +221,7 @@ services:
# Web Server
# ------------------------------------------------------------
httpd:
image: devilbox/${HTTPD_SERVER}:0.33
image: devilbox/${HTTPD_SERVER}:0.36
hostname: httpd
environment:
@ -317,7 +320,7 @@ services:
# MySQL Database
# ------------------------------------------------------------
mysql:
image: devilbox/mysql:${MYSQL_SERVER}-0.6
image: devilbox/mysql:${MYSQL_SERVER}-0.7
hostname: mysql
environment:

View File

@ -16,6 +16,12 @@
Official Contao Documentation <img src="https://raw.githubusercontent.com/cytopia/icons/master/11x11/ext-link.png" />
</a>
.. |ext_lnk_example_contao_devilbox_documentation| raw:: html
<a target="_blank" href="https://docs.contao.org/manual/en/guides/local-installation/devilbox/">
Official Contao Devilbox Documentation <img src="https://raw.githubusercontent.com/cytopia/icons/master/11x11/ext-link.png" />
</a>
.. |ext_lnk_example_craftcms_documentation| raw:: html
<a target="_blank" href="https://docs.craftcms.com/v3/installation.html#step-1-download-craft">
@ -28,13 +34,13 @@
Official Drupal Documentation <img src="https://raw.githubusercontent.com/cytopia/icons/master/11x11/ext-link.png" />
</a>
.. |ext_lnk_example_expressionengine_documentation| raw:: html
.. |ext_lnk_example_expressionengine_documentation| raw:: html
<a target="_blank" href="https://docs.expressionengine.com/latest/index.html">
Official ExpressionEngine Documentation <img src="https://raw.githubusercontent.com/cytopia/icons/master/11x11/ext-link.png" />
</a>
.. |ext_lnk_example_expressionengine_primer| raw:: html
.. |ext_lnk_example_expressionengine_primer| raw:: html
<a target="_blank" href="https://docs.expressionengine.com/latest/getting-started/ten-minute-primer.html">
10 Minute Primer <img src="https://raw.githubusercontent.com/cytopia/icons/master/11x11/ext-link.png" />

View File

@ -959,6 +959,22 @@ always be ``/shared/httpd/``.
``docker-compose rm``.
.. _env_host_path_backupdir:
HOST_PATH_BACKUPDIR
-------------------
The path on your host OS of the database backup directory to be mounted into the
PHP container into ``/shared/backups``.
+------------------------------+----------------+----------------+
| Name | Allowed values | Default value |
+==============================+================+================+
| ``HOST_PATH_BACKUPDIR`` | valid path | ``./backups`` |
+------------------------------+----------------+----------------+
HOST_PATH_SSH_DIR
-----------------

View File

@ -7,6 +7,10 @@
Setup Contao
************
.. important::
**You can find a more up-to-date version in the official Contao Documentation:**
|ext_lnk_example_contao_devilbox_documentation|
This example will use ``composer`` to install Contao CMS from within the Devilbox PHP container.
.. important::
@ -19,7 +23,9 @@ This example will use ``composer`` to install Contao CMS from within the Devilbo
After completing the below listed steps, you will have a working Contao CMS setup ready to be
served via http and https.
.. seealso:: |ext_lnk_example_contao_documentation|
.. seealso::
* |ext_lnk_example_contao_documentation|
* |ext_lnk_example_contao_devilbox_documentation|
**Table of Contents**

View File

@ -0,0 +1,40 @@
:orphan:
.. include:: /_includes/snippets/__ANNOUNCEMENTS__.rst
.. _howto_move_backups_to_a_different_directory:
*************************************
Move backups to a different directory
*************************************
No matter if your backups are already in a different location or if you want to move them out of
the Devilbox git directory now, you can do that in a few simple steps.
**Table of Contents**
.. contents:: :local:
Move backups out of the Devilbox git directory
==============================================
All you have to do is to adjust the path of :ref:`env_host_path_backupdir` in the ``.env`` file.
.. code-block:: bash
# Navigate to Devilbox git directory
host> cd path/to/devilbox
# Open the .env file with your favourite editor
host> vim .env
Now Adjust the value of :ref:`env_host_path_backupdir`
.. code-block:: bash
:caption: .env
:emphasize-lines: 1
HOST_PATH_HTTPD_DATADIR=/home/user/backups/devilbox/
That's it, whenever you start up the Devilbox, ``/home/user/backups/devilbox/`` will be mounted into
the PHP container into ``/shared/backups/``.

View File

@ -22,7 +22,7 @@ So lets assume all of your projects are already in place under ``/home/user/w
Now you decide to use the Devilbox, but still want to keep your projects where they are at the
moment.
All you have to to is to adjust the path of :ref:`env_httpd_datadir` in the ``.env`` file.
All you have to do is to adjust the path of :ref:`env_httpd_datadir` in the ``.env`` file.
.. code-block:: bash

View File

@ -26,14 +26,26 @@ having to worry about loosing any project data. There could also be the case tha
dedicated hard-disk to store your projects or you have your own idea about a directory structure
where you want to store your projects.
Affected env variables to consider changing:
* :ref:`env_httpd_datadir`
* :ref:`env_host_path_backupdir`
Projects
--------
.. seealso::
:ref:`howto_move_projects_to_a_different_directory`
* :ref:`howto_move_projects_to_a_different_directory`
Follow this guide to keep your projects separated from the Devilbox git directory.
Backups
-------
.. seealso::
* :ref:`howto_move_backups_to_a_different_directory`
Follow this guide to keep your backups separated from the Devilbox git directory.
Version control ``.env`` file
-----------------------------

View File

@ -102,6 +102,8 @@ Now you are all set and all generated SSL certificates will be valid from now on
.. include:: /_includes/figures/https/https-ssl-address-bar.rst
Note: if you are on Chrome on Mac Big Sur and above, you won't find the above settings, you will have to go the "Keychain Access" application, click on ``System`` in the left hand corner and then drag in the ``devilbox-ca.crt``, it will ask for your password to complete the operation. once that is done, the cert will be listed but will not be trusted by default. Now right click on the imported cert, click on Info, an info dialog will open up and you can expand the 'Trust' accordian and set it to ``Trust All``. Now you are all set and all generated SSL certificates will be valid from now on.
Firefox
-------

View File

@ -465,6 +465,17 @@ MOUNT_OPTIONS=
HOST_PATH_HTTPD_DATADIR=./data/www
###
### Local filesystem path to where your backups are stored
###
### Note: When changing this variable you must re-create the container.
### Simply remove it, it will be auto-created during the next start:
###
### $ docker-compose rm -f
###
HOST_PATH_BACKUPDIR=./backups
###
### The path on your host OS of the ssh directory to be mounted into the
### PHP container into /home/devilbox/.ssh.

0
supervisor/.keepme Normal file
View File