4.4 KiB
Contenedor para desarrollo web
Este contenedor tiene el objetivo de proveer un contenedor que facilite tener un entorno de desarrollo con Nginx, PHP y MariaDB.
Debo resaltar el hecho de que es de DESARROLLO puesto que en esta configuración priorizo mostrar errores fácilmente, evitar algunos otros que requieren configuraciones extra y en general facilitar el uso en la etapa de desarrollo. Po lo mismo, no recomiendo el uso de este contenedor en entornos de producción.
Requerimientos
- Docker / podman
En caso de usar podman, también se necesitara podman-compose y también puedo recomendar tener podman-docker. También puede que sea necesario reiniciar el ordenador justo luego de instalar para que inicien correctamente los controladores que requieren los contenedores.
Rootless
En caso de usarlo en formato rootless (sin sudo por delante, para los neofitos), que suele ser la manera usual y más cómoda hoy en día, también es necesario permitir que los usuarios que no son root puedan bindear el puerto 80. Para ello, camos a corret este comando:
sudo sysctl net.ipv4.ip_unprivileged_port_start=80
Con esto sólo vamos a tener habilitado el pueto 80 hasta reinciar el PC, para hacerlo permamente hay que editar el archivo /etc/sysctl.d/99-sysctl.conf
o el archivo /etc/sysctl.conf
para algunas otras distros y añadimos al final esta línea:
net.ipv4.ip_unprivileged_port_start=80
Y con eso ya se podría usar el puerto 80 como rootless, hasta que el servidor se reinicie.
Instalación
Solo es necesario correr:
docker compose up -d
O en caso de usar podman también se puede usar:
podman compose up -d
Puede que en distros con paquetería muy vieja (Debian 12 o inferiores) sea necesario instalar podman-compose desde pip para tener la última versión (obtienes mejor compatibilidad) y el comando debe ser podman-compose
(guión en lugar de espacio).
Iniciar/Detener contenedor
Luego de "instalado", puedes solo iniciar el contenedor o detenerlo usando los comandos usuales de podman/docker
# Con Docker
docker start nginx # Inicia el contendor
docker stop nginx # Detiene el contenedor
# Con podman
podman start nginx # Inicia el contendor
podman stop nginx # Detiene el contenedor
Desinstalar
En caso de que quieras eliminar los contenedores
docker compose down
o si tienes podman:
podman compose down
Mover/Copiar con datos persistentes
Debido a que la carpeta mysql termina bajo otro nombre de usuario distintos, antes de copiar/mover los archivos, es necesario primero cambiar eso a nuestro usuario o nos dará error:
sudo chown -R $USER:$USER data/mysql/
Luego de eso solo es copiar/mover los archivos y volver a correr los comandos de instalación.
Características
Nginx
Como webserver es de lo mejor y aunque también podría ser viable usar taefik, caddy u otros, nginx suele ser más común en entornos de producción y aunque en la configuración priorizo que sea una configuración útil para desarrollo, igual busco que se parezca en lo posible a lo que tendría en un entorno de producción.
MariaBD
La contraseña de root está en blanco.
PHP
Tiene por defecto habilitado el mostrar todos los errores y tiene un pool que corre como root (repito, esto es para pruebas de desarrollo).
SSL
Trae archivos para poder tener certificados SSL (/etc/nginx/ssl
) en cualquier subdominio que terminie en .kj5.top
, el dominio es de mi propiedad y he apuntado todos los subdominios (wildcard) hacia 127.0.0.1
para poder usarlo como dominio en localhost.
Usando esto podemos simplificar la tarea de tener https en localhost para aquellas tareas que así lo requieren como acceder mediante javascript a la cámara o sencillamente para, nuevamente, parecernos lo más posible a un entorno de producción.
Comandos internos
Ingresando dentro del contenedor, hay 2 comandos personalizados:
adddomain
Este comando creará la configuración del dominio indicado para nginx, además de la una carpeta en /var/www/
con el nombre del mismo como raíz de dicho dominio.
Cabe mencionar que esta configurción no tiene SSL.
addsubdomain
Crea la configuración nginx y la carpeta raíz en /var/www/
de un subdominio que termina .kj5.top
agregando también a nginx la configuración para tener SSL.