mirror of
https://github.com/cytopia/devilbox.git
synced 2025-06-24 18:25:17 +00:00
Compare commits
157 Commits
Author | SHA1 | Date | |
---|---|---|---|
349fa0ec73 | |||
4b3cc3f1e8 | |||
be73b353eb | |||
a45748e1aa | |||
31103f0040 | |||
bdad47617c | |||
52a42623bb | |||
75f1d7f471 | |||
03eb46da99 | |||
dd85f5b1bb | |||
fca58c22c6 | |||
830549a905 | |||
015d66052e | |||
82a1d7c881 | |||
7d346463c7 | |||
ae780388dc | |||
422af8e916 | |||
3d3f716121 | |||
928d5a2475 | |||
9b37e3a307 | |||
682eaf82ee | |||
38b96b7a08 | |||
94bf3c9dcf | |||
9272bfec92 | |||
d57e72bc75 | |||
bbc6a661ed | |||
2ea5ff59e0 | |||
ba6fd1e554 | |||
fe67bdf6bb | |||
4a9c0b6d9f | |||
855d98d895 | |||
01b0ecdf20 | |||
fe9e6264d9 | |||
55bb37c53b | |||
a6894b7793 | |||
0daa62cc02 | |||
38942fa168 | |||
a0246b7a0e | |||
b17f4600f4 | |||
5f465abd61 | |||
61246b5151 | |||
ca90af0fb0 | |||
7bd6b34698 | |||
2677422250 | |||
200000cb5b | |||
8560267fdc | |||
8c13144d3e | |||
2f8fc59dd9 | |||
d9fb88058f | |||
4c15e191a0 | |||
249b132e58 | |||
6e34d3b263 | |||
68bd88d304 | |||
bfb4769e85 | |||
23a6aed10d | |||
0dfd63d7f9 | |||
3804a3b6f3 | |||
9cfc69e5bb | |||
56555e87a5 | |||
5e90a3a35d | |||
54e17f5ec5 | |||
b5d19264de | |||
f6bbdc72fd | |||
2f9ba2e30a | |||
fa0c8f5632 | |||
64330b5b12 | |||
872340e14b | |||
5eb2ee8ca0 | |||
aff86a6b15 | |||
fb51eece98 | |||
6c438bb434 | |||
9935780588 | |||
20cba7d773 | |||
353fa53d29 | |||
f28e1ee4a4 | |||
fb390ac429 | |||
867327a8c3 | |||
8ffd65a905 | |||
5a4574edb8 | |||
dc350b00b5 | |||
f4d492ea98 | |||
c40c43c4ea | |||
d0585bb174 | |||
0b9d18cdf4 | |||
ba42717f01 | |||
b4c3de9195 | |||
a0423ebd02 | |||
06c2a7ac51 | |||
543e373b91 | |||
3d0154f987 | |||
715c6b3c83 | |||
d8e728a6a4 | |||
1d41fb025c | |||
af98125279 | |||
ab761eedba | |||
0058e0bd61 | |||
2dd3ec9dd0 | |||
7f294735e7 | |||
a07b3442f1 | |||
db1be81471 | |||
d5e463db60 | |||
83c0c672d4 | |||
af68fb65f2 | |||
f6c273d6c4 | |||
46f5c48ba0 | |||
6c18e8f112 | |||
6807b83e6b | |||
01fb99ec1a | |||
56342426b3 | |||
87e710050f | |||
cdfb55ec2d | |||
7cad84f527 | |||
e65685b604 | |||
7e08261602 | |||
30d23f0f6f | |||
b5fca3f842 | |||
dd529d0a1a | |||
a6863c5ceb | |||
6dba0ce963 | |||
201925e0b2 | |||
ffee650e60 | |||
59738601b2 | |||
50ae11f95f | |||
09b8803f21 | |||
75aa5139e2 | |||
f9b4a9d9f4 | |||
0151167635 | |||
9c6711c948 | |||
22f5c945ef | |||
1b768425b2 | |||
a05f3eea47 | |||
e3c1e18ae3 | |||
a78bccfd33 | |||
2679acc569 | |||
6b18f7b71d | |||
df6ee3fb36 | |||
fda37efc64 | |||
e9281c9b40 | |||
dfd3e27882 | |||
8e7069f893 | |||
c96f740c39 | |||
fe54bbf714 | |||
9660c37937 | |||
0d6ecf23e3 | |||
3a2dacf748 | |||
467fc03640 | |||
7480eb4e08 | |||
f348fa7814 | |||
b8055a175b | |||
9b58e2daa8 | |||
30e2b08c72 | |||
1f0676de4a | |||
6735daaaeb | |||
657ba28afd | |||
14259518c6 | |||
d406eac805 | |||
dfb2a1097d |
4
.devilbox/cfg/mysql.cnf
Normal file
4
.devilbox/cfg/mysql.cnf
Normal file
@ -0,0 +1,4 @@
|
||||
[mysqld]
|
||||
server_id = 1
|
||||
log_bin = "mysql-bin"
|
||||
sync_binlog = 0
|
@ -13,8 +13,8 @@ error_reporting(-1);
|
||||
putenv('RES_OPTIONS=retrans:1 retry:1 timeout:1 attempts:1');
|
||||
|
||||
|
||||
$DEVILBOX_VERSION = 'v1.8.1';
|
||||
$DEVILBOX_DATE = '2020-11-12';
|
||||
$DEVILBOX_VERSION = 'v1.10.5';
|
||||
$DEVILBOX_DATE = '2022-03-16';
|
||||
$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;
|
||||
}
|
||||
|
22
.devilbox/www/htdocs/assets/js/html-email.js
Normal file
22
.devilbox/www/htdocs/assets/js/html-email.js
Normal 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);
|
62
.devilbox/www/htdocs/config_httpd.php
Normal file
62
.devilbox/www/htdocs/config_httpd.php
Normal 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>
|
126
.devilbox/www/htdocs/config_php.php
Normal file
126
.devilbox/www/htdocs/config_php.php
Normal 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>
|
@ -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>
|
||||
|
32
.devilbox/www/htdocs/info_xdebug.php
Normal file
32
.devilbox/www/htdocs/info_xdebug.php
Normal 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>
|
@ -5,10 +5,10 @@
|
||||
//
|
||||
// $_POST submit for sending a test email
|
||||
//
|
||||
if (isset($_GET['email']) && isset($_GET['subject']) && isset($_GET['message'])) {
|
||||
$mail = $_GET['email'];
|
||||
$subj = $_GET['subject'];
|
||||
$mess = $_GET['message'];
|
||||
if (isset($_POST['email']) && isset($_POST['subject']) && isset($_POST['message'])) {
|
||||
$mail = $_POST['email'];
|
||||
$subj = $_POST['subject'];
|
||||
$mess = $_POST['message'];
|
||||
if (! mail($mail, $subj, $mess)) {
|
||||
loadClass('Logger')->error('Could not send mail to: '.$mail.' | subject: '.$subj);
|
||||
}
|
||||
@ -24,6 +24,17 @@ require $VEN_DIR . DIRECTORY_SEPARATOR . 'Mail' . DIRECTORY_SEPARATOR .'mimeDeco
|
||||
require $LIB_DIR . DIRECTORY_SEPARATOR . 'Mail.php';
|
||||
require $LIB_DIR . DIRECTORY_SEPARATOR . 'Sort.php';
|
||||
|
||||
|
||||
if (isset($_GET['delete']) && is_numeric($_GET['delete'])) {
|
||||
$message = $_GET['delete'];
|
||||
$MyMbox = new \devilbox\Mail('/var/mail/devilbox');
|
||||
$MyMbox->delete($message);
|
||||
header('Location: /mail.php');
|
||||
exit();
|
||||
}
|
||||
|
||||
|
||||
|
||||
//
|
||||
// Setup Sort/Order
|
||||
//
|
||||
@ -108,7 +119,7 @@ $messages = $MyMbox->get($sortOrderArr);
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
|
||||
<form class="form-inline">
|
||||
<form method="post" class="form-inline">
|
||||
<div class="form-group">
|
||||
<label class="sr-only" for="exampleInputEmail1">Email to</label>
|
||||
<input name="email" type="email" class="form-control" id="exampleInputEmail1" placeholder="Enter to email">
|
||||
@ -121,7 +132,7 @@ $messages = $MyMbox->get($sortOrderArr);
|
||||
|
||||
<div class="form-group">
|
||||
<label class="sr-only" for="exampleInputEmail3">Message</label>
|
||||
<input name="message" type="text" class="form-control" id="exampleInputEmail3" placeholder="Message">
|
||||
<textarea name="message" rows="1" class="form-control" id="exampleInputEmail3" placeholder="Message"></textarea>
|
||||
</div>
|
||||
|
||||
<button type="submit" class="btn btn-primary">Send Email</button>
|
||||
@ -152,6 +163,7 @@ $messages = $MyMbox->get($sortOrderArr);
|
||||
<th>From <?php echo $orderFrom;?></th>
|
||||
<th>To <?php echo $orderTo;?></th>
|
||||
<th>Subject <?php echo $orderSubj;?></th>
|
||||
<th>Action</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@ -159,6 +171,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>
|
||||
@ -169,21 +192,19 @@ $messages = $MyMbox->get($sortOrderArr);
|
||||
<td><?php echo htmlentities($structure->headers['from']);?></td>
|
||||
<td><?php echo htmlentities($structure->headers['x-original-to']);?></td>
|
||||
<td><?php echo htmlentities($structure->headers['subject']);?></td>
|
||||
<td><a href="/mail.php?delete=<?php echo $data['num']-1;?>" title="Delete Email"><i class="fa fa-trash"></i></a></td>
|
||||
</tr>
|
||||
<tr></tr>
|
||||
<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) ?>
|
||||
<td colspan="5">
|
||||
<?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 +226,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>
|
||||
|
2038
.devilbox/www/htdocs/vendor/adminer-4.7.7-en-php8.php
vendored
2038
.devilbox/www/htdocs/vendor/adminer-4.7.7-en-php8.php
vendored
File diff suppressed because one or more lines are too long
2038
.devilbox/www/htdocs/vendor/adminer-4.7.7-en.php
vendored
2038
.devilbox/www/htdocs/vendor/adminer-4.7.7-en.php
vendored
File diff suppressed because one or more lines are too long
1790
.devilbox/www/htdocs/vendor/adminer-4.8.1-en.php
vendored
Normal file
1790
.devilbox/www/htdocs/vendor/adminer-4.8.1-en.php
vendored
Normal file
File diff suppressed because one or more lines are too long
@ -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';
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -58,6 +58,18 @@ class Mail
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Deletes an emails
|
||||
*
|
||||
* Note: messages start with 0.
|
||||
*
|
||||
* @param int $message The number of the message to remove, or array of message ids to remove
|
||||
*/
|
||||
public function delete($message) {
|
||||
$this->_Mbox->remove($message);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Retrieve emails.
|
||||
*
|
||||
|
@ -39,7 +39,7 @@ class Httpd extends BaseClass implements BaseInterface
|
||||
$err = false;
|
||||
if (!$this->canConnect($err, $domain)) {
|
||||
$error[] = 'warning';
|
||||
$error[] = 'DNS server not running.<br/>You won\'t be able to work inside the PHP container.';
|
||||
$error[] = 'Cannot connect to '.$domain.'.<br/>DNS server not running?<br/>You won\'t be able to work inside the PHP container.';
|
||||
}
|
||||
|
||||
if (is_array($error) && count($error)) {
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
15
.github/workflows/ci-smoke-linux.yml
vendored
15
.github/workflows/ci-smoke-linux.yml
vendored
@ -44,6 +44,7 @@ jobs:
|
||||
- "7.4"
|
||||
- "8.0"
|
||||
- "8.1"
|
||||
- "8.2"
|
||||
httpd:
|
||||
- "apache-2.2"
|
||||
- "apache-2.4"
|
||||
@ -199,8 +200,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()
|
||||
|
||||
# ------------------------------------------------------------
|
||||
|
17
.github/workflows/documentation.yml
vendored
17
.github/workflows/documentation.yml
vendored
@ -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
|
||||
|
69
.github/workflows/lint.yml
vendored
69
.github/workflows/lint.yml
vendored
@ -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
|
||||
|
15
.github/workflows/test-config.yml
vendored
15
.github/workflows/test-config.yml
vendored
@ -44,6 +44,7 @@ jobs:
|
||||
- "7.4"
|
||||
- "8.0"
|
||||
- "8.1"
|
||||
- "8.2"
|
||||
httpd:
|
||||
- "apache-2.2"
|
||||
- "apache-2.4"
|
||||
@ -213,8 +214,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()
|
||||
|
||||
# ------------------------------------------------------------
|
||||
|
16
.github/workflows/test-versions.yml
vendored
16
.github/workflows/test-versions.yml
vendored
@ -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()
|
||||
|
||||
# ------------------------------------------------------------
|
||||
|
11
.gitignore
vendored
11
.gitignore
vendored
@ -44,6 +44,7 @@
|
||||
/log/php-fpm-7.4/*
|
||||
/log/php-fpm-8.0/*
|
||||
/log/php-fpm-8.1/*
|
||||
/log/php-fpm-8.2/*
|
||||
!/log/.keepme
|
||||
!/log/*/.keepme
|
||||
|
||||
@ -71,6 +72,8 @@
|
||||
/cfg/mariadb-10.3/*.cnf
|
||||
/cfg/mariadb-10.4/*.cnf
|
||||
/cfg/mariadb-10.5/*.cnf
|
||||
/cfg/mariadb-10.6/*.cnf
|
||||
/cfg/mariadb-10.7/*.cnf
|
||||
/cfg/percona-5.5/*.cnf
|
||||
/cfg/percona-5.6/*.cnf
|
||||
/cfg/percona-5.7/*.cnf
|
||||
@ -88,6 +91,8 @@
|
||||
/cfg/php-ini-7.3/*.ini
|
||||
/cfg/php-ini-7.4/*.ini
|
||||
/cfg/php-ini-8.0/*.ini
|
||||
/cfg/php-ini-8.1/*.ini
|
||||
/cfg/php-ini-8.2/*.ini
|
||||
|
||||
# Ignore custom PHP-FPM configs
|
||||
/cfg/php-fpm-5.2/php-fpm.xml
|
||||
@ -102,6 +107,7 @@
|
||||
/cfg/php-fpm-7.4/*.conf
|
||||
/cfg/php-fpm-8.0/*.conf
|
||||
/cfg/php-fpm-8.1/*.conf
|
||||
/cfg/php-fpm-8.2/*.conf
|
||||
|
||||
# Ignore custom PHP-FPM startup scripts
|
||||
/autostart/*.sh
|
||||
@ -117,6 +123,7 @@
|
||||
/cfg/php-startup-7.4/*.sh
|
||||
/cfg/php-startup-8.0/*.sh
|
||||
/cfg/php-startup-8.1/*.sh
|
||||
/cfg/php-startup-8.2/*.sh
|
||||
|
||||
# Ignorecustom Varnish configs
|
||||
/cfg/varnish-4/*.vcl
|
||||
@ -136,6 +143,10 @@
|
||||
/mod/php-fpm-7.4/*.so
|
||||
/mod/php-fpm-8.0/*.so
|
||||
/mod/php-fpm-8.1/*.so
|
||||
/mod/php-fpm-8.2/*.so
|
||||
|
||||
# Ignore supervisord configs
|
||||
/supervisor/*.conf
|
||||
|
||||
# Ignore custom bash and other confi files
|
||||
/bash/*
|
||||
|
@ -8,7 +8,7 @@ endif
|
||||
# -------------------------------------------------------------------------------------------------
|
||||
update-readme:
|
||||
cat "../README.md" \
|
||||
| perl -00 -pe "s#<!-- modules -->.*<!-- /modules -->#<!-- modules -->\n$$(./scripts/get-modules.sh)\n<!-- /modules -->#s" \
|
||||
| perl -0 -pe "s#<!-- modules -->.*<!-- /modules -->#<!-- modules -->\n$$(./scripts/get-modules.sh)\n<!-- /modules -->#s" \
|
||||
> "../README.md.tmp"
|
||||
yes | mv -f "../README.md.tmp" "../README.md"
|
||||
|
||||
@ -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"
|
||||
|
||||
|
||||
# -------------------------------------------------------------------------------------------------
|
||||
|
@ -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}"
|
||||
}
|
||||
|
@ -169,6 +169,18 @@ if ! PHP81_BASE="$( run "\
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! PHP82_BASE="$( run "\
|
||||
curl -sS 'https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md' \
|
||||
| tac \
|
||||
| tac \
|
||||
| grep -E '82-base' \
|
||||
| sed \
|
||||
-e 's/.*\">//g' \
|
||||
-e 's/<.*//g'" "${RETRIES}" )"; then
|
||||
>&2 echo "Failed to retrieve modules for PHP 8.2"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
###
|
||||
### Get PHP mods modules (5 rounds)
|
||||
###
|
||||
@ -317,27 +329,39 @@ if ! PHP81_MODS="$( run "\
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! PHP82_MODS="$( run "\
|
||||
curl -sS 'https://raw.githubusercontent.com/devilbox/docker-php-fpm/${PHP_TAG}/README.md' \
|
||||
| tac \
|
||||
| tac \
|
||||
| grep -E '82-mods' \
|
||||
| sed \
|
||||
-e 's/.*\">//g' \
|
||||
-e 's/<.*//g'" "${RETRIES}" )"; then
|
||||
>&2 echo "Failed to retrieve modules for PHP 8.2"
|
||||
exit 1
|
||||
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}, ${PHP82_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> | <sup>PHP 8.2</sup> |"
|
||||
echo "|-------------------------------|:-------:|:-------:|:-------:|:-------:|:-------:|:-------:|:-------:|:-------:|:-------:|:-------:|:-------:|:-------:|:-------:|"
|
||||
echo "${MODS}" | while read -r line; do
|
||||
# Print current module
|
||||
printf "| %-30s%s" "<small>${line}</small>" "|"
|
||||
printf "| %-30s%s" "<sup>${line}</sup>" "|"
|
||||
|
||||
# ---------- PHP 5.2 ----------#
|
||||
if echo ",${PHP52_MODS}," | sed 's/,\s/,/g' | grep -Eq ",${line},"; then
|
||||
@ -519,5 +543,20 @@ echo "${MODS}" | while read -r line; do
|
||||
printf " %s |" "${U}" # Not available
|
||||
fi
|
||||
|
||||
# ---------- PHP 8.2 ----------#
|
||||
if echo ",${PHP82_MODS}," | sed 's/,\s/,/g' | grep -Eq ",${line},"; then
|
||||
if echo "${DISABLED}" | grep -Eq ",${line},"; then
|
||||
printf " %s |" "${D}" # Currently disabled
|
||||
else
|
||||
if echo ",${PHP82_BASE}," | sed 's/,\s/,/g' | grep -Eq ",${line},"; then
|
||||
printf " %s |" "${B}" # Enabled, but cannot be disabled
|
||||
else
|
||||
printf " %s |" "${E}" # Enabled, can be disabled
|
||||
fi
|
||||
fi
|
||||
else
|
||||
printf " %s |" "${U}" # Not available
|
||||
fi
|
||||
|
||||
printf "\\n"
|
||||
done
|
||||
|
@ -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
|
||||
|
@ -13,12 +13,22 @@ DVLBOX_PATH="$( cd "${SCRIPT_PATH}/../.." && pwd -P )"
|
||||
. "${SCRIPT_PATH}/../scripts/.lib.sh"
|
||||
|
||||
RETRIES=10
|
||||
DISABLED_VERSIONS=("5.2" "5.3" "5.4" "5.5" "8.0" "8.1")
|
||||
DISABLED_VERSIONS=("5.2" "5.3" "5.4" "5.5" "8.0" "8.1" "8.2")
|
||||
|
||||
PHP_VERSION="$( get_php_version "${DVLBOX_PATH}" )"
|
||||
|
||||
###
|
||||
### What CakePHP Version?
|
||||
###
|
||||
CAKE_PHP_VERSION=3.8
|
||||
#if [ "${PHP_VERSION}" = "8.0" ] || [ "${PHP_VERSION}" = "8.1" ]; then
|
||||
# CAKE_PHP_VERSION=
|
||||
#fi
|
||||
|
||||
|
||||
echo
|
||||
echo "# --------------------------------------------------------------------------------------------------"
|
||||
echo "# [Framework] CakePHP 3.8.0"
|
||||
echo "# [Framework] CakePHP ${CAKE_PHP_VERSION}"
|
||||
echo "# --------------------------------------------------------------------------------------------------"
|
||||
echo
|
||||
|
||||
@ -27,13 +37,13 @@ echo
|
||||
# Pre-check
|
||||
# -------------------------------------------------------------------------------------------------
|
||||
|
||||
PHP_VERSION="$( get_php_version "${DVLBOX_PATH}" )"
|
||||
if [[ ${DISABLED_VERSIONS[*]} =~ ${PHP_VERSION} ]]; then
|
||||
printf "[SKIP] Skipping all checks for PHP %s\\n" "${PHP_VERSION}"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
|
||||
|
||||
# -------------------------------------------------------------------------------------------------
|
||||
# ENTRYPOINT
|
||||
# -------------------------------------------------------------------------------------------------
|
||||
@ -43,42 +53,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 ${CAKE_PHP_VERSION}'" "${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
|
||||
|
@ -13,7 +13,7 @@ DVLBOX_PATH="$( cd "${SCRIPT_PATH}/../.." && pwd -P )"
|
||||
. "${SCRIPT_PATH}/../scripts/.lib.sh"
|
||||
|
||||
RETRIES=10
|
||||
DISABLED_VERSIONS=("5.3" "5.4" "5.5" "5.6" "8.0" "8.1")
|
||||
DISABLED_VERSIONS=("5.3" "5.4" "5.5" "5.6" "8.0" "8.1" "8.2")
|
||||
DISABLED_MYSQL_VERSIONS=("mysql-8.0" "percona-8.0")
|
||||
|
||||
|
||||
@ -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
|
||||
|
@ -12,8 +12,8 @@ DVLBOX_PATH="$( cd "${SCRIPT_PATH}/../.." && pwd -P )"
|
||||
# shellcheck disable=SC1090
|
||||
. "${SCRIPT_PATH}/../scripts/.lib.sh"
|
||||
|
||||
RETRIES=10
|
||||
DISABLED_VERSIONS=("8.0" "8.1")
|
||||
RETRIES=20
|
||||
DISABLED_VERSIONS=("8.0" "8.1" "8.2")
|
||||
|
||||
|
||||
echo
|
||||
@ -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
|
||||
|
||||
|
@ -66,7 +66,7 @@ MY_MESS="testing-ci-message"
|
||||
run "docker-compose exec --user devilbox -T php bash -c '> /var/mail/devilbox'" "${RETRIES}" "${DVLBOX_PATH}"
|
||||
|
||||
# Send a new mail
|
||||
run "curl -sS --fail -XPOST 'http://localhost:${HOST_PORT_HTTPD}/mail.php?email=${MY_MAIL}&subject=${MY_SUBJ}&message=${MY_MESS}'" "${RETRIES}"
|
||||
run "curl -sS --fail -XPOST 'http://localhost:${HOST_PORT_HTTPD}/mail.php' -d 'email=${MY_MAIL}&subject=${MY_SUBJ}&message=${MY_MESS}'" "${RETRIES}"
|
||||
|
||||
# Validate
|
||||
run "curl -sS --fail 'http://localhost:${HOST_PORT_HTTPD}/mail.php' | tac | tac | grep '${MY_MAIL}' >/dev/null" "${RETRIES}"
|
||||
|
399
.travis.yml
399
.travis.yml
@ -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
|
201
CHANGELOG.md
201
CHANGELOG.md
@ -1,12 +1,209 @@
|
||||
# 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.5 (2022-03-16)
|
||||
|
||||
#### Changed
|
||||
- Updated Bind [#36](https://github.com/cytopia/docker-bind/pull/36)
|
||||
- Updated MySQL
|
||||
|
||||
|
||||
## Release v1.10.4 (2022-02-15)
|
||||
|
||||
#### Fixed
|
||||
- Fixed SSL-Cache Mutex on M1 CPU [#862](https://github.com/cytopia/devilbox/issues/862)
|
||||
|
||||
#### Changed
|
||||
- Changed Intranet mail tester to using POST instead of GET for larger body size
|
||||
- Made vhost error message more verbose
|
||||
- Updated Nginx Stable [#36](https://github.com/devilbox/docker-nginx-stable/pull/36)
|
||||
- Updated Nginx Mainline [#39](https://github.com/devilbox/docker-nginx-mainline/pull/39)
|
||||
- Updated Apache 2.2 [#33](https://github.com/devilbox/docker-apache-2.2/pull/33)
|
||||
- Updated Apache 2.4 [#35](https://github.com/devilbox/docker-apache-2.4/pull/35)
|
||||
|
||||
|
||||
## Release v1.10.3 (2022-02-04)
|
||||
|
||||
#### Added
|
||||
- Added PHP 8.2
|
||||
|
||||
#### Changed
|
||||
- Updated PHP-FPM images [#225](https://github.com/devilbox/docker-php-fpm/pull/225)
|
||||
- Updated PHP-FPM images [#226](https://github.com/devilbox/docker-php-fpm/pull/226)
|
||||
|
||||
|
||||
## Release v1.10.2 (2022-02-02)
|
||||
|
||||
#### Fixed
|
||||
- Fixed `nvm` PATH priority [#846](https://github.com/cytopia/devilbox/issues/846)
|
||||
|
||||
#### Added
|
||||
- Added extension `sqlsrv` to php 8.1
|
||||
- Added extension `pdo_sqlsrv` to php 8.1
|
||||
|
||||
#### Changed
|
||||
- Changed postfix hostname to `localhost` instead of GitHub runners long name
|
||||
- Updated PHP-FPM images [#224](https://github.com/devilbox/docker-php-fpm/pull/224)
|
||||
|
||||
|
||||
## Release v1.10.1 (2022-01-30)
|
||||
|
||||
#### Fixed
|
||||
- Fixed evaluation of `MASS_VHOST_SSL_GEN` env var [#830](https://github.com/cytopia/devilbox/issues/830)
|
||||
|
||||
#### Added
|
||||
- Added feature to delete emails from within control center [#754](https://github.com/cytopia/devilbox/issues/754)
|
||||
|
||||
#### Changed
|
||||
- Updated Nginx Stable [#35](https://github.com/devilbox/docker-nginx-stable/pull/35)
|
||||
- Updated Nginx Mainline [#38](https://github.com/devilbox/docker-nginx-mainline/pull/38)
|
||||
- Updated Apache 2.2 [#32](https://github.com/devilbox/docker-apache-2.2/pull/32)
|
||||
- Updated Apache 2.4 [#34](https://github.com/devilbox/docker-apache-2.4/pull/34)
|
||||
|
||||
|
||||
## 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
|
||||
- [#643](https://github.com/cytopia/devilbox/issues/643) Wrong entrypoint in mysql images
|
||||
- [#703](https://github.com/cytopia/devilbox/issues/703) Don't fail on uid/gid change
|
||||
- [#749](https://github.com/cytopia/devilbox/issues/749) Fix to disable PHP modules without `*.so` ext
|
||||
- Fixed `check-config.sh` to properly expand `~` character in path
|
||||
|
||||
#### Added
|
||||
- [#707](https://github.com/cytopia/devilbox/issues/707) New `.env` variable: `HOST_PATH_BACKUPDIR`
|
||||
|
||||
#### Changed
|
||||
- [#547](https://github.com/cytopia/devilbox/issues/547) Added link to official Contao Devilbox Documentation
|
||||
|
||||
|
||||
## Release v1.8.1 (2020-11-12)
|
||||
|
||||
#### Fixed
|
||||
|
240
README.md
240
README.md
@ -22,7 +22,6 @@
|
||||
[](https://www.docker.com/)
|
||||
[](https://opensource.org/licenses/MIT)
|
||||
|
||||
[](https://travis-ci.org/cytopia/devilbox)
|
||||
[](https://devilbox.readthedocs.io)
|
||||
[](https://github.com/cytopia/devilbox/actions?workflow=Lint)
|
||||
[](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>
|
||||
@ -369,12 +368,24 @@ Every single attachable container comes with many different versions. In order t
|
||||
<td></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td></td>
|
||||
<td></td>
|
||||
<td><a target="_blank" title="PHP 8.2" href="https://github.com/devilbox/docker-php-fpm">8.2</a></a><sup>[2]</sup></td>
|
||||
<td></td>
|
||||
<td></td>
|
||||
<td></td>
|
||||
<td></td>
|
||||
<td></td>
|
||||
<td></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<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.2</strong> is an upcoming unreleased versions of PHP, which is 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 +518,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 +642,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,111 +731,112 @@ 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> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | | |
|
||||
| <small>apc</small> | | 🗸 | 🗸 | 🗸 | 🗸 | | | | | | | |
|
||||
| <small>apcu</small> | | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | | |
|
||||
| <small>bcmath</small> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
|
||||
| <small>blackfire</small> | | | | | d | d | d | d | d | d | | |
|
||||
| <small>bz2</small> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
|
||||
| <small>calendar</small> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
|
||||
| <small>Core</small> | | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
|
||||
| <small>ctype</small> | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
|
||||
| <small>curl</small> | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
|
||||
| <small>date</small> | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
|
||||
| <small>dba</small> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
|
||||
| <small>dom</small> | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
|
||||
| <small>enchant</small> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
|
||||
| <small>ereg</small> | | ✔ | ✔ | ✔ | ✔ | | | | | | | |
|
||||
| <small>exif</small> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
|
||||
| <small>FFI</small> | | | | | | | | | | 🗸 | ✔ | ✔ |
|
||||
| <small>fileinfo</small> | 🗸 | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
|
||||
| <small>filter</small> | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
|
||||
| <small>ftp</small> | 🗸 | 🗸 | 🗸 | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
|
||||
| <small>gd</small> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
|
||||
| <small>gettext</small> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
|
||||
| <small>gmp</small> | | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
|
||||
| <small>hash</small> | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
|
||||
| <small>iconv</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>json</small> | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
|
||||
| <small>ldap</small> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
|
||||
| <small>libxml</small> | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
|
||||
| <small>mbstring</small> | ✔ | 🗸 | 🗸 | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
|
||||
| <small>mcrypt</small> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | | |
|
||||
| <small>memcache</small> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | | |
|
||||
| <small>memcached</small> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
|
||||
| <small>mhash</small> | | | | | ✔ | | | | | | | |
|
||||
| <small>mongo</small> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | | | | | | | |
|
||||
| <small>mongodb</small> | | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
|
||||
| <small>msgpack</small> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | | |
|
||||
| <small>mysql</small> | ✔ | ✔ | 🗸 | 🗸 | 🗸 | | | | | | | |
|
||||
| <small>mysqli</small> | ✔ | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
|
||||
| <small>mysqlnd</small> | | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
|
||||
| <small>OAuth</small> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | | |
|
||||
| <small>oci8</small> | | d | d | d | d | d | d | d | d | d | d | d |
|
||||
| <small>openssl</small> | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
|
||||
| <small>pcntl</small> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
|
||||
| <small>pcre</small> | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
|
||||
| <small>PDO</small> | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
|
||||
| <small>pdo_dblib</small> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
|
||||
| <small>PDO_Firebird</small> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
|
||||
| <small>pdo_mysql</small> | ✔ | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
|
||||
| <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>pgsql</small> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
|
||||
| <small>phalcon</small> | | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | | |
|
||||
| <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>readline</small> | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
|
||||
| <small>recode</small> | 🗸 | ✔ | ✔ | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | | | |
|
||||
| <small>redis</small> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
|
||||
| <small>Reflection</small> | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
|
||||
| <small>session</small> | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
|
||||
| <small>shmop</small> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
|
||||
| <small>SimpleXML</small> | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
|
||||
| <small>snmp</small> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
|
||||
| <small>soap</small> | ✔ | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
|
||||
| <small>sockets</small> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
|
||||
| <small>sodium</small> | | | | | | | | ✔ | ✔ | ✔ | ✔ | ✔ |
|
||||
| <small>solr</small> | | | | | | | 🗸 | 🗸 | 🗸 | 🗸 | | |
|
||||
| <small>SPL</small> | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
|
||||
| <small>SQLite</small> | ✔ | ✔ | | | | | | | | | | |
|
||||
| <small>sqlite3</small> | | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
|
||||
| <small>sqlsrv</small> | | | | | | d | d | d | d | | | |
|
||||
| <small>ssh2</small> | | | | | | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | | |
|
||||
| <small>standard</small> | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
|
||||
| <small>swoole</small> | | 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>vips</small> | | | | | | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | | |
|
||||
| <small>wddx</small> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | | | |
|
||||
| <small>xdebug</small> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
|
||||
| <small>xlswriter</small> | | | | | | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | | |
|
||||
| <small>xml</small> | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
|
||||
| <small>xmlreader</small> | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
|
||||
| <small>xmlrpc</small> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | | |
|
||||
| <small>xmlwriter</small> | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
|
||||
| <small>xsl</small> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
|
||||
| <small>yaml</small> | | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | | |
|
||||
| <small>Zend OPcache</small> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
|
||||
| <small>zip</small> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
|
||||
| <small>zlib</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> | <sup>PHP 8.2</sup> |
|
||||
|-------------------------------|:-------:|:-------:|:-------:|:-------:|:-------:|:-------:|:-------:|:-------:|:-------:|:-------:|:-------:|:-------:|:-------:|
|
||||
| <sup>amqp</sup> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
|
||||
| <sup>apc</sup> | | 🗸 | 🗸 | 🗸 | 🗸 | | | | | | | | |
|
||||
| <sup>apcu</sup> | | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
|
||||
| <sup>bcmath</sup> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
|
||||
| <sup>blackfire</sup> | | | | | d | d | d | d | d | d | d | | |
|
||||
| <sup>bz2</sup> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
|
||||
| <sup>calendar</sup> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
|
||||
| <sup>Core</sup> | | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
|
||||
| <sup>ctype</sup> | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
|
||||
| <sup>curl</sup> | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
|
||||
| <sup>date</sup> | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
|
||||
| <sup>dba</sup> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
|
||||
| <sup>dom</sup> | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
|
||||
| <sup>enchant</sup> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | | | 🗸 | 🗸 | 🗸 |
|
||||
| <sup>ereg</sup> | | ✔ | ✔ | ✔ | ✔ | | | | | | | | |
|
||||
| <sup>exif</sup> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
|
||||
| <sup>FFI</sup> | | | | | | | | | | 🗸 | ✔ | ✔ | ✔ |
|
||||
| <sup>fileinfo</sup> | 🗸 | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
|
||||
| <sup>filter</sup> | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
|
||||
| <sup>ftp</sup> | 🗸 | 🗸 | 🗸 | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
|
||||
| <sup>gd</sup> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
|
||||
| <sup>gettext</sup> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
|
||||
| <sup>gmp</sup> | | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
|
||||
| <sup>hash</sup> | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
|
||||
| <sup>iconv</sup> | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
|
||||
| <sup>igbinary</sup> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
|
||||
| <sup>imagick</sup> | | | | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
|
||||
| <sup>imap</sup> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
|
||||
| <sup>interbase</sup> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | | | | |
|
||||
| <sup>intl</sup> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
|
||||
| <sup>ioncube</sup> | d | d | d | d | d | d | d | d | d | d | | | |
|
||||
| <sup>json</sup> | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
|
||||
| <sup>ldap</sup> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
|
||||
| <sup>libxml</sup> | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
|
||||
| <sup>mbstring</sup> | ✔ | 🗸 | 🗸 | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
|
||||
| <sup>mcrypt</sup> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | | |
|
||||
| <sup>memcache</sup> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
|
||||
| <sup>memcached</sup> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
|
||||
| <sup>mhash</sup> | | | | | ✔ | | | | | | | | |
|
||||
| <sup>mongo</sup> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | | | | | | | | |
|
||||
| <sup>mongodb</sup> | | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
|
||||
| <sup>msgpack</sup> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
|
||||
| <sup>mysql</sup> | ✔ | ✔ | 🗸 | 🗸 | 🗸 | | | | | | | | |
|
||||
| <sup>mysqli</sup> | ✔ | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
|
||||
| <sup>mysqlnd</sup> | | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
|
||||
| <sup>OAuth</sup> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
|
||||
| <sup>oci8</sup> | | d | d | d | d | d | d | d | d | d | d | d | d |
|
||||
| <sup>openssl</sup> | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
|
||||
| <sup>pcntl</sup> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
|
||||
| <sup>pcre</sup> | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
|
||||
| <sup>PDO</sup> | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
|
||||
| <sup>pdo_dblib</sup> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
|
||||
| <sup>PDO_Firebird</sup> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
|
||||
| <sup>pdo_mysql</sup> | ✔ | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
|
||||
| <sup>PDO_OCI</sup> | | | | | | d | d | d | d | d | d | d | d |
|
||||
| <sup>pdo_pgsql</sup> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
|
||||
| <sup>pdo_sqlite</sup> | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
|
||||
| <sup>pdo_sqlsrv</sup> | | | | | | d | d | d | d | d | d | d | d |
|
||||
| <sup>pgsql</sup> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
|
||||
| <sup>phalcon</sup> | | d | d | d | d | d | d | d | d | d | | | |
|
||||
| <sup>Phar</sup> | 🗸 | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
|
||||
| <sup>posix</sup> | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
|
||||
| <sup>pspell</sup> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
|
||||
| <sup>psr</sup> | | | d | d | d | d | d | d | d | d | d | d | d |
|
||||
| <sup>rdkafka</sup> | | d | d | d | d | d | d | d | d | d | d | d | d |
|
||||
| <sup>readline</sup> | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
|
||||
| <sup>recode</sup> | 🗸 | ✔ | ✔ | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | | | | |
|
||||
| <sup>redis</sup> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
|
||||
| <sup>Reflection</sup> | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
|
||||
| <sup>session</sup> | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
|
||||
| <sup>shmop</sup> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
|
||||
| <sup>SimpleXML</sup> | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
|
||||
| <sup>snmp</sup> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
|
||||
| <sup>soap</sup> | ✔ | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
|
||||
| <sup>sockets</sup> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
|
||||
| <sup>sodium</sup> | | | | | | | | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
|
||||
| <sup>solr</sup> | | | | | | | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | |
|
||||
| <sup>SPL</sup> | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
|
||||
| <sup>SQLite</sup> | ✔ | ✔ | | | | | | | | | | | |
|
||||
| <sup>sqlite3</sup> | | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
|
||||
| <sup>sqlsrv</sup> | | | | | | d | d | d | d | d | d | d | d |
|
||||
| <sup>ssh2</sup> | | | | | | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | | | |
|
||||
| <sup>standard</sup> | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
|
||||
| <sup>swoole</sup> | | d | d | d | d | d | d | d | d | d | d | | |
|
||||
| <sup>sysvmsg</sup> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
|
||||
| <sup>sysvsem</sup> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
|
||||
| <sup>sysvshm</sup> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
|
||||
| <sup>tidy</sup> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
|
||||
| <sup>tokenizer</sup> | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
|
||||
| <sup>uploadprogress</sup> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
|
||||
| <sup>uuid</sup> | | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
|
||||
| <sup>vips</sup> | | | | | | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | | | |
|
||||
| <sup>wddx</sup> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | | | | |
|
||||
| <sup>xdebug</sup> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
|
||||
| <sup>xlswriter</sup> | | | | | | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
|
||||
| <sup>xml</sup> | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
|
||||
| <sup>xmlreader</sup> | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
|
||||
| <sup>xmlrpc</sup> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | | | |
|
||||
| <sup>xmlwriter</sup> | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
|
||||
| <sup>xsl</sup> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
|
||||
| <sup>yaml</sup> | | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
|
||||
| <sup>Zend OPcache</sup> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
|
||||
| <sup>zip</sup> | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 | 🗸 |
|
||||
| <sup>zlib</sup> | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
|
||||
<!-- /modules -->
|
||||
|
||||
> * Core enabled (cannot be disabled): **✔**
|
||||
|
25
UPDATING.md
25
UPDATING.md
@ -3,6 +3,31 @@
|
||||
This document will hold all information on how to update between major versions.
|
||||
|
||||
|
||||
## Update from `v1.8.1` to `v1.8.2`
|
||||
|
||||
**PR:** https://github.com/cytopia/devilbox/pull/750
|
||||
|
||||
This PR adds many new images, ensure to remove your current old state before running them:
|
||||
```bash
|
||||
docker-compose stop
|
||||
docker-compose rm -f
|
||||
```
|
||||
|
||||
|
||||
## Update from `v1.8.0` to `v1.8.1`
|
||||
|
||||
**PR:** https://github.com/cytopia/devilbox/pull/747
|
||||
|
||||
This PR ensures to have all directories in log/ mod/ cfg/ added by default. Prior this, some
|
||||
of those directories might have been created by Docker (running as root) and they have the wrong
|
||||
permissions (root instead of local user).
|
||||
To mitigate this, you need to adjust directory permissions prior pulling this tag.
|
||||
|
||||
```bash
|
||||
sudo chown -R <user>:<group> .
|
||||
```
|
||||
|
||||
|
||||
## Update from `v1.6.2` to `v1.6.3`
|
||||
|
||||
**PR:** https://github.com/cytopia/devilbox/pull/689
|
||||
|
0
cfg/mariadb-10.6/.keepme
Normal file
0
cfg/mariadb-10.6/.keepme
Normal file
5
cfg/mariadb-10.6/devilbox-custom.cnf-example
Normal file
5
cfg/mariadb-10.6/devilbox-custom.cnf-example
Normal file
@ -0,0 +1,5 @@
|
||||
[mysqld]
|
||||
;key_buffer_size=16M
|
||||
|
||||
[mysqldump]
|
||||
;quick
|
0
cfg/mariadb-10.7/.keepme
Normal file
0
cfg/mariadb-10.7/.keepme
Normal file
5
cfg/mariadb-10.7/devilbox-custom.cnf-example
Normal file
5
cfg/mariadb-10.7/devilbox-custom.cnf-example
Normal file
@ -0,0 +1,5 @@
|
||||
[mysqld]
|
||||
;key_buffer_size=16M
|
||||
|
||||
[mysqldump]
|
||||
;quick
|
0
cfg/php-fpm-8.2/.keepme
Normal file
0
cfg/php-fpm-8.2/.keepme
Normal file
54
cfg/php-fpm-8.2/README.md
Normal file
54
cfg/php-fpm-8.2/README.md
Normal file
@ -0,0 +1,54 @@
|
||||
# PHP-FPM config directory
|
||||
|
||||
## General
|
||||
|
||||
* Add you custom php-fpm.conf files into this directory.
|
||||
* Only files ending by `.conf` will be enabled
|
||||
* Only files ending by `.conf` are ignored by git
|
||||
|
||||
|
||||
## Example files
|
||||
|
||||
This directory also holds three example files:
|
||||
|
||||
| File | Description |
|
||||
|---------------------------------|---------------------------------------------|
|
||||
| `devilbox-fpm.conf-default` | Represents current PHP-FPM default settings |
|
||||
| `devilbox-fpm.conf-pm_dynamic` | Example settings for dynamic workers |
|
||||
| `devilbox-fpm.conf-pm_ondemand` | Example settings for ondemand workers |
|
||||
|
||||
* Do not edit these example files!
|
||||
* Copy them to a new file (in case you want to use them)
|
||||
|
||||
|
||||
## Worker configuration
|
||||
|
||||
When changing worker processes or scheduler, the following commands will come in handy
|
||||
to monitor number of processes and memory consumption.
|
||||
|
||||
```bash
|
||||
# Show current PHP-FPM child memory consumption in MB
|
||||
ps -ylC php-fpm --sort:rss | awk '!/RSS/ { s+=$8 } END { printf "%dM\n", s/1024 }'
|
||||
|
||||
# (repeatedly) show current PHP-FPM child memory consumption in MB
|
||||
watch --interval=1 "ps -ylC php-fpm --sort:rss | awk '"'!'"/RSS/ { s+=\$8 } END { printf \"%dM\n\", s/1024 }'"
|
||||
|
||||
# (repeatedly) Current number of PHP-FPM childs
|
||||
watch --interval=1 "ps auxw | grep -E 'php-(cgi|fpm)' | grep -vE 'grep|master' | wc -l"
|
||||
```
|
||||
|
||||
|
||||
## Overwriting
|
||||
|
||||
If multiple `.conf` files are present in this directory specifying different values for the
|
||||
same settings, the last file (alphabetically by filename) will overwrite any previous values.
|
||||
|
||||
|
||||
## Compatibility
|
||||
|
||||
**Note:**
|
||||
|
||||
PHP-FPM 5.2 uses XML-style configuration and does not allow includes.
|
||||
If you want to change php-fpm.conf for PHP-FPM 5.2 you need to adjust the main configuration file.
|
||||
|
||||
See `php-fpm-5.2/` directory.
|
80
cfg/php-fpm-8.2/devilbox-fpm.conf-default
Normal file
80
cfg/php-fpm-8.2/devilbox-fpm.conf-default
Normal file
@ -0,0 +1,80 @@
|
||||
; ############################################################
|
||||
; Devilbox php-fpm.conf: Current default settings
|
||||
; ############################################################
|
||||
;
|
||||
; Information
|
||||
; -----------
|
||||
; * Do not edit this file (it belongs to git)
|
||||
; * This file shows example settings that are currently effective
|
||||
; * If this file is enabled, nothing will change as it reflects the current default settings
|
||||
;
|
||||
; How to enable?
|
||||
; --------------
|
||||
; * Copy this file to another file with ".conf" extension
|
||||
; * Only files with ".conf" extensions will be applied by PHP-FPM
|
||||
|
||||
|
||||
; ###
|
||||
; ### PHP-FPM global settings
|
||||
; ###
|
||||
;
|
||||
[global]
|
||||
|
||||
; Error log level. Possible values: alert, error, warning, notice, debug. Default value: notice.
|
||||
log_level = notice
|
||||
|
||||
|
||||
|
||||
; ###
|
||||
; ### Pool configuratoin
|
||||
; ###
|
||||
|
||||
[www]
|
||||
|
||||
; The timeout for serving a single request after which the worker process will be killed.
|
||||
; This option should be used when the 'max_execution_time' ini option does not stop script
|
||||
; execution for some reason.
|
||||
request_terminate_timeout = 120s
|
||||
|
||||
|
||||
; A maximum of backlog incoming connections will be queued for processing.
|
||||
; If a connection request arrives with the queue full the client may receive an error with an
|
||||
; indication of ECONNREFUSED, or, if the underlying protocol supports retransmission,
|
||||
; the request may be ignored so that retries may succeed.
|
||||
; This should not be greater than `cat /proc/sys/net/core/somaxconn`, otherwise connections
|
||||
; are silently truncated
|
||||
listen.backlog = 1024
|
||||
|
||||
|
||||
; static - the number of child processes is fixed (pm.max_children).
|
||||
;
|
||||
; dynamic - the number of child processes is set dynamically based on the following directives:
|
||||
; pm.max_children, pm.start_servers, pm.min_spare_servers, pm.max_spare_servers.
|
||||
;
|
||||
; ondemand - the processes spawn on demand (when requested, as opposed to dynamic, where
|
||||
; pm.start_servers are started when the service is started.
|
||||
pm = ondemand
|
||||
|
||||
; The maximum number of child processes to be created
|
||||
pm.max_children = 50
|
||||
|
||||
; The number of child processes created on startup. Used only when pm is set to dynamic.
|
||||
; Default Value: min_spare_servers + (max_spare_servers - min_spare_servers) / 2.
|
||||
pm.start_servers = 4
|
||||
|
||||
; The desired minimum number of idle server processes.
|
||||
pm.min_spare_servers = 2
|
||||
|
||||
; The desired maximum number of idle server processes.
|
||||
pm.max_spare_servers = 6
|
||||
|
||||
; The number of requests each child process should execute before respawning.
|
||||
; This can be useful to work around memory leaks in 3rd party libraries.
|
||||
; For endless request processing specify '0'. Equivalent to PHP_FCGI_MAX_REQUESTS.
|
||||
; Default value: 0.
|
||||
pm.max_requests = 500
|
||||
|
||||
; The number of seconds after which an idle process will be killed. Used only when pm is set to ondemand
|
||||
pm.process_idle_timeout = 10s
|
||||
|
||||
; vim: set ft=dosini:
|
46
cfg/php-fpm-8.2/devilbox-fpm.conf-pm_dynamic
Normal file
46
cfg/php-fpm-8.2/devilbox-fpm.conf-pm_dynamic
Normal file
@ -0,0 +1,46 @@
|
||||
; ############################################################
|
||||
; # Devilbox php-fpm.conf: dynamic example
|
||||
; ############################################################
|
||||
;
|
||||
; Information
|
||||
; -----------
|
||||
; * Do not edit this file (it belongs to git)
|
||||
; * This file show a possible dynamic example configuration
|
||||
; * If this file is enabled, it will overwrite the current worker settings
|
||||
;
|
||||
; How to enable?
|
||||
; --------------
|
||||
; * Copy this file to another file with ".conf" extension
|
||||
; * Only files with ".conf" extensions will be applied by PHP-FPM
|
||||
|
||||
|
||||
; ###
|
||||
; ### Pool configuratoin
|
||||
; ###
|
||||
|
||||
[www]
|
||||
|
||||
; dynamic - the number of child processes is set dynamically based on the following directives:
|
||||
pm = dynamic
|
||||
|
||||
; The maximum number of child processes to be created
|
||||
pm.max_children = 50
|
||||
|
||||
; The number of child processes created on startup. Used only when pm is set to dynamic.
|
||||
; Default Value: min_spare_servers + (max_spare_servers - min_spare_servers) / 2.
|
||||
pm.start_servers = 4
|
||||
|
||||
; The desired minimum number of idle server processes.
|
||||
pm.min_spare_servers = 2
|
||||
|
||||
; The desired maximum number of idle server processes.
|
||||
pm.max_spare_servers = 6
|
||||
|
||||
; The number of requests each child process should execute before respawning.
|
||||
; This can be useful to work around memory leaks in 3rd party libraries.
|
||||
; For endless request processing specify '0'. Equivalent to PHP_FCGI_MAX_REQUESTS.
|
||||
; Default value: 0.
|
||||
pm.max_requests = 500
|
||||
|
||||
|
||||
; vim: set ft=dosini:
|
39
cfg/php-fpm-8.2/devilbox-fpm.conf-pm_ondemand
Normal file
39
cfg/php-fpm-8.2/devilbox-fpm.conf-pm_ondemand
Normal file
@ -0,0 +1,39 @@
|
||||
; ############################################################
|
||||
; # Devilbox php-fpm.conf: ondemand example
|
||||
; ############################################################
|
||||
;
|
||||
; Information
|
||||
; -----------
|
||||
; * Do not edit this file (it belongs to git)
|
||||
; * This file show a possible ondemand example configuration
|
||||
; * If this file is enabled, it will overwrite the current worker settings
|
||||
;
|
||||
; How to enable?
|
||||
; --------------
|
||||
; * Copy this file to another file with ".conf" extension
|
||||
; * Only files with ".conf" extensions will be applied by PHP-FPM
|
||||
|
||||
|
||||
; ###
|
||||
; ### Pool configuratoin
|
||||
; ###
|
||||
|
||||
[www]
|
||||
|
||||
; ondemand - the processes spawn on demand (when requested, as opposed to dynamic, where
|
||||
; pm.start_servers are started when the service is started.
|
||||
pm = ondemand
|
||||
|
||||
; The maximum number of child processes to be created
|
||||
pm.max_children = 50
|
||||
|
||||
; The number of requests each child process should execute before respawning.
|
||||
; This can be useful to work around memory leaks in 3rd party libraries.
|
||||
; For endless request processing specify '0'. Equivalent to PHP_FCGI_MAX_REQUESTS.
|
||||
; Default value: 0.
|
||||
pm.max_requests = 500
|
||||
|
||||
; The number of seconds after which an idle process will be killed.
|
||||
pm.process_idle_timeout = 10s
|
||||
|
||||
; vim: set ft=dosini:
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
0
cfg/php-ini-8.2/.keepme
Normal file
0
cfg/php-ini-8.2/.keepme
Normal file
26
cfg/php-ini-8.2/README.md
Normal file
26
cfg/php-ini-8.2/README.md
Normal file
@ -0,0 +1,26 @@
|
||||
# PHP ini directory
|
||||
|
||||
## General
|
||||
|
||||
* Add you custom php.ini files into this directory.
|
||||
* Only files ending by `.ini` will be enabled
|
||||
* Only files ending by `.ini` are ignored by git
|
||||
|
||||
|
||||
## Example files
|
||||
|
||||
This directory also holds two example files:
|
||||
|
||||
| File | Description |
|
||||
|----------------------------|-----------------------------------------|
|
||||
| `devilbox-php.ini-default` | Represents current PHP default settings |
|
||||
| `devilbox-php.ini-xdebug ` | Example settings for Xdebug |
|
||||
|
||||
* Do not edit these example files!
|
||||
* Copy them to a new file (in case you want to use them)
|
||||
|
||||
|
||||
## Overwriting
|
||||
|
||||
If multiple `.ini` files are present in this directory specifying different values for the
|
||||
same settings, the last file (alphabetically by filename) will overwrite any previous values.
|
63
cfg/php-ini-8.2/devilbox-php.ini-default
Normal file
63
cfg/php-ini-8.2/devilbox-php.ini-default
Normal file
@ -0,0 +1,63 @@
|
||||
; ############################################################
|
||||
; # Devilbox php.ini: Current default settings
|
||||
; ############################################################
|
||||
;
|
||||
; Information
|
||||
; -----------
|
||||
; * Do not edit this file (it belongs to git)
|
||||
; * This file shows example settings that are currently effective
|
||||
; * If this file is enabled, nothing will change as it reflects the current default settings
|
||||
;
|
||||
; How to enable?
|
||||
; --------------
|
||||
; * Copy this file to another file with ".ini" extension
|
||||
; * Only files with ".ini" extensions will be applied by PHP
|
||||
|
||||
|
||||
|
||||
;
|
||||
; PHP.ini configuration
|
||||
;
|
||||
[PHP]
|
||||
|
||||
; Memory
|
||||
; Note: "memory_limit" should be larger than "post_max_size"
|
||||
memory_limit = 512M
|
||||
|
||||
|
||||
; Timeouts
|
||||
max_execution_time = 120
|
||||
max_input_time = 120
|
||||
|
||||
|
||||
; Uploads
|
||||
; Note: "post_max_size" should be greater than "upload_max_filesize"
|
||||
post_max_size = 72M
|
||||
upload_max_filesize = 64M
|
||||
max_file_uploads = 20
|
||||
|
||||
|
||||
; Vars
|
||||
variables_order = EGPCS
|
||||
max_input_vars = 8000
|
||||
max_input_nesting_level = 64
|
||||
|
||||
|
||||
; Error reporting
|
||||
; Note: error_log is dynamic and handled during start to set appropriate setting
|
||||
error_reporting = E_ALL | E_NOTICE | E_STRICT | E_DEPRECATED
|
||||
xmlrpc_errors = Off
|
||||
report_memleaks = On
|
||||
display_errors = On
|
||||
display_startup_errors = On
|
||||
log_errors = On
|
||||
html_errors = On
|
||||
|
||||
|
||||
; Xdebug settings
|
||||
xdebug.default_enable = Off
|
||||
xdebug.profiler_enable = Off
|
||||
xdebug.remote_enable = Off
|
||||
xdebug.remote_autostart = Off
|
||||
|
||||
; vim: set ft=dosini:
|
35
cfg/php-ini-8.2/devilbox-php.ini-xdebug
Normal file
35
cfg/php-ini-8.2/devilbox-php.ini-xdebug
Normal file
@ -0,0 +1,35 @@
|
||||
; ############################################################
|
||||
; # Devilbox php.ini: Xdebug example
|
||||
; ############################################################
|
||||
;
|
||||
; Information
|
||||
; -----------
|
||||
; * Do not edit this file (it belongs to git)
|
||||
; * This file show a possible Xdebug example configuration
|
||||
; * If this file is enabled, it will overwrite the current Xdebug settings
|
||||
;
|
||||
; How to enable?
|
||||
; --------------
|
||||
; * Copy this file to another file with ".ini" extension
|
||||
; * Only files with ".ini" extensions will be applied by PHP
|
||||
|
||||
|
||||
|
||||
;
|
||||
; PHP.ini configuration
|
||||
;
|
||||
[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.mode = debug
|
||||
xdebug.start_with_request = yes
|
||||
xdebug.remote_handler = dbgp
|
||||
xdebug.remote_port = 9000
|
||||
xdebug.idekey = PHPSTORM
|
||||
xdebug.remote_log = /var/log/php/xdebug.log
|
||||
|
||||
; vim: set ft=dosini:
|
0
cfg/php-startup-8.2/.keepme
Normal file
0
cfg/php-startup-8.2/.keepme
Normal file
6
cfg/php-startup-8.2/01-update-apt-index.sh-example
Executable file
6
cfg/php-startup-8.2/01-update-apt-index.sh-example
Executable file
@ -0,0 +1,6 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# Simple example showing how to update the packet index
|
||||
#
|
||||
|
||||
DEBIAN_FRONTEND=noninteractive apt-get update -q
|
29
cfg/php-startup-8.2/README.md
Normal file
29
cfg/php-startup-8.2/README.md
Normal file
@ -0,0 +1,29 @@
|
||||
# Custom startup scripts (per PHP version)
|
||||
|
||||
Any script inside this directory ending by `.sh` will be executed during the PHP container startup.
|
||||
This is useful to apply your custom settings such as installing software that usually requires
|
||||
the user to accept a license or similar.
|
||||
|
||||
A few examples are given that do not end by `.sh` which won't be run. If you want to use the
|
||||
provided examples, copy them to a file ending by `.sh`
|
||||
|
||||
|
||||
## Info
|
||||
|
||||
If you want to autostart NodeJS applications, you can use [pm2](https://github.com/Unitech/pm2).
|
||||
Ensure you do this as user `devilbox`, as by default everything is run by root.
|
||||
|
||||
```bash
|
||||
su -c 'cd /shared/httpd/node/node; pm2 start index.js' -l devilbox
|
||||
```
|
||||
|
||||
|
||||
## Note
|
||||
|
||||
This directory will startup commands only for a specific PHP version. If you want to run commands
|
||||
for all versions , go to `autostart/` in the root of the Devilbox git directory.
|
||||
|
||||
|
||||
## Important
|
||||
|
||||
All provided scripts will be executed with **root** permissions.
|
418
check-config.sh
418
check-config.sh
@ -11,6 +11,7 @@ set -o pipefail
|
||||
RET_CODE=0
|
||||
MY_UID="$( id -u )"
|
||||
MY_GID="$( id -g )"
|
||||
DEBUG=0
|
||||
|
||||
|
||||
#--------------------------------------------------------------------------------------------------
|
||||
@ -21,15 +22,24 @@ MY_GID="$( id -g )"
|
||||
### Logger functions
|
||||
###
|
||||
log_err() {
|
||||
>&2 printf "\\e[1;31m[ERR] %s\\e[0m\\n" "${1}"
|
||||
>&2 printf "\\e[1;31m[ERR] %s\\e[0m\\n" "${1}"
|
||||
}
|
||||
|
||||
log_note() {
|
||||
>&2 printf "\\e[1;33m[NOTE] %s\\e[0m\\n" "${1}"
|
||||
}
|
||||
|
||||
log_info() {
|
||||
printf "\\e[;34m[INFO] %s\\e[0m\\n" "${1}"
|
||||
printf "\\e[;34m[INFO] %s\\e[0m\\n" "${1}"
|
||||
}
|
||||
|
||||
log_ok() {
|
||||
printf "\\e[;32m[SUCC] %s\\e[0m\\n" "${1}"
|
||||
printf "\\e[;32m[SUCC] %s\\e[0m\\n" "${1}"
|
||||
}
|
||||
log_debug() {
|
||||
if [ "${DEBUG}" -eq "1" ]; then
|
||||
printf "[DEBUG] %s\\n" "${1}"
|
||||
fi
|
||||
}
|
||||
|
||||
###
|
||||
@ -51,11 +61,19 @@ print_head_1() {
|
||||
### File functions
|
||||
###
|
||||
file_get_uid() {
|
||||
stat -c '%u' "${1}"
|
||||
if [ "$(uname)" = "Linux" ]; then
|
||||
stat --format '%u' "${1}"
|
||||
else
|
||||
stat -f '%u' "${1}"
|
||||
fi
|
||||
}
|
||||
|
||||
file_get_gid() {
|
||||
stat -c '%g' "${1}"
|
||||
if [ "$(uname)" = "Linux" ]; then
|
||||
stat --format '%g' "${1}"
|
||||
else
|
||||
stat -f '%g' "${1}"
|
||||
fi
|
||||
}
|
||||
|
||||
# Returns 4-digit format
|
||||
@ -80,6 +98,52 @@ file_get_perm() {
|
||||
echo "${perm}"
|
||||
}
|
||||
|
||||
# Get path with '~' replace with correct home path
|
||||
get_path() {
|
||||
echo "${1/#\~/${HOME}}"
|
||||
}
|
||||
|
||||
# Returns sub directories by one level
|
||||
# Also returns symlinks if they point to a directory
|
||||
get_sub_dirs_level_1() {
|
||||
local dir="${1}"
|
||||
dir="${dir#./}" # Remove leading './' if it exists
|
||||
dir="${dir%/}" # Remove trailing '/' if it exists
|
||||
# shellcheck disable=SC2016
|
||||
find "${dir}" \
|
||||
| grep -Ev "^${dir}\$" \
|
||||
| grep -Ev "^${dir}/.+/" \
|
||||
| xargs -n1 sh -c 'if [ -d "${1}" ]; then echo "${1}"; fi' -- \
|
||||
| sort
|
||||
}
|
||||
|
||||
# Returns sub directories by two level
|
||||
# Also returns symlinks if they point to a directory
|
||||
get_sub_dirs_level_2() {
|
||||
local dir="${1}"
|
||||
dir="${dir#./}" # Remove leading './' if it exists
|
||||
dir="${dir%/}" # Remove trailing '/' if it exists
|
||||
# shellcheck disable=SC2016
|
||||
find "${dir}" \
|
||||
| grep -Ev "^${dir}\$" \
|
||||
| grep -Ev "^${dir}/.+/.+/" \
|
||||
| xargs -n1 sh -c 'if [ -d "${1}" ]; then echo "${1}"; fi' -- \
|
||||
| sort
|
||||
}
|
||||
|
||||
# Returns the value of .env var
|
||||
get_env_value() {
|
||||
local val
|
||||
val="$( grep -E "^${1}=" .env )"
|
||||
echo "${val#*=}"
|
||||
}
|
||||
|
||||
# Validate a DNS record
|
||||
validate_dns() {
|
||||
ping -c1 "${1}" >/dev/null 2>&1
|
||||
}
|
||||
|
||||
|
||||
|
||||
#--------------------------------------------------------------------------------------------------
|
||||
# Check git
|
||||
@ -88,7 +152,7 @@ print_head_1 "Checking git"
|
||||
|
||||
GIT_STATUS="$( git status -s )"
|
||||
if [ -z "${GIT_STATUS}" ]; then
|
||||
log_info "git is clean"
|
||||
log_ok "git is clean"
|
||||
else
|
||||
log_err "git is unclean"
|
||||
echo "${GIT_STATUS}"
|
||||
@ -123,6 +187,8 @@ while read -r env_var; do
|
||||
log_err "Variable '${env_var}' missing in .env file"
|
||||
RET_CODE=$(( RET_CODE + 1))
|
||||
ENV_VAR_MISSING=1
|
||||
else
|
||||
log_debug "Variable '${env_var}' is present in '.env file"
|
||||
fi
|
||||
done < <(grep -E '^[A-Z].+=' env-example | awk -F'=' '{print $1}')
|
||||
if [ "${ENV_VAR_MISSING}" = "0" ]; then
|
||||
@ -137,6 +203,8 @@ while read -r env_var; do
|
||||
log_err "Variable '${env_var}' should only be defined once. Occurances: ${OCCURANCES}"
|
||||
RET_CODE=$(( RET_CODE + 1))
|
||||
ENV_VAR_DUPLICATED=1
|
||||
else
|
||||
log_debug "Variable '${env_var}' is defined exactly once."
|
||||
fi
|
||||
done < <(grep -E '^[A-Z].+=' env-example | awk -F'=' '{print $1}')
|
||||
if [ "${ENV_VAR_DUPLICATED}" = "0" ]; then
|
||||
@ -150,139 +218,221 @@ fi
|
||||
print_head_1 "Checking .env file values"
|
||||
|
||||
WRONG_ENV_FILES_VALUES=0
|
||||
DEBUG_COMPOSE_ENTRYPOINT="$( grep -E '^DEBUG_COMPOSE_ENTRYPOINT=' .env | awk -F'=' '{print $2}' )"
|
||||
|
||||
DEBUG_COMPOSE_ENTRYPOINT="$( get_env_value "DEBUG_COMPOSE_ENTRYPOINT" )"
|
||||
if [ "${DEBUG_COMPOSE_ENTRYPOINT}" != "0" ] && [ "${DEBUG_COMPOSE_ENTRYPOINT}" != "1" ] && [ "${DEBUG_COMPOSE_ENTRYPOINT}" != "2" ]; then
|
||||
log_err "Variable 'DEBUG_COMPOSE_ENTRYPOINT' should be 0, 1 or 2. Has: ${DEBUG_COMPOSE_ENTRYPOINT}"
|
||||
RET_CODE=$(( RET_CODE + 1))
|
||||
WRONG_ENV_FILES_VALUES=1
|
||||
else
|
||||
log_debug "Variable 'DEBUG_COMPOSE_ENTRYPOINT' has correct value: ${DEBUG_COMPOSE_ENTRYPOINT}"
|
||||
fi
|
||||
|
||||
DOCKER_LOGS="$( grep -E '^DOCKER_LOGS=' .env | awk -F'=' '{print $2}' )"
|
||||
DOCKER_LOGS="$( get_env_value "DOCKER_LOGS" )"
|
||||
if [ "${DOCKER_LOGS}" != "0" ] && [ "${DOCKER_LOGS}" != "1" ]; then
|
||||
log_err "Variable 'DOCKER_LOGS' should be 0 or 1. Has: ${DOCKER_LOGS}"
|
||||
RET_CODE=$(( RET_CODE + 1))
|
||||
WRONG_ENV_FILES_VALUES=1
|
||||
else
|
||||
log_debug "Variable 'DOCKER_LOGS' has correct value: ${DOCKER_LOGS}"
|
||||
fi
|
||||
|
||||
DEVILBOX_PATH="$( grep -E '^DEVILBOX_PATH=' .env | awk -F'=' '{print $2}' )"
|
||||
DEVILBOX_PATH="$( get_env_value "DEVILBOX_PATH" )"
|
||||
if [ ! -d "${DEVILBOX_PATH}" ]; then
|
||||
log_err "Variable 'DEVILBOX_PATH' directory does not exist: ${DEVILBOX_PATH}"
|
||||
RET_CODE=$(( RET_CODE + 1))
|
||||
WRONG_ENV_FILES_VALUES=1
|
||||
else
|
||||
log_debug "Variable 'DEVILBOX_PATH' directory exists: ${DEVILBOX_PATH}"
|
||||
fi
|
||||
|
||||
DEVILBOX_PATH_PERM="$( file_get_perm "${DEVILBOX_PATH}" )"
|
||||
if [ "${DEVILBOX_PATH_PERM}" != "0755" ] && [ "${DEVILBOX_PATH_PERM}" != "0775" ] && [ "${DEVILBOX_PATH_PERM}" != "0777" ]; then
|
||||
log_err "Variable 'DEVILBOX_PATH' directory must be 0755, 0775 or 0777. Has: ${DEVILBOX_PATH_PERM}"
|
||||
RET_CODE=$(( RET_CODE + 1))
|
||||
WRONG_ENV_FILES_VALUES=1
|
||||
else
|
||||
log_debug "Variable 'DEVILBOX_PATH' directory has correct permissions: ${DEVILBOX_PATH_PERM}"
|
||||
fi
|
||||
|
||||
DEVILBOX_PATH_PERM="$( file_get_uid "${DEVILBOX_PATH}" )"
|
||||
if [ "${DEVILBOX_PATH_PERM}" != "${MY_UID}" ]; then
|
||||
log_err "Variable 'DEVILBOX_PATH' directory uid must be ${MY_UID}. Has: ${DEVILBOX_PATH_PERM}"
|
||||
RET_CODE=$(( RET_CODE + 1))
|
||||
WRONG_ENV_FILES_VALUES=1
|
||||
else
|
||||
log_debug "Variable 'DEVILBOX_PATH' diretory has correct uid: ${DEVILBOX_PATH_PERM}"
|
||||
fi
|
||||
|
||||
DEVILBOX_PATH_PERM="$( file_get_gid "${DEVILBOX_PATH}" )"
|
||||
if [ "${DEVILBOX_PATH_PERM}" != "${MY_GID}" ]; then
|
||||
log_err "Variable 'DEVILBOX_PATH' directory gid must be ${MY_GID}. Has: ${DEVILBOX_PATH_PERM}"
|
||||
RET_CODE=$(( RET_CODE + 1))
|
||||
WRONG_ENV_FILES_VALUES=1
|
||||
else
|
||||
log_debug "Variable 'DEVILBOX_PATH' diretory has correct gid: ${DEVILBOX_PATH_PERM}"
|
||||
fi
|
||||
|
||||
if [ "${WRONG_ENV_FILES_VALUES}" = "0" ]; then
|
||||
log_ok "All .env file variables have correct values"
|
||||
LOCAL_LISTEN_ADDR="$( get_env_value "LOCAL_LISTEN_ADDR" )"
|
||||
if [ -n "${LOCAL_LISTEN_ADDR}" ]; then
|
||||
if ! echo "${LOCAL_LISTEN_ADDR}" | grep -E ':$' >/dev/null; then
|
||||
log_err "Variable 'LOCAL_LISTEN_ADDR' is not empty and missing trailing ':'"
|
||||
RET_CODE=$(( RET_CODE + 1))
|
||||
WRONG_ENV_FILES_VALUES=1
|
||||
elif ! echo "${LOCAL_LISTEN_ADDR}" | grep -E '^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+:$' >/dev/null; then
|
||||
log_err "Variable 'LOCAL_LISTEN_ADDR' has wrong value: '${LOCAL_LISTEN_ADDR}'"
|
||||
RET_CODE=$(( RET_CODE + 1))
|
||||
WRONG_ENV_FILES_VALUES=1
|
||||
else
|
||||
log_debug "Variable 'LOCAL_LISTEN_ADDR' has correct value: ${LOCAL_LISTEN_ADDR}"
|
||||
fi
|
||||
else
|
||||
log_debug "Variable 'LOCAL_LISTEN_ADDR' has correct value: ${LOCAL_LISTEN_ADDR}"
|
||||
fi
|
||||
|
||||
HOST_PATH_HTTPD_DATADIR="$( grep -E '^HOST_PATH_HTTPD_DATADIR=' .env | awk -F'=' '{print $2}' )"
|
||||
HOST_PATH_HTTPD_DATADIR="$( get_path "$( get_env_value "HOST_PATH_HTTPD_DATADIR" )" )"
|
||||
if [ ! -d "${HOST_PATH_HTTPD_DATADIR}" ]; then
|
||||
log_err "Variable 'HOST_PATH_HTTPD_DATADIR' directory does not exist: ${HOST_PATH_HTTPD_DATADIR}"
|
||||
RET_CODE=$(( RET_CODE + 1))
|
||||
WRONG_ENV_FILES_VALUES=1
|
||||
else
|
||||
log_debug "Variable 'HOST_PATH_HTTPD_DATADIR' directory exists: ${HOST_PATH_HTTPD_DATADIR}"
|
||||
fi
|
||||
|
||||
HOST_PATH_HTTPD_DATADIR_PERM="$( file_get_perm "${HOST_PATH_HTTPD_DATADIR}" )"
|
||||
if [ "${HOST_PATH_HTTPD_DATADIR_PERM}" != "0755" ] && [ "${HOST_PATH_HTTPD_DATADIR_PERM}" != "0775" ] && [ "${HOST_PATH_HTTPD_DATADIR_PERM}" != "0777" ]; then
|
||||
log_err "Variable 'HOST_PATH_HTTPD_DATADIR' directory must be 0755, 0775 or 0777. Has: ${HOST_PATH_HTTPD_DATADIR_PERM}"
|
||||
RET_CODE=$(( RET_CODE + 1))
|
||||
WRONG_ENV_FILES_VALUES=1
|
||||
else
|
||||
log_debug "Variable 'HOST_PATH_HTTPD_DATADIR' directory has correct permissions: ${HOST_PATH_HTTPD_DATADIR_PERM}"
|
||||
fi
|
||||
|
||||
HOST_PATH_HTTPD_DATADIR_PERM="$( file_get_uid "${HOST_PATH_HTTPD_DATADIR}" )"
|
||||
if [ "${HOST_PATH_HTTPD_DATADIR_PERM}" != "${MY_UID}" ]; then
|
||||
log_err "Variable 'HOST_PATH_HTTPD_DATADIR' directory uid must be ${MY_UID}. Has: ${HOST_PATH_HTTPD_DATADIR_PERM}"
|
||||
RET_CODE=$(( RET_CODE + 1))
|
||||
WRONG_ENV_FILES_VALUES=1
|
||||
else
|
||||
log_debug "Variable 'HOST_PATH_HTTPD_DATADIR' directory has correct uid: ${HOST_PATH_HTTPD_DATADIR_PERM}"
|
||||
fi
|
||||
|
||||
HOST_PATH_HTTPD_DATADIR_PERM="$( file_get_gid "${HOST_PATH_HTTPD_DATADIR}" )"
|
||||
if [ "${HOST_PATH_HTTPD_DATADIR_PERM}" != "${MY_GID}" ]; then
|
||||
log_err "Variable 'HOST_PATH_HTTPD_DATADIR' directory gid must be ${MY_GID}. Has: ${HOST_PATH_HTTPD_DATADIR_PERM}"
|
||||
RET_CODE=$(( RET_CODE + 1))
|
||||
WRONG_ENV_FILES_VALUES=1
|
||||
else
|
||||
log_debug "Variable 'HOST_PATH_HTTPD_DATADIR' directory has correct gid: ${HOST_PATH_HTTPD_DATADIR_PERM}"
|
||||
fi
|
||||
|
||||
PHP_SERVER="$( grep -E '^PHP_SERVER=' .env | awk -F'=' '{print $2}' )"
|
||||
PHP_SERVER="$( get_env_value "PHP_SERVER" )"
|
||||
if ! grep -E "^#?PHP_SERVER=${PHP_SERVER}\$" env-example >/dev/null; then
|
||||
log_err "Variable 'PHP_SERVER' has wrong value: ${PHP_SERVER}"
|
||||
RET_CODE=$(( RET_CODE + 1))
|
||||
WRONG_ENV_FILES_VALUES=1
|
||||
else
|
||||
log_debug "Variable 'PHP_SERVER' has correct value: ${PHP_SERVER}"
|
||||
fi
|
||||
HTTPD_SERVER="$( grep -E '^HTTPD_SERVER=' .env | awk -F'=' '{print $2}' )"
|
||||
|
||||
HTTPD_SERVER="$( get_env_value "HTTPD_SERVER" )"
|
||||
if ! grep -E "^#?HTTPD_SERVER=${HTTPD_SERVER}\$" env-example >/dev/null; then
|
||||
log_err "Variable 'HTTPD_SERVER' has wrong value: ${HTTPD_SERVER}"
|
||||
RET_CODE=$(( RET_CODE + 1))
|
||||
WRONG_ENV_FILES_VALUES=1
|
||||
else
|
||||
log_debug "Variable 'HTTPD_SERVER' has correct value: ${HTTPD_SERVER}"
|
||||
fi
|
||||
MYSQL_SERVER="$( grep -E '^MYSQL_SERVER=' .env | awk -F'=' '{print $2}' )"
|
||||
|
||||
MYSQL_SERVER="$( get_env_value "MYSQL_SERVER" )"
|
||||
if ! grep -E "^#?MYSQL_SERVER=${MYSQL_SERVER}\$" env-example >/dev/null; then
|
||||
log_err "Variable 'MYSQL_SERVER' has wrong value: ${MYSQL_SERVER}"
|
||||
RET_CODE=$(( RET_CODE + 1))
|
||||
WRONG_ENV_FILES_VALUES=1
|
||||
else
|
||||
log_debug "Variable 'MYSQL_SERVER' has correct value: ${MYSQL_SERVER}"
|
||||
fi
|
||||
PGSQL_SERVER="$( grep -E '^PGSQL_SERVER=' .env | awk -F'=' '{print $2}' )"
|
||||
|
||||
PGSQL_SERVER="$( get_env_value "PGSQL_SERVER" )"
|
||||
if ! grep -E "^#?PGSQL_SERVER=${PGSQL_SERVER}\$" env-example >/dev/null; then
|
||||
log_err "Variable 'PGSQL_SERVER' has wrong value: ${PGSQL_SERVER}"
|
||||
RET_CODE=$(( RET_CODE + 1))
|
||||
WRONG_ENV_FILES_VALUES=1
|
||||
else
|
||||
log_debug "Variable 'PGSQL_SERVER' has correct value: ${PGSQL_SERVER}"
|
||||
fi
|
||||
REDIS_SERVER="$( grep -E '^REDIS_SERVER=' .env | awk -F'=' '{print $2}' )"
|
||||
|
||||
REDIS_SERVER="$( get_env_value "REDIS_SERVER" )"
|
||||
if ! grep -E "^#?REDIS_SERVER=${REDIS_SERVER}\$" env-example >/dev/null; then
|
||||
log_err "Variable 'REDIS_SERVER' has wrong value: ${REDIS_SERVER}"
|
||||
RET_CODE=$(( RET_CODE + 1))
|
||||
WRONG_ENV_FILES_VALUES=1
|
||||
else
|
||||
log_debug "Variable 'REDIS_SERVER' has correct value: ${REDIS_SERVER}"
|
||||
fi
|
||||
MEMCD_SERVER="$( grep -E '^MEMCD_SERVER=' .env | awk -F'=' '{print $2}' )"
|
||||
|
||||
MEMCD_SERVER="$( get_env_value "MEMCD_SERVER" )"
|
||||
if ! grep -E "^#?MEMCD_SERVER=${MEMCD_SERVER}\$" env-example >/dev/null; then
|
||||
log_err "Variable 'MEMCD_SERVER' has wrong value: ${MEMCD_SERVER}"
|
||||
RET_CODE=$(( RET_CODE + 1))
|
||||
WRONG_ENV_FILES_VALUES=1
|
||||
else
|
||||
log_debug "Variable 'MEMCD_SERVER' has correct value: ${MEMCD_SERVER}"
|
||||
fi
|
||||
MONGO_SERVER="$( grep -E '^MONGO_SERVER=' .env | awk -F'=' '{print $2}' )"
|
||||
|
||||
MONGO_SERVER="$( get_env_value "MONGO_SERVER" )"
|
||||
if ! grep -E "^#?MONGO_SERVER=${MONGO_SERVER}\$" env-example >/dev/null; then
|
||||
log_err "Variable 'MONGO_SERVER' has wrong value: ${MONGO_SERVER}"
|
||||
RET_CODE=$(( RET_CODE + 1))
|
||||
WRONG_ENV_FILES_VALUES=1
|
||||
else
|
||||
log_debug "Variable 'MONGO_SERVER' has correct value: ${MONGO_SERVER}"
|
||||
fi
|
||||
|
||||
NEW_UID="$( grep -E '^NEW_UID=' .env | awk -F'=' '{print $2}' )"
|
||||
NEW_UID="$( get_env_value "NEW_UID" )"
|
||||
if [ "${NEW_UID}" != "${MY_UID}" ]; then
|
||||
log_err "Variable 'NEW_UID' has wrong value: '${NEW_UID}'. Should have: ${MY_UID}"
|
||||
RET_CODE=$(( RET_CODE + 1))
|
||||
WRONG_ENV_FILES_VALUES=1
|
||||
else
|
||||
log_debug "Variable 'NEW_UID' has correct value: '${NEW_UID}'"
|
||||
fi
|
||||
NEW_GID="$( grep -E '^NEW_GID=' .env | awk -F'=' '{print $2}' )"
|
||||
|
||||
NEW_GID="$( get_env_value "NEW_GID" )"
|
||||
if [ "${NEW_GID}" != "${MY_GID}" ]; then
|
||||
log_err "Variable 'NEW_GID' has wrong value: '${NEW_GID}'. Should have: ${MY_GID}"
|
||||
RET_CODE=$(( RET_CODE + 1))
|
||||
WRONG_ENV_FILES_VALUES=1
|
||||
else
|
||||
log_debug "Variable 'NEW_GID' has correct value: '${NEW_GID}'"
|
||||
fi
|
||||
|
||||
TLD_SUFFIX="$( get_env_value "TLD_SUFFIX" )"
|
||||
TLD_SUFFIX_BLACKLIST="dev|com|org|net|int|edu|de"
|
||||
if echo "${TLD_SUFFIX}" | grep -E "^(${TLD_SUFFIX_BLACKLIST})\$" >/dev/null; then
|
||||
log_err "Variable 'TLD_SUFFX' should not be set to '${TLD_SUFFIX}'. It is a real tld domain."
|
||||
log_err "All DNS requests will be intercepted to this tld domain and re-routed to the HTTP container."
|
||||
log_info "Consider using a subdomain value of e.g.: 'mydev.${TLD_SUFFIX}' instead."
|
||||
RET_CODE=$(( RET_CODE + 1))
|
||||
WRONG_ENV_FILES_VALUES=1
|
||||
elif [ "${TLD_SUFFIX}" = "localhost" ]; then
|
||||
log_err "Variable 'TLD_SUFFX' should not be set to '${TLD_SUFFIX}'. It is a loopback address."
|
||||
log_info "See: https://tools.ietf.org/html/draft-west-let-localhost-be-localhost-06"
|
||||
RET_CODE=$(( RET_CODE + 1))
|
||||
WRONG_ENV_FILES_VALUES=1
|
||||
else
|
||||
log_debug "Variable 'TLD_SUFFIX' has correct value: '${TLD_SUFFIX}'"
|
||||
fi
|
||||
|
||||
if [ "${WRONG_ENV_FILES_VALUES}" = "0" ]; then
|
||||
log_ok "All .env file variables have correct values"
|
||||
fi
|
||||
|
||||
|
||||
|
||||
#--------------------------------------------------------------------------------------------------
|
||||
# Ensure cfg/, mod/ and log/ directories exist
|
||||
#--------------------------------------------------------------------------------------------------
|
||||
print_head_1 "Checking required directories"
|
||||
print_head_1 "Checking required Devilbox core directories exist"
|
||||
|
||||
# /cfg/php-fpm-VERSION
|
||||
DIR_MISSING=0
|
||||
@ -291,6 +441,8 @@ while read -r php_version; do
|
||||
log_err "Directory 'cfg/php-fpm-${php_version}' is missing"
|
||||
RET_CODE=$(( RET_CODE + 1))
|
||||
DIR_MISSING=1
|
||||
else
|
||||
log_debug "Directory 'cfg/php-fpm-${php_version}' is present"
|
||||
fi
|
||||
done < <(grep -E '^#?PHP_SERVER=' env-example | awk -F'=' '{print $2}')
|
||||
if [ "${DIR_MISSING}" = "0" ]; then
|
||||
@ -304,6 +456,8 @@ while read -r php_version; do
|
||||
log_err "Directory 'log/php-fpm-${php_version}' is missing"
|
||||
RET_CODE=$(( RET_CODE + 1))
|
||||
DIR_MISSING=1
|
||||
else
|
||||
log_debug "Directory 'log/php-fpm-${php_version}' is present"
|
||||
fi
|
||||
done < <(grep -E '^#?PHP_SERVER=' env-example | awk -F'=' '{print $2}')
|
||||
if [ "${DIR_MISSING}" = "0" ]; then
|
||||
@ -317,6 +471,8 @@ while read -r php_version; do
|
||||
log_err "Directory 'mod/php-fpm-${php_version}' is missing"
|
||||
RET_CODE=$(( RET_CODE + 1))
|
||||
DIR_MISSING=1
|
||||
else
|
||||
log_debug "Directory 'mod/php-fpm-${php_version}' is present"
|
||||
fi
|
||||
done < <(grep -E '^#?PHP_SERVER=' env-example | awk -F'=' '{print $2}')
|
||||
if [ "${DIR_MISSING}" = "0" ]; then
|
||||
@ -330,6 +486,8 @@ while read -r httpd_version; do
|
||||
log_err "Directory 'cfg/${httpd_version}' is missing"
|
||||
RET_CODE=$(( RET_CODE + 1))
|
||||
DIR_MISSING=1
|
||||
else
|
||||
log_debug "Directory 'cfg/${httpd_version}' is present"
|
||||
fi
|
||||
done < <(grep -E '^#?HTTPD_SERVER=' env-example | awk -F'=' '{print $2}')
|
||||
if [ "${DIR_MISSING}" = "0" ]; then
|
||||
@ -343,6 +501,8 @@ while read -r httpd_version; do
|
||||
log_err "Directory 'log/${httpd_version}' is missing"
|
||||
RET_CODE=$(( RET_CODE + 1))
|
||||
DIR_MISSING=1
|
||||
else
|
||||
log_debug "Directory 'log/${httpd_version}' is present"
|
||||
fi
|
||||
done < <(grep -E '^#?HTTPD_SERVER=' env-example | awk -F'=' '{print $2}')
|
||||
if [ "${DIR_MISSING}" = "0" ]; then
|
||||
@ -351,19 +511,19 @@ fi
|
||||
|
||||
|
||||
#--------------------------------------------------------------------------------------------------
|
||||
# Directory permissions
|
||||
# Devilbox Directory permissions
|
||||
#--------------------------------------------------------------------------------------------------
|
||||
print_head_1 "Checking directory permissions"
|
||||
print_head_1 "Checking devilbox core directory permissions"
|
||||
|
||||
DEVILBOX_DIRS=(
|
||||
"autostart"
|
||||
"backups"
|
||||
"bash"
|
||||
"ca"
|
||||
"cfg"
|
||||
"compose"
|
||||
"log"
|
||||
"mod"
|
||||
"supervisor"
|
||||
)
|
||||
|
||||
# Check allowed directory permissions: 0755 0775 0777
|
||||
@ -375,6 +535,8 @@ for search_dir in "${DEVILBOX_DIRS[@]}"; do
|
||||
log_err "Directory '${my_dir}' should have 0755, 0775 or 0777 permissions. Has: ${PERM} permissions"
|
||||
RET_CODE=$(( RET_CODE + 1))
|
||||
DEVILBOX_DIR_PERM_WRONG=1
|
||||
else
|
||||
log_debug "Directory '${my_dir}' has correct permissions: ${PERM}"
|
||||
fi
|
||||
done < <(find "${search_dir}" -type d)
|
||||
done
|
||||
@ -391,6 +553,8 @@ for search_dir in "${DEVILBOX_DIRS[@]}"; do
|
||||
log_err "Directory '${my_dir}' should have uid '${MY_UID}' Has: '${PERM}'"
|
||||
RET_CODE=$(( RET_CODE + 1))
|
||||
DEVILBOX_DIR_PERM_WRONG=1
|
||||
else
|
||||
log_debug "Directory '${my_dir}' has correct uid: ${PERM}"
|
||||
fi
|
||||
done < <(find "${search_dir}" -type d)
|
||||
done
|
||||
@ -407,6 +571,8 @@ for search_dir in "${DEVILBOX_DIRS[@]}"; do
|
||||
log_err "Directory '${my_dir}' should have gid '${MY_GID}' Has: '${PERM}'"
|
||||
RET_CODE=$(( RET_CODE + 1))
|
||||
DEVILBOX_DIR_PERM_WRONG=1
|
||||
else
|
||||
log_debug "Directory '${my_dir}' has correct gid: ${PERM}"
|
||||
fi
|
||||
done < <(find "${search_dir}" -type d)
|
||||
done
|
||||
@ -416,17 +582,17 @@ fi
|
||||
|
||||
|
||||
#--------------------------------------------------------------------------------------------------
|
||||
# File permissions
|
||||
# Devilbox File permissions
|
||||
#--------------------------------------------------------------------------------------------------
|
||||
print_head_1 "Checking file permissions"
|
||||
print_head_1 "Checking devilbox core file permissions"
|
||||
|
||||
DEVILBOX_DIRS=(
|
||||
"autostart"
|
||||
"backups"
|
||||
"ca"
|
||||
"cfg"
|
||||
"compose"
|
||||
"mod"
|
||||
"supervisor"
|
||||
)
|
||||
|
||||
# Check allowed directory permissions: 0644 0664 0666
|
||||
@ -440,6 +606,8 @@ for search_file in "${DEVILBOX_DIRS[@]}"; do
|
||||
log_err "File '${my_file}' should have 0600 permissions. Has: ${PERM} permissions"
|
||||
RET_CODE=$(( RET_CODE + 1))
|
||||
DEVILBOX_DIR_PERM_WRONG=1
|
||||
else
|
||||
log_debug "File '${my_file}' has correct permissions: ${PERM}"
|
||||
fi
|
||||
# Executable files
|
||||
elif echo "${my_file}" | grep -E '.+\.sh(-example)?$' >/dev/null; then
|
||||
@ -447,6 +615,8 @@ for search_file in "${DEVILBOX_DIRS[@]}"; do
|
||||
log_err "File '${my_file}' should have 0755, 0775 or 0777 permissions. Has: ${PERM} permissions"
|
||||
RET_CODE=$(( RET_CODE + 1))
|
||||
DEVILBOX_DIR_PERM_WRONG=1
|
||||
else
|
||||
log_debug "File '${my_file}' has correct permissions: ${PERM}"
|
||||
fi
|
||||
# All other files
|
||||
else
|
||||
@ -454,6 +624,8 @@ for search_file in "${DEVILBOX_DIRS[@]}"; do
|
||||
log_err "File '${my_file}' should have 0644, 0664 or 0666 permissions. Has: ${PERM} permissions"
|
||||
RET_CODE=$(( RET_CODE + 1))
|
||||
DEVILBOX_DIR_PERM_WRONG=1
|
||||
else
|
||||
log_debug "File '${my_file}' has correct permissions: ${PERM}"
|
||||
fi
|
||||
fi
|
||||
done < <(find "${search_file}" -type f)
|
||||
@ -471,6 +643,8 @@ for search_file in "${DEVILBOX_DIRS[@]}"; do
|
||||
log_err "File '${my_file}' should have uid '${MY_UID}' Has: '${PERM}'"
|
||||
RET_CODE=$(( RET_CODE + 1))
|
||||
DEVILBOX_DIR_PERM_WRONG=1
|
||||
else
|
||||
log_debug "File '${my_file}' has correct uid: ${PERM}"
|
||||
fi
|
||||
done < <(find "${search_file}" -type f)
|
||||
done
|
||||
@ -487,6 +661,8 @@ for search_file in "${DEVILBOX_DIRS[@]}"; do
|
||||
log_err "File '${my_file}' should have gid '${MY_GID}' Has: '${PERM}'"
|
||||
RET_CODE=$(( RET_CODE + 1))
|
||||
DEVILBOX_DIR_PERM_WRONG=1
|
||||
else
|
||||
log_debug "File '${my_file}' has correct gid: ${PERM}"
|
||||
fi
|
||||
done < <(find "${search_file}" -type f)
|
||||
done
|
||||
@ -496,11 +672,11 @@ fi
|
||||
|
||||
|
||||
#--------------------------------------------------------------------------------------------------
|
||||
# Check projects
|
||||
# Check projects permissions
|
||||
#--------------------------------------------------------------------------------------------------
|
||||
print_head_1 "Checking projects"
|
||||
print_head_1 "Checking projects permissions"
|
||||
|
||||
HOST_PATH_HTTPD_DATADIR="$( grep -E '^HOST_PATH_HTTPD_DATADIR=' .env | awk -F'=' '{print $2}' )"
|
||||
HOST_PATH_HTTPD_DATADIR="$( get_path "$( get_env_value "HOST_PATH_HTTPD_DATADIR" )" )"
|
||||
|
||||
DATA_DIR_PERM_WRONG=0
|
||||
while read -r project; do
|
||||
@ -509,8 +685,10 @@ while read -r project; do
|
||||
log_err "Directory '${project}' should have 0755, 0775 or 0777 permissions. Has: ${PERM} permissions"
|
||||
RET_CODE=$(( RET_CODE + 1))
|
||||
DATA_DIR_PERM_WRONG=1
|
||||
else
|
||||
log_debug "Directory '${project}' has correct permissions: ${PERM}"
|
||||
fi
|
||||
done < <(find "${HOST_PATH_HTTPD_DATADIR}" -type d | grep -Ev "${HOST_PATH_HTTPD_DATADIR}/.+/.+")
|
||||
done < <(get_sub_dirs_level_1 "${HOST_PATH_HTTPD_DATADIR}")
|
||||
if [ "${DATA_DIR_PERM_WRONG}" = "0" ]; then
|
||||
log_ok "All project dirs have correct permissions"
|
||||
fi
|
||||
@ -522,8 +700,10 @@ while read -r project; do
|
||||
log_err "Directory '${project}' should have uid '${MY_UID}' Has: '${PERM}'"
|
||||
RET_CODE=$(( RET_CODE + 1))
|
||||
DATA_DIR_PERM_WRONG=1
|
||||
else
|
||||
log_debug "Directory '${project}' has correct uid: ${PERM}"
|
||||
fi
|
||||
done < <(find "${HOST_PATH_HTTPD_DATADIR}" -type d | grep -Ev "${HOST_PATH_HTTPD_DATADIR}/.+/.+")
|
||||
done < <(get_sub_dirs_level_1 "${HOST_PATH_HTTPD_DATADIR}")
|
||||
if [ "${DATA_DIR_PERM_WRONG}" = "0" ]; then
|
||||
log_ok "All project dirs have correct uid"
|
||||
fi
|
||||
@ -535,13 +715,167 @@ while read -r project; do
|
||||
log_err "Directory '${project}' should have gid '${MY_GID}' Has: '${PERM}'"
|
||||
RET_CODE=$(( RET_CODE + 1))
|
||||
DATA_DIR_PERM_WRONG=1
|
||||
else
|
||||
log_debug "Directory '${project}' has correct gid: ${PERM}"
|
||||
fi
|
||||
done < <(find "${HOST_PATH_HTTPD_DATADIR}" -type d | grep -Ev "${HOST_PATH_HTTPD_DATADIR}/.+/.+")
|
||||
done < <(get_sub_dirs_level_1 "${HOST_PATH_HTTPD_DATADIR}")
|
||||
if [ "${DATA_DIR_PERM_WRONG}" = "0" ]; then
|
||||
log_ok "All project dirs have correct gid"
|
||||
fi
|
||||
|
||||
|
||||
#--------------------------------------------------------------------------------------------------
|
||||
# Check projects settings
|
||||
#--------------------------------------------------------------------------------------------------
|
||||
print_head_1 "Checking projects settings"
|
||||
|
||||
HOST_PATH_HTTPD_DATADIR="$( get_path "$( get_env_value "HOST_PATH_HTTPD_DATADIR" )" )"
|
||||
|
||||
TLD_SUFFIX="$( get_env_value "TLD_SUFFIX" )"
|
||||
DNS_RECORD_WRONG=0
|
||||
while read -r project; do
|
||||
VHOST="$( basename "${project}" ).${TLD_SUFFIX}"
|
||||
if ! validate_dns "${VHOST}"; then
|
||||
log_err "Project '${VHOST}' has no valid DNS record"
|
||||
RET_CODE=$(( RET_CODE + 1))
|
||||
DNS_RECORD_WRONG=1
|
||||
else
|
||||
log_debug "Project '${VHOST}' has valid DNS record"
|
||||
fi
|
||||
done < <(get_sub_dirs_level_1 "${HOST_PATH_HTTPD_DATADIR}")
|
||||
if [ "${DNS_RECORD_WRONG}" = "0" ]; then
|
||||
log_ok "All projects have valid DNS records"
|
||||
fi
|
||||
|
||||
HTTPD_DOCROOT_DIR="$( get_env_value "HTTPD_DOCROOT_DIR" )"
|
||||
DOCROOT_WRONG=0
|
||||
while read -r project; do
|
||||
if [ ! -d "${project}/${HTTPD_DOCROOT_DIR}" ]; then
|
||||
log_err "Missing HTTPD_DOCROOT_DIR '${HTTPD_DOCROOT_DIR}' in: ${project}"
|
||||
RET_CODE=$(( RET_CODE + 1))
|
||||
DOCROOT_WRONG=1
|
||||
else
|
||||
log_debug "HTTPD_DOCROOT_DIR '${HTTPD_DOCROOT_DIR}' present in: ${project}"
|
||||
fi
|
||||
done < <(get_sub_dirs_level_1 "${HOST_PATH_HTTPD_DATADIR}")
|
||||
if [ "${DOCROOT_WRONG}" = "0" ]; then
|
||||
log_ok "All projects have valid HTTPD_DOCROOT_DIR"
|
||||
fi
|
||||
|
||||
|
||||
#--------------------------------------------------------------------------------------------------
|
||||
# Check Customizations
|
||||
#--------------------------------------------------------------------------------------------------
|
||||
print_head_1 "Checking customizations"
|
||||
|
||||
CUSTOMIZATIONS=0
|
||||
|
||||
# vhost-gen
|
||||
HOST_PATH_HTTPD_DATADIR="$( get_path "$( get_env_value "HOST_PATH_HTTPD_DATADIR" )" )"
|
||||
HTTPD_TEMPLATE_DIR="$( get_env_value "HTTPD_TEMPLATE_DIR" )"
|
||||
while read -r project; do
|
||||
if [ -f "${project}/${HTTPD_TEMPLATE_DIR}/apache22.yml" ]; then
|
||||
log_note "[vhost-gen] Custom Apache 2.2 vhost-gen config present in: ${project}/"
|
||||
CUSTOMIZATIONS=$(( CUSTOMIZATIONS + 1 ))
|
||||
elif [ -f "${project}/${HTTPD_TEMPLATE_DIR}/apache24.yml" ]; then
|
||||
log_note "[vhost-gen] Custom Apache 2.4 vhost-gen config present in: ${project}/"
|
||||
CUSTOMIZATIONS=$(( CUSTOMIZATIONS + 1 ))
|
||||
elif [ -f "${project}/${HTTPD_TEMPLATE_DIR}/nginx.yml" ]; then
|
||||
log_note "[vhost-gen] Custom Nginx vhost-gen config present in: ${project}/"
|
||||
CUSTOMIZATIONS=$(( CUSTOMIZATIONS + 1 ))
|
||||
else
|
||||
log_debug "[vhost-gen] No custom configuration for: ${project}/"
|
||||
fi
|
||||
done < <(get_sub_dirs_level_1 "${HOST_PATH_HTTPD_DATADIR}")
|
||||
|
||||
# docker-compose.override.yml
|
||||
if [ -f "docker-compose.override.yml" ]; then
|
||||
log_note "[docker] Custom docker-compose.override.yml present"
|
||||
CUSTOMIZATIONS=$(( CUSTOMIZATIONS + 1 ))
|
||||
else
|
||||
log_debug "[docker] No custom docker-compose.override.yml present"
|
||||
fi
|
||||
|
||||
# cfg/HTTPD/
|
||||
while read -r httpd; do
|
||||
if find "cfg/${httpd}" | grep -E '\.conf$' >/dev/null; then
|
||||
log_note "[httpd] Custom config present in cfg/${httpd}/"
|
||||
CUSTOMIZATIONS=$(( CUSTOMIZATIONS + 1 ))
|
||||
else
|
||||
log_debug "[httpd] No custom config present in cfg/${httpd}/"
|
||||
fi
|
||||
done < <(grep -E '^#?HTTPD_SERVER=' env-example | awk -F'=' '{print $2}')
|
||||
|
||||
# cfg/php-ini-${version}/
|
||||
while read -r php_version; do
|
||||
if find "cfg/php-ini-${php_version}" | grep -E '\.ini$' >/dev/null; then
|
||||
log_note "[php.ini] Custom config present in cfg/php-ini-${php_version}/"
|
||||
CUSTOMIZATIONS=$(( CUSTOMIZATIONS + 1 ))
|
||||
else
|
||||
log_debug "[php.ini] No custom config present in cfg/php-ini-${php_version}/"
|
||||
fi
|
||||
done < <(grep -E '^#?PHP_SERVER=' env-example | awk -F'=' '{print $2}')
|
||||
|
||||
# cfg/php-fpm-${version}/
|
||||
while read -r php_version; do
|
||||
if find "cfg/php-fpm-${php_version}" | grep -E '\.conf$' >/dev/null; then
|
||||
log_note "[php-fpm] Custom config present in cfg/php-fpm-${php_version}/"
|
||||
CUSTOMIZATIONS=$(( CUSTOMIZATIONS + 1 ))
|
||||
else
|
||||
log_debug "[php-fpm] No custom config present in cfg/php-fpm-${php_version}/"
|
||||
fi
|
||||
done < <(grep -E '^#?PHP_SERVER=' env-example | awk -F'=' '{print $2}')
|
||||
|
||||
# cfg/MYSQL/
|
||||
while read -r mysql; do
|
||||
if find "cfg/${mysql}" | grep -E '\.cnf$' >/dev/null; then
|
||||
log_note "[mysql] Custom config present in cfg/${mysql}/"
|
||||
CUSTOMIZATIONS=$(( CUSTOMIZATIONS + 1 ))
|
||||
else
|
||||
log_debug "[mysql] No custom config present in cfg/${mysql}/"
|
||||
fi
|
||||
done < <(grep -E '^#?MYSQL_SERVER=' env-example | awk -F'=' '{print $2}')
|
||||
|
||||
# cfg/php-startup-${version}/
|
||||
while read -r php_version; do
|
||||
if find "cfg/php-startup-${php_version}" | grep -E '\.sh$' >/dev/null; then
|
||||
log_note "[startup] Custom script present in cfg/php-startup-${php_version}/"
|
||||
CUSTOMIZATIONS=$(( CUSTOMIZATIONS + 1 ))
|
||||
else
|
||||
log_debug "[startup] No custom script present in cfg/php-startup-${php_version}/"
|
||||
fi
|
||||
done < <(grep -E '^#?PHP_SERVER=' env-example | awk -F'=' '{print $2}')
|
||||
|
||||
# autostart/
|
||||
if find "autostart" | grep -E '\.sh$' >/dev/null; then
|
||||
log_note "[startup] Custom script present in autostart/"
|
||||
CUSTOMIZATIONS=$(( CUSTOMIZATIONS + 1 ))
|
||||
else
|
||||
log_debug "[startup] No custom script present in autostart/"
|
||||
fi
|
||||
|
||||
# supervisor/
|
||||
if find "supervisor" | grep -E '\.conf$' >/dev/null; then
|
||||
log_note "[supervisor] Custom config present in supervisor/"
|
||||
CUSTOMIZATIONS=$(( CUSTOMIZATIONS + 1 ))
|
||||
else
|
||||
log_debug "[supervisor] No custom config present in supervisor/"
|
||||
fi
|
||||
|
||||
# bash/
|
||||
if find "bash" | grep -E '\.sh$' >/dev/null; then
|
||||
log_note "[bash] Custom script present in bash/"
|
||||
CUSTOMIZATIONS=$(( CUSTOMIZATIONS + 1 ))
|
||||
else
|
||||
log_debug "[bash] No custom script present in bash/"
|
||||
fi
|
||||
|
||||
# Total?
|
||||
if [ "${CUSTOMIZATIONS}" = "0" ]; then
|
||||
log_info "No custom configurations applied"
|
||||
fi
|
||||
|
||||
|
||||
#--------------------------------------------------------------------------------------------------
|
||||
# Summary
|
||||
#--------------------------------------------------------------------------------------------------
|
||||
@ -551,10 +885,20 @@ if [ "${RET_CODE}" -gt "0" ]; then
|
||||
log_err "Found ${RET_CODE} error(s)"
|
||||
log_err "Devilbox might not work properly"
|
||||
log_err "Fix the issues before submitting a bug report"
|
||||
log_info "Ensure to run 'docker-compose stop; docker-compose rm -f' on changes in .env"
|
||||
if [ "${CUSTOMIZATIONS}" -gt "0" ]; then
|
||||
log_note "${CUSTOMIZATIONS} custom configurations applied. If you encounter issues, reset them first."
|
||||
else
|
||||
log_info "No custom configurations applied"
|
||||
fi
|
||||
log_info "Ensure to run 'docker-compose stop; docker-compose rm -f' on .env changes or custom configs"
|
||||
exit 1
|
||||
else
|
||||
log_ok "Found no errors"
|
||||
log_info "Ensure to run 'docker-compose stop; docker-compose rm -f' when .env was changed"
|
||||
if [ "${CUSTOMIZATIONS}" -gt "0" ]; then
|
||||
log_note "${CUSTOMIZATIONS} custom configurations applied. If you encounter issues, reset them first."
|
||||
else
|
||||
log_info "No custom configurations applied"
|
||||
fi
|
||||
log_info "Ensure to run 'docker-compose stop; docker-compose rm -f' on .env changes or custom configs"
|
||||
exit 0
|
||||
fi
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -34,7 +34,7 @@ services:
|
||||
# Bind (DNS Server)
|
||||
# ------------------------------------------------------------
|
||||
bind:
|
||||
image: cytopia/bind:0.15
|
||||
image: cytopia/bind:0.27
|
||||
hostname: bind
|
||||
restart: always
|
||||
ports:
|
||||
@ -51,8 +51,7 @@ services:
|
||||
##
|
||||
## Bind wildcard/host settings
|
||||
##
|
||||
- WILDCARD_DNS=${TLD_SUFFIX:-loc}=127.0.0.1
|
||||
- EXTRA_HOSTS=${EXTRA_HOSTS}
|
||||
- DNS_A=*.${TLD_SUFFIX:-loc}=127.0.0.1,${EXTRA_HOSTS:-}
|
||||
|
||||
##
|
||||
## Forwarding
|
||||
@ -95,7 +94,7 @@ services:
|
||||
# PHP
|
||||
# ------------------------------------------------------------
|
||||
php:
|
||||
image: devilbox/php-fpm:${PHP_SERVER}-work-0.114
|
||||
image: devilbox/php-fpm:${PHP_SERVER}-work-0.134
|
||||
hostname: php
|
||||
|
||||
##
|
||||
@ -183,7 +182,7 @@ services:
|
||||
- devilbox-mail:/var/mail:rw${MOUNT_OPTIONS}
|
||||
|
||||
# Mount DB Backup directory
|
||||
- ${DEVILBOX_PATH}/backups:/shared/backups:rw${MOUNT_OPTIONS}
|
||||
- ${HOST_PATH_BACKUPDIR:-./backups}:/shared/backups:rw${MOUNT_OPTIONS}
|
||||
|
||||
# Mount devilbox user-defined *.ini files in order
|
||||
# to overwrite the default PHP.ini configuration
|
||||
@ -204,6 +203,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 +220,7 @@ services:
|
||||
# Web Server
|
||||
# ------------------------------------------------------------
|
||||
httpd:
|
||||
image: devilbox/${HTTPD_SERVER}:0.33
|
||||
image: devilbox/${HTTPD_SERVER}:0.40
|
||||
hostname: httpd
|
||||
|
||||
environment:
|
||||
@ -317,7 +319,7 @@ services:
|
||||
# MySQL Database
|
||||
# ------------------------------------------------------------
|
||||
mysql:
|
||||
image: devilbox/mysql:${MYSQL_SERVER}-0.6
|
||||
image: devilbox/mysql:${MYSQL_SERVER}-0.15
|
||||
hostname: mysql
|
||||
|
||||
environment:
|
||||
@ -338,6 +340,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 +500,9 @@ volumes:
|
||||
devilbox-mariadb-10.3:
|
||||
devilbox-mariadb-10.4:
|
||||
devilbox-mariadb-10.5:
|
||||
devilbox-mariadb-10.6:
|
||||
devilbox-mariadb-10.7:
|
||||
devilbox-mariadb-10.8:
|
||||
devilbox-percona-5.5:
|
||||
devilbox-percona-5.6:
|
||||
devilbox-percona-5.7:
|
||||
|
@ -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
|
||||
|
@ -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>
|
||||
|
||||
|
@ -16,6 +16,12 @@
|
||||
Official Contao Documentation <img src="https://raw.githubusercontent.com/cytopia/icons/master/11x11/ext-link.png" />
|
||||
</a>
|
||||
|
||||
.. |ext_lnk_example_contao_devilbox_documentation| raw:: html
|
||||
|
||||
<a target="_blank" href="https://docs.contao.org/manual/en/guides/local-installation/devilbox/">
|
||||
Official Contao Devilbox Documentation <img src="https://raw.githubusercontent.com/cytopia/icons/master/11x11/ext-link.png" />
|
||||
</a>
|
||||
|
||||
.. |ext_lnk_example_craftcms_documentation| raw:: html
|
||||
|
||||
<a target="_blank" href="https://docs.craftcms.com/v3/installation.html#step-1-download-craft">
|
||||
@ -28,13 +34,13 @@
|
||||
Official Drupal Documentation <img src="https://raw.githubusercontent.com/cytopia/icons/master/11x11/ext-link.png" />
|
||||
</a>
|
||||
|
||||
.. |ext_lnk_example_expressionengine_documentation| raw:: html
|
||||
.. |ext_lnk_example_expressionengine_documentation| raw:: html
|
||||
|
||||
<a target="_blank" href="https://docs.expressionengine.com/latest/index.html">
|
||||
Official ExpressionEngine Documentation <img src="https://raw.githubusercontent.com/cytopia/icons/master/11x11/ext-link.png" />
|
||||
</a>
|
||||
|
||||
.. |ext_lnk_example_expressionengine_primer| raw:: html
|
||||
.. |ext_lnk_example_expressionengine_primer| raw:: html
|
||||
|
||||
<a target="_blank" href="https://docs.expressionengine.com/latest/getting-started/ten-minute-primer.html">
|
||||
10 Minute Primer <img src="https://raw.githubusercontent.com/cytopia/icons/master/11x11/ext-link.png" />
|
||||
@ -66,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>
|
||||
|
||||
|
@ -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>
|
||||
|
||||
|
@ -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.
|
||||
|
@ -959,6 +959,22 @@ always be ``/shared/httpd/``.
|
||||
``docker-compose rm``.
|
||||
|
||||
|
||||
.. _env_host_path_backupdir:
|
||||
|
||||
HOST_PATH_BACKUPDIR
|
||||
-------------------
|
||||
|
||||
The path on your host OS of the database backup directory to be mounted into the
|
||||
PHP container into ``/shared/backups``.
|
||||
|
||||
|
||||
+------------------------------+----------------+----------------+
|
||||
| Name | Allowed values | Default value |
|
||||
+==============================+================+================+
|
||||
| ``HOST_PATH_BACKUPDIR`` | valid path | ``./backups`` |
|
||||
+------------------------------+----------------+----------------+
|
||||
|
||||
|
||||
HOST_PATH_SSH_DIR
|
||||
-----------------
|
||||
|
||||
|
@ -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
|
||||
|
@ -7,6 +7,10 @@
|
||||
Setup Contao
|
||||
************
|
||||
|
||||
.. important::
|
||||
**You can find a more up-to-date version in the official Contao Documentation:**
|
||||
|ext_lnk_example_contao_devilbox_documentation|
|
||||
|
||||
This example will use ``composer`` to install Contao CMS from within the Devilbox PHP container.
|
||||
|
||||
.. important::
|
||||
@ -19,7 +23,9 @@ This example will use ``composer`` to install Contao CMS from within the Devilbo
|
||||
After completing the below listed steps, you will have a working Contao CMS setup ready to be
|
||||
served via http and https.
|
||||
|
||||
.. seealso:: |ext_lnk_example_contao_documentation|
|
||||
.. seealso::
|
||||
* |ext_lnk_example_contao_documentation|
|
||||
* |ext_lnk_example_contao_devilbox_documentation|
|
||||
|
||||
|
||||
**Table of Contents**
|
||||
|
@ -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
|
||||
|
||||
|
@ -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`
|
||||
|
@ -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`
|
||||
|
40
docs/howto/devilbox/move-backups-to-different-directory.rst
Normal file
40
docs/howto/devilbox/move-backups-to-different-directory.rst
Normal file
@ -0,0 +1,40 @@
|
||||
:orphan:
|
||||
|
||||
.. include:: /_includes/snippets/__ANNOUNCEMENTS__.rst
|
||||
|
||||
.. _howto_move_backups_to_a_different_directory:
|
||||
|
||||
*************************************
|
||||
Move backups to a different directory
|
||||
*************************************
|
||||
|
||||
No matter if your backups are already in a different location or if you want to move them out of
|
||||
the Devilbox git directory now, you can do that in a few simple steps.
|
||||
|
||||
**Table of Contents**
|
||||
|
||||
.. contents:: :local:
|
||||
|
||||
Move backups out of the Devilbox git directory
|
||||
==============================================
|
||||
|
||||
All you have to do is to adjust the path of :ref:`env_host_path_backupdir` in the ``.env`` file.
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
# Navigate to Devilbox git directory
|
||||
host> cd path/to/devilbox
|
||||
|
||||
# Open the .env file with your favourite editor
|
||||
host> vim .env
|
||||
|
||||
Now Adjust the value of :ref:`env_host_path_backupdir`
|
||||
|
||||
.. code-block:: bash
|
||||
:caption: .env
|
||||
:emphasize-lines: 1
|
||||
|
||||
HOST_PATH_HTTPD_DATADIR=/home/user/backups/devilbox/
|
||||
|
||||
That's it, whenever you start up the Devilbox, ``/home/user/backups/devilbox/`` will be mounted into
|
||||
the PHP container into ``/shared/backups/``.
|
@ -22,7 +22,7 @@ So let’s assume all of your projects are already in place under ``/home/user/w
|
||||
Now you decide to use the Devilbox, but still want to keep your projects where they are at the
|
||||
moment.
|
||||
|
||||
All you have to to is to adjust the path of :ref:`env_httpd_datadir` in the ``.env`` file.
|
||||
All you have to do is to adjust the path of :ref:`env_httpd_datadir` in the ``.env`` file.
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -26,14 +26,26 @@ having to worry about loosing any project data. There could also be the case tha
|
||||
dedicated hard-disk to store your projects or you have your own idea about a directory structure
|
||||
where you want to store your projects.
|
||||
|
||||
Affected env variables to consider changing:
|
||||
|
||||
* :ref:`env_httpd_datadir`
|
||||
* :ref:`env_host_path_backupdir`
|
||||
|
||||
|
||||
Projects
|
||||
--------
|
||||
|
||||
.. seealso::
|
||||
:ref:`howto_move_projects_to_a_different_directory`
|
||||
* :ref:`howto_move_projects_to_a_different_directory`
|
||||
Follow this guide to keep your projects separated from the Devilbox git directory.
|
||||
|
||||
Backups
|
||||
-------
|
||||
|
||||
.. seealso::
|
||||
* :ref:`howto_move_backups_to_a_different_directory`
|
||||
Follow this guide to keep your backups separated from the Devilbox git directory.
|
||||
|
||||
|
||||
Version control ``.env`` file
|
||||
-----------------------------
|
||||
|
@ -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.
|
||||
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
-------
|
||||
|
||||
|
@ -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| |
|
||||
+----------------------+---------------------------------------+
|
||||
|
@ -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
|
||||
|
||||
|
||||
|
16
env-example
16
env-example
@ -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
|
||||
@ -267,6 +267,7 @@ DEVILBOX_VENDOR_PHPPGADMIN_AUTOLOGIN=1
|
||||
PHP_SERVER=7.4
|
||||
#PHP_SERVER=8.0
|
||||
#PHP_SERVER=8.1
|
||||
#PHP_SERVER=8.2
|
||||
|
||||
|
||||
###
|
||||
@ -292,6 +293,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
|
||||
@ -465,6 +468,17 @@ MOUNT_OPTIONS=
|
||||
HOST_PATH_HTTPD_DATADIR=./data/www
|
||||
|
||||
|
||||
###
|
||||
### Local filesystem path to where your backups are stored
|
||||
###
|
||||
### Note: When changing this variable you must re-create the container.
|
||||
### Simply remove it, it will be auto-created during the next start:
|
||||
###
|
||||
### $ docker-compose rm -f
|
||||
###
|
||||
HOST_PATH_BACKUPDIR=./backups
|
||||
|
||||
|
||||
###
|
||||
### The path on your host OS of the ssh directory to be mounted into the
|
||||
### PHP container into /home/devilbox/.ssh.
|
||||
|
0
log/mariadb-10.0/.keepme
Normal file
0
log/mariadb-10.0/.keepme
Normal file
0
log/mariadb-10.1/.keepme
Normal file
0
log/mariadb-10.1/.keepme
Normal file
0
log/mariadb-10.2/.keepme
Normal file
0
log/mariadb-10.2/.keepme
Normal file
0
log/mariadb-10.4/.keepme
Normal file
0
log/mariadb-10.4/.keepme
Normal file
0
log/mariadb-10.5/.keepme
Normal file
0
log/mariadb-10.5/.keepme
Normal file
0
log/mariadb-10.6/.keepme
Normal file
0
log/mariadb-10.6/.keepme
Normal file
0
log/mariadb-10.7/.keepme
Normal file
0
log/mariadb-10.7/.keepme
Normal file
0
log/mariadb-5.5/.keepme
Normal file
0
log/mariadb-5.5/.keepme
Normal file
0
log/php-fpm-8.2/.keepme
Normal file
0
log/php-fpm-8.2/.keepme
Normal file
0
mod/php-fpm-8.2/.keepme
Normal file
0
mod/php-fpm-8.2/.keepme
Normal file
0
supervisor/.keepme
Normal file
0
supervisor/.keepme
Normal file
Reference in New Issue
Block a user