From 106dd57fc8e3e94da2874d9babb42fd315140595 Mon Sep 17 00:00:00 2001 From: Vincent Vanwaelscappel Date: Tue, 30 Jan 2024 10:49:54 +0100 Subject: [PATCH] wip #6693 @1 --- .../Operations/Tools/DockerWebContainer.php | 41 +++++++++++-------- resources/tools/dockerwebcontainer/base | 4 +- .../tools/dockerwebcontainer/elasticsearch | 2 +- resources/tools/dockerwebcontainer/mysql | 2 +- resources/tools/dockerwebcontainer/php | 28 +++++++------ .../template/config/cron/crontab | 2 +- .../template/config/passwords | 2 +- .../template/config/sudoers | 2 +- .../template/images/php-fpm/Dockerfile | 2 +- .../template/images/php-fpm/startup | 2 +- 10 files changed, 49 insertions(+), 38 deletions(-) diff --git a/app/Http/Controllers/Admin/Operations/Tools/DockerWebContainer.php b/app/Http/Controllers/Admin/Operations/Tools/DockerWebContainer.php index 14e5922d1..ed229834f 100644 --- a/app/Http/Controllers/Admin/Operations/Tools/DockerWebContainer.php +++ b/app/Http/Controllers/Admin/Operations/Tools/DockerWebContainer.php @@ -62,7 +62,7 @@ trait DockerWebContainer $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"; @@ -75,7 +75,9 @@ trait DockerWebContainer $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, @@ -95,6 +97,7 @@ trait DockerWebContainer $variables['$domain'] = $subDomain . $variables['$domain']; $dir = Files::mkdir($tmp . '/' . $name . $dockerSuffix); + $www = $dir . 'www'; $source = resource_path('tools/dockerwebcontainer/template'); `cp -r $source/* $dir/`; @@ -113,12 +116,12 @@ trait DockerWebContainer $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'; @@ -136,10 +139,10 @@ trait DockerWebContainer } 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'; @@ -152,14 +155,16 @@ trait DockerWebContainer ]; $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); @@ -171,8 +176,7 @@ trait DockerWebContainer } 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, @@ -193,6 +197,11 @@ trait DockerWebContainer } $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); } diff --git a/resources/tools/dockerwebcontainer/base b/resources/tools/dockerwebcontainer/base index d0c1802fc..310d1a07a 100644 --- a/resources/tools/dockerwebcontainer/base +++ b/resources/tools/dockerwebcontainer/base @@ -2,12 +2,12 @@ version: '3.1' services: webserver: container_name: $name-httpd - build: './images/httpd' + build: './www/.docker/images/httpd' working_dir: /application volumes: - './www$public:/usr/local/apache2/htdocs' - './www/:/application/' - - './config/httpd/httpd.conf:/usr/local/apache2/conf/httpd.conf' + - './www/.docker/config/httpd/httpd.conf:/usr/local/apache2/conf/httpd.conf' environment: VIRTUAL_HOST: $domain LETSENCRYPT_HOST: $domain diff --git a/resources/tools/dockerwebcontainer/elasticsearch b/resources/tools/dockerwebcontainer/elasticsearch index 2035df754..72bd2f003 100644 --- a/resources/tools/dockerwebcontainer/elasticsearch +++ b/resources/tools/dockerwebcontainer/elasticsearch @@ -1,6 +1,6 @@ elasticsearch: container_name: $name-elasticsearch - build: './images/elasticsearch' + build: './www/.docker/images/elasticsearch' volumes: - ./esdata:/usr/share/elasticsearch/data environment: diff --git a/resources/tools/dockerwebcontainer/mysql b/resources/tools/dockerwebcontainer/mysql index 8962b6701..7321f9a48 100644 --- a/resources/tools/dockerwebcontainer/mysql +++ b/resources/tools/dockerwebcontainer/mysql @@ -21,7 +21,7 @@ - "./database/dump.sql:/docker-entrypoint-initdb.d/dump.sql" - "./database/scripts/:/usr/local/bin/scripts/" - "./database/data:/var/lib/mysql" - - './config/mariadb:/etc/mysql/conf.d:z' + - './www/.docker/config/mariadb:/etc/mysql/conf.d:z' networks: - $name logging: diff --git a/resources/tools/dockerwebcontainer/php b/resources/tools/dockerwebcontainer/php index 3fca33d5d..091f89687 100644 --- a/resources/tools/dockerwebcontainer/php +++ b/resources/tools/dockerwebcontainer/php @@ -1,29 +1,31 @@ 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: diff --git a/resources/tools/dockerwebcontainer/template/config/cron/crontab b/resources/tools/dockerwebcontainer/template/config/cron/crontab index d8b7a9fb5..cc64dc72d 100644 --- a/resources/tools/dockerwebcontainer/template/config/cron/crontab +++ b/resources/tools/dockerwebcontainer/template/config/cron/crontab @@ -1 +1 @@ -* * * * * runuser -l $name -c '/usr/bin/php /application/artisan schedule:run' > /proc/1/fd/1 2>/proc/1/fd/2 +* * * * * runuser -l $user -c '/usr/bin/php /application/artisan schedule:run' > /proc/1/fd/1 2>/proc/1/fd/2 diff --git a/resources/tools/dockerwebcontainer/template/config/passwords b/resources/tools/dockerwebcontainer/template/config/passwords index 5f9db609a..34e81fd23 100644 --- a/resources/tools/dockerwebcontainer/template/config/passwords +++ b/resources/tools/dockerwebcontainer/template/config/passwords @@ -1 +1 @@ -$name:$sshpassword +$user:$sshpassword diff --git a/resources/tools/dockerwebcontainer/template/config/sudoers b/resources/tools/dockerwebcontainer/template/config/sudoers index 35c101818..54811a5a5 100644 --- a/resources/tools/dockerwebcontainer/template/config/sudoers +++ b/resources/tools/dockerwebcontainer/template/config/sudoers @@ -1 +1 @@ -$name ALL=(ALL) NOPASSWD:ALL +$user ALL=(ALL) NOPASSWD:ALL diff --git a/resources/tools/dockerwebcontainer/template/images/php-fpm/Dockerfile b/resources/tools/dockerwebcontainer/template/images/php-fpm/Dockerfile index 5166bca3f..a5aa9b44f 100644 --- a/resources/tools/dockerwebcontainer/template/images/php-fpm/Dockerfile +++ b/resources/tools/dockerwebcontainer/template/images/php-fpm/Dockerfile @@ -70,7 +70,7 @@ CMD ["php", "-a"] STOPSIGNAL SIGQUIT -RUN groupadd sudo;useradd -d /application -g 33 -G sudo -s /bin/bash -u 1001 $name +RUN groupadd sudo;useradd -d /application -g 33 -G sudo -s /bin/bash -u 1001 $user # PHP-FPM packages need a nudge to make them docker-friendly COPY overrides.conf /etc/php/$phpversion/fpm/pool.d/z-overrides.conf diff --git a/resources/tools/dockerwebcontainer/template/images/php-fpm/startup b/resources/tools/dockerwebcontainer/template/images/php-fpm/startup index 0341d5abc..257e57198 100644 --- a/resources/tools/dockerwebcontainer/template/images/php-fpm/startup +++ b/resources/tools/dockerwebcontainer/template/images/php-fpm/startup @@ -5,7 +5,7 @@ umask 0000 chmod -R 777 /tmp chown -R root:root /etc/sudoers.d -chown -R $name:www-data /application +chown -R $user:www-data /application # Rsyslog start-stop-daemon --start -b -x /usr/sbin/rsyslogd -- -n -- 2.39.5