use Cubist\Backpack\Magic\Fields\Tags;
use Cubist\Backpack\Magic\Fields\Text;
use Cubist\Backpack\Magic\Form;
+use Cubist\Util\Env;
use Cubist\Util\Files\Files;
use Cubist\Util\Str;
use Cubist\Util\Zip;
+use Dotenv\Dotenv;
+use Illuminate\Support\Facades\Artisan;
use PhpOffice\PhpSpreadsheet\Calculation\Statistical\Distributions\F;
+use Symfony\Component\Console\Output\BufferedOutput;
// __('!! Outils')
trait DockerWebContainer
$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('public', Checkbox::class, __('Racine dans le dossier "public"'), ['default' => true]);
+
$form->addField('laravel', Checkbox::class, __('Installer Laravel'), ['default' => true]);
+ $form->addField('public', Checkbox::class, __('Racine dans le dossier "public"'), ['default' => true]);
$form->addField('phpversion', SelectFromArray::class, __('Version de PHP'), ["options" =>
['none' => '-',
'5.6' => '5.6',
$subDomain = '';
}
+ $laravel = $request->get('laravel', true);
+
$variables = ['$name' => $name . $dockerSuffix,
'$matomodbpassword' => Str::random(16),
'$sshport' => rand(10000, 60000),
'$locale' => 'fr_FR',
'$localeshort' => 'fr',
'$sshpassword' => Str::random(16),
- '$public' => $request->get('public') ? '/public' : '/'
+ '$public' => ($laravel || $request->get('public')) ? '/public' : '/',
+ '$environment' => $env,
];
if (!$variables['$domain']) {
$source = resource_path('tools/dockerwebcontainer/template');
`cp -r $source/* $dir/`;
+ $additionalEnv = [];
+
$compose = ['base'];
$variables['$phpversion'] = $request->get('phpversion', '8.3');
if ($variables['$phpversion'] !== 'none') {
}
$fixRights[] = 'chown 0:0 ./config/cron/crontab';
}
- if ($request->get('mysql', true)) {
+ if ($laravel || $request->get('mysql', true)) {
$compose[] = 'mysql';
$fixRights[] = 'chown -R 999:999 ./database/data';
+
+ $additionalEnv['DB_CONNECTION']='mysql';
+ $additionalEnv['DB_HOST']='$name-mariadb';
+ $additionalEnv['DB_PORT']='3306';
+ $additionalEnv['DB_DATABASE']='$name';
+ $additionalEnv['DB_USERNAME']='root';
+ $additionalEnv['DB_PASSWORD']='$dbpassword';
}
- if ($request->get('redis', true)) {
+ if ($laravel || $request->get('redis', true)) {
$compose[] = 'redis';
$fixRights[] = 'chown -R 999:999 ./redis';
+ $additionalEnv['CACHE_DRIVER'] = 'redis';
+ $additionalEnv['SESSION_DRIVER'] = 'redis';
+ $additionalEnv['REDIS_HOST'] = '$name-redis';
}
if ($request->get('matomo', true)) {
$compose[] = 'matomo';
}
if ($request->get('laravel', true)) {
+ $envPath = $dir . '/www/.env';
+ $env = Dotenv::parse(file_get_contents($envPath));
`rm -rf $dir/www;composer create-project laravel/laravel $dir/www`;
$composerFile = $dir . '/www/composer.json';
$composer = json_decode(file_get_contents($composerFile));
file_put_contents($composerFile, json_encode($composer));
copy(base_path() . '/auth.json', $dir . '/www/auth.json');
`rm -rf $dir/www/vendor`;
+ $laravelEnv = Dotenv::parse(file_get_contents($envPath));
+ $laravelEnv = array_merge($laravelEnv, $env, $additionalEnv);
+ $output = new BufferedOutput();
+ Artisan::call('key:generate --show', [], $output);
+ $laravelEnv['APP_KEY'] = trim($output->fetch());
+ Env::arrayToEnvFile($envPath, $laravelEnv);
}
$variables['$fixrights'] = implode("\n", $fixRights);