use App\Notifications\ToolboxNotification;
use Cubist\Backpack\Magic\Fields\Checkbox;
use Cubist\Backpack\Magic\Fields\SelectFromArray;
+use Cubist\Backpack\Magic\Fields\SelectFromArrayMultiple;
+use Cubist\Backpack\Magic\Fields\Tags;
use Cubist\Backpack\Magic\Fields\Text;
use Cubist\Backpack\Magic\Form;
use Cubist\Util\Files\Files;
$form->setSubmitIcon('lab la-docker');
$form->addField('containername', Text::class, __('Nom du container'), ['prefix' => '/docker/']);
$form->addField('domain', Text::class, __('Nom du domaine ou sous-domaine'), ['placeholder' => 'containername.dev.cubedesigners.com']);
+ $form->addField('env', SelectFromArrayMultiple::class, __('Environnements'), ['default' => json_encode(['production', 'dev']), 'options' => ['production' => 'production', 'dev' => 'dev', 'staging' => 'staging', 'preprod' => 'preprod']]);
$form->addField('phpversion', SelectFromArray::class, __('Version de PHP'), ["options" =>
['none' => '-',
'5.6' => '5.6',
-// '7.0' => '7.0',
-// '7.1' => '7.1',
-// '7.2' => '7.2',
-// '7.3' => '7.3',
'7.4' => '7.4',
-// '8.0' => '8.0',
'8.1' => '8.1',
'8.2' => '8.2',
], 'value' => '8.2']);
$form->addField('mysql', Checkbox::class, __('Serveur Mariadb') . ' (MySQL)', ['default' => true]);
$form->addField('redis', Checkbox::class, __('Serveur Redis'), ['default' => true]);
$form->addField('matomo', Checkbox::class, __('Serveur Matomo'), ['default' => true]);
+ $form->addField('elasticsearch', Checkbox::class, __('Serveur ElasticSearch'), ['default' => false]);
+
return view('tools.form', ['form' => $form]);
}
{
$request = request();
$name = Str::slug($request->get('containername', 'containername'));
- $variables = ['$name' => $name,
- '$portadminer' => rand(10000, 60000),
- '$portmatomo' => rand(10000, 60000),
- '$matomodbpassword' => Str::random(16),
- '$port' => rand(10000, 60000),
- '$sshport' => rand(10000, 60000),
- '$domain' => $request->get('domain', ''),
- '$dbpassword' => Str::random(16),
- '$phpfpmimage' => 'php-fpm',
- '$locale' => 'fr_FR',
- '$localeshort' => 'fr',
- '$sshpassword' => Str::random(16),
- ];
-
- if (!$variables['$domain']) {
- $variables['$domain'] = $name . '.dev.cubedesigners.com';
- }
+
+ $envs = $request->get('env', ['production']);
$tmp = Files::tmpdir();
- $dir = Files::mkdir($tmp . '/' . $name);
- $source = resource_path('tools/dockerwebcontainer/template');
- `cp -r $source/* $dir/`;
-
- $compose = ['base'];
- $variables['$phpversion'] = $request->get('phpversion', '8.1');
- if ($variables['$phpversion'] !== 'none') {
- $compose[] = 'php';
- if (version_compare($variables['$phpversion'], '7.3', '<=')) {
- $variables['$phpfpmimage'] = 'php-' . $variables['$phpversion'] . '-fpm';
+ $notification = __('Le container web :name a été crée avec les informations suivantes', ['name' => $name]) . " : \n\n";
+
+ foreach ($envs as $env) {
+ $notification .= '---- Environnement : ' . $env . " ----\n\n";
+ $subDomain = $env === 'production' ? 'www.' : $env . '.';
+ $dockerSuffix = $env === 'production' ? '' : '-' . $env;
+
+
+ $variables = ['$name' => $name.$dockerSuffix,
+ '$portadminer' => rand(10000, 60000),
+ '$portmatomo' => rand(10000, 60000),
+ '$matomodbpassword' => Str::random(16),
+ '$port' => rand(10000, 60000),
+ '$sshport' => rand(10000, 60000),
+ '$domain' => $request->get('domain', ''),
+ '$dbpassword' => Str::random(16),
+ '$phpfpmimage' => 'php-fpm',
+ '$locale' => 'fr_FR',
+ '$localeshort' => 'fr',
+ '$sshpassword' => Str::random(16),
+ ];
+
+ if (!$variables['$domain']) {
+ $variables['$domain'] = $name . '.dev.cubedesigners.com';
}
- }
- if ($request->get('mysql', true)) {
- $compose[] = 'mysql';
- }
- if ($request->get('matomo', true)) {
- $compose[] = 'matomo';
- }
- $compose[] = 'network';
- $composeFileContent = '';
- foreach ($compose as $item) {
- $composeFileContent .= file_get_contents(resource_path('tools/dockerwebcontainer/' . $item));
- }
- file_put_contents($dir . '/docker-compose.yml', $composeFileContent);
+ $variables['$domain'] = $subDomain . $variables['$domain'];
+
+ $dir = Files::mkdir($tmp . '/' . $name . $dockerSuffix);
+ $source = resource_path('tools/dockerwebcontainer/template');
+ `cp -r $source/* $dir/`;
+
+ $compose = ['base'];
+ $variables['$phpversion'] = $request->get('phpversion', '8.1');
+ if ($variables['$phpversion'] !== 'none') {
+ $compose[] = 'php';
+ if (version_compare($variables['$phpversion'], '7.3', '<=')) {
+ $variables['$phpfpmimage'] = 'php-' . $variables['$phpversion'] . '-fpm';
+ }
+ }
+ if ($request->get('mysql', true)) {
+ $compose[] = 'mysql';
+ }
+ if ($request->get('matomo', true)) {
+ $compose[] = 'matomo';
+ }
+ if ($request->get('elasticsearch', false)) {
+ $compose[] = 'elasticsearch';
+ }
+ $compose[] = 'network';
+ $composeFileContent = '';
+ foreach ($compose as $item) {
+ $composeFileContent .= file_get_contents(resource_path('tools/dockerwebcontainer/' . $item));
+ }
+ file_put_contents($dir . '/docker-compose.yml', $composeFileContent);
- Files::recursiveReplaceStringInDir($dir, $variables);
+ $infos = [
+ 'URL' => 'https://' . $variables['$domain'] . '/'];
+
+ if ($request->get('mysql', true)) {
+ $infos = array_merge($infos,
+ [
+ __('Hôte de base de données') => $variables['$name'] . '-mariadb',
+ __('Nom de base de données') => $variables['$name'],
+ __('Utilisateur de la base de données') => 'root',
+ __('Mot de passe de la base de données') => $variables['$dbpassword'],
+ 'Adminer' => 'https://adminer.' . $variables['$domain'] . '/',
+ __('Serveur SSH/SFTP') => $variables['$domain'],
+ __('Port') => $variables['$sshport'],
+ __('Utilisateur') => $variables['$name'],
+ __('Mot de passe') => $variables['$sshpassword'],
+ ]);
+ }
+ foreach ($infos as $k => $v) {
+ $notification .= '* ' . $k . ' : ' . $v . "\n";
+ }
+ $notification.="\n";
+
+ Files::recursiveReplaceStringInDir($dir, $variables);
+ }
$tmpfile = Files::tempnam() . '.zip';
Zip::archive($tmp, $tmpfile);
Files::rmdir($tmp);
$res = response()->download($tmpfile, $name . '.zip')->deleteFileAfterSend(true);
- $notification = __('Le container web :name a été crée avec les informations suivantes', ['name' => $variables['$name']]) . "\n";
- $infos = [
- 'URL' => 'https://' . $variables['$domain'] . '/'];
-
- if ($request->get('mysql', true)) {
- $infos = array_merge($infos,
- [
- __('Hôte de base de données') => $variables['$name'] . '-mariadb',
- __('Nom de base de données') => $variables['$name'],
- __('Utilisateur de la base de données') => 'root',
- __('Mot de passe de la base de données') => $variables['$dbpassword'],
- 'Adminer' => 'https://adminer.' . $variables['$domain'] . '/',
- __('Serveur SSH/SFTP') => $variables['$domain'],
- __('Port') => $variables['$sshport'],
- __('Utilisateur') => $variables['$name'],
- __('Mot de passe') => $variables['$sshpassword'],
- ]);
- }
- foreach ($infos as $k => $v) {
- $notification .= '* ' . $k . ' : ' . $v . "\n";
- }
-
- backpack_user()->notify(new ToolboxNotification(__('Container :name web prêt', ['name' => $variables['$name']]), $notification, [], true));
+ backpack_user()->notify(new ToolboxNotification(__('Container :name web prêt', ['name' => $name]), $notification, [], true));
return $res;
}
}