Examen 3: Implementación de un sitio web de producción#
Objetivos#
- Instalación y configuración de un servidor de aplicaciones
- Creación del VirtualHost para la aplicación web
- Instalación de una aplicación web y configuración de ambiente productivo
- Instalación y configuración de la base de datos
- Configuración de características adicionales en el ambiente productivo
Elementos de apoyo#
Note
Todos estos videos están en una lista de reproducción dedicada a los temas de HTTP y SSL 📹
- Protocolo DNS 📼
- Configuración de OpenSSH y autenticación con llaves 📼
- Configuración de Apache HTTPD en Debian 📼
- Directivas de configuración de Apache HTTPD 📼
- Configuración de VirtualHosts de Apache HTTPD 2.4 utilizando /etc/hosts 📼
- Configuración de VirtualHosts de Apache HTTPD 2.4 con registros DNS 📼
- Certificados SSL x509 📼
- Certificados SSL con OpenSSL y VirtualHost HTTPS en Apache HTTPD 📼
- Trámite de un certificado SSL con Let's Encrypt utilizando certbot 📼
Páginas de manual de Apache HTTPD
Restricciones#
Danger
- La evaluación de esta actividad corresponderá al tercer examen parcial del curso
Warning
- Esta actividad depende de los recursos implementados en la práctica 8 y práctica 9
- Se recomienda que se realicen las actividades previas siguiendo la calendarización con el objeto de dejar suficiente tiempo para la elaboración de este examen práctico
- La fecha límite de entrega es el martes 23 de mayo de 2023 a las 23:59 horas
- Esta actividad debe ser entregada en equipo de acuerdo al flujo de trabajo para la entrega de tareas y prácticas
- Utilizar la carpeta
docs/examenes/examen-web/Equipo-ABCD-EFGH-IJKL-MNOP
para entregar la práctica - Donde
Equipo-ABCD-EFGH-IJKL-MNOP
representa el nombre del equipo que debió anotarse previamente en la lista del grupo - Hacer un merge request a la rama
examen-web
del repositorio de tareas para entregar la actividad
- Utilizar la carpeta
- No se permite tener proyectos repetidos. Revisar los requerimientos de la aplicación o sistema elegido para seleccionar la base de datos y motor de caché en memoria (si aplica).
Instalación de una aplicación web en un ambiente productivo#
Tabla de definición de proyectos#
# | Sistema | Motor PHP | Base de datos | Característica 1 |
Característica 2 |
Característica 3 |
---|---|---|---|---|---|---|
1 | WordPress | PHP Debian FPM | MariaDB Debian | WP Offload Media Lite (S3) | (Ninguno) | Correo AWS SES |
2 | WordPress | PHP Debian mod_php |
MariaDB 10.11 APT | wp-cli |
Instalador (bash ) |
Correo AWS SES Postfix |
3 | WordPress | PHP Sury FPM | MariaDB Debian | wp-cli |
CRON respaldo rclone |
Correo AWS SES Postfix |
4 | WordPress | PHP Sury FPM | MariaDB Debian | Memcache / Redis | Caché PHP: APC / APCu |
Correo AWS SES |
5 | WordPress | PHP Sury FPM | MariaDB 10.11 APT | wp2static / WP Super Cache / Simply Static | Caché PHP: Zend OPcache |
Correo AWS SES |
6 | WordPress | PHP Sury FPM | MySQL Community 8.0 APT | Aplicación móvil | Monitoreo externo | Correo AWS SES |
7 | WordPress | PHP Sury mod_php |
MariaDB 10.11 APT | Bitácoras SYSLOG | NewRelic PHP | Correo AWS SES Postfix |
8 | WordPress | PHP Debian mod_php |
MySQL Community 8.0 APT | Multi-sitio | Autenticación digest para wp-admin |
Correo AWS SES |
9 | WordPress | PHP Debian mod_php |
MariaDB Debian | CloudFlare | CAPTCHA / 2FA | Correo AWS SES |
10 | WordPress | PHP Debian mod_php |
MariaDB Debian | WebMin | VirtualMin | Correo AWS SES |
11 | WordPress | PHP Debian FPM | MySQL Community 8.0 APT | vHost para PHPMyAdmin con autenticación htpasswd |
Replicación MySQL | Correo AWS SES |
Warning
- Revisar la página de características adicionales donde viene descrita cada una.
Tabla de asignación de equipos#
# | Equipo | Dominio DNS |
---|---|---|
1 | Equipo-AVJA | zinclemonade.me |
2 | Equipo-AGKI-BHD-DTGM-NJMR-SVEL | AGKI-BHD-DTGM-NJMR-SVEL.me |
3 | Equipo-GCJ-MAVF-RGA-YZJP | jpyamamoto.com |
4 | Equipo-DAE-RMDE-ZCDA-NVR-VMJM | equipo-dae-rmde-zcda-nvr-vmjm.tech |
5 | Equipo-BRRA-GTHL-MMM-OGA-VGM | boruroad.me |
6 | Equipo-NNA-PSJ-RFOD-RRI | redeslocas.rocks |
7 | Equipo-AGR-HADB-HJFD-TEJC | saquenelfortnite.games |
8 | Equipo-AAR-ATDI-BME-DAAV-LMAM | waningnew.me |
9 | Equipo-ACAA-MPKA-PMJM-RRSA-VGI | merino.codes |
10 | Equipo-CCU-MGR-PCES-RSGA | redes-urgs.me |
11 | Equipo-ANLE-GGJ-GVII-LPEE-SCMA | iangarcia.me |
Procedimiento#
-
Instalar y configurar la aplicación web para que se conecte a la base de datos y que utilice la configuración solicitada de PHP
-
Montar la aplicación en el directorio
/opt/wordpress
-
Crear un VirtualHost que responda al dominio
proyecto.example.com
y que sirva únicamente para redireccionar las peticiones HTTP y HTTPS al dominioaplicacion.example.com
. -
Configurar el VirtualHost de la aplicación para que responda en el dominio
aplicacion.example.com
-
No utilizar los VirtualHosts predeterminados ni ningún otro que se haya creado en la práctica 9 para HTTP ni HTTPS
Note
Los sitios estáticos creados en la práctica 9 deben seguir funcionando
-
El sitio debe tener un certificado wildcard SSL emitido por Let's Encrypt y se debe utilizar el mismo nombre de dominio que en la práctica 9
-
El sitio debe hacer redirección de todas las peticiones HTTP hacía su versión en HTTPS
-
Se pueden usar redirecciones estándar
301
y302
de HTTP -
Utilizar la directiva
Redirect
o la configuración demod_rewrite
(pero no ambas porque son excluyentes entre si)
-
Envío de correo electrónico a través de un relay#
Se utilizará el relay de correo de AWS SES para el envío de correo electrónico a través del protocolo SMTP
Se mencionará a los alumnos la opción que deben implementar:
-
Seguir el procedimiento para configurar el MTA local con Postfix y que utilize el relay SMTP de AWS SES
-
Otra opción es configurar el remitente y las credenciales SMTP directamente en la aplicación web.
Danger
Las credenciales de SMTP e información de S3 están en la carpeta compartida de Google Drive
Entregables#
-
Enviar el reporte de la implementación en un merge request
-
Subir los archivos adjuntos solicitados a la carpeta compartida de Google Drive
Reporte#
Hacer un tutorial que explique cómo se implementó el sitio web asignado:
-
Explicar brevemente la instalación del stack web en la máquina virtual de la nube:
- Registros DNS
- VirtualHost de Apache HTTPD
- Instalación y configuración de PHP
- Instalación y configuración de MySQL/MariaDB
-
Especificar DETALLADAMENTE cómo se implementaron las características adicionales en la instalación de WordPress.
-
Explicar brevemente cómo se configuró el envío de correo a través de AWS SES ya sea en Postfix o directamente en WordPress.
Note
- Subir las imagenes necesarias al directorio
img
Archivos adjuntos#
Subir a la carpeta compartida de Google Drive los siguientes archivos de respaldo que sustentan el trabajo elaborado en el desarrollo del proyecto:
-
Par de llaves SSH con las que se accedió al servidor en un archivo
TAR
(archivosequipo_redes_rsa
yequipo_redes_rsa.pub
) -
Lista de usuarios y contraseñas para acceder a la aplicación web, base de datos y demás, en un archivo de texto llamado
accesos.txt
-
Archivo
TAR
con el respaldo del directorio/etc/letsencrypt
donde está el certificado y llave privada que utilizan los sitios web hospedados -
Respaldo de configuraciones de todo el servidor en un archivo
TAR
(directorio/etc
) -
Respaldo de configuraciones de Apache HTTPD en un archivo
TAR
(directorio/etc/apache2
) -
Respaldo de configuraciones de MySQL/MariaDB en un archivo
TAR
(directorio/etc/mysql
o/etc/mariadb
) -
Respaldo de configuraciones de PHP en un archivo
TAR
(directorio/etc/php
o/etc/php-fpm
) -
Respaldo de bitácoras del sistema en un archivo
TAR
(directorio/var/log
) -
Respaldo de la aplicación web en un archivo
TAR
(directorio/opt/wordpress
) -
Respaldo de la base de datos utilizada en formato SQL comprimido con
gzip
,bzip2
o7zip
Otros archivos adjuntos#
Subir los siguientes archivos si es que aplican para el proyecto que fue asignado:
-
Respaldo del bucket de S3 en formato
TAR
-
Archivo del script de instalación escrito en
bash
-
Archivo del script de respaldo y configuración de CRON para respaldos
-
Respaldo del sitio web estático en un archivo
TAR
(directorio/opt/estatico
) -
Respaldo de la configuración de
rsyslog
-
Respaldo de la configuración de NewRelic para PHP
-
Respaldo de los archivos de autenticación para Apache HTTPD generados con
htpasswd(1)
y/ohtdigest(1)
-
Respaldo de la aplicación web PHPMyAdmin en un archivo
TAR
(directorio/opt/phpmyadmin
) -
Respaldo de la configuración de WebMin y VirtualMin
-
Configuración de replicación para MySQL/MariaDB
Extra#
-
Implementar HTTP Strict Transport Security (HSTS) en las cabeceras del sitio para forzar a que se pida el contenido del sitio a través de HTTPS
-
Establecer estas configuraciones en los VirtualHosts de la aplicación para evitar conflictos con la configuración de los otros VirtualHosts de los demás sitios implementados en las prácticas anteriores
-
Establecer un timeout bajo de entre
60
y300
segundos para probar que HSTS funciona -
Probar esta configuración en el VirtualHost de HTTP y HTTPS para ver la configuración que se debe dejar
-
Deshabilitar la redirección de HTTP a HTTPS si se está habilitando HTTP Strict Transport Security (HSTS)
-
-
Implementar la cabecera
X-Robots-Tag
para evitar que los motores de búsqueda indexen el sitio
Notas adicionales#
-
No se aceptan instalaciones que provengan de scripts que automaticen el proceso, ni de soluciones todo en uno (one click install)
-
Redacte un reporte por equipo, en el que consigne los pasos que considere necesarios para explicar cómo realizó el proyecto, incluya capturas de pantalla que justifiquen su trabajo
-
Incluya en su reporte un apartado de conclusiones referentes al trabajo realizado
-
Puede agregar posibles errores, complicaciones, opiniones, críticas de el proyecto, o cualquier comentario relacionado
-
Entregue su reporte de acuerdo a la forma de entrega de tareas y prácticas definida al inicio del curso