$tmp = Files::tmpdir();
$notification = __('Le container web :name a été crée avec les informations suivantes', ['name' => $name]) . " : \n\n";
- foreach ($envs as $env) {
+ foreach ($envs as $k => $env) {
$domain = $request->get('domain', '');
$notification .= '---- Environnement : ' . $env . " ----\n\n";
$laravel = $request->get('laravel', true);
- $variables = ['$name' => $name . $dockerSuffix,
+ $variables = [
+ '$user' => $name,
+ '$name' => $name . $dockerSuffix,
'$matomodbpassword' => Str::random(16),
'$sshport' => rand(10000, 60000),
'$domain' => $domain,
$variables['$domain'] = $subDomain . $variables['$domain'];
$dir = Files::mkdir($tmp . '/' . $name . $dockerSuffix);
+ $www = $dir . 'www';
$source = resource_path('tools/dockerwebcontainer/template');
`cp -r $source/* $dir/`;
$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';
+ $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 ($laravel || $request->get('redis', true)) {
$compose[] = 'redis';
}
if ($request->get('laravel', true)) {
- $envPath = $dir . '/www/.env';
+ $envPath = $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';
+ `rm -rf $www;composer create-project laravel/laravel $www`;
+ $composerFile = $www . '/composer.json';
$composer = json_decode(file_get_contents($composerFile));
$composer->name = str_replace('-', '/', $name);
$composer->license = 'Proprietary';
];
$composer->{"minimum-stability"} = 'dev';
file_put_contents($composerFile, json_encode($composer));
- copy(base_path() . '/auth.json', $dir . '/www/auth.json');
- `rm -rf $dir/www/vendor`;
+ copy(base_path() . '/auth.json', $www . '/auth.json');
+ `rm -rf $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);
+ Env::arrayToEnvFile($envPath . '.' . $env, $laravelEnv);
+ unlink($envPath);
+ unlink($envPath . '.example');
}
$variables['$fixrights'] = implode("\n", $fixRights);
}
file_put_contents($dir . '/docker-compose.yml', $composeFileContent);
- $infos = [
- 'URL' => 'https://' . $variables['$domain'] . '/'];
+ $infos = ['URL' => 'https://' . $variables['$domain'] . '/'];
if ($request->get('mysql', true)) {
$infos = array_merge($infos,
}
$notification .= "\n";
+ $docker = $www . '/.docker';
+
+ `mkdir -p $docker;mv $dir/images $docker;mv $dir/config $docker;mv $dir/update $docker;mv $dir/docker-compose.yml $docker`;
+ file_put_contents($dir . 'update', '#!/bin/sh' . "\n" . "cd /docker/$name\nrm ./update;ln -sf ./www/.docker/$env/docker-compose.yml docker-compose.yml\nln -sf ./www/.docker/$env/update update\nchmod 755 ./www/.docker/update\n./www/.docker/update");
+ chmod($dir . 'update', 0755);
Files::recursiveReplaceStringInDir($dir, $variables);
}
php-fpm:
container_name: $name
hostname: $name
- build: './images/$phpfpmimage'
+ build: './www/.docker/images/$phpfpmimage'
working_dir: /application
volumes:
# SSH
- - './config/ssh/root/:/root/.ssh/'
- - './config/ssh/user/:/application/.ssh/'
- - './config/ssh/server/:/etc/ssh/'
+ - './www/.docker/config/ssh/root/:/root/.ssh/'
+ - './www/.docker/config/ssh/user/:/application/.ssh/'
+ - './www/.docker/config/ssh/server/:/etc/ssh/'
# Rsyslog
- - './config/rsyslog/rsyslog.conf:/etc/rsyslog.conf'
- - './config/rsyslog/50-default.conf:/etc/rsyslog.d/50-default.conf'
+ - './www/.docker/config/rsyslog/rsyslog.conf:/etc/rsyslog.conf'
+ - './www/.docker/config/rsyslog/50-default.conf:/etc/rsyslog.d/50-default.conf'
# Composer
- - './config/composer/:/root/.config/composer/'
- - './config/composer/:/application/.config/composer/'
+ - './www/.docker/config/composer/:/root/.config/composer/'
+ - './www/.docker/config/composer/:/application/.config/composer/'
# Sudoers
- - './config/sudoers:/etc/sudoers.d/$name'
+ - './www/.docker/config/sudoers:/etc/sudoers.d/$name'
# ImageMagick
- - './config/imagemagick/policy.xml:/etc/ImageMagick-6/policy.xml'
+ - './www/.docker/config/imagemagick/policy.xml:/etc/ImageMagick-6/policy.xml'
# Passwords
- - './config/passwords:/root/passwords'
+ - './www/.docker/config/passwords:/root/passwords'
# Cron
- - './config/cron/crontab:/etc/crontab'
+ - './www/.docker/config/cron/crontab:/etc/crontab'
# PHP
- - './config/php.ini:/etc/php/$phpversion/fpm/conf.d/99-overrides.ini'
+ - './www/.docker/config/php.ini:/etc/php/$phpversion/fpm/conf.d/99-overrides.ini'
+ # ENV
+ - './www/.env.$environment:/application/.env'
# Web path
- './www:/application'
ports: