TFC: Complete HTTP server & programming language sections

Signed-off-by: Nicolás Ortega Froysa <nicolas@ortegas.org>
This commit is contained in:
Nicolás A. Ortega Froysa 2023-04-27 17:18:59 +02:00
parent 16c48af913
commit 77d275f05a
4 changed files with 55 additions and 17 deletions

BIN
TFC/imgs/ss-lang-stats.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

View File

@ -268,21 +268,59 @@ nuestra disposición, como podrían ser PowerDNS, MaraDNS, NSD, KnotDNS, y Bind9
% TODO: finish % TODO: finish
Entre los programas de servidores HTTP existen dos candidatos principales: Nginx Entre los programas de servidores HTTP existen dos candidatos principales: Nginx
y Apache. y Apache. Aunque si quisiésemos instalar nuestra solución en una máquina de
% TODO: finish {\it Microsoft Windows} se podría contemplar {\it Microsoft Internet Information
Services} (IIS), pero esta opción no esta disponible en Debian GNU/Linux -- o
realmente cualquier sistema operativo que no sea {\it Microsoft Windows}. Para
lo poco que hará nuestro servidor HTTP local, tanto Nginx como Apache podrán
cumplir con los requisitos: servir páginas HTML y pasar peticiones (i.e.\ {\it
requests}) HTTP a un {\it script} para gestionarla; así que la elección es
arbitraria. Es verdad que, en cuestión de gestión de contenidos estáticos, Nginx
tiene una ventaja sobre Apache, pero en cuanto a la gestión de contenidos
dinámicos (i.e.\ páginas dinámicas que se gestionan a partir de {\it scripts})
apenas hay diferencia entre las dos opciones. Escogeremos a Nginx simplemente
por el criterio de mayor conocimiento y experiencia con su uso y administración.
% SRC: https://hackr.io/blog/nginx-vs-apache
\begin{figure}[h]
\centering
\includegraphics[width=0.4\textwidth]{imgs/ss-lang-stats.png}
\caption{Estadísticas de uso de lenguajes de \\ programación en el lado
servidor.}
\label{fig:ss-lang-stats}
\end{figure}
Finalmente, precisamos un lenguaje de programación por el cual podemos enviar un Finalmente, precisamos un lenguaje de programación por el cual podemos enviar un
correo al administrador de la red con la información pertinente. correo al administrador de la red con la información pertinente del intento de
% TODO: finish acceso a un sitio web prohibido (i.e.\ pornográfico). Para esto existen varias
alternativas hoy en día, las principales siendo PHP, Ruby, Python, y JavaScript
(por medio de NodeJS). De estas opciones la más utilizada en servidores, sin
competición alguna -- ocupando un 77,5\% del mercado -- es PHP (figura
\ref{fig:ss-lang-stats}). Es muy fácil de incorporar a un servidor HTTP, la
mayoría (como Nginx) tienen formas de incorporarlo como un módulo, y otros
servidores lo tienen directamente incorporado (como el caso de Apache). Tiene
también un interprete ligero, y es muy estable. Por estos motivos, el lenguaje
que utilizaremos será PHP.
% SRC: https://w3techs.com/technologies/overview/programming_language/
Con el lenguaje de programación PHP existen varios métodos de enviar correos, y
aunque existe la función por defecto de PHP, {\tt mail()}, no queremos
utilizarlo ya que es demasiado simple y no soporta el protocolo SMTP, que sería
útil para enviar correos a una dirección personal sin que aparecieran como {\it
spam}. Lo que quiere decir que tendremos que utilizar un módulo de terceros para
gestionar el envío de correos. Para esto conviene un módulo que esté disponible
y de fácil instalación en nuestro sistema. En esto la opción más conveniente
sería {\it PHPMailer}. Aunque {\it Symfony Mailer} sería otra opción que se
utiliza mucho con PHP, no esta disponible en los repositorios de Debian
GNU/Linux, como PHPMailer, y por lo tanto sería más difícil de instalar y
actualizar, sobre todo el proceso de una actualización automática.
% SRC: https://mailtrap.io/blog/php-email-sending/
% SRC: https://www.debian.org/distrib/packages
% Software Dependencies: % Software Dependencies:
% - Bind9/Named [PowerDNS,MaraDNS,NSD,KnotDNS] % - Bind9/Named [PowerDNS,MaraDNS,NSD,KnotDNS]
% https://en.wikipedia.org/wiki/Comparison_of_DNS_server_software % https://en.wikipedia.org/wiki/Comparison_of_DNS_server_software
% - Nginx [Apache]
% https://kinsta.com/blog/nginx-vs-apache/
% - PHP [Ruby,Python]
% - PHPMailer [mail() function, Symfony Mailer]
% https://mailtrap.io/blog/php-email-sending/
\subsection{Diseño de Solución} \subsection{Diseño de Solución}
\section{Pruebas y Despliegue} \section{Pruebas y Despliegue}

View File

@ -12,11 +12,11 @@
\contentsline {subsection}{\numberline {4.1}Análisis de Requisitos}{4}{subsection.4.1}% \contentsline {subsection}{\numberline {4.1}Análisis de Requisitos}{4}{subsection.4.1}%
\contentsline {subsubsection}{\numberline {4.1.1}Requisitos Hardware}{4}{subsubsection.4.1.1}% \contentsline {subsubsection}{\numberline {4.1.1}Requisitos Hardware}{4}{subsubsection.4.1.1}%
\contentsline {subsubsection}{\numberline {4.1.2}Requisitos Software}{6}{subsubsection.4.1.2}% \contentsline {subsubsection}{\numberline {4.1.2}Requisitos Software}{6}{subsubsection.4.1.2}%
\contentsline {subsection}{\numberline {4.2}Diseño de Solución}{9}{subsection.4.2}% \contentsline {subsection}{\numberline {4.2}Diseño de Solución}{10}{subsection.4.2}%
\contentsline {section}{\numberline {5}Pruebas y Despliegue}{9}{section.5}% \contentsline {section}{\numberline {5}Pruebas y Despliegue}{10}{section.5}%
\contentsline {subsection}{\numberline {5.1}Plan de Pruebas}{9}{subsection.5.1}% \contentsline {subsection}{\numberline {5.1}Plan de Pruebas}{10}{subsection.5.1}%
\contentsline {subsection}{\numberline {5.2}Manuales Técnicos y de Usuario}{9}{subsection.5.2}% \contentsline {subsection}{\numberline {5.2}Manuales Técnicos y de Usuario}{10}{subsection.5.2}%
\contentsline {subsection}{\numberline {5.3}Plan de Despliegue}{9}{subsection.5.3}% \contentsline {subsection}{\numberline {5.3}Plan de Despliegue}{10}{subsection.5.3}%
\contentsline {section}{\numberline {6}Conclusiones y Propuestas de Mejora}{9}{section.6}% \contentsline {section}{\numberline {6}Conclusiones y Propuestas de Mejora}{10}{section.6}%
\contentsline {section}{\numberline {7}Bibliografía}{9}{section.7}% \contentsline {section}{\numberline {7}Bibliografía}{10}{section.7}%
\contentsline {section}{\numberline {8}Derechos de Autor y Licencia}{10}{section.8}% \contentsline {section}{\numberline {8}Derechos de Autor y Licencia}{11}{section.8}%