#+TITLE: Contenedor para desarrollo web #+AUTHOR: KJ 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: #+begin_src bash sudo sysctl net.ipv4.ip_unprivileged_port_start=80 #+end_src 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: #+begin_src net.ipv4.ip_unprivileged_port_start=80 #+end_src 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: #+begin_src bash docker compose up -d #+end_src O en caso de usar podman también se puede usar: #+begin_src bash podman compose up -d #+end_src 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 #+begin_src bash # 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 #+end_src ** Desinstalar En caso de que quieras eliminar los contenedores #+begin_src bash docker compose down #+end_src o si tienes podman: #+begin_src bash podman compose down #+end_src ** 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: #+begin_src bash sudo chown -R $USER:$USER data/mysql/ #+end_src 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.