]> git.leonardobizzoni.com Git - highschool-graduation-project/commitdiff
Separate php container
authorLeonardoBizzoni <leo2002714@gmail.com>
Fri, 6 May 2022 08:08:48 +0000 (10:08 +0200)
committerLeonardoBizzoni <leo2002714@gmail.com>
Fri, 6 May 2022 08:08:48 +0000 (10:08 +0200)
README.org
dockerfiles/bll/Dockerfile [new file with mode: 0644]
dockerfiles/docker-compose.yml [new file with mode: 0644]
dockerfiles/web/Dockerfile
dockerfiles/web/README.org [new file with mode: 0644]
dockerfiles/web/nginx.conf
www/models/Vtubers.php

index 18a2ba27126cbf6fbf7a48a1fa642f48a7bff882..68283694b149a2d985df6222dd388c2a847018ca 100644 (file)
@@ -64,13 +64,17 @@ Se l'idol non è attualmente live viene mostrata una pagina che notifica l'utent
 
 * Setup
 ** Configurazione ed installazione server
-*** Server web - Nginx
+*** Presentation Layer - Nginx
 Ho deciso di utilizzare Nginx come web server per le performance nettamente migliori e leggerezza in confronto ad altri web server.
+Inoltre la configura di Nginx è molto più semplice di web server come Apache.
 
-L'installazione viene effettuata tramite un docker container e la seguente [[./dockerfiles/web/Dockerfile][container image]].
-Nginx utilizza il seguente [[./dockerfiles/web/nginx.conf][file di configurazione]].
+/Soluzioni microsoft come il web server IIS non sono state considerate per via delle license sotto cui sono pubblicate ed a causa del mio odio verso i loro prodotti./
 
-*** Server database - MariaDB
+Per maggiori spiegazioni sulla container image e la configurazione di nginx recarsi [[./dockerfiles/web/README.org][qui]].
+
+*** Business Logic Layer - PHP
+
+*** Data Layer - MariaDB
 L'installazione del database server mariadb viene anch'essa eseguita tramite un docker container e la container image disponibile su [[https://hub.docker.com/_/mariadb][hub.docker]] per cui non ha bisogno di alcuna configurazione.
 
 ** Esecuzione server
diff --git a/dockerfiles/bll/Dockerfile b/dockerfiles/bll/Dockerfile
new file mode 100644 (file)
index 0000000..b826006
--- /dev/null
@@ -0,0 +1,14 @@
+FROM php:8.1.4-fpm-alpine3.14
+WORKDIR /var/www/html
+
+RUN apk update && apk add --no-cache \
+    php8 \
+    php8-fpm \
+    php8-mysqli \
+    php8-pdo \
+
+RUN docker-php-ext-install pdo pdo_mysql mysqli
+
+RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
+
+CMD php-fpm -D
diff --git a/dockerfiles/docker-compose.yml b/dockerfiles/docker-compose.yml
new file mode 100644 (file)
index 0000000..ec92419
--- /dev/null
@@ -0,0 +1,19 @@
+version: '3'
+services:
+  web:
+    build: ./web/
+    ports:
+      - "80:80"
+    volumes:
+      - ../www:/var/www/html
+
+  app:
+    build: ./bll/
+    volumes:
+      - ../www:/var/www/html
+
+  db:
+    image: "mariadb"
+    environment:
+      MARIADB_USER: "root"
+      MARIADB_ROOT_PASSWORD: "root"
index 480a6ca5f7b309db07c17f600b105d37a148a6cf..75ffb8c0ebdb8dd2fa84341655aa7faffa87af9f 100644 (file)
@@ -1,18 +1,5 @@
-FROM php:8.1.4-fpm-alpine3.14
+FROM nginx:stable-alpine
 WORKDIR /var/www/html
 
-RUN apk update && apk add --no-cache \
-    php8 \
-    php8-fpm \
-    php8-mysqli \
-    php8-pdo \
-    nginx
-
-RUN docker-php-ext-install pdo pdo_mysql mysqli
-RUN docker-php-ext-enable pdo_mysql
-
-RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
-RUN php-fpm &
-
 COPY nginx.conf /etc/nginx/nginx.conf
-CMD php-fpm -D && nginx -g "daemon off;"
+CMD nginx -g "daemon off;"
diff --git a/dockerfiles/web/README.org b/dockerfiles/web/README.org
new file mode 100644 (file)
index 0000000..5641d19
--- /dev/null
@@ -0,0 +1,25 @@
+#+title: Nginx
+
+* Contenuti :TOC:
+- [[#configurazione-web-server][Configurazione web server]]
+- [[#container-image][Container image]]
+  - [[#dockerfile][Dockerfile]]
+
+* Configurazione web server
+
+* Container image
+Una container image è un package di software eseguibile, leggero ed isolato che include tutto il necessario per eseguire il suo compito, in questo caso svolge la funzione di web server.
+
+Le container image diventano container quando vengono eseguite dal *docker engine* tramite CLI o interfaccia grafica.
+
+Una soluzione alternativa ai container è la virtualizzazione.
+Non ho optato per la virtualizzazione semplicemente perchè è molto comodo gestire i 3 diversi container tramite docker-compose da CLI.
+Inoltre i container offrono performance miglori sfruttando il kernel della macchina host, ma questo nel contesto cloud è secondario.
+
+** Dockerfile
+La base container image utilizzata è quella ufficiale di nginx reperibile sul sito web [[https://hub.docker.com/_/nginx?tab=description][hub.docker.com]].
+Per preferenza personale utilizzo il tag *stable-alpine* per usufruire della versione stable di nginx e per il ridotto numero di package preinstallati da alpine.
+
+#+begin_src dockerfile
+FROM nginx:stable-alpine
+#+end_src
index 2775a51312d054b4532cd4e3a4f416607d47ba6b..8a5dac60b39f0969bd02d24e5abc24347e0e3f80 100644 (file)
@@ -21,7 +21,7 @@ http {
                }
 
                location ~ \.php$ {
-                    fastcgi_pass      127.0.0.1:9000;
+                    fastcgi_pass      app:9000;
                     fastcgi_index     index.php;
                     include           fastcgi.conf;
                }
index 0f338083e51834e0f7cb3213f410324adf57039c..cf1f680eda4560f3d9c79af5df84fce4856960e7 100644 (file)
@@ -93,49 +93,49 @@ class Vtubers extends DbModel
 
     public function isLive(string $login, string $link)
     {
-        // if (str_contains($link, "twitch.tv")) {
-        //     $clientID = Application::$app->config["twitch"]["clientid"] ?? "";
-        //     $token = Application::$app->config["twitch"]["token"] ?? "";
+        if (str_contains($link, "twitch.tv")) {
+            $clientID = Application::$app->config["twitch"]["clientid"] ?? "";
+            $token = Application::$app->config["twitch"]["token"] ?? "";
 
-        //     $url = "https://api.twitch.tv/helix/streams?user_login=$login";
+            $url = "https://api.twitch.tv/helix/streams?user_login=$login";
 
-        //     $ch = curl_init($url);
-        //     curl_setopt($ch, CURLOPT_URL, $url);
-        //     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
-        //     curl_setopt($ch, CURLOPT_HTTPHEADER, array("Client-ID: $clientID", "Authorization: Bearer $token"));
+            $ch = curl_init($url);
+            curl_setopt($ch, CURLOPT_URL, $url);
+            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
+            curl_setopt($ch, CURLOPT_HTTPHEADER, array("Client-ID: $clientID", "Authorization: Bearer $token"));
 
-        //     $result = get_object_vars(json_decode(curl_exec($ch)));
-        //     curl_close($ch);
+            $result = get_object_vars(json_decode(curl_exec($ch)));
+            curl_close($ch);
 
-        //     return count($result["data"]) ? $result["data"] : [];
-        // }
+            return count($result["data"]) ? $result["data"] : [];
+        }
 
-        // if (str_contains($link, "youtube.com")) {
-        //     $url = "https://www.youtube.com/channel/$login/live";
+        if (str_contains($link, "youtube.com")) {
+            $url = "https://www.youtube.com/channel/$login/live";
 
-        //     $ch = curl_init($url);
-        //     curl_setopt($ch, CURLOPT_URL, $url);
-        //     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
+            $ch = curl_init($url);
+            curl_setopt($ch, CURLOPT_URL, $url);
+            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
 
-        //     $result = curl_exec($ch);
-        //     curl_close($ch);
+            $result = curl_exec($ch);
+            curl_close($ch);
 
-        //     $doc = new DOMDocument();
-        //     libxml_use_internal_errors(true);
-        //     $doc->loadHTML($result);
+            $doc = new DOMDocument();
+            libxml_use_internal_errors(true);
+            $doc->loadHTML($result);
 
-        //     $result = $doc->getElementsByTagName("link");
-        //     $length = $result->length;
+            $result = $doc->getElementsByTagName("link");
+            $length = $result->length;
 
-        //     for ($i = 0; $i < $length; $i++) {
-        //         $tag = $result->item($i)->getAttribute("href");
-        //         if (str_contains($tag, "https://www.youtube.com/watch?v=")) {
-        //             return [str_replace("https://www.youtube.com/watch?v=", "",  $tag)];
-        //         }
-        //     }
+            for ($i = 0; $i < $length; $i++) {
+                $tag = $result->item($i)->getAttribute("href");
+                if (str_contains($tag, "https://www.youtube.com/watch?v=")) {
+                    return [str_replace("https://www.youtube.com/watch?v=", "",  $tag)];
+                }
+            }
 
-        //     unset($doc);
-        // }
+            unset($doc);
+        }
 
         return [];
     }