* 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
--- /dev/null
+#+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
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 [];
}