]> _ Git - fluidbook-toolbox.git/commitdiff
wip #6693 @1
authorVincent Vanwaelscappel <vincent@cubedesigners.com>
Tue, 30 Jan 2024 09:49:54 +0000 (10:49 +0100)
committerVincent Vanwaelscappel <vincent@cubedesigners.com>
Tue, 30 Jan 2024 09:49:54 +0000 (10:49 +0100)
app/Http/Controllers/Admin/Operations/Tools/DockerWebContainer.php
resources/tools/dockerwebcontainer/base
resources/tools/dockerwebcontainer/elasticsearch
resources/tools/dockerwebcontainer/mysql
resources/tools/dockerwebcontainer/php
resources/tools/dockerwebcontainer/template/config/cron/crontab
resources/tools/dockerwebcontainer/template/config/passwords
resources/tools/dockerwebcontainer/template/config/sudoers
resources/tools/dockerwebcontainer/template/images/php-fpm/Dockerfile
resources/tools/dockerwebcontainer/template/images/php-fpm/startup

index 14e5922d15bfab4f619bd3b967abf459189dec08..ed229834f4e88829f8c34e4c025da2976cc1cc5a 100644 (file)
@@ -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);
         }
 
index d0c1802fc2ba74c91d12c319494987af67e2b087..310d1a07a32403332a97463072682b903017d3ab 100644 (file)
@@ -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
index 2035df7548a310b2b04dcf92b5cf0519af903533..72bd2f003f81372a9ffa4ae2ab3cbd5fd1fe633f 100644 (file)
@@ -1,6 +1,6 @@
     elasticsearch:
         container_name: $name-elasticsearch
-        build: './images/elasticsearch'
+        build: './www/.docker/images/elasticsearch'
         volumes:
           - ./esdata:/usr/share/elasticsearch/data
         environment:
index 8962b6701854e2708135f8b8c03d6127a1557eee..7321f9a4855c330b72cb7e4ea5c49bf2bd1c6749 100644 (file)
@@ -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:
index 3fca33d5df4130ab23e3c4a9b0f6d0c2a96b804b..091f89687b787f6f139e54789cdff1b2aa2ce0c6 100644 (file)
@@ -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:
index d8b7a9fb5310eeb57d849530f320c89b1c42f314..cc64dc72d1364262b669ff51561d1130ac65f998 100644 (file)
@@ -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
index 5f9db609aa6d4d6a006d907a88847aae099f87fb..34e81fd232dd3f47f7d72d6df1152d6de70fc60e 100644 (file)
@@ -1 +1 @@
-$name:$sshpassword
+$user:$sshpassword
index 35c101818e41dc774944819a90e022c9dcaa1edf..54811a5a5dd572842cb1d5b77be9dbad9f10dc8f 100644 (file)
@@ -1 +1 @@
-$name ALL=(ALL) NOPASSWD:ALL
+$user ALL=(ALL) NOPASSWD:ALL
index 5166bca3ff359ae3e1871566a0987da879b4a051..a5aa9b44f3078b99793e8fc4061d3a7d0a0ac1a6 100644 (file)
@@ -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
index 0341d5abcef8e43b5314e7d4ca0c2000f3f5b82c..257e5719875e0326af63f859fae84b7c8a49f749 100644 (file)
@@ -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