Compare commits

...

121 Commits

Author SHA1 Message Date
ba6fd1e554 Merge pull request #860 from cytopia/release/v1.10.0
Release v1.10.0
2022-01-28 08:36:08 +01:00
fe67bdf6bb Harden CI tests 2022-01-27 17:30:00 +01:00
4a9c0b6d9f Update HTTPD images 2022-01-27 14:49:57 +01:00
855d98d895 Add Docker volumes for MariaDB 10.6 and 10.7 2022-01-27 12:37:47 +01:00
01b0ecdf20 Fixes #807 description in env-example 2022-01-27 08:41:55 +01:00
fe9e6264d9 Update PHP modules in README 2022-01-27 08:30:41 +01:00
55bb37c53b Update project files 2022-01-27 08:23:19 +01:00
a6894b7793 Add MariaDB conf anbd log dirs 2022-01-27 08:21:44 +01:00
0daa62cc02 Update comment about PHP 8.0 and 8.1 stability 2022-01-27 08:17:32 +01:00
38942fa168 Added MariaDB 10.6 and MariaDB 10.7 2022-01-27 08:15:46 +01:00
a0246b7a0e Update HTTPD images 2022-01-27 08:11:28 +01:00
b17f4600f4 Update PHP images 2022-01-27 08:11:12 +01:00
5f465abd61 Merge pull request #851 from felixmosh/fix-850
fix: show utf-8 mail body properly
2022-01-26 12:08:04 +01:00
61246b5151 Merge branch 'master' into fix-850 2022-01-26 10:01:31 +01:00
ca90af0fb0 Merge pull request #859 from cytopia/release/v1.9.3
Release v1.9.3
2022-01-25 20:14:49 +01:00
7bd6b34698 Update project files 2022-01-25 10:06:22 +01:00
2677422250 Update PHP images 2022-01-24 19:29:54 +01:00
200000cb5b Ensure documentation passes CI checks 2022-01-24 15:23:41 +01:00
8560267fdc Update MySQL Docker Images 2022-01-24 14:39:10 +01:00
8c13144d3e Update available PHP modules 2022-01-24 09:27:31 +01:00
2f8fc59dd9 Ensure PHP code is compatible to legacy versions 2022-01-24 09:15:52 +01:00
d9fb88058f Updated PHP Docker Images to 0.129 2022-01-24 08:39:23 +01:00
4c15e191a0 Merge branch 'master' into fix-850 2022-01-23 13:36:19 +01:00
249b132e58 Merge pull request #832 from Ernestopheles/patch-1
Update setup-auto-dns.rst
2022-01-23 13:35:44 +01:00
6e34d3b263 Merge pull request #843 from ericvanjohnson/patch-1
Update add-project-dns-entry-on-win.rst (grammar correction)
2022-01-23 13:33:17 +01:00
68bd88d304 Merge branch 'master' into patch-1 2022-01-23 13:32:39 +01:00
bfb4769e85 fix: show utf-8 mail body properly 2021-11-07 15:56:54 +02:00
23a6aed10d Merge pull request #817 from ulin-evgeny/patch
Fixed typos
2021-10-15 11:48:42 +02:00
0dfd63d7f9 Merge branch 'master' into patch 2021-10-15 11:48:31 +02:00
3804a3b6f3 Merge pull request #842 from ericp-mrel/fix-redis-args-parsing
Fix redis args parsing for password
2021-10-15 11:47:49 +02:00
9cfc69e5bb Update add-project-dns-entry-on-win.rst 2021-10-13 04:48:52 -07:00
56555e87a5 Adjust redis args regex to allow optional quotes. 2021-10-12 10:44:44 -05:00
5e90a3a35d Use preg_match_all to get redis password from args
This should fix the issue where preg_split was being used and would cause an error if the redis args variable didn't contain the --requirepass string and the WebGUI wouldn't load as a result.
2021-10-12 09:42:04 -05:00
54e17f5ec5 Update setup-auto-dns.rst
For me it has been unclear if prot 53 may not be in use in cobination to 127.0.0.1 or generally.
2021-08-24 17:48:52 +02:00
b5d19264de Fixed typos 2021-06-20 05:07:19 +03:00
f6bbdc72fd Merge pull request #814 from cytopia/release/v1.9.2
Release v1.9.2
2021-06-04 13:06:36 +02:00
2f9ba2e30a Release v1.9.2 2021-06-04 10:32:46 +02:00
fa0c8f5632 Merge pull request #787 from merlijnvanlent/master
Ability to view emails within the intranet dashboard.
2021-05-21 15:31:13 +02:00
64330b5b12 Merge branch 'master' into master 2021-05-21 10:50:26 +02:00
872340e14b Merge pull request #806 from Agnohendrix/patch-1
XDebug 3.0 Linux Docs
2021-05-21 10:48:21 +02:00
5eb2ee8ca0 Merge branch 'master' into master 2021-05-20 16:28:02 +02:00
aff86a6b15 Merge branch 'master' into patch-1 2021-05-20 15:48:25 +02:00
fb51eece98 Merge pull request #777 from cytopia/release/v1.9.1
Devilbox Release v1.9.1
2021-05-20 14:51:02 +02:00
6c438bb434 Updated Adminer to 4.8.1 2021-05-20 10:52:49 +02:00
9935780588 Update README 2021-05-20 00:12:10 +02:00
20cba7d773 Update CHANGELOG 2021-05-20 00:03:16 +02:00
353fa53d29 Updated php images to 0.125 2021-05-19 22:59:42 +02:00
f28e1ee4a4 Enable mysql binlog by default 2021-05-19 19:04:22 +02:00
fb390ac429 gitignore php-ini 8.1 dir 2021-05-19 19:03:56 +02:00
867327a8c3 Update project files 2021-05-19 16:06:53 +02:00
8ffd65a905 Upgrade sphinx deprecations 2021-05-19 16:05:45 +02:00
5a4574edb8 Remove Travis CI 2021-05-19 16:05:44 +02:00
dc350b00b5 Update CHANGELOG date 2021-05-19 16:05:43 +02:00
f4d492ea98 Update release date 2021-05-19 16:05:42 +02:00
c40c43c4ea Exclude shellcheck rule 2021-05-19 16:05:41 +02:00
d0585bb174 Update documentation 2021-05-19 16:05:40 +02:00
0b9d18cdf4 Adjust enabled PHP modules 2021-05-19 16:05:33 +02:00
ba42717f01 Update CHANGELOG 2021-05-19 16:05:29 +02:00
b4c3de9195 Update PHP images to 0.124 2021-05-19 16:05:25 +02:00
a0423ebd02 Adjust xdebug CI tests 2021-05-19 16:05:21 +02:00
06c2a7ac51 Update Available PHP modules in README 2021-05-19 16:05:17 +02:00
543e373b91 Added PHP Xdebug info page for intranet 2021-05-19 16:05:14 +02:00
3d0154f987 Docs: smaller headlines for PHP modules 2021-05-19 16:05:10 +02:00
715c6b3c83 Adjusted Xdebug 3.0 defaults 2021-05-19 16:05:06 +02:00
d8e728a6a4 Merge pull request #802 from llaville/patch-intranet
Patch intranet to fix issue 801
2021-05-19 16:04:34 +02:00
1d41fb025c Merge branch 'master' into patch-intranet 2021-05-19 16:01:18 +02:00
af98125279 Merge branch 'master' into patch-1 2021-05-18 08:39:16 +02:00
ab761eedba Merge pull request #783 from mhodge13/master
Kibana 6.6 and above uses ELASTICSEARCH_HOSTS
2021-05-17 20:36:00 +02:00
0058e0bd61 Merge branch 'master' into master 2021-05-17 20:34:25 +02:00
2dd3ec9dd0 Merge pull request #781 from kovacbb/patch-1
Update enable-varnish.rst
2021-05-17 20:33:47 +02:00
7f294735e7 Fixed wrong push 2021-05-05 15:55:44 +02:00
a07b3442f1 Updated XDebug Linux documentation for XDebug 3.0 2021-05-05 15:50:46 +02:00
db1be81471 Update compose/docker-compose.override.yml-elk 2021-04-19 18:10:43 +02:00
d5e463db60 Update compose/docker-compose.override.yml-all 2021-04-19 18:10:36 +02:00
83c0c672d4 avoid PHP Fatal Error when pgsql PHP module is not available 2021-04-19 17:27:20 +02:00
af68fb65f2 avoid PHP Fatal Error when mysqli PHP module is not available 2021-04-19 17:25:56 +02:00
f6c273d6c4 avoid PHP Fatal Error when memcache PHP modules are not available 2021-04-19 17:24:11 +02:00
46f5c48ba0 avoid PHP Fatal Error when redis PHP module is not available 2021-04-19 17:21:47 +02:00
6c18e8f112 avoid PHP Fatal Error when mongo PHP modules are not available 2021-04-19 17:20:00 +02:00
6807b83e6b typo error fixed in memcached info panel 2021-04-19 14:29:43 +00:00
01fb99ec1a Added custom shadowdom element to view emails
WIthout the styling leaking into the global styling.
2021-02-21 14:40:16 +01:00
56342426b3 Kibana 6.6 and above uses ELASTICSEARCH_HOSTS 2021-02-11 08:48:18 -06:00
87e710050f Update enable-varnish.rst
fix small typo
2021-02-04 22:49:29 +01:00
cdfb55ec2d Merge pull request #771 from alikon/patch-1
xdebug v3 info panel
2020-12-21 10:14:40 +01:00
7cad84f527 Update .devilbox/www/htdocs/xdebug.php
Co-authored-by: cytopia <cytopia@everythingcli.org>
2020-12-21 08:24:46 +01:00
e65685b604 with header and footer 2020-12-18 17:16:28 +01:00
7e08261602 moved to Info 2020-12-18 14:07:46 +01:00
30d23f0f6f move to Info 2020-12-18 14:06:57 +01:00
b5fca3f842 moved on Info 2020-12-18 14:06:38 +01:00
dd529d0a1a xdebug 3 info panel 2020-12-18 12:59:49 +01:00
a6863c5ceb xdebug v3 info panel 2020-12-18 12:58:17 +01:00
6dba0ce963 Merge pull request #766 from BrookeDot/patch-1
Capitalize p in WordPress
2020-12-13 17:17:36 +01:00
201925e0b2 Merge branch 'master' into patch-1 2020-12-13 13:07:31 +01:00
ffee650e60 Merge pull request #765 from cytopia/release/v1.9.0
Devilbox Release v1.9.0
2020-12-13 13:03:01 +01:00
59738601b2 Capitalize p in WordPress
This is a simple edit to capitalize the p in WordPress throughout this document
2020-12-12 16:37:03 -08: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
70 changed files with 2983 additions and 4677 deletions

4
.devilbox/cfg/mysql.cnf Normal file
View File

@ -0,0 +1,4 @@
[mysqld]
server_id = 1
log_bin = "mysql-bin"
sync_binlog = 0

View File

@ -13,8 +13,8 @@ error_reporting(-1);
putenv('RES_OPTIONS=retrans:1 retry:1 timeout:1 attempts:1');
$DEVILBOX_VERSION = 'v1.8.2';
$DEVILBOX_DATE = '2020-11-14';
$DEVILBOX_VERSION = 'v1.10.0';
$DEVILBOX_DATE = '2022-01-28';
$DEVILBOX_API_PAGE = 'devilbox-api/status.json';
//
@ -127,15 +127,27 @@ function loadClass($class) {
break;
case 'Redis':
// Check if redis is using a password
$REDIS_ROOT_PASSWORD = '';
$_REDIS_ARGS = loadClass('Helper')->getEnv('REDIS_ARGS');
$_REDIS_PASS = preg_split("/--requirepass\s+/", $_REDIS_ARGS);
if (is_array($_REDIS_PASS) && count($_REDIS_PASS)) {
// In case the option is specified multiple times, use the last effective one.
$_REDIS_PASS = $_REDIS_PASS[count($_REDIS_PASS)-1];
/*
* This pattern will match optional quoted string, 'my password' or "my password"
* or if there aren't any quotes, it will match up until the next space.
*/
$_REDIS_PASS = array();
preg_match_all('/--requirepass\s+("|\')?(?(1)(.*)|([^\s]*))(?(1)\1|)/', $_REDIS_ARGS, $_REDIS_PASS, PREG_SET_ORDER);
if (! empty($_REDIS_PASS)) {
/*
* In case the option is specified multiple times, use the last effective one.
*
* preg_match_all returns a multi-dimensional array, the first level array is in order of which was matched first,
* and the password string is either matched in group 2 or group 3 which is always the end of the sub-array.
*/
$_REDIS_PASS = end(end($_REDIS_PASS));
if (strlen($_REDIS_PASS) > 0) {
$REDIS_ROOT_PASSWORD = $_REDIS_PASS;
}

View File

@ -0,0 +1,22 @@
class HtmlEmail extends HTMLElement {
constructor() {
super();
this.attachShadow({ mode: 'open' });
let emailContent;
const templateId = this.dataset.templateId;
try {
emailContent = document.getElementById(templateId).innerHTML;
} catch (error) {
console.log(error);
return;
}
const container = document.createElement('div');
container.innerHTML = emailContent;
this.shadowRoot.appendChild(container);
}
}
customElements.define('html-email', HtmlEmail);

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

@ -19,7 +19,7 @@
<div class="col-md-12">
<?php if (!loadClass('Memcd')->isAvailable()): ?>
<p>Memcahed container is not running.</p>
<p>Memcached container is not running.</p>
<?php else: ?>
<?php foreach (loadClass('Memcd')->getInfo() as $srv => $data): ?>
<h2><?php echo $srv; ?></h2>

View File

@ -0,0 +1,32 @@
<?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">
<div class="row">
<div class="col-md-12">
<style>
body {width: 100% !important;}
</style>
<?php if (($version = phpversion('xdebug')) === false): ?>
<p><code>xdebug</code> module is not enabled.</p>
<?php elseif (!function_exists('xdebug_info')): ?>
<p>Xdebug info only available with <code>xdebug 3.x.x</code> or greater. Your version is <code>xdebug <?php echo $version;?></code></p>
<?php else:?>
<?php xdebug_info(); ?>
<?php endif; ?>
</div>
</div>
</div><!-- /.container -->
<?php echo loadClass('Html')->getFooter(); ?>
</body>
</html>

View File

@ -159,6 +159,17 @@ $messages = $MyMbox->get($sortOrderArr);
<?php
$message = htmlentities($data['raw']);
$structure = $data['decoded'];
$body = null;
if (isset($structure->body)) {
$body = $structure->body;
}
elseif(isset($structure->parts[1]->body)) {
$body = $structure->parts[1]->body;
}
elseif(isset($structure->parts[0]->body)) {
$body = $structure->parts[0]->body;
}
?>
<tr id="<?php echo $data['num'];?>" class="subject">
<td><?php echo $data['num'];?></td>
@ -174,16 +185,13 @@ $messages = $MyMbox->get($sortOrderArr);
<tr id="mail-<?php echo $data['num'];?>" style="display:none">
<td></td>
<td colspan="4">
<?php if (isset($structure->body)): ?>
<?php echo htmlentities($structure->body) ?>
<?php elseif(isset($structure->parts[1]->body)): ?>
<?php echo htmlentities($structure->parts[1]->body) ?>
<?php elseif(isset($structure->parts[0]->body)): ?>
<?php echo htmlentities($structure->parts[0]->body) ?>
<?php if ($body !== null): ?>
<template id="mail-body-<?=$data['num']?>"><?=$body?></template>
<html-email data-template-id="mail-body-<?=$data['num']?>"></html-email>
<?php else: ?>
<?php echo '<div class="alert alert-warning" role="alert">
<div class="alert alert-warning" role="alert">
No valid body found
</div>' ?>
</div>
<?php endif; ?>
<hr>
<p><a class="btn btn-primary" data-toggle="collapse" href="#email-<?php echo $data['num'];?>" aria-expanded="false" aria-controls="email-<?php echo $data['num'];?>">Raw source</a></p>
@ -205,15 +213,13 @@ $messages = $MyMbox->get($sortOrderArr);
<?php echo loadClass('Html')->getFooter(); ?>
<script>
$(function() {
$('.subject').each(function() {
$(this).click(function() {
var id = ($(this).attr('id'));
$('#mail-'+id).toggle();
})
$('.subject').click(function() {
var id = ($(this).attr('id'));
$('#mail-'+id).toggle();
})
// Handler for .ready() called.
});
</script>
<script src="/assets/js/html-email.js"></script>
</body>
</html>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

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(
@ -59,6 +72,10 @@ class Html
'name' => 'PHP Info',
'path' => '/info_php.php'
),
array(
'name' => 'PHP Xdebug Info',
'path' => '/info_xdebug.php'
),
array(
'name' => 'MySQL Info',
'path' => '/info_mysql.php'
@ -78,7 +95,7 @@ class Html
array(
'name' => 'Memcached Info',
'path' => '/info_memcd.php'
)
),
)
),
array(
@ -418,9 +435,9 @@ HTML;
if (version_compare(loadClass('Php')->getVersion(), '5.4', '<')) {
$el['path'] = '/vendor/adminer-4.6.3-en.php';
} elseif (version_compare(loadClass('Php')->getVersion(), '8.0', '<')){
$el['path'] = '/vendor/adminer-4.7.7-en.php';
$el['path'] = '/vendor/adminer-4.8.1-en.php';
} else {
$el['path'] = '/vendor/adminer-4.7.7-en-php8.php';
$el['path'] = '/vendor/adminer-4.8.1-en.php';
}
}

View File

@ -37,6 +37,11 @@ class Memcd extends BaseClass implements BaseInterface
{
parent::__construct($hostname, $data);
// Faster check if memcached is not loaded
if (!$this->isAvailable()) {
return;
}
if (class_exists('Memcached')) {
$memcd = new \Memcached('_devilbox');
$list = $memcd->getServerList();
@ -274,4 +279,14 @@ class Memcd extends BaseClass implements BaseInterface
}
return $this->_version;
}
public function isAvailable()
{
if (extension_loaded('memcached')) {
return parent::isAvailable();
}
// when php module 'memcached' not available or just disable by configuration (see .env PHP_MODULES_DISABLE)
return false;
}
}

View File

@ -230,4 +230,14 @@ class Mongo extends BaseClass implements BaseInterface
}
return $this->_version;
}
public function isAvailable()
{
if (extension_loaded('mongo') || extension_loaded('mongodb')) {
return parent::isAvailable();
}
// when php modules 'mongo' or 'mongodb' not available or just disable by configuration (see .env PHP_MODULES_DISABLE)
return false;
}
}

View File

@ -31,6 +31,11 @@ class Mysql extends BaseClass implements BaseInterface
{
parent::__construct($hostname, $data);
// Faster check if mysql is not loaded
if (!$this->isAvailable()) {
return;
}
$user = $data['user'];
$pass = $data['pass'];
@ -308,4 +313,14 @@ class Mysql extends BaseClass implements BaseInterface
return $this->_version;
}
public function isAvailable()
{
if (extension_loaded('mysqli')) {
return parent::isAvailable();
}
// when php module 'mysqli' not available or just disable by configuration (see .env PHP_MODULES_DISABLE)
return false;
}
}

View File

@ -38,6 +38,11 @@ class Pgsql extends BaseClass implements BaseInterface
{
parent::__construct($hostname, $data);
// Faster check if pgsql is not loaded
if (!$this->isAvailable()) {
return;
}
$user = $data['user'];
$pass = $data['pass'];
$db = isset($data['db']) ? $data['db'] : null;
@ -372,4 +377,14 @@ class Pgsql extends BaseClass implements BaseInterface
return $this->_version;
}
public function isAvailable()
{
if (extension_loaded('pgsql')) {
return parent::isAvailable();
}
// when php module 'pgsql' not available or just disable by configuration (see .env PHP_MODULES_DISABLE)
return false;
}
}

View File

@ -218,4 +218,14 @@ class Redis extends BaseClass implements BaseInterface
return $this->_version;
}
public function isAvailable()
{
if (extension_loaded('redis')) {
return parent::isAvailable();
}
// when php module 'redis' not available or just disable by configuration (see .env PHP_MODULES_DISABLE)
return false;
}
}

View File

@ -199,8 +199,20 @@ jobs:
- name: "Test Container"
shell: bash
run: |
retry() {
for n in $(seq 5); do
echo "[${n}/5] ${*}";
if eval "${*}"; then
echo "[SUCC] ${n}/5";
return 0;
fi;
sleep 5;
echo "[FAIL] ${n}/5";
done;
return 1;
}
cd .tests/
make test-smoke-container
retry make test-smoke-container
if: success() || failure()
# ------------------------------------------------------------

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

View File

@ -213,8 +213,20 @@ jobs:
- name: "Test Container"
shell: bash
run: |
retry() {
for n in $(seq 5); do
echo "[${n}/5] ${*}";
if eval "${*}"; then
echo "[SUCC] ${n}/t";
return 0;
fi;
sleep 5;
echo "[FAIL] ${n}/5";
done;
return 1;
}
cd .tests/
make test-smoke-container
retry make test-smoke-container
if: success() || failure()
# ------------------------------------------------------------

View File

@ -44,6 +44,8 @@ jobs:
- "MYSQL_SERVER=mariadb-10.3"
- "MYSQL_SERVER=mariadb-10.4"
- "MYSQL_SERVER=mariadb-10.5"
- "MYSQL_SERVER=mariadb-10.6"
- "MYSQL_SERVER=mariadb-10.7"
- "MYSQL_SERVER=percona-5.5"
- "MYSQL_SERVER=percona-5.6"
- "MYSQL_SERVER=percona-5.7"
@ -287,8 +289,20 @@ jobs:
- name: "Test Container"
shell: bash
run: |
retry() {
for n in $(seq 5); do
echo "[${n}/5] ${*}";
if eval "${*}"; then
echo "[SUCC] ${n}/t";
return 0;
fi;
sleep 5;
echo "[FAIL] ${n}/5";
done;
return 1;
}
cd .tests/
make test-smoke-container
retry make test-smoke-container
if: success() || failure()
# ------------------------------------------------------------

4
.gitignore vendored
View File

@ -88,6 +88,7 @@
/cfg/php-ini-7.3/*.ini
/cfg/php-ini-7.4/*.ini
/cfg/php-ini-8.0/*.ini
/cfg/php-ini-8.1/*.ini
# Ignore custom PHP-FPM configs
/cfg/php-fpm-5.2/php-fpm.xml
@ -137,6 +138,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

@ -22,7 +22,7 @@ lint-tests:
-v "$(PWD):/mnt" \
--entrypoint=sh \
koalaman/shellcheck-alpine:stable \
-c "find . -name '*.sh' -print0 | xargs -0 -n1 shellcheck --check-sourced --color=auto --shell=bash"
-c "find . -name '*.sh' -print0 | xargs -0 -n1 shellcheck --check-sourced --color=auto --exclude=SC1091 --shell=bash"
# -------------------------------------------------------------------------------------------------

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,21 +320,21 @@ 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 )"
###
### Get disabled modules
###
DISABLED=",blackfire,ioncube,$( grep -E '^PHP_MODULES_DISABLE=' "${DVLBOX_PATH}/env-example" | sed 's/.*=//g' ),"
DISABLED=",blackfire,ioncube,phalcon,psr,$( grep -E '^PHP_MODULES_DISABLE=' "${DVLBOX_PATH}/env-example" | sed 's/.*=//g' ),"
#echo $DISABLED
B="✔" # Enabled base modules (cannot be disabled)
E="🗸" # Enabled mods modules (can be disabled)
D="d" # Disabled modules (can be enabled)
U=" " # Unavailable
echo "| Modules | PHP 5.2 | PHP 5.3 | PHP 5.4 | PHP 5.5 | PHP 5.6 | PHP 7.0 | PHP 7.1 | PHP 7.2 | PHP 7.3 | PHP 7.4 | PHP 8.0 | PHP 8.1 |"
echo "|-------------------------------|---------|---------|---------|---------|---------|---------|---------|---------|---------|---------|---------|---------|"
echo "| Modules | <sup>PHP 5.2</sup> | <sup>PHP 5.3</sup> | <sup>PHP 5.4</sup> | <sup>PHP 5.5</sup> | <sup>PHP 5.6</sup> | <sup>PHP 7.0</sup> | <sup>PHP 7.1</sup> | <sup>PHP 7.2</sup> | <sup>PHP 7.3</sup> | <sup>PHP 7.4</sup> | <sup>PHP 8.0</sup> | <sup>PHP 8.1</sup> |"
echo "|-------------------------------|:-------:|:-------:|:-------:|:-------:|:-------:|:-------:|:-------:|:-------:|:-------:|:-------:|:-------:|:-------:|"
echo "${MODS}" | while read -r line; do
# Print current module
printf "| %-30s%s" "<small>${line}</small>" "|"

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)|(no value.+no value)' >/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,399 +0,0 @@
---
###
### Enable Python support
###
language: python
###
### Enable sudo (required for docker service)
###
sudo: required
###
### Attach services
###
services:
- docker
###
### Specify combinations
###
env:
###
### Check PHP Modules
###
- S1=MODULES
###
### Check Documentation
###
- S1=DOCUMENTATION V1=Build
- S1=DOCUMENTATION V1=linkcheck
- S1=DOCUMENTATION V1=linkcheck2
###
### Check Update script
###
- S1=UPDATE V1=php
- S1=UPDATE V1=httpd
- S1=UPDATE V1=mysql
- S1=UPDATE V1=rest
###
### Test various Docker/DockerCompose versions
###
### Docker versions: https://github.com/docker/docker-ce/releases
### Compose versions: https://github.com/docker/compose/releases
###
# Latest Docker version against various DockerCompose versions
- S1=DOCKER V1=1 S2=COMPOSE V2=1
- S1=DOCKER V1=1 S2=COMPOSE V2=2
- S1=DOCKER V1=1 S2=COMPOSE V2=3
- S1=DOCKER V1=1 S2=COMPOSE V2=4
- S1=DOCKER V1=1 S2=COMPOSE V2=5
# 2nd Latest Docker version against various DockerCompose versions
- S1=DOCKER V1=2 S2=COMPOSE V2=1
- S1=DOCKER V1=2 S2=COMPOSE V2=2
- S1=DOCKER V1=2 S2=COMPOSE V2=3
- S1=DOCKER V1=2 S2=COMPOSE V2=4
- S1=DOCKER V1=2 S2=COMPOSE V2=5
# 3rd Latest Docker version against various DockerCompose versions
- S1=DOCKER V1=3 S2=COMPOSE V2=1
- S1=DOCKER V1=3 S2=COMPOSE V2=2
- S1=DOCKER V1=3 S2=COMPOSE V2=3
- S1=DOCKER V1=3 S2=COMPOSE V2=4
- S1=DOCKER V1=3 S2=COMPOSE V2=5
# 4th Latest Docker version against various DockerCompose versions
- S1=DOCKER V1=4 S2=COMPOSE V2=1
- S1=DOCKER V1=4 S2=COMPOSE V2=2
- S1=DOCKER V1=4 S2=COMPOSE V2=3
- S1=DOCKER V1=4 S2=COMPOSE V2=4
- S1=DOCKER V1=4 S2=COMPOSE V2=5
# 5th Latest Docker version against various DockerCompose versions
- S1=DOCKER V1=5 S2=COMPOSE V2=1
- S1=DOCKER V1=5 S2=COMPOSE V2=2
- S1=DOCKER V1=5 S2=COMPOSE V2=3
- S1=DOCKER V1=5 S2=COMPOSE V2=4
- S1=DOCKER V1=5 S2=COMPOSE V2=5
###
### The matrix specifies 2 versions to compare against each other.
### As PHP (any version) needs to be able to run with everything,
### I am going to test any PHP version against any other service.
###
###
### PHP vs WWW
###
# PHP vs Apache 2.2
- S1=PHP V1=5.3 S2=HTTPD V2=apache-2.2
- S1=PHP V1=5.4 S2=HTTPD V2=apache-2.2
- S1=PHP V1=5.5 S2=HTTPD V2=apache-2.2
- S1=PHP V1=5.6 S2=HTTPD V2=apache-2.2
- S1=PHP V1=7.0 S2=HTTPD V2=apache-2.2
- S1=PHP V1=7.1 S2=HTTPD V2=apache-2.2
- S1=PHP V1=7.2 S2=HTTPD V2=apache-2.2
- S1=PHP V1=7.3 S2=HTTPD V2=apache-2.2
- S1=PHP V1=7.4 S2=HTTPD V2=apache-2.2
- S1=PHP V1=8.0 S2=HTTPD V2=apache-2.2
- S1=PHP V1=8.1 S2=HTTPD V2=apache-2.2
# PHP vs Apache 2.4
- S1=PHP V1=5.3 S2=HTTPD V2=apache-2.4
- S1=PHP V1=5.4 S2=HTTPD V2=apache-2.4
- S1=PHP V1=5.5 S2=HTTPD V2=apache-2.4
- S1=PHP V1=5.6 S2=HTTPD V2=apache-2.4
- S1=PHP V1=7.0 S2=HTTPD V2=apache-2.4
- S1=PHP V1=7.1 S2=HTTPD V2=apache-2.4
- S1=PHP V1=7.2 S2=HTTPD V2=apache-2.4
- S1=PHP V1=7.3 S2=HTTPD V2=apache-2.4
- S1=PHP V1=7.4 S2=HTTPD V2=apache-2.4
- S1=PHP V1=8.0 S2=HTTPD V2=apache-2.4
- S1=PHP V1=8.1 S2=HTTPD V2=apache-2.4
# PHP vs Nginx stable
- S1=PHP V1=5.3 S2=HTTPD V2=nginx-stable
- S1=PHP V1=5.4 S2=HTTPD V2=nginx-stable
- S1=PHP V1=5.5 S2=HTTPD V2=nginx-stable
- S1=PHP V1=5.6 S2=HTTPD V2=nginx-stable
- S1=PHP V1=7.0 S2=HTTPD V2=nginx-stable
- S1=PHP V1=7.1 S2=HTTPD V2=nginx-stable
- S1=PHP V1=7.2 S2=HTTPD V2=nginx-stable
- S1=PHP V1=7.3 S2=HTTPD V2=nginx-stable
- S1=PHP V1=7.4 S2=HTTPD V2=nginx-stable
- S1=PHP V1=8.0 S2=HTTPD V2=nginx-stable
- S1=PHP V1=8.1 S2=HTTPD V2=nginx-stable
# PHP vs Nginx mainline
- S1=PHP V1=5.3 S2=HTTPD V2=nginx-mainline
- S1=PHP V1=5.4 S2=HTTPD V2=nginx-mainline
- S1=PHP V1=5.5 S2=HTTPD V2=nginx-mainline
- S1=PHP V1=5.6 S2=HTTPD V2=nginx-mainline
- S1=PHP V1=7.0 S2=HTTPD V2=nginx-mainline
- S1=PHP V1=7.1 S2=HTTPD V2=nginx-mainline
- S1=PHP V1=7.2 S2=HTTPD V2=nginx-mainline
- S1=PHP V1=7.3 S2=HTTPD V2=nginx-mainline
- S1=PHP V1=7.4 S2=HTTPD V2=nginx-mainline
- S1=PHP V1=8.0 S2=HTTPD V2=nginx-mainline
- S1=PHP V1=8.1 S2=HTTPD V2=nginx-mainline
###
### Test all other bundled services
###
### PHP 7.4 vs XYZ
###
# PHP 7.4 vs MySQL
- S1=PHP V1=7.4 S2=MYSQL V2=mysql-5.5
- S1=PHP V1=7.4 S2=MYSQL V2=mysql-5.6
- S1=PHP V1=7.4 S2=MYSQL V2=mysql-5.7
- S1=PHP V1=7.4 S2=MYSQL V2=mysql-8.0
- S1=PHP V1=7.4 S2=MYSQL V2=mariadb-5.5
- S1=PHP V1=7.4 S2=MYSQL V2=mariadb-10.0
- S1=PHP V1=7.4 S2=MYSQL V2=mariadb-10.1
- S1=PHP V1=7.4 S2=MYSQL V2=mariadb-10.2
- S1=PHP V1=7.4 S2=MYSQL V2=mariadb-10.3
- S1=PHP V1=7.4 S2=MYSQL V2=mariadb-10.4
- S1=PHP V1=7.4 S2=MYSQL V2=mariadb-10.5
- S1=PHP V1=7.4 S2=MYSQL V2=percona-5.5
- S1=PHP V1=7.4 S2=MYSQL V2=percona-5.6
- S1=PHP V1=7.4 S2=MYSQL V2=percona-5.7
- S1=PHP V1=7.4 S2=MYSQL V2=percona-8.0
# PHP 7.4 vs PgSQL
- S1=PHP V1=7.4 S2=PGSQL V2=9.0
- S1=PHP V1=7.4 S2=PGSQL V2=9.1
- S1=PHP V1=7.4 S2=PGSQL V2=9.2
- S1=PHP V1=7.4 S2=PGSQL V2=9.2-alpine
- S1=PHP V1=7.4 S2=PGSQL V2=9.3
- S1=PHP V1=7.4 S2=PGSQL V2=9.3-alpine
- S1=PHP V1=7.4 S2=PGSQL V2=9.4
- S1=PHP V1=7.4 S2=PGSQL V2=9.4-alpine
- S1=PHP V1=7.4 S2=PGSQL V2=9.5
- S1=PHP V1=7.4 S2=PGSQL V2=9.5-alpine
- S1=PHP V1=7.4 S2=PGSQL V2=9.6
- S1=PHP V1=7.4 S2=PGSQL V2=9.6-alpine
- S1=PHP V1=7.4 S2=PGSQL V2=10.0
- S1=PHP V1=7.4 S2=PGSQL V2=10.0-alpine
- S1=PHP V1=7.4 S2=PGSQL V2=10.1
- S1=PHP V1=7.4 S2=PGSQL V2=10.1-alpine
- S1=PHP V1=7.4 S2=PGSQL V2=10.2
- S1=PHP V1=7.4 S2=PGSQL V2=10.2-alpine
- S1=PHP V1=7.4 S2=PGSQL V2=10.3
- S1=PHP V1=7.4 S2=PGSQL V2=10.3-alpine
- S1=PHP V1=7.4 S2=PGSQL V2=10.4
- S1=PHP V1=7.4 S2=PGSQL V2=10.4-alpine
- S1=PHP V1=7.4 S2=PGSQL V2=10.5
- S1=PHP V1=7.4 S2=PGSQL V2=10.5-alpine
- S1=PHP V1=7.4 S2=PGSQL V2=10.6
- S1=PHP V1=7.4 S2=PGSQL V2=10.6-alpine
- S1=PHP V1=7.4 S2=PGSQL V2=11.0
- S1=PHP V1=7.4 S2=PGSQL V2=11.0-alpine
- S1=PHP V1=7.4 S2=PGSQL V2=11.1
- S1=PHP V1=7.4 S2=PGSQL V2=11.1-alpine
- S1=PHP V1=7.4 S2=PGSQL V2=11.2
- S1=PHP V1=7.4 S2=PGSQL V2=11.2-alpine
- S1=PHP V1=7.4 S2=PGSQL V2=11.3
- S1=PHP V1=7.4 S2=PGSQL V2=11.3-alpine
- S1=PHP V1=7.4 S2=PGSQL V2=11.4
- S1=PHP V1=7.4 S2=PGSQL V2=11.4-alpine
- S1=PHP V1=7.4 S2=PGSQL V2=11.5
- S1=PHP V1=7.4 S2=PGSQL V2=11.5-alpine
- S1=PHP V1=7.4 S2=PGSQL V2=11.6
- S1=PHP V1=7.4 S2=PGSQL V2=11.6-alpine
- S1=PHP V1=7.4 S2=PGSQL V2=11.7
- S1=PHP V1=7.4 S2=PGSQL V2=11.7-alpine
- S1=PHP V1=7.4 S2=PGSQL V2=11.8
- S1=PHP V1=7.4 S2=PGSQL V2=11.8-alpine
- S1=PHP V1=7.4 S2=PGSQL V2=11.9
- S1=PHP V1=7.4 S2=PGSQL V2=11.9-alpine
- S1=PHP V1=7.4 S2=PGSQL V2=12.0
- S1=PHP V1=7.4 S2=PGSQL V2=12.0-alpine
- S1=PHP V1=7.4 S2=PGSQL V2=12.1
- S1=PHP V1=7.4 S2=PGSQL V2=12.1-alpine
- S1=PHP V1=7.4 S2=PGSQL V2=12.2
- S1=PHP V1=7.4 S2=PGSQL V2=12.2-alpine
- S1=PHP V1=7.4 S2=PGSQL V2=12.3
- S1=PHP V1=7.4 S2=PGSQL V2=12.3-alpine
- S1=PHP V1=7.4 S2=PGSQL V2=12.4
- S1=PHP V1=7.4 S2=PGSQL V2=12.4-alpine
- S1=PHP V1=7.4 S2=PGSQL V2=13.0
- S1=PHP V1=7.4 S2=PGSQL V2=13.0-alpine
- S1=PHP V1=7.4 S2=PGSQL V2=latest
- S1=PHP V1=7.4 S2=PGSQL V2=alpine
# PHP 7.4 vs Redis
- S1=PHP V1=7.4 S2=REDIS V2=2.8
- S1=PHP V1=7.4 S2=REDIS V2=3.0
- S1=PHP V1=7.4 S2=REDIS V2=3.0-alpine
- S1=PHP V1=7.4 S2=REDIS V2=3.2
- S1=PHP V1=7.4 S2=REDIS V2=3.2-alpine
- S1=PHP V1=7.4 S2=REDIS V2=4.0
- S1=PHP V1=7.4 S2=REDIS V2=4.0-alpine
- S1=PHP V1=7.4 S2=REDIS V2=5.0
- S1=PHP V1=7.4 S2=REDIS V2=5.0-alpine
- S1=PHP V1=7.4 S2=REDIS V2=6.0
- S1=PHP V1=7.4 S2=REDIS V2=6.0-alpine
- S1=PHP V1=7.4 S2=REDIS V2=latest
- S1=PHP V1=7.4 S2=REDIS V2=alpine
# PHP 7.4 vs Memcached
- S1=PHP V1=7.4 S2=MEMCD V2=1.4
- S1=PHP V1=7.4 S2=MEMCD V2=1.4-alpine
- S1=PHP V1=7.4 S2=MEMCD V2=1.5
- S1=PHP V1=7.4 S2=MEMCD V2=1.5-alpine
- S1=PHP V1=7.4 S2=MEMCD V2=1.6
- S1=PHP V1=7.4 S2=MEMCD V2=1.6-alpine
- S1=PHP V1=7.4 S2=MEMCD V2=latest
- S1=PHP V1=7.4 S2=MEMCD V2=alpine
# PHP 7.4 vs MongoDB
- S1=PHP V1=7.4 S2=MONGO V2=2.8
- S1=PHP V1=7.4 S2=MONGO V2=3.0
- S1=PHP V1=7.4 S2=MONGO V2=3.2
- S1=PHP V1=7.4 S2=MONGO V2=3.4
- S1=PHP V1=7.4 S2=MONGO V2=3.6
- S1=PHP V1=7.4 S2=MONGO V2=4.0
- S1=PHP V1=7.4 S2=MONGO V2=4.2
- S1=PHP V1=7.4 S2=MONGO V2=4.4
- S1=PHP V1=7.4 S2=MONGO V2=latest
#jobs:
# allow_failures:
# - env: S1=DOCUMENTATION V1=linkcheck2
###
### Installation
###
install:
# Update Debian/Ubuntu package index
- if [ "${S1}" != "MODULES" ] && [ "${S1}" != "DOCUMENTATION" ] && [ "${S1}" != "UPDATE" ]; then
until sudo apt-get update -qq; do sleep 5; done
fi
# Determine latest Docker version in apt
- DOCKER_APT="";
if [ "${S1}" = "DOCKER" ]; then
DOCKER_APT="$( curl -sS https://raw.githubusercontent.com/cytopia/tools/master/docker-apt-versions | sh -s "${V1}" )";
fi;
if [ -n "${DOCKER_APT}" ]; then
DOCKER_APT="=${DOCKER_APT}";
fi;
echo "${DOCKER_APT}";
# Determine latest Docker Compose version
- if [ "${S2}" = "COMPOSE" ]; then
COMPOSE_VERSION="$( curl -sS https://raw.githubusercontent.com/cytopia/tools/master/docker-compose-versions | sh -s "${V2}" )";
else
COMPOSE_VERSION="$( curl -sS https://raw.githubusercontent.com/cytopia/tools/master/docker-compose-versions | sh -s 1 )";
fi;
echo "${COMPOSE_VERSION}";
# Install Docker and Docker Compose
- if [ "${S1}" != "MODULES" ] && [ "${S1}" != "DOCUMENTATION" ] && [ "${S1}" != "UPDATE" ]; then
until sudo apt-get -y -qq -o Dpkg::Options::="--force-confnew" install docker-ce${DOCKER_APT}; do sleep 5; done;
until curl -L -sS https://github.com/docker/compose/releases/download/${COMPOSE_VERSION}/docker-compose-`uname -s`-`uname -m` > docker-compose; do sleep 5; done;
chmod +x docker-compose;
sudo mv -f docker-compose /usr/local/bin;
fi
# Provide retry function
- retry() {
for ((n=0; n<60; n++)); do
echo "[${n}] ${*}";
if eval "${*}"; then
return 0;
fi;
sleep 1;
done;
return 1;
}
###
### Before Script
###
before_script:
# Disable services enabled by default
# http://docs.travis-ci.com/user/database-setup/#MySQL
- sudo service mysql stop || true
- sudo service postgresql stop || true
- sudo service memcached stop || true
- sudo service redis stop || true
- sudo service mongodb stop || true
- netstat -tuln
# Ensure Docker is restarted
- sudo service docker stop || true
- sudo service docker start || true
# Show Docker/Docker Compose
- if [ "${S1}" != "DOCUMENTATION" ]; then
docker --version;
docker-compose --version;
fi
###
### Test
###
script:
###
### Test Modules
###
- if [ "${S1}" = "MODULES" ]; then
cd .tests/;
retry make update-readme;
fi
- if [ "${S1}" = "MODULES" ]; then
git diff --quiet || { echo "Build Changes"; git diff; git status; false; };
fi
###
### Test Documentation
###
- if [ "${S1}" = "DOCUMENTATION" ] && [ "${V1}" = "Build" ]; then
cd docs/;
retry make build;
fi
- if [ "${S1}" = "DOCUMENTATION" ] && [ "${V1}" = "linkcheck" ]; then
cd docs/;
retry make linkcheck;
fi
- if [ "${S1}" = "DOCUMENTATION" ] && [ "${V1}" = "linkcheck2" ]; then
cd docs/;
retry make linkcheck2;
fi
###
### Test Update script
###
- if [ "${S1}" = "UPDATE" ]; then
./update-docker.sh "${V1}";
fi
###
### Test Devilbox
###
- if [ "${S1}" != "MODULES" ] && [ "${S1}" != "DOCUMENTATION" ] && [ "${S1}" != "UPDATE" ]; then
cd .tests/;
fi
- if [ "${S1}" != "MODULES" ] && [ "${S1}" != "DOCUMENTATION" ] && [ "${S1}" != "UPDATE" ]; then
if [ "${S1}" != "DOCKER" ]; then
retry make configure KEY="${S1}_SERVER" VAL="${V1}" &&
retry make configure KEY="${S2}_SERVER" VAL="${V2}";
fi
fi
- if [ "${S1}" != "MODULES" ] && [ "${S1}" != "DOCUMENTATION" ] && [ "${S1}" != "UPDATE" ]; then
retry make start &&
retry make test-smoke-modules &&
retry make test-smoke-config &&
retry make test-smoke-intranet &&
retry make test-smoke-vendors &&
retry make test-smoke-vhosts &&
retry make test-smoke-rproxies &&
retry make test-smoke-ssl &&
retry make test-smoke-bind &&
retry make test-smoke-autostart &&
retry make test-smoke-framework-cakephp &&
retry make test-smoke-framework-drupal &&
retry make test-smoke-framework-wordpress &&
retry make test-smoke-container;
fi

View File

@ -1,12 +1,134 @@
# 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.10.0 (2022-01-28)
#### Fixed
- Fixed mail.php to correctly show UTF chars in Body [#850](https://github.com/cytopia/devilbox/issues/850)
- Fixed desc in env-example [#807](https://github.com/cytopia/devilbox/issues/807)
#### Added
- Added binary `sqlite3` to all PHP images [#856](https://github.com/cytopia/devilbox/issues/856)
- Added binary `laravel` to PHP 8.0 and PHP 8.1 [#823](https://github.com/cytopia/devilbox/issues/823)
- Added AVIF support in GD for PHP 8.1 [#834](https://github.com/cytopia/devilbox/issues/834)
- Added extension `amqp` to PHP 8.0 and PHP 8.1 [#826](https://github.com/cytopia/devilbox/issues/826)
- Added extension `uploadprogress` to PHP 8.0 and PHP 8.1 [#158](https://github.com/devilbox/docker-php-fpm/pull/158)
- Added extension `imagick` to PHP 8.0 and PHP 8.1
- Added extension `rdkafka` to PHP 8.0 and PHP 8.1
- Added extension `xlswriter` to PHP 8.1
- Added extension `pdo_dblib` to PHP 8.1
- Added extension `uuid` to all PHP versions (except 5.2)
- Added MySQL image: MariaDB 10.6
- Added MySQL image: MariaDB 10.7
#### Changed
- Updated `php-cs-fixer` to latest version [#219](https://github.com/devilbox/docker-php-fpm/pull/219)
- Updated Nginx Stable [#33](https://github.com/devilbox/docker-nginx-stable/pull/33)
- Updated Nginx Stable [#34](https://github.com/devilbox/docker-nginx-stable/pull/34)
- Updated Nginx Mainline [#36](https://github.com/devilbox/docker-nginx-mainline/pull/36)
- Updated Nginx Mainline [#37](https://github.com/devilbox/docker-nginx-mainline/pull/37)
- Updated Apache 2.2 [#30](https://github.com/devilbox/docker-apache-2.2/pull/30)
- Updated Apache 2.2 [#31](https://github.com/devilbox/docker-apache-2.2/pull/31)
- Updated Apache 2.4 [#32](https://github.com/devilbox/docker-apache-2.4/pull/32)
- Updated Apache 2.4 [#33](https://github.com/devilbox/docker-apache-2.4/pull/33)
## Release v1.9.3 (2022-01-24)
#### Fixed
- Updated PHP Docker Images: [#221](https://github.com/devilbox/docker-php-fpm/pull/221)
- Updated PHP Docker Images: [#222](https://github.com/devilbox/docker-php-fpm/pull/222)
- Update MySQL Docker Images: [#10](https://github.com/devilbox/docker-mysql/pull/10)
- Fixed documentation build issues
- Fixed intranet PHP code to work with legacy versions
## Release v1.9.2 (2021-06-04)
#### Added
- Added Homebrew for all PHP images
- Added `pdo_sqlsrv` PHP extension for 7.4 and 8.0
- Xdebug 3.0 documentation
## Release v1.9.1 (2021-05-19)
#### Added
- Added PHP Xdebug info page for intranet
#### Changed
- [#769](https://github.com/cytopia/devilbox/issues/769) Adjusted Xdebug 3.0 defaults
- Update PHP images to 0.125
- MySQL database use binlog by default
- Updated Adminer to 4.8.1
#### Fixed
- [#783](https://github.com/cytopia/devilbox/pull/783) Kibana 6.6 and above uses ELASTICSEARCH_HOSTS
- [#801](https://github.com/cytopia/devilbox/issues/801) Intranet not available when some php modules disabled or not compiled
## 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

View File

@ -22,7 +22,6 @@
[![type](https://img.shields.io/badge/type-Docker-blue.svg)](https://www.docker.com/)
[![License](https://img.shields.io/badge/license-MIT-%233DA639.svg)](https://opensource.org/licenses/MIT)
[![Build Status](https://travis-ci.org/cytopia/devilbox.svg?branch=master)](https://travis-ci.org/cytopia/devilbox)
[![Documentation Status](https://readthedocs.org/projects/devilbox/badge/?version=latest)](https://devilbox.readthedocs.io)
[![Build Status](https://github.com/cytopia/devilbox/workflows/Lint/badge.svg)](https://github.com/cytopia/devilbox/actions?workflow=Lint)
[![Build Status](https://github.com/cytopia/devilbox/workflows/Docs/badge.svg)](https://github.com/cytopia/devilbox/actions?workflow=Docs)
@ -314,7 +313,7 @@ Every single attachable container comes with many different versions. In order t
<td></td>
<td><a target="_blank" title="PHP 7.2" href="https://github.com/devilbox/docker-php-fpm">7.2</a></td>
<td></td>
<td></td>
<td><a target="_blank" title="MariaDB 10.6" href="https://github.com/devilbox/docker-mysql">10.6</a></td>
<td></td>
<td>...</td>
<td></td>
@ -326,7 +325,7 @@ Every single attachable container comes with many different versions. In order t
<td></td>
<td><a target="_blank" title="PHP 7.3" href="https://github.com/devilbox/docker-php-fpm">7.3</a></td>
<td></td>
<td></td>
<td><a target="_blank" title="MariaDB 10.7" href="https://github.com/devilbox/docker-mysql">10.7</a></td>
<td></td>
<td><a target="_blank" title="PgSQL 12.3" href="https://github.com/docker-library/postgres">12.3</a></td>
<td></td>
@ -348,7 +347,7 @@ Every single attachable container comes with many different versions. In order t
<tr>
<td></td>
<td></td>
<td><a target="_blank" title="PHP 8.0" href="https://github.com/devilbox/docker-php-fpm">8.0</a><sup>[2]</sup></td>
<td><a target="_blank" title="PHP 8.0" href="https://github.com/devilbox/docker-php-fpm">8.0</a></td>
<td></td>
<td></td>
<td></td>
@ -360,7 +359,7 @@ Every single attachable container comes with many different versions. In order t
<tr>
<td></td>
<td></td>
<td><a target="_blank" title="PHP 8.1" href="https://github.com/devilbox/docker-php-fpm">8.1</a><sup>[2]</sup></td>
<td><a target="_blank" title="PHP 8.1" href="https://github.com/devilbox/docker-php-fpm">8.1</a></td>
<td></td>
<td></td>
<td></td>
@ -374,7 +373,7 @@ Every single attachable container comes with many different versions. In order t
<small><strong><sup>[1]</sup></strong> <strong>PHP 5.2</strong> is available to use, but it is not officially supported. The Devilbox intranet does not work with this version as PHP 5.2 does not support namespaces. Furthermore PHP 5.2 does only work with Apache 2.4, Nginx stable and Nginx mainline. It does not work with Apache 2.2. Use at your own risk.</small>
<small><strong><sup>[2]</sup></strong> <strong>PHP 8.0 / PHP 8.1</strong> are upcoming unreleased versions of PHP, which are directly built out of their [official git branches](https://github.com/php/php-src/) every night to assure you will leverage their latest features.</small>
<!--<small><strong><sup>[2]</sup></strong> <strong>PHP 8.0 / PHP 8.1</strong> are upcoming unreleased versions of PHP, which are directly built out of their [official git branches](https://github.com/php/php-src/) every night to assure you will leverage their latest features.</small>-->
> **Documentation:**
> [Change container versions](https://devilbox.readthedocs.io/en/latest/getting-started/change-container-versions.html)
@ -507,7 +506,7 @@ The Devilbox has everything setup for you. The only thing you will have to insta
</tr>
<tr>
<td>:star: Auto virtual hosts</td>
<td>New virtual hosts are created automatically and instantly whenever you add a project directory. This is done internally via <a href="https://travis-ci.org/devilbox/vhost-gen">vhost-gen</a> and <a href="https://github.com/devilbox/watcherd">watcherd</a>.</td>
<td>New virtual hosts are created automatically and instantly whenever you add a project directory. This is done internally via <a href="https://github.com/devilbox/vhost-gen">vhost-gen</a> and <a href="https://github.com/devilbox/watcherd">watcherd</a>.</td>
</tr>
<tr>
<td>:star: Automated SSL certs</td>
@ -631,8 +630,8 @@ The following tools will assist you on creating new projects easily as well as h
<td><code>linkcheck</code> is a command line tool that searches for URLs in files (optionally limited by extension) and validates their HTTP status code.</td>
</tr>
<tr>
<td>:wrench: <a href="https://linuxbrew.sh/">linuxbrew</a></td>
<td><code>brew</code> is a MacOS Homenbrew clone for Linux.</td>
<td>:wrench: <a href="https://brew.sh/">homebrew</a></td>
<td><code>brew</code> is a MacOS Homenbrew for Linux.</td>
</tr>
<tr>
<td>:wrench: <a href="https://github.com/DavidAnson/markdownlint">markdownlint</a></td>
@ -720,13 +719,13 @@ The Devilbox is a development stack, so it is made sure that a lot of PHP module
> * Available, but disabled (can be enabled): **d**
<!-- modules -->
| Modules | PHP 5.2 | PHP 5.3 | PHP 5.4 | PHP 5.5 | PHP 5.6 | PHP 7.0 | PHP 7.1 | PHP 7.2 | PHP 7.3 | PHP 7.4 | PHP 8.0 | PHP 8.1 |
|-------------------------------|---------|---------|---------|---------|---------|---------|---------|---------|---------|---------|---------|---------|
| <small>amqp</small> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | | |
| Modules | <sup>PHP 5.2</sup> | <sup>PHP 5.3</sup> | <sup>PHP 5.4</sup> | <sup>PHP 5.5</sup> | <sup>PHP 5.6</sup> | <sup>PHP 7.0</sup> | <sup>PHP 7.1</sup> | <sup>PHP 7.2</sup> | <sup>PHP 7.3</sup> | <sup>PHP 7.4</sup> | <sup>PHP 8.0</sup> | <sup>PHP 8.1</sup> |
|-------------------------------|:-------:|:-------:|:-------:|:-------:|:-------:|:-------:|:-------:|:-------:|:-------:|:-------:|:-------:|:-------:|
| <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> | | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
@ -735,7 +734,7 @@ The Devilbox is a development stack, so it is made sure that a lot of PHP module
| <small>date</small> | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
| <small>dba</small> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
| <small>dom</small> | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
| <small>enchant</small> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
| <small>enchant</small> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | | | 🗸 | 🗸 |
| <small>ereg</small> | | ✔ | ✔ | ✔ | ✔ | | | | | | | |
| <small>exif</small> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
| <small>FFI</small> | | | | | | | | | | 🗸 | ✔ | ✔ |
@ -747,27 +746,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>imagick</small> | | | | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | | |
| <small>imap</small> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | | |
| <small>igbinary</small> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
| <small>imagick</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> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
@ -779,14 +778,14 @@ The Devilbox is a development stack, so it is made sure that a lot of PHP module
| <small>PDO_OCI</small> | | | | | | d | d | d | d | d | d | d |
| <small>pdo_pgsql</small> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
| <small>pdo_sqlite</small> | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
| <small>pdo_sqlsrv</small> | | | | | | d | d | d | d | | | |
| <small>pdo_sqlsrv</small> | | | | | | d | d | d | d | d | d | |
| <small>pgsql</small> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
| <small>phalcon</small> | | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | | |
| <small>phalcon</small> | | d | d | d | d | d | d | d | d | d | | |
| <small>Phar</small> | 🗸 | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
| <small>posix</small> | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
| <small>pspell</small> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
| <small>psr</small> | | | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | | |
| <small>rdkafka</small> | | d | d | d | d | d | d | d | d | d | | |
| <small>psr</small> | | | d | d | d | d | d | d | d | d | d | d |
| <small>rdkafka</small> | | d | d | d | d | d | d | d | d | d | d | d |
| <small>readline</small> | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
| <small>recode</small> | 🗸 | ✔ | ✔ | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | | | |
| <small>redis</small> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
@ -798,30 +797,31 @@ 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 | d | |
| <small>ssh2</small> | | | | | | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | | |
| <small>standard</small> | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
| <small>swoole</small> | | d | d | d | d | d | d | d | d | d | | |
| <small>swoole</small> | | d | d | d | d | d | d | d | d | d | d | |
| <small>sysvmsg</small> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
| <small>sysvsem</small> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
| <small>sysvshm</small> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
| <small>tidy</small> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
| <small>tokenizer</small> | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
| <small>uploadprogress</small> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | | |
| <small>uploadprogress</small> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
| <small>uuid</small> | | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
| <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> | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |

0
cfg/mariadb-10.6/.keepme Normal file
View File

View File

@ -0,0 +1,5 @@
[mysqld]
;key_buffer_size=16M
[mysqldump]
;quick

0
cfg/mariadb-10.7/.keepme Normal file
View File

View File

@ -0,0 +1,5 @@
[mysqld]
;key_buffer_size=16M
[mysqldump]
;quick

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,10 +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
@ -92,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}"
@ -127,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
@ -141,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
@ -154,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="$( get_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="$( get_path "$( 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
@ -295,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
@ -308,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
@ -321,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
@ -334,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
@ -347,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
@ -355,9 +511,9 @@ fi
#--------------------------------------------------------------------------------------------------
# Directory permissions
# Devilbox Directory permissions
#--------------------------------------------------------------------------------------------------
print_head_1 "Checking directory permissions"
print_head_1 "Checking devilbox core directory permissions"
DEVILBOX_DIRS=(
"autostart"
@ -367,6 +523,7 @@ DEVILBOX_DIRS=(
"compose"
"log"
"mod"
"supervisor"
)
# Check allowed directory permissions: 0755 0775 0777
@ -378,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
@ -394,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
@ -410,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
@ -419,9 +582,9 @@ fi
#--------------------------------------------------------------------------------------------------
# File permissions
# Devilbox File permissions
#--------------------------------------------------------------------------------------------------
print_head_1 "Checking file permissions"
print_head_1 "Checking devilbox core file permissions"
DEVILBOX_DIRS=(
"autostart"
@ -429,6 +592,7 @@ DEVILBOX_DIRS=(
"cfg"
"compose"
"mod"
"supervisor"
)
# Check allowed directory permissions: 0644 0664 0666
@ -442,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
@ -449,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
@ -456,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)
@ -473,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
@ -489,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
@ -498,11 +672,11 @@ fi
#--------------------------------------------------------------------------------------------------
# Check projects
# Check projects permissions
#--------------------------------------------------------------------------------------------------
print_head_1 "Checking projects"
print_head_1 "Checking projects permissions"
HOST_PATH_HTTPD_DATADIR="$( get_path "$( 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
@ -511,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
@ -524,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
@ -537,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
#--------------------------------------------------------------------------------------------------
@ -553,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
@ -204,6 +204,7 @@ services:
ipv4_address: 172.16.238.242
environment:
- TZ=${TIMEZONE:-UTC}
- ELASTICSEARCH_HOSTS=http://elastic:9200
- ELASTICSEARCH_URL=http://elastic:9200
depends_on:
- elastic

View File

@ -53,6 +53,7 @@ services:
ipv4_address: 172.16.238.242
environment:
- TZ=${TIMEZONE:-UTC}
- ELASTICSEARCH_HOSTS=http://elastic:9200
- ELASTICSEARCH_URL=http://elastic:9200
depends_on:
- elastic

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.116
image: devilbox/php-fpm:${PHP_SERVER}-work-0.131
hostname: php
##
@ -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.38
hostname: httpd
environment:
@ -317,7 +320,7 @@ services:
# MySQL Database
# ------------------------------------------------------------
mysql:
image: devilbox/mysql:${MYSQL_SERVER}-0.7
image: devilbox/mysql:${MYSQL_SERVER}-0.8
hostname: mysql
environment:
@ -338,6 +341,7 @@ services:
# Mount devilbox user-defined cnf files in order
# to overwrite the MySQL server configuration
- ${DEVILBOX_PATH}/.devilbox/cfg/mysql.cnf:/etc/mysql/conf.d/devilbox.cnf:ro${MOUNT_OPTIONS}
- ${DEVILBOX_PATH}/cfg/${MYSQL_SERVER}:/etc/mysql/docker-default.d:ro${MOUNT_OPTIONS}
# Mount MySQL Data directory
@ -497,6 +501,8 @@ volumes:
devilbox-mariadb-10.3:
devilbox-mariadb-10.4:
devilbox-mariadb-10.5:
devilbox-mariadb-10.6:
devilbox-mariadb-10.7:
devilbox-percona-5.5:
devilbox-percona-5.6:
devilbox-percona-5.7:

View File

@ -28,7 +28,7 @@ linkcheck2:
--rm \
$$(tty -s && echo "-it" || echo) \
-v $(PWD):/data \
cytopia/linkcheck -l -k -r 60 -t 30 -e rst -c '200,204' _includes/
cytopia/linkcheck -l -k -r 60 -t 30 -e rst -c '200,204,403' _includes/
linkcheck:
docker run \
@ -65,4 +65,4 @@ autobuild:
-p "8000:8000" \
-v $(PWD)/..:/shared/httpd \
devilbox/python-sphinx:3.8-dev \
sphinx-autobuild -a -E -n -j auto -W -H 0.0.0.0 -p 8000 . _build/html
sphinx-autobuild -a -E -n -j auto -W --host 0.0.0.0 --port 8000 . _build/html

View File

@ -6,13 +6,13 @@
.. |ext_lnk_doc_bind_ttl| raw:: html
<a target="_blank" href="http://www.zytrax.com/books/dns/apa/ttl.html">
<a target="_blank" href="https://bind9.readthedocs.io/en/latest/reference.html?highlight=ttl#the-ttl-directive">
BIND TTL <img src="https://raw.githubusercontent.com/cytopia/icons/master/11x11/ext-link.png" />
</a>
.. |ext_lnk_doc_bind_soa| raw:: html
<a target="_blank" href="http://www.zytrax.com/books/dns/ch8/soa.html">
<a target="_blank" href="https://bind9.readthedocs.io/en/latest/introduction.html?highlight=soa#secondary-servers">
BIND SOA <img src="https://raw.githubusercontent.com/cytopia/icons/master/11x11/ext-link.png" />
</a>

View File

@ -72,13 +72,13 @@
.. |ext_lnk_example_phalcon_documentation| raw:: html
<a target="_blank" href="https://docs.phalconphp.com/latest/en/devtools-usage">
<a target="_blank" href="https://docs.phalcon.io/4.0/en/environments-devilbox">
Official Phalcon Documentation <img src="https://raw.githubusercontent.com/cytopia/icons/master/11x11/ext-link.png" />
</a>
.. |ext_lnk_example_photon_cms| raw:: html
<a target="_blank" href="https://photoncms.com/resources/installing">
<a target="_blank" href="https://docs.photoncms.com/">
Official Photon CMS Documentation <img src="https://raw.githubusercontent.com/cytopia/icons/master/11x11/ext-link.png" />
</a>

View File

@ -21,9 +21,9 @@
awesome-ci <img src="https://raw.githubusercontent.com/cytopia/icons/master/11x11/ext-link.png" />
</a>
.. |ext_lnk_tool_linuxbrew| raw:: html
.. |ext_lnk_tool_homebrew| raw:: html
<a target="_blank" href="https://linuxbrew.sh">
<a target="_blank" href="https://brew.sh/">
Linux brew <img src="https://raw.githubusercontent.com/cytopia/icons/master/11x11/ext-link.png" />
</a>
@ -209,7 +209,7 @@
.. |ext_lnk_tool_photon| raw:: html
<a target="_blank" href="https://photoncms.com/resources/installing">
<a target="_blank" href="https://docs.photoncms.com/">
Photon CMS cli <img src="https://raw.githubusercontent.com/cytopia/icons/master/11x11/ext-link.png" />
</a>

View File

@ -163,7 +163,7 @@ html_static_path = ['_static']
def setup(app):
'''Include custom css file'''
app.add_stylesheet('css/devilbox.css')
app.add_css_file('css/devilbox.css')
# If true, “Created using Sphinx” is shown in the HTML footer. Default is True.

View File

@ -105,7 +105,7 @@ Varnish
+------------------------------+-----------------------------------------------+--------------------------------------------------------------------+
| ``VARNISH_CONFIG`` | ``/etc/varnish/default.vcl`` | Path to Varnish configuration file (custom config can be mounted). |
+------------------------------+-----------------------------------------------+--------------------------------------------------------------------+
| ``VARNICS_CACHE_SIZE`` | ``128m`` | Varnish Cache size. |
| ``VARNISH_CACHE_SIZE`` | ``128m`` | Varnish Cache size. |
+------------------------------+-----------------------------------------------+--------------------------------------------------------------------+
| ``VARNISH_PARAMS`` | ``-p default_ttl=3600 -p default_grace=3600`` | Additional Varnish startup parameter. |
+------------------------------+-----------------------------------------------+--------------------------------------------------------------------+
@ -158,7 +158,7 @@ Add the following variables to ``.env`` and adjust them to your needs:
# Varnish settings
VARNISH_CONFIG=/etc/varnish/default.vcl
VARNICS_CACHE_SIZE=128m
VARNISH_CACHE_SIZE=128m
VARNISH_PARAMS=-p default_ttl=3600 -p default_grace=3600
HOST_PORT_VARNISH=6081
@ -245,7 +245,7 @@ directory:
echo "VARNISH_SERVER=6" >> .env
echo "# Varnish settings" >> .env
echo "VARNISH_CONFIG=/etc/varnish/default.vcl" >> .env
echo "VARNICS_CACHE_SIZE=128m" >> .env
echo "VARNISH_CACHE_SIZE=128m" >> .env
echo "VARNISH_PARAMS=-p default_ttl=3600 -p default_grace=3600" >> .env
echo "HOST_PORT_VARNISH=6081" >> .env
echo "# HAProxy settings" >> .env

View File

@ -4,12 +4,12 @@
.. _example_setup_wordpress:
***************
Setup Wordpress
Setup WordPress
***************
This example will use ``git`` to install Wordpress from within the Devilbox PHP container.
This example will use ``git`` to install WordPress from within the Devilbox PHP container.
After completing the below listed steps, you will have a working Wordpress setup ready to be
After completing the below listed steps, you will have a working WordPress setup ready to be
served via http and https.
.. seealso:: |ext_lnk_example_wordpress_documentation|
@ -44,7 +44,7 @@ It will be ready in seven simple steps:
1. Enter the PHP container
2. Create a new VirtualHost directory
3. Download Wordpress via ``git``
3. Download WordPress via ``git``
4. Symlink webroot directory
5. Add MySQL database
6. Setup DNS record
@ -83,10 +83,10 @@ The vhost directory defines the name under which your project will be available.
.. seealso:: :ref:`env_tld_suffix`
3. Download Wordpress via ``git``
3. Download WordPress via ``git``
---------------------------------
Navigate into your newly created vhost directory and install Wordpress with ``git``.
Navigate into your newly created vhost directory and install WordPress with ``git``.
.. code-block:: bash
@ -175,7 +175,7 @@ host operating systems ``/etc/hosts`` file (or ``C:\Windows\System32\drivers\etc
Open your browser at http://my-wp.loc or https://my-wp.loc and follow the installation steps.
**(1/7) Choose your desired Wordpress language**
**(1/7) Choose your desired WordPress language**
.. include:: /_includes/figures/examples/wordpress/01-choose-language.rst
@ -193,7 +193,7 @@ Open your browser at http://my-wp.loc or https://my-wp.loc and follow the instal
.. include:: /_includes/figures/examples/wordpress/04-finished-database.rst
**(5/7) Start Wordpress installation**
**(5/7) Start WordPress installation**
.. include:: /_includes/figures/examples/wordpress/05-installation.rst

View File

@ -128,7 +128,7 @@ Now save the file and you can start the Devilbox again.
# Navigate to the Devilbox directory
host> cd path/to/devilbox
# Stop all container
# Start all container
host> docker-compose up php httpd bind
.. seealso:: :ref:`start_the_devilbox`
@ -193,7 +193,7 @@ Now save the file and you can start the Devilbox again.
# Navigate to the Devilbox directory
host> cd path/to/devilbox
# Stop all container
# Start all container
host> docker-compose up php httpd bind
.. seealso:: :ref:`start_the_devilbox`

View File

@ -148,7 +148,7 @@ Ensure to read the links below to understand why this problem exists and how the
The Docker documentation will also give you alternative caching options to consider.
.. seealso::
* https://github.com/cytopia/devilbox/issues/105#issuecomment-426229921
* https://github.com/cytopia/devilbox/issues/105
* https://forums.docker.com/t/file-access-in-mounted-volumes-extremely-slow-cpu-bound/8076/281
* https://docs.docker.com/docker-for-mac/osxfs/
* :ref:`env_mount_options`

View File

@ -47,7 +47,7 @@ When using Docker for Windows you can use ``127.0.0.1`` for the IP address.
127.0.0.1 project-1.loc
127.0.0.1 www.project-1.loc
3. Safe the file and verify the DNS entries with the ``ping`` command
3. Save the file and verify the DNS entries with the ``ping`` command
.. code-block:: bash

View File

@ -121,6 +121,23 @@ Copy/paste all of the following lines into the above created ``xdebug.ini`` file
; Optional: Set to true to always auto-start xdebug
xdebug.remote_autostart=false
`Xdebug 3.0 changes <https://xdebug.org/docs/upgrade_guide>`_:
.. code-block:: ini
:caption: xdebug.ini
; Defaults
xdebug.mode=debug
xdegub.client_port=9000
; The Linux Way
xdebug.discover_client_host=1
; idekey value is specific to Atom
xdebug.session=xdebug.atom
; Optional: Set to true to always auto-start xdebug
xdebug.start_with_request=Yes
.. note:: Host os and editor specific settings are highlighted in yellow and are worth googling to get a better understanding of the tools you use and to be more efficient at troubleshooting.

View File

@ -53,7 +53,7 @@ Then you need to ensure that :ref:`env_host_port_bind` is set to ``53``.
host> vi .env
HOST_PORT_BIND=53
Before starting up the Devilbox, ensure that port ``53`` is not already used on ``127.0.0.1``.
Before starting up the Devilbox, ensure that port ``53`` is not already used.
.. code-block:: bash
:emphasize-lines: 2

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

@ -21,7 +21,7 @@ The PHP container is your workhorse and these are your tools:
+----------------------+---------------------------------------+
| various binaries | |ext_lnk_tool_awesome_ci| |
+----------------------+---------------------------------------+
| ``brew`` | |ext_lnk_tool_linuxbrew| |
| ``brew`` | |ext_lnk_tool_homebrew| |
+----------------------+---------------------------------------+
| ``codecept`` | |ext_lnk_tool_codecept| |
+----------------------+---------------------------------------+

View File

@ -135,7 +135,7 @@ have to get support from the docker/for-mac GitHub repository or forum.
.. seealso::
* https://github.com/cytopia/devilbox/issues/539
* https://github.com/docker/for-mac/issues/371#issuecomment-242047368
* https://github.com/docker/for-mac/issues/371
* https://forums.docker.com/t/no-space-left-on-device-error/10894

View File

@ -86,7 +86,7 @@ LOCAL_LISTEN_ADDR=
### with mass-virtual-hosting.
### It is also required for the internal DNS server to be setup.
###
### Note: Only ALPHA ([a-zA-Z]+) characters are supported.
### Note: In addition to period or dot character ('.'), only ALPHA ([a-zA-Z]+) characters are supported.
###
### Example:
### TLD_SUFFIX=loc
@ -292,6 +292,8 @@ HTTPD_SERVER=nginx-stable
#MYSQL_SERVER=mariadb-10.3
#MYSQL_SERVER=mariadb-10.4
MYSQL_SERVER=mariadb-10.5
#MYSQL_SERVER=mariadb-10.6
#MYSQL_SERVER=mariadb-10.7
#MYSQL_SERVER=percona-5.5
#MYSQL_SERVER=percona-5.6
#MYSQL_SERVER=percona-5.7

0
log/mariadb-10.0/.keepme Normal file
View File

0
log/mariadb-10.1/.keepme Normal file
View File

0
log/mariadb-10.2/.keepme Normal file
View File

0
log/mariadb-10.4/.keepme Normal file
View File

0
log/mariadb-10.5/.keepme Normal file
View File

0
log/mariadb-10.6/.keepme Normal file
View File

0
log/mariadb-10.7/.keepme Normal file
View File

0
log/mariadb-5.5/.keepme Normal file
View File

0
supervisor/.keepme Normal file
View File