From ed3517bd2b529b93781089d4694f5fdb563c18b6 Mon Sep 17 00:00:00 2001
From: Jan-Hendrik Willms <tleilax+studip@gmail.com>
Date: Thu, 14 Nov 2024 12:55:36 +0100
Subject: [PATCH] db in docker

---
 config/php.ini                              |  2 ++
 lib/Commands/Compile.php                    | 30 +++++++++------------
 lib/Creators/DockerComposeConfiguration.php | 11 ++++++++
 3 files changed, 26 insertions(+), 17 deletions(-)

diff --git a/config/php.ini b/config/php.ini
index 34a9445..6b2d2e8 100644
--- a/config/php.ini
+++ b/config/php.ini
@@ -8,5 +8,7 @@ error_reporting=22519
 zend_extension=opcache.so
 opcache.enable=1
 opcache.enable_cli=1
+opcache.revalidate_freq=0
+opcache.validate_timestamps=1
 opcache.jit=tracing
 opcache.jit_buffer_size=100M
diff --git a/lib/Commands/Compile.php b/lib/Commands/Compile.php
index 5cb7c45..15e2973 100644
--- a/lib/Commands/Compile.php
+++ b/lib/Commands/Compile.php
@@ -149,7 +149,6 @@ final class Compile extends Command
 
         // Nginx
         $creator->addService('nginx', 'nginx:alpine', [
-            'networks' => ['code-network'],
             'depends_on' => ['redis-server', 'memcached-server'],
             'ports' => array_merge(
                 Config::getInstance()->get('default') ? ['80:80', '443:443'] : [],
@@ -164,13 +163,20 @@ final class Compile extends Command
         ]);
 
         // DB
-        $creator->addService('db', 'mariadb:latest', [
+        $creator->addService('db', 'mariadb', [
             'container_name' => 'db',
-            'networks'       => ['code-network'],
+            'ports'          => ['3306:3306'],
+            'restart'        => 'unless-stopped',
             'environment'    => [
-                'MARIADB_RANDOM_ROOT_PASSWORD' => true,
+                'MARIADB_ROOT_PASSWORD' => 'rootpwd',
+                'MARIADB_USER' => 'studip',
+                'MARIADB_PASSWORD' => 'studip',
+                'MARIADB_MYSQL_LOCALHOST_USER' => 'root',
+                'MARIADB_AUTO_UPGRADE'  => true,
             ],
+            'volumes'        => ['db-data:/var/lib/mysql'],
         ]);
+        $creator->addVolume('db-data');
 
         $mounts = [
             "{$compiledPath}/nginx.conf" => 'conf.d/default.conf',
@@ -201,9 +207,8 @@ final class Compile extends Command
                     'dockerfile' => "{$cwd}/config/docker-files/{$version}-Dockerfile",
                 ],
                 'environment' => [
-                    'MYSQL_HOST' => 'host.docker.internal',
+                    'MYSQL_HOST' => 'db',
                 ],
-                'networks' => ['code-network'],
                 'depends_on' => ['db'],
             ]);
 
@@ -231,18 +236,9 @@ final class Compile extends Command
         }
 
         // Other needed images
-        $creator->addService('memcached-server', 'memcached:latest', [
-            'networks' => ['code-network'],
-        ]);
-
-        $creator->addService('redis-server', 'redis:latest', [
-            'networks' => ['code-network'],
-        ]);
-
-        $creator->addNetwork('code-network', [
-            'driver' => 'bridge',
-        ]);
+        $creator->addService('memcached-server', 'memcached:latest');
 
+        $creator->addService('redis-server', 'redis:latest');
 
         return $creator->dump();
     }
diff --git a/lib/Creators/DockerComposeConfiguration.php b/lib/Creators/DockerComposeConfiguration.php
index 22c8f70..9b6438c 100644
--- a/lib/Creators/DockerComposeConfiguration.php
+++ b/lib/Creators/DockerComposeConfiguration.php
@@ -50,6 +50,17 @@ final class DockerComposeConfiguration extends ConfigurationCreator
         $this->addConfiguration('networks', $config, $network);
     }
 
+    public function addVolume(string $volume): void
+    {
+        $config = $this->getConfiguration('volumes', []);
+
+        if (array_key_exists($volume, $config)) {
+            throw new \Exception('Volume "' . $volume . '" already exists');
+        }
+
+        $this->addConfiguration('volumes', ['name' => $volume], $volume);
+    }
+
     public function dump(): string
     {
         return Yaml::dump($this->getConfiguration(), 128);
-- 
GitLab