diff --git a/.gitignore b/.gitignore
index 47f744f78343ddabc0d91b28cda317dfeea4d791..3598373ff607b4e2bbac67dc4738592cf3ce92f6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,2 @@
-internal/config.php
+public/internal/config.php
 .idea/
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 0000000000000000000000000000000000000000..579a73af17d3f72eac1cbe626ad45597b3d063bd
--- /dev/null
+++ b/.gitlab-ci.yml
@@ -0,0 +1,13 @@
+docker-build-master:
+  # Official docker image.
+  image: docker:latest
+  stage: build
+  services:
+    - docker:dind
+  before_script:
+    - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD"
+  script:
+    - sudo docker build -t gitlab.jonasled.de/jonasled/website .
+    - docker push "gitlab.jonasled.de/jonasled/website"
+  only:
+    - master
\ No newline at end of file
diff --git a/.template b/.template
deleted file mode 100644
index 3d6594107d8a43bbf972534a22ba2d0e6bb60a7a..0000000000000000000000000000000000000000
--- a/.template
+++ /dev/null
@@ -1,72 +0,0 @@
-<?php
-include "../internal/mysql.php";
-
-?>
-
-<!DOCTYPE html>
-<html lang="de">
-<html>
-<head>
-    <meta charset="UTF-8">
-    <meta name="viewport" content="width=device-width, initial-scale=1.0">
-    <title>Website Cloner - Jonas Leder</title>
-
-    <link href="/css/style.css" rel="stylesheet">
-    <link href="/css/normalize.css" rel="stylesheet">
-    <link href="/css/sourcesanspro.css" rel="stylesheet">
-    <link href="/css/menue.css" rel="stylesheet">
-    <script src="https://kit.fontawesome.com/038c6c1f0e.js" crossorigin="anonymous"></script>
-    <!-- Matomo -->
-    <script type="text/javascript">
-        var _paq = window._paq = window._paq || [];
-        /* tracker methods like "setCustomDimension" should be called before "trackPageView" */
-        _paq.push(["setCookieDomain", "*.jonasled.de"]);
-        _paq.push(['trackPageView']);
-        _paq.push(['enableLinkTracking']);
-        (function() {
-            var u="//matomo.jonasled.de/";
-            _paq.push(['setTrackerUrl', u+'matomo.php']);
-            _paq.push(['setSiteId', '1']);
-            var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
-            g.type='text/javascript'; g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
-        })();
-    </script>
-    <noscript><p><img src="//matomo.jonasled.de/matomo.php?idsite=1&amp;rec=1" style="border:0;" alt="" /></p></noscript>
-    <!-- End Matomo Code -->
-</head>
-<body>
-<header>
-    <div class="header-wrapper">
-        <div class="header-homepage  color-overlay" data-parallax-depth="20">
-            <div class="header-description gridContainer content-on-center">
-                <div class="row header-description-row">
-                    <div class="header-content header-content-centered">
-                        <div class="align-holder">
-                            <h1 class="heading8">Website Cloner</h1>
-                            <p class="header-subtitle"> </p>
-                            <div class="header-buttons-wrapper"></div>
-                        </div>
-                    </div>
-                </div>
-            </div>
-        </div>
-        <div class="header-separator header-separator-bottom ">
-            <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1000 100" preserveAspectRatio="none">
-                <path class="svg-white-bg" d="M737.9,94.7L0,0v100h1000V0L737.9,94.7z"></path>
-            </svg>
-        </div>
-    </div>
-    <div id="mainMenu" includeHTML="/include/menue.php?page=projekte"></div>
-</header>
-<div id="content">
-<p>
-
-</p>
-
-
-</div>
-<footer includeHTML="/include/footer.php">
-</footer>
-<script src="/js/includeHTML.js"></script>
-</body>
-</html>
\ No newline at end of file
diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..1fe90eadc3c8baf1a1cfe3c5fc7ab2164e7fc321
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,33 @@
+ARG INSTALL_CRON=1
+ARG INSTALL_COMPOSER=1
+ARG PHP_VERSION
+ARG GLOBAL_VERSION
+FROM thecodingmachine/php:8.0-v4-slim-apache
+
+# |--------------------------------------------------------------------------
+# | Main PHP extensions
+# |--------------------------------------------------------------------------
+# |
+# | Installs the main PHP extensions
+# |
+
+USER root
+RUN cd /usr/local/lib/thecodingmachine-php/extensions/current/ && ./install_all.sh && ./disable_all.sh
+USER docker
+
+# |--------------------------------------------------------------------------
+# | Default PHP extensions to be enabled (in addition to the one declared in Slim build)
+# |--------------------------------------------------------------------------
+ENV PHP_EXTENSION_APCU=1 \
+    PHP_EXTENSION_MYSQLI=1 \
+    PHP_EXTENSION_PDO_MYSQL=1 \
+    PHP_EXTENSION_IGBINARY=1 \
+    PHP_EXTENSION_REDIS=1 \
+    PHP_EXTENSION_SOAP=1
+
+
+# |--------------------------------------------------------------------------
+# | Add php files of website
+# |--------------------------------------------------------------------------
+COPY ./public /var/www/html
+#RUN rm /var/www/html/internal/config.php
\ No newline at end of file
diff --git a/apache.conf b/apache.conf
new file mode 100644
index 0000000000000000000000000000000000000000..3b74b4b4a9e5633d951d26adc59e4272f1300d9c
--- /dev/null
+++ b/apache.conf
@@ -0,0 +1,10 @@
+<VirtualHost *:80>
+  ServerAdmin webmaster@localhost
+  DocumentRoot /var/www/public
+
+  <Directory /var/www>
+    Options Indexes FollowSymLinks
+    AllowOverride All
+    Require all granted
+  </Directory>
+</VirtualHost>
\ No newline at end of file
diff --git a/.htaccess b/public/.htaccess
similarity index 100%
rename from .htaccess
rename to public/.htaccess
diff --git a/404.html b/public/404.html
similarity index 100%
rename from 404.html
rename to public/404.html
diff --git a/Projekte/URLkuerzer1.php b/public/Projekte/URLkuerzer1.php
similarity index 100%
rename from Projekte/URLkuerzer1.php
rename to public/Projekte/URLkuerzer1.php
diff --git a/Projekte/URLkuerzer2.php b/public/Projekte/URLkuerzer2.php
similarity index 100%
rename from Projekte/URLkuerzer2.php
rename to public/Projekte/URLkuerzer2.php
diff --git a/Projekte/blitzortung.php b/public/Projekte/blitzortung.php
similarity index 100%
rename from Projekte/blitzortung.php
rename to public/Projekte/blitzortung.php
diff --git a/Projekte/gclogLink.php b/public/Projekte/gclogLink.php
similarity index 100%
rename from Projekte/gclogLink.php
rename to public/Projekte/gclogLink.php
diff --git a/Projekte/index.html b/public/Projekte/index.html
similarity index 100%
rename from Projekte/index.html
rename to public/Projekte/index.html
diff --git a/Projekte/insecam.php b/public/Projekte/insecam.php
similarity index 100%
rename from Projekte/insecam.php
rename to public/Projekte/insecam.php
diff --git a/Projekte/ledtisch1.php b/public/Projekte/ledtisch1.php
similarity index 100%
rename from Projekte/ledtisch1.php
rename to public/Projekte/ledtisch1.php
diff --git a/Projekte/ledtisch2.php b/public/Projekte/ledtisch2.php
similarity index 100%
rename from Projekte/ledtisch2.php
rename to public/Projekte/ledtisch2.php
diff --git a/Projekte/mqttpush.php b/public/Projekte/mqttpush.php
similarity index 100%
rename from Projekte/mqttpush.php
rename to public/Projekte/mqttpush.php
diff --git a/Projekte/proxdroid.php b/public/Projekte/proxdroid.php
similarity index 100%
rename from Projekte/proxdroid.php
rename to public/Projekte/proxdroid.php
diff --git a/Projekte/regensensor.php b/public/Projekte/regensensor.php
similarity index 100%
rename from Projekte/regensensor.php
rename to public/Projekte/regensensor.php
diff --git a/Projekte/smartmirror.php b/public/Projekte/smartmirror.php
similarity index 100%
rename from Projekte/smartmirror.php
rename to public/Projekte/smartmirror.php
diff --git a/Projekte/snowboy.php b/public/Projekte/snowboy.php
similarity index 100%
rename from Projekte/snowboy.php
rename to public/Projekte/snowboy.php
diff --git a/Projekte/websitecloner.php b/public/Projekte/websitecloner.php
similarity index 100%
rename from Projekte/websitecloner.php
rename to public/Projekte/websitecloner.php
diff --git a/Projekte/youtubedownloader.php b/public/Projekte/youtubedownloader.php
similarity index 100%
rename from Projekte/youtubedownloader.php
rename to public/Projekte/youtubedownloader.php
diff --git a/about.php b/public/about.php
similarity index 100%
rename from about.php
rename to public/about.php
diff --git a/bildquellen.php b/public/bildquellen.php
similarity index 100%
rename from bildquellen.php
rename to public/bildquellen.php
diff --git a/css/error.css b/public/css/error.css
similarity index 100%
rename from css/error.css
rename to public/css/error.css
diff --git a/css/index.html b/public/css/index.html
similarity index 100%
rename from css/index.html
rename to public/css/index.html
diff --git a/css/menue.css b/public/css/menue.css
similarity index 100%
rename from css/menue.css
rename to public/css/menue.css
diff --git a/css/normalize.css b/public/css/normalize.css
similarity index 100%
rename from css/normalize.css
rename to public/css/normalize.css
diff --git a/css/ntp.css b/public/css/ntp.css
similarity index 100%
rename from css/ntp.css
rename to public/css/ntp.css
diff --git a/css/prism.css b/public/css/prism.css
similarity index 100%
rename from css/prism.css
rename to public/css/prism.css
diff --git a/css/sourcesanspro.css b/public/css/sourcesanspro.css
similarity index 100%
rename from css/sourcesanspro.css
rename to public/css/sourcesanspro.css
diff --git a/css/style.css b/public/css/style.css
similarity index 100%
rename from css/style.css
rename to public/css/style.css
diff --git a/database.sql b/public/database.sql
similarity index 100%
rename from database.sql
rename to public/database.sql
diff --git a/datenschutzerklaerung.php b/public/datenschutzerklaerung.php
similarity index 100%
rename from datenschutzerklaerung.php
rename to public/datenschutzerklaerung.php
diff --git a/favicon.ico b/public/favicon.ico
similarity index 100%
rename from favicon.ico
rename to public/favicon.ico
diff --git a/files/Insecam_v2.zip b/public/files/Insecam_v2.zip
similarity index 100%
rename from files/Insecam_v2.zip
rename to public/files/Insecam_v2.zip
diff --git a/files/MQTT_Message.zip b/public/files/MQTT_Message.zip
similarity index 100%
rename from files/MQTT_Message.zip
rename to public/files/MQTT_Message.zip
diff --git a/files/SmartMirror.zip b/public/files/SmartMirror.zip
similarity index 100%
rename from files/SmartMirror.zip
rename to public/files/SmartMirror.zip
diff --git a/files/blitzortung.zip b/public/files/blitzortung.zip
similarity index 100%
rename from files/blitzortung.zip
rename to public/files/blitzortung.zip
diff --git a/files/blitzortung_v2.zip b/public/files/blitzortung_v2.zip
similarity index 100%
rename from files/blitzortung_v2.zip
rename to public/files/blitzortung_v2.zip
diff --git a/files/index.html b/public/files/index.html
similarity index 100%
rename from files/index.html
rename to public/files/index.html
diff --git a/files/insecam.zip b/public/files/insecam.zip
similarity index 100%
rename from files/insecam.zip
rename to public/files/insecam.zip
diff --git a/files/shorter.zip b/public/files/shorter.zip
similarity index 100%
rename from files/shorter.zip
rename to public/files/shorter.zip
diff --git a/font/index.html b/public/font/index.html
similarity index 100%
rename from font/index.html
rename to public/font/index.html
diff --git a/font/sourcesanspro-black-webfont.woff b/public/font/sourcesanspro-black-webfont.woff
similarity index 100%
rename from font/sourcesanspro-black-webfont.woff
rename to public/font/sourcesanspro-black-webfont.woff
diff --git a/font/sourcesanspro-black-webfont.woff2 b/public/font/sourcesanspro-black-webfont.woff2
similarity index 100%
rename from font/sourcesanspro-black-webfont.woff2
rename to public/font/sourcesanspro-black-webfont.woff2
diff --git a/font/sourcesanspro-bold-webfont.woff b/public/font/sourcesanspro-bold-webfont.woff
similarity index 100%
rename from font/sourcesanspro-bold-webfont.woff
rename to public/font/sourcesanspro-bold-webfont.woff
diff --git a/font/sourcesanspro-bold-webfont.woff2 b/public/font/sourcesanspro-bold-webfont.woff2
similarity index 100%
rename from font/sourcesanspro-bold-webfont.woff2
rename to public/font/sourcesanspro-bold-webfont.woff2
diff --git a/img/Insecam.png b/public/img/Insecam.png
similarity index 100%
rename from img/Insecam.png
rename to public/img/Insecam.png
diff --git a/img/MQTT-push-window.png b/public/img/MQTT-push-window.png
similarity index 100%
rename from img/MQTT-push-window.png
rename to public/img/MQTT-push-window.png
diff --git a/img/MQTT-push.png b/public/img/MQTT-push.png
similarity index 100%
rename from img/MQTT-push.png
rename to public/img/MQTT-push.png
diff --git a/img/Nexus_6P_-_Screenshot_11-576x1024.png b/public/img/Nexus_6P_-_Screenshot_11-576x1024.png
similarity index 100%
rename from img/Nexus_6P_-_Screenshot_11-576x1024.png
rename to public/img/Nexus_6P_-_Screenshot_11-576x1024.png
diff --git a/img/Nexus_6P_-_Screenshot_21-576x1024.png b/public/img/Nexus_6P_-_Screenshot_21-576x1024.png
similarity index 100%
rename from img/Nexus_6P_-_Screenshot_21-576x1024.png
rename to public/img/Nexus_6P_-_Screenshot_21-576x1024.png
diff --git a/img/Nexus_6P_-_Screenshot_31-576x1024.png b/public/img/Nexus_6P_-_Screenshot_31-576x1024.png
similarity index 100%
rename from img/Nexus_6P_-_Screenshot_31-576x1024.png
rename to public/img/Nexus_6P_-_Screenshot_31-576x1024.png
diff --git a/img/Nexus_6P_-_Screenshot_41-576x1024.png b/public/img/Nexus_6P_-_Screenshot_41-576x1024.png
similarity index 100%
rename from img/Nexus_6P_-_Screenshot_41-576x1024.png
rename to public/img/Nexus_6P_-_Screenshot_41-576x1024.png
diff --git a/img/Spiegel.jpg b/public/img/Spiegel.jpg
similarity index 100%
rename from img/Spiegel.jpg
rename to public/img/Spiegel.jpg
diff --git a/img/URL-kuerzer1.png b/public/img/URL-kuerzer1.png
similarity index 100%
rename from img/URL-kuerzer1.png
rename to public/img/URL-kuerzer1.png
diff --git a/img/bannerHome.webp b/public/img/bannerHome.webp
similarity index 100%
rename from img/bannerHome.webp
rename to public/img/bannerHome.webp
diff --git a/img/bildHome.webp b/public/img/bildHome.webp
similarity index 100%
rename from img/bildHome.webp
rename to public/img/bildHome.webp
diff --git a/img/blitzortung.png b/public/img/blitzortung.png
similarity index 100%
rename from img/blitzortung.png
rename to public/img/blitzortung.png
diff --git a/img/google-play-badge.png b/public/img/google-play-badge.png
similarity index 100%
rename from img/google-play-badge.png
rename to public/img/google-play-badge.png
diff --git a/img/index.html b/public/img/index.html
similarity index 100%
rename from img/index.html
rename to public/img/index.html
diff --git a/img/insecam_neu.png b/public/img/insecam_neu.png
similarity index 100%
rename from img/insecam_neu.png
rename to public/img/insecam_neu.png
diff --git a/img/kurz_ml_ldark.jpg b/public/img/kurz_ml_ldark.jpg
similarity index 100%
rename from img/kurz_ml_ldark.jpg
rename to public/img/kurz_ml_ldark.jpg
diff --git a/img/kurz_ml_light.png b/public/img/kurz_ml_light.png
similarity index 100%
rename from img/kurz_ml_light.png
rename to public/img/kurz_ml_light.png
diff --git a/img/ledTisch2.jpg b/public/img/ledTisch2.jpg
similarity index 100%
rename from img/ledTisch2.jpg
rename to public/img/ledTisch2.jpg
diff --git a/img/regensensor.jpg b/public/img/regensensor.jpg
similarity index 100%
rename from img/regensensor.jpg
rename to public/img/regensensor.jpg
diff --git a/img/snowboy_no_mic.png b/public/img/snowboy_no_mic.png
similarity index 100%
rename from img/snowboy_no_mic.png
rename to public/img/snowboy_no_mic.png
diff --git a/img/snowboy_wrong_sample_rate.png b/public/img/snowboy_wrong_sample_rate.png
similarity index 100%
rename from img/snowboy_wrong_sample_rate.png
rename to public/img/snowboy_wrong_sample_rate.png
diff --git a/impressum.php b/public/impressum.php
similarity index 100%
rename from impressum.php
rename to public/impressum.php
diff --git a/index.php b/public/index.php
similarity index 100%
rename from index.php
rename to public/index.php
diff --git a/internal/500.php b/public/internal/500.php
similarity index 100%
rename from internal/500.php
rename to public/internal/500.php
diff --git a/internal/comments.php b/public/internal/comments.php
similarity index 100%
rename from internal/comments.php
rename to public/internal/comments.php
diff --git a/internal/config.example.php b/public/internal/config.example.php
similarity index 100%
rename from internal/config.example.php
rename to public/internal/config.example.php
diff --git a/internal/footer.php b/public/internal/footer.php
similarity index 100%
rename from internal/footer.php
rename to public/internal/footer.php
diff --git a/internal/getGravatar.php b/public/internal/getGravatar.php
similarity index 100%
rename from internal/getGravatar.php
rename to public/internal/getGravatar.php
diff --git a/internal/header.php b/public/internal/header.php
similarity index 99%
rename from internal/header.php
rename to public/internal/header.php
index 8261843d19a2c9654facad1370f5c54e6cdc8fbf..764fe7b6998351138398fe3e4ee65f9a1fa89c67 100644
--- a/internal/header.php
+++ b/public/internal/header.php
@@ -4,7 +4,7 @@ include "menue.php";
 function getHeader($pagetitle, $navselect)
 {
     $menu = getMenu($navselect);
-    echo( <<<EOF
+    echo(<<<EOF
     <!DOCTYPE html >
     <html lang = "de" >
     <html >
diff --git a/internal/index.html b/public/internal/index.html
similarity index 100%
rename from internal/index.html
rename to public/internal/index.html
diff --git a/internal/menue.php b/public/internal/menue.php
similarity index 100%
rename from internal/menue.php
rename to public/internal/menue.php
diff --git a/internal/mysql.php b/public/internal/mysql.php
similarity index 100%
rename from internal/mysql.php
rename to public/internal/mysql.php
diff --git a/js/cookie.js b/public/js/cookie.js
similarity index 100%
rename from js/cookie.js
rename to public/js/cookie.js
diff --git a/js/error.js b/public/js/error.js
similarity index 100%
rename from js/error.js
rename to public/js/error.js
diff --git a/js/includeHTML.js b/public/js/includeHTML.js
similarity index 100%
rename from js/includeHTML.js
rename to public/js/includeHTML.js
diff --git a/js/index.html b/public/js/index.html
similarity index 100%
rename from js/index.html
rename to public/js/index.html
diff --git a/js/jquery-2.1.3.min.js b/public/js/jquery-2.1.3.min.js
similarity index 100%
rename from js/jquery-2.1.3.min.js
rename to public/js/jquery-2.1.3.min.js
diff --git a/js/prism.js b/public/js/prism.js
similarity index 100%
rename from js/prism.js
rename to public/js/prism.js
diff --git a/js/typed.js b/public/js/typed.js
similarity index 100%
rename from js/typed.js
rename to public/js/typed.js
diff --git a/newComment.php b/public/newComment.php
similarity index 100%
rename from newComment.php
rename to public/newComment.php
diff --git a/ntpstatus.php b/public/ntpstatus.php
similarity index 96%
rename from ntpstatus.php
rename to public/ntpstatus.php
index dbb2da0250498aefcd63b8918c656f0758b14cf6..b7c0ee7eeffe3510912cd772b45c00ad28b55c4c 100644
--- a/ntpstatus.php
+++ b/public/ntpstatus.php
@@ -4,7 +4,7 @@ include "internal/footer.php";
 
 getHeader("NTP Status", "status");
 ?>
-    <link href="css/ntp.css" rel="stylesheet">
+    <link href="data/css/ntp.css" rel="stylesheet">
     <p>Da ich selber viel auf NTP zur Zeitsynchronisation setze habe ich mich dazu entschlossen selber einen NTP Server, welche im ntp pool gelistet ist aufzusetzen. Unten sind die Statistiken zum Server für IPv4 und für IPv6</p>
     <a href="https://www.ntppool.org/scores/185.216.212.128">
         <div data-server-ip="185.216.212.128" class="graph"></div>
diff --git a/post.php b/public/post.php
similarity index 100%
rename from post.php
rename to public/post.php