diff --git a/.env.example b/.env.example
index feb2e1d678d269c4df2c13ec22f327915546a60a..a657413fbab84166dc7b4b7f96af819494904f00 100644
--- a/.env.example
+++ b/.env.example
@@ -4,6 +4,13 @@ APP_LOG_LEVEL=debug
 APP_KEY=
 APP_URL=http://localhost
 
+DB_CONNECTION=mysql
+DB_HOST=mgdb
+DB_PORT=3306
+DB_DATABASE=metager
+DB_USERNAME=metager
+DB_PASSWORD="metager"
+
 REDIS_RESULT_CONNECTION=default
 REDIS_RESULT_CACHE_DURATION=60
 
diff --git a/Dockerfile b/Dockerfile
index 73ac6bec7b5074140235efb00de64fb3d489524e..4604cc1b2b65ee41c64db555d613d56b146f57eb 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -34,7 +34,6 @@ EXPOSE 80
 COPY config/nginx.conf /etc/nginx/nginx.conf
 COPY config/nginx-default.conf /etc/nginx/conf.d/default.conf
 COPY --chown=root:nginx . /html
-RUN chmod -R g+w storage bootstrap/cache
 
 CMD chown -R root:nginx storage/logs/metager bootstrap/cache && \
     chmod -R g+w storage/logs/metager bootstrap/cache && \
diff --git a/app/Console/Commands/WaitDB.php b/app/Console/Commands/WaitDB.php
new file mode 100644
index 0000000000000000000000000000000000000000..7d1d59fdc0375d2b85c13770b458fdc8d4034ed3
--- /dev/null
+++ b/app/Console/Commands/WaitDB.php
@@ -0,0 +1,55 @@
+<?php
+
+namespace App\Console\Commands;
+
+use DB;
+use Illuminate\Console\Command;
+
+class WaitDB extends Command
+{
+    /**
+     * The name and signature of the console command.
+     *
+     * @var string
+     */
+    protected $signature = 'wait:db';
+
+    /**
+     * The console command description.
+     *
+     * @var string
+     */
+    protected $description = 'Waits until default DB connection is available. ';
+
+    /**
+     * Create a new command instance.
+     *
+     * @return void
+     */
+    public function __construct()
+    {
+        parent::__construct();
+    }
+
+    /**
+     * Execute the console command.
+     *
+     * @return mixed
+     */
+    public function handle()
+    {
+        $starttime = microtime(true);
+
+        while (microtime(true) - $starttime < 60) {
+            try {
+                $connection = DB::connection('mysql')->getPdo();
+                $this->line("Connection to database successfull");
+                return 0;
+            } catch (\Exception $e) {
+                $this->error($e->getMessage());
+                sleep(1);
+            }
+        }
+        return 1;
+    }
+}
diff --git a/app/Http/Controllers/AdminInterface.php b/app/Http/Controllers/AdminInterface.php
index c9f1cf902dcdc1d099105eb9442d5c33bb309de8..d0b4664fece70baba754309f5333736434528707 100644
--- a/app/Http/Controllers/AdminInterface.php
+++ b/app/Http/Controllers/AdminInterface.php
@@ -87,8 +87,48 @@ class AdminInterface extends Controller
         return $names;
     }
 
+    private function convertLogs()
+    {
+        $oldLogsPath = \storage_path("logs/metager/old/");
+        $dir = new \DirectoryIterator($oldLogsPath);
+        foreach ($dir as $fileinfo) {
+            if ($fileinfo->isDot()) {
+                continue;
+            }
+            $filename = $oldLogsPath . "/" . $fileinfo->getFilename();
+            $daysAgo = substr($fileinfo->getFilename(), strrpos($fileinfo->getFilename(), ".") + 1);
+            $dateOfFile = Carbon::now()->subDays($daysAgo);
+            $outputFile = \storage_path("logs/metager/" . $dateOfFile->format("Y/m/d") . ".log");
+            if (!file_exists(dirname($outputFile))) {
+                \mkdir(dirname($outputFile), 0777, true);
+            }
+            $fhw = fopen($outputFile, "w");
+            $fhr = fopen($filename, "r");
+            try {
+                $first = true;
+                while (($line = fgets($fhr)) != false) {
+                    $date = trim(substr($line, 0, strpos($line, "]")), "[");
+                    $date = trim(substr($date, strrpos($date, " ")));
+                    $rest = trim(substr($line, strpos($line, "]") + 1));
+                    $outputString = "";
+                    if (!$first) {
+                        $outputString .= PHP_EOL;
+                    }
+                    $outputString .= $date . " " . $rest;
+                    $first = false;
+                    fwrite($fhw, $outputString);
+                }
+            } finally {
+                fclose($fhw);
+                fclose($fhr);
+            }
+        }
+    }
+
     public function count(Request $request)
     {
+        #$this->convertLogs();
+        #return;
         $days = intval($request->input('days', 28));
         $interface = $request->input('interface', 'all');
         if (!is_int($days) || $days <= 0) {
@@ -98,6 +138,7 @@ class AdminInterface extends Controller
 
         $oldLogs = [];
         $rekordTag = 0;
+        $rekordTagSameTime = 0;
         $minCount = 0;
         $rekordTagDate = "";
         $size = 0;
@@ -249,14 +290,14 @@ class AdminInterface extends Controller
             $days = $maxDate->diffInDays(Carbon::now());
         }
 
-        $logToday = "/var/log/metager/mg3.log";
+        $logToday = \App\MetaGer::getMGLogFile();
 
-        $archivePath = "/var/log/metager/archive/";
+        $archivePath = storage_path("logs/metager/");
 
         $today = [
             'logFile' => $logToday,
-            'countPath' => storage_path('logs/count/'),
-            'countFile' => storage_path('logs/count/' . getmypid()),
+            'countPath' => storage_path('logs/metager/count/'),
+            'countFile' => storage_path('logs/metager/count/' . getmypid()),
         ];
         if (\file_exists($today["countFile"])) {
             unlink($today["countFile"]);
@@ -271,10 +312,10 @@ class AdminInterface extends Controller
         $requestedLogs = [];
         for ($i = 1; $i <= $days; $i++) {
             $date = Carbon::now()->subDays($i);
-            $countPath = storage_path('logs/count/' . $date->year . "/" . $date->month . "/");
+            $countPath = storage_path('logs/metager/count/' . $date->format("Y/m") . "/");
             $countFile = $countPath . $date->day . ".json";
             $neededLogs[$i] = [
-                'logFile' => $archivePath . "mg3.log.$i",
+                'logFile' => $archivePath . $date->format("Y/m/d") . ".log",
                 'countPath' => $countPath,
                 'countFile' => $countFile,
             ];
diff --git a/app/Jobs/ConvertCountFile.php b/app/Jobs/ConvertCountFile.php
index e08c3cd3405454337bb0c2c4d5e66c0cbb4dc7e5..bdab84173eeea32572d3159bc948fabb99d963e0 100644
--- a/app/Jobs/ConvertCountFile.php
+++ b/app/Jobs/ConvertCountFile.php
@@ -39,6 +39,7 @@ class ConvertCountFile implements ShouldQueue
         ];
         $fh = false;
         $fullRound = false;
+        $error = false;
         try {
             $fh = fopen($this->files["logFile"], "r");
             $currentLogTime = Carbon::now()->hour(0)->minute(0)->second(0)->addMinutes(5);
@@ -47,7 +48,7 @@ class ConvertCountFile implements ShouldQueue
                 $logTime = [];
                 $interface = "";
                 // i.e. [Wed Apr 17 00:00:01] ref=https://metager.de/ time=0.51 serv=web interface=de
-                if (preg_match('/\[[a-zA-z]{3}\s[a-zA-Z]{3}\s\d{2}\s(\d{2}:\d{2}:\d{2}).*?\sinterface=(\S+)/', $line, $matches)) {
+                if (preg_match('/(\d{2}:\d{2}:\d{2}).*?\sinterface=(\S+)/', $line, $matches)) {
                     // Create Date Object
                     $logTime = explode(":", $matches[1]);
                     $interface = $matches[2];
@@ -84,18 +85,22 @@ class ConvertCountFile implements ShouldQueue
             if (empty($result["time"][$currentLogTime->format('H:i')])) {
                 $result["time"][$currentLogTime->format('H:i')] = $result["insgesamt"];
             }
+        } catch (\ErrorException $e) {
+            $error = true;
         } finally {
             if ($fh !== false) {
                 fclose($fh);
             }
 
-            $oldUmask = umask(0);
-            // Write the result to a File
-            if (!file_exists($this->files["countPath"])) {
-                mkdir($this->files["countPath"], 0777, true);
+            if (!$error) {
+                $oldUmask = umask(0);
+                // Write the result to a File
+                if (!file_exists($this->files["countPath"])) {
+                    mkdir($this->files["countPath"], 0777, true);
+                }
+                file_put_contents($this->files["countFile"], json_encode($result, JSON_PRETTY_PRINT));
+                umask($oldUmask);
             }
-            file_put_contents($this->files["countFile"], json_encode($result, JSON_PRETTY_PRINT));
-            umask($oldUmask);
 
             Redis::del(md5($this->files["countFile"]));
         }
diff --git a/app/MetaGer.php b/app/MetaGer.php
index 9eae9f05ff5363e9c248e053417efcd237ae17e6..ea175f09edd33537bb15603ad4dbe7451c524672 100644
--- a/app/MetaGer.php
+++ b/app/MetaGer.php
@@ -1338,11 +1338,11 @@ class MetaGer
 
     public static function getMGLogFile()
     {
-        $logpath = storage_path("logs/metager/");
+        $logpath = storage_path("logs/metager/" . date("Y") . "/" . date("m") . "/");
         if (!file_exists($logpath)) {
             mkdir($logpath, 0777, true);
         }
-        $logpath .= (new \DateTime())->format('Y-m-d') . ".log";
+        $logpath .= date("d") . ".log";
         return $logpath;
     }
 
@@ -1351,19 +1351,7 @@ class MetaGer
         if ($this->shouldLog) {
             try {
                 $logEntry = "";
-                $logEntry .= "[" . date("D M d H:i:s") . "]";
-                /*
-                Someone might wonder now why we are saving the IP-Adress to the log file here:
-                It's because we were targets of heavy Bot attacks which created so many Search-Request to our Servers that
-                not only our servers but the ones from some of our search engines too collapsed.
-                At that point we could'nt prevent the Bot from accessing our server because we would need it's IP-Adress to do so.
-
-                That's why we need to save the IP-Adress to our Log-Files temporarily. The logrotate process that shifts our Log-Files will then
-                automatically remove the IP-Adresses from the Log-File after a few hours.
-                This method gives us just enough time to prevent malicious Software from bringing our servers down and at the same time having not a single
-                IP-Adress older than one day stored on our servers. (Except the ones who got banned in that short period of course) ;-)
-                 */
-                $logEntry .= " ip=" . $this->request->ip();
+                $logEntry .= date("H:s:i");
                 $logEntry .= " ref=" . $this->request->header('Referer');
                 $logEntry .= " time=" . round((microtime(true) - $this->starttime), 2) . " serv=" . $this->fokus;
                 $logEntry .= " interface=" . LaravelLocalization::getCurrentLocale();
diff --git a/database/seeds/UsersSeeder.php b/database/seeds/UsersSeeder.php
index 2acbf13573deb625165c45f8475c756197a0e146..284507e63abac3bb131f15e9d36df95714f4beef 100644
--- a/database/seeds/UsersSeeder.php
+++ b/database/seeds/UsersSeeder.php
@@ -11,6 +11,13 @@ class UsersSeeder extends Seeder
      */
     public function run()
     {
-
+        DB::table('users')->truncate();
+        DB::table('users')->insert(
+            [
+                'email' => 'admin',
+                'name' => 'admin',
+                'password' => Hash::make('admin'),
+            ]
+        );
     }
 }
diff --git a/docker-compose.yml b/docker-compose.yml
index cf67b27735b17e5c6a2a832d6133830eff963091..12a424fca3b5ece1a22765225c94f933e73fd5b9 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -12,17 +12,29 @@ services:
     working_dir: /usr/src/app
     command: bash -c "npm install && npm run watch"
   dependencies:
-    image: alpine:latest
+    depends_on:
+      - "mgdb"
+    image: php:7.3-cli
     volumes:
       - .:/data
     working_dir: /data
     command: /data/init.sh
+  mgdb:
+    restart: unless-stopped
+    image: mariadb:latest
+    command: --default-authentication-plugin=mysql_native_password
+    environment:
+      - MYSQL_RANDOM_ROOT_PASSWORD=yes
+      - MYSQL_USER=metager
+      - MYSQL_PASSWORD=metager
+      - MYSQL_DATABASE=metager
   web:
     depends_on:
+      - "mgdb"
       - "dependencies"
       - "phpdeps"
       - "assets"
-    restart: on-failure
+    restart: unless-stopped
     build: .
     working_dir: /html
     volumes:
diff --git a/init.sh b/init.sh
index 905683b982c2ad6da3559a8f27d7f5073127c876..d1b105df9bc1a594c533fc1328f7869fa68eac05 100755
--- a/init.sh
+++ b/init.sh
@@ -1,5 +1,9 @@
 #!/bin/sh
 
+# This commands will help initialize data for docker-compose setup
+# Its supposed to run in a php docker image
+docker-php-ext-install pdo pdo_mysql
+
 if [ ! -f "/data/.env" ]; then
     cp /data/.env.example /data/.env
 fi
@@ -7,6 +11,11 @@ fi
 if [ -f "/data/database/useragents.sqlite" ]; then
     rm /data/database/useragents.sqlite
 fi
-cp /data/database/useragents.sqlite.example /data/database/useragents.sqlite
 
-chmod -R go+w storage bootstrap/cache
\ No newline at end of file
+touch /data/database/useragents.sqlite
+
+chmod -R go+w storage bootstrap/cache
+
+php artisan wait:db
+php artisan migrate
+php artisan db:seed
\ No newline at end of file