Contenedor para desarrollo web
Go to file
2025-04-24 13:58:57 -03:00
bin Fix database persistence. 2024-11-27 16:07:36 -04:00
data/nginx Migrate to a docker-compose config with a few persistence. 2024-11-27 15:28:36 -04:00
ssl Update Wildcard SSL. 2025-02-25 18:08:31 -03:00
.gitignore Add gitignore. 2024-11-27 15:32:45 -04:00
docker-compose.yml Move SSL certificate to works as a volume. 2024-11-27 16:34:26 -04:00
Dockerfile Update to PHP 8.4 2025-02-18 06:56:07 -03:00
install.sh Migrate to a docker-compose config with a few persistence. 2024-11-27 15:28:36 -04:00
LICENSE first commit 2024-09-07 18:37:19 -04:00
php-root.conf first commit 2024-09-07 18:37:19 -04:00
readme.org Add instalation config. 2025-04-24 13:58:57 -03:00
uninstall.sh Migrate to a docker-compose config with a few persistence. 2024-11-27 15:28:36 -04:00

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.