118 lines
4.4 KiB
Org Mode
118 lines
4.4 KiB
Org Mode
#+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.
|