Practica: Despliegue de aplicaciones web con Docker
Tienes que elegir entre realizar una imagen de una aplicación web escrita en PHP o en Python:
Opción 1: Aplicación PHP
Imaginemos que el equipo de desarrollo de nuestra empresa ha desarrollado una aplicación PHP que se llama Biblioteca(https://github.com/VidaInformatico/Sistema-de-biblioteca-basico-php-8-y-mysql).
Queremos crear una imagen Docker para implantar dicha aplicación.
Tenemos que tener en cuenta los siguientes aspectos:
-
Es necesario que nuestra aplicación guarde su información en un contenedor docker mariadb.
-
En la creación del contenedor de base de datos, usando variables de entorno, se creará una base de datos, un usuario y su contraseña.
-
El contenedor mariadb debe tener un volumen para guardar la base de datos.
-
Antes de generar la imagen, modifica el fichero
Config/Config.phppara que lea las variables de entorno. Para obtener las variables de entorno en PHP usar la funcióngetenv. Para más información. Los cambios que tenemos que realizar para crear las constantes con el valor de las variables de entorno es la siguiente. Si tenemos en el fichero original:const base_url = "http://localhost/biblio/";Hay que sustituirlo por:
define('base_url',getenv('BASE_URL'));Así con cada una de las variables.
-
Al crear un contenedor a partir de estas imágenes se ejecutará un script bash llamado
docker-entrypoint.shque realizará las siguientes tareas:- Se asegura que el directorio de la aplicación es del usuario
www-data. - Ejecute el servidor web.
- Se asegura que el directorio de la aplicación es del usuario
-
El contenedor que creas debe tener un volumen para guardar los logs del servidor web.
-
La imagen debe tener activa el mod_rewrite de apache2.
-
Debemos configurar el apache2 para permitir el uso de ficheros
.htaccess. Para ello necesitamos cambiar la configuración del fichero/etc/apache2/apache2.conf. Esto se puede hacer de varias formas:- Copiando un fichero
apache2.confcon la modificación hecha en la imagen. - Que el script
docker-entrypoint.shmodifique el ficheroapache2.confcon la utilidadsedpor ejemplo.
- Copiando un fichero
-
La imagen la tienes que crear en tu entorno de desarrollo con el comando
docker build.
Creación de una imagen docker con una aplicación web desde una imagen base
- Vamos a crear una imagen que se llame
usuario/biblioteca:v1. - Crea una imagen docker con la aplicación desde una imagen base de debian o ubuntu o desde una imagen php.
- Está imagen debe tener apache2 instalado y todas las características indicadas anteriormente.
Despliegue en el entorno de desarrollo
- Utiliza Docker Compose para levantar el escenario con los dos contenedores.
- Recuerda que para acceder a la aplicación: Usuario: admin, contraseña: admin.
Opción 2: Aplicación Python
Queremos desplegar en docker la aplicación escrita en python django: Django Publicaciones django_publicaciones. Si quieres puedes hacer un fork para modificar los ficheros del repositorio.
Tienes que tener en cuenta los siguientes aspectos:
- La aplicación debe guardar los datos en una base de datos mariadb persistente.
- La aplicación se podrá configurar para indicar los parámetros de conexión a la base de datos: usuario, contraseña, host y base de datos.
- Durante la construcción de la imagen se deberá clonar tu fork del repositorio para copiarlo al contenedor durante su construcción.
- La aplicación deberá tener creado un usuario administrador para el acceso, se deberán crear las variables de entornos necesarias como vimos en el ejemplo 5.
Puesta en producción de nuestra aplicación (Para la dos opciones)
- Sube la imagen que has generado a Docker Hub.
- En tu VPS instala Docker y utilizando el
docker-compose.yamlpara desplegar la aplicación. - Configura el nginx de tu VPS para que haga de proxy inverso y nos permita acceder a la aplicación con
https://appdocker.tudominio.xxx.
Seguramente tendrás que cambiar el fichero docker-compose.yaml de desarrollo a producción (puede que cambie algún valor de alguna variable de entorno, el número del puerto,…). Para poder usar el mismo fichero docker-compose.yml en todos los entornos se suele parametrizar este fichero como se explica en esta página.
Parametriza el fichero docker-compose.yaml y crea dos ficheros distintos .env para el entorno de desarrollo y el entorno de producción. El fichero .env no se guarda en el repositorio git, por lo que es conveniente meterlo en el fichero .gitignore.
Modificación de la aplicación (Para la dos opciones)
- En el entorno de desarrollo vamos a hacer una modificación de la aplicación, para poner tu nombre en la página principal.
- Vuelve a crear la imagen con la etiqueta
v2. - Cambia el
docker-compose.yamlpara probar el cambio. - Modifica la aplicación en producción.