Compare commits

..

13 Commits

Author SHA1 Message Date
kj
b6dbe6a8b4 Update SSL Certificate. 2025-06-25 17:23:42 -03:00
kj
3315b48b5e Update to PHP 8.4 2025-06-07 14:10:39 -03:00
kj
0785a84d0f Update SSL certtificate. 2025-04-26 20:21:34 -03:00
kj
575f0e3629 Add instalation config. 2025-04-24 13:58:57 -03:00
kj
185132a409 Update Wildcard SSL. 2025-02-25 18:08:31 -03:00
kj
11398f0dd9 Update to PHP 8.4 2025-02-18 06:56:07 -03:00
kj
59e4c7426e Update SSL wilcard certificate for *.kj5.top. 2024-11-27 17:00:20 -04:00
kj
f68532f4bb Move SSL certificate to works as a volume. 2024-11-27 16:34:26 -04:00
kj
94cb984581 Fix database persistence. 2024-11-27 16:07:36 -04:00
kj
80c26eca05 Improve mysql_configure script. 2024-11-27 15:43:37 -04:00
kj
fb21761379 Add gitignore. 2024-11-27 15:32:45 -04:00
kj
e36bc4a083 Update SSL files. 2024-11-27 15:31:54 -04:00
kj
ce0f70d648 Migrate to a docker-compose config with a few persistence.
./data/nginx/ for nginx host configurations.
./data/mysql/ for mysql databases.
2024-11-27 15:28:36 -04:00
15 changed files with 212 additions and 49 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
/data/*

View File

@ -3,25 +3,12 @@ FROM docker.io/debian:trixie
# Instalamos systemd, mariadb, php, nginx, etc.
RUN apt-get update && \
apt-get install -y systemd systemd-sysv cron anacron nano wget curl git mariadb-server mariadb-client nginx php-fpm php-common php-gd php-mysql php-imap php-cli php-cgi libapache2-mod-fcgid apache2-suexec-pristine php-pear mcrypt imagemagick libruby libapache2-mod-python php-curl php-intl php-pspell php-sqlite3 php-tidy php-xmlrpc php-xsl memcached php-memcache php-imagick php-zip php-mbstring memcached libapache2-mod-passenger php-soap php-opcache php-apcu libapache2-reload-perl php-mcrypt && \
apt-get install -y systemd systemd-sysv cron anacron nano wget curl git mariadb-server mariadb-client nginx php-fpm php-common php-gd php-mysql php-cli php-cgi libapache2-mod-fcgid apache2-suexec-pristine php-pear mcrypt imagemagick libruby php-curl php-intl php-pspell php-sqlite3 php-tidy php-xmlrpc php-xsl memcached php-memcache php-imagick php-zip php-mbstring memcached libapache2-mod-passenger php-soap php-opcache php-apcu libapache2-reload-perl php-mcrypt && \
apt-get clean
# Instalamos phpmyadmin y definimos la contraseña de root de mariadb en blanco para @localhost.
RUN service mariadb start && \
export DEBIAN_FRONTEND=noninteractive && \
apt-get -yq install phpmyadmin && \
mysql -e "SET PASSWORD FOR 'root'@'localhost' = PASSWORD(''); FLUSH PRIVILEGES;" && \
service mariadb stop
# Permitimos el que se pueda loguear sin contraseña para usar el usuario root de ese modo
RUN sed -i "s/ \/\/ \$cfg\['Servers'\]\[\$i\]\['AllowNoPassword'\]/ \$cfg\['Servers'\]\[\$i\]\['AllowNoPassword'\]/" /etc/phpmyadmin/config.inc.php
# Añadimos las reglas nginx para poder ver phpmyadmin en http://localhost/phpmyadmin
RUN sed -i "s/server_name _;/server_name _;\n\nlocation \/phpmyadmin {\n root \/usr\/share\/;\n index index.php index.html index.htm;\n location ~ \^\/phpmyadmin\/\(.+\.php\)\$ {\n try_files \$uri =404;\n root \/usr\/share\/;\n fastcgi_pass unix:\/var\/run\/php\/php8.2-fpm.sock;\n fastcgi_index index.php;\n fastcgi_param SCRIPT_FILENAME \$request_filename;\n include \/etc\/nginx\/fastcgi_params;\n fastcgi_param PATH_INFO \$fastcgi_script_name;\n fastcgi_buffer_size 128k;\n fastcgi_buffers 256 4k;\n fastcgi_busy_buffers_size 256k;\n fastcgi_temp_file_write_size 256k;\n fastcgi_intercept_errors on;\n }\n location ~* \^\/phpmyadmin\/\(.+\\.\(jpg\|jpeg\|gif\|css\|png\|js\|ico\|html\|xml\|txt\)\)\$ {\n root \/usr\/share\/;\n }\n}\nlocation \/phpMyAdmin {\n rewrite \^\/* \/phpmyadmin last;\n}/g" /etc/nginx/sites-available/default
# Mostrar los errores en PHP
RUN sed -i 's/display_errors = Off/display_errors = On/' /etc/php/8.2/fpm/php.ini && \
sed -i 's/error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT/error_reporting = E_ALL/' /etc/php/8.2/fpm/php.ini
RUN sed -i 's/display_errors = Off/display_errors = On/' /etc/php/8.4/fpm/php.ini && \
sed -i 's/error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT/error_reporting = E_ALL/' /etc/php/8.4/fpm/php.ini
# Eliminamos los logs de apt
@ -34,23 +21,22 @@ RUN rm -rf \
# Habilitar servicios
RUN systemctl enable mariadb.service && \
systemctl enable php8.2-fpm.service && \
systemctl enable php8.4-fpm.service && \
systemctl enable nginx.service
# Copiamos la configuración para un pool de PHP que corre como root
COPY php-root.conf /etc/php/8.2/fpm/pool.d/root.conf
COPY php-root.conf /etc/php/8.4/fpm/pool.d/root.conf
# Habilitamos que PHP pueda correr como root
RUN sed -i 's/--nodaemonize/--nodaemonize --allow-to-run-as-root/' /usr/lib/systemd/system/php8.2-fpm.service
RUN sed -i 's/--nodaemonize/--nodaemonize --allow-to-run-as-root/' /usr/lib/systemd/system/php8.4-fpm.service
# Comandos para ejecutar dentro de docker y crear rápido configuraciones de dominios y subdominios
COPY bin/adddomain /usr/local/bin/adddomain
RUN chmod +x /usr/local/bin/adddomain
COPY bin/addsubdomain /usr/local/bin/addsubdomain
RUN chmod +x /usr/local/bin/addsubdomain
# Colocamos dentro el certificado SSL
COPY ssl /etc/nginx/ssl
COPY bin/mysql_configure /usr/local/bin/mysql_configure
RUN chmod +x /usr/local/bin/mysql_configure
# Configuración de puertos
EXPOSE 80

View File

@ -3,7 +3,7 @@
function main() {
bold=$(tput bold)
normal=$(tput sgr0)
phpsocket="/run/php/root8.2.sock"
phpsocket="/run/php/root8.4.sock"
echo -n "${bold}Ingresa el dominio nombre del subdominio: $normal"
read -r domain

View File

@ -4,7 +4,7 @@ function main() {
bold=$(tput bold)
normal=$(tput sgr0)
mainDomain="kj5.top"
phpsocket="/run/php/root8.2.sock"
phpsocket="/run/php/root8.4.sock"
echo -n "${bold}Ingresa el dominio nombre del subdominio: $normal"
read -r domain

44
bin/mysql_configure Normal file
View File

@ -0,0 +1,44 @@
#!/bin/bash
# Inicializando la base de datos
if test -f /var/lib/mysql/mysql; then
echo "Base de datos ya inicialiada (se hace nada)."
chown -R mysql:mysql /var/lib/mysql
else
echo "Inicializando la base de datos..."
mkdir -p /var/lib/mysql/mysql
chown -R mysql:mysql /var/lib/mysql
mariadb-install-db
fi
# Definiendo una contraseña vacía para root
echo "Definiendo contraseña para root (contraseña en blanco)."
systemctl start mariadb
mysql -e "SET PASSWORD FOR 'root'@'localhost' = PASSWORD(''); FLUSH PRIVILEGES;"
# Verificamos si ya está todo configurado
if test -f /etc/phpmyadmin/config.inc.php; then
echo "Se ha detectado que phpmyadmin ya esta instalado"
else
echo "Instalando phpmyadmin..."
export DEBIAN_FRONTEND=noninteractive
apt-get update
apt-get -yq install phpmyadmin
# Permitimos el que se pueda loguear sin contraseña para usar el usuario root en phpmyadmin
sed -i "s/ \/\/ \$cfg\['Servers'\]\[\$i\]\['AllowNoPassword'\]/ \$cfg\['Servers'\]\[\$i\]\['AllowNoPassword'\]/" /etc/phpmyadmin/config.inc.php
fi
# Añadimos las reglas nginx para poder ver phpmyadmin en http://localhost/phpmyadmin
if grep -e "phpmyadmin" /etc/nginx/sites-available/default >/dev/null
then
echo "Se detectó que nginx ya tiene una configuración para PHPmyadmin (se hace nada)"
else
echo "Configurando Nginx para phpmyadmin..."
sed -i "s/server_name _;/server_name _;\n\nlocation \/phpmyadmin {\n root \/usr\/share\/;\n index index.php index.html index.htm;\n location ~ \^\/phpmyadmin\/\(.+\.php\)\$ {\n try_files \$uri =404;\n root \/usr\/share\/;\n fastcgi_pass unix:\/var\/run\/php\/php8.4-fpm.sock;\n fastcgi_index index.php;\n fastcgi_param SCRIPT_FILENAME \$request_filename;\n include \/etc\/nginx\/fastcgi_params;\n fastcgi_param PATH_INFO \$fastcgi_script_name;\n fastcgi_buffer_size 128k;\n fastcgi_buffers 256 4k;\n fastcgi_busy_buffers_size 256k;\n fastcgi_temp_file_write_size 256k;\n fastcgi_intercept_errors on;\n }\n location ~* \^\/phpmyadmin\/\(.+\\.\(jpg\|jpeg\|gif\|css\|png\|js\|ico\|html\|xml\|txt\)\)\$ {\n root \/usr\/share\/;\n }\n}\nlocation \/phpMyAdmin {\n rewrite \^\/* \/phpmyadmin last;\n}/g" /etc/nginx/sites-available/default
fi
echo "Recargado configuración de nginx"
nginx -t && systemctl reload nginx
echo "Finalizado :)."

View File

@ -1,2 +0,0 @@
#!/bin/bash
podman image build -t localhost/nginx-dev:latest .

View File

@ -0,0 +1,40 @@
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name _;
location /phpmyadmin {
root /usr/share/;
index index.php index.html index.htm;
location ~ ^/phpmyadmin/(.+.php)$ {
try_files $uri =404;
root /usr/share/;
fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $request_filename;
include /etc/nginx/fastcgi_params;
fastcgi_param PATH_INFO $fastcgi_script_name;
fastcgi_buffer_size 128k;
fastcgi_buffers 256 4k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
fastcgi_intercept_errors on;
}
location ~* ^/phpmyadmin/(.+.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ {
root /usr/share/;
}
}
location /phpMyAdmin {
rewrite ^/* /phpmyadmin last;
}
location / {
try_files $uri $uri/ =404;
}
}

View File

@ -0,0 +1 @@
/etc/nginx/sites-available/default

15
docker-compose.yml Normal file
View File

@ -0,0 +1,15 @@
version: '3'
services:
nginx:
image: nginx-dev
network_mode: host
build: .
container_name: nginx
hostname: nginx
volumes:
- ~/.mnt/Nginx:/var/www:Z
- ./data/nginx/sites-available:/etc/nginx/sites-available:Z
- ./data/nginx/sites-enabled:/etc/nginx/sites-enabled:Z
- ./data/mysql/:/var/lib/mysql/:Z
- ./ssl:/etc/nginx/ssl:Z

3
install.sh Executable file
View File

@ -0,0 +1,3 @@
#!/bin/bash
podman-compose up -d
podman exec -it nginx /usr/local/bin/mysql_configure

View File

@ -2,7 +2,7 @@
user = root
group = root
listen = /run/php/root8.2.sock
listen = /run/php/root8.4.sock
listen.owner = www-data
listen.group = www-data

View File

@ -5,9 +5,82 @@ Este contenedor tiene el objetivo de proveer un contenedor que facilite tener un
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
(documentación pendiente...)
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

View File

@ -1,5 +1,5 @@
-----BEGIN EC PRIVATE KEY-----
MHcCAQEEICwNmZf9mSvXJHuk1wuRSdTcRHWGmEqMgviO1Whvp3K4oAoGCCqGSM49
AwEHoUQDQgAEEcVfavQwO0/YTjJZxsn58TKa1wKMfW5UzU7jWYl1PayQhw/m18E6
e3ID46MYeuogcDsqKT7LnWAF9b9lirNUuw==
MHcCAQEEIHxEbISIm9JgkuNJ4ZiaHYzynT5SxpwMS40HUDl/Y6kooAoGCCqGSM49
AwEHoUQDQgAE7EGxW9b2H6HD1CuzspHHFKUp9VC9igLSmFqGHUZDwFYuWDvRL6XA
CHi/wGpJkju2YVRpBm+gfP6jJq15md4YDA==
-----END EC PRIVATE KEY-----

View File

@ -1,23 +1,23 @@
-----BEGIN CERTIFICATE-----
MIIDczCCAvmgAwIBAgISA5/lI800ye9jHaYtywYsyw7iMAoGCCqGSM49BAMDMDIx
MIIDhjCCAw2gAwIBAgISBcc9IpUdAOCg+ZWOlWXNpka5MAoGCCqGSM49BAMDMDIx
CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQDEwJF
NTAeFw0yNDA4MjcyMTU4MjhaFw0yNDExMjUyMTU4MjdaMBQxEjAQBgNVBAMMCSou
a2o1LnRvcDBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABBHFX2r0MDtP2E4yWcbJ
+fEymtcCjH1uVM1O41mJdT2skIcP5tfBOntyA+OjGHrqIHA7Kik+y51gBfW/ZYqz
VLujggILMIICBzAOBgNVHQ8BAf8EBAMCB4AwHQYDVR0lBBYwFAYIKwYBBQUHAwEG
CCsGAQUFBwMCMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFFIzIiPJAdVQ3M0xs1YJ
7HzDK+ebMB8GA1UdIwQYMBaAFJ8rX888IU+dBLftKyzExnCL0tcNMFUGCCsGAQUF
BwEBBEkwRzAhBggrBgEFBQcwAYYVaHR0cDovL2U1Lm8ubGVuY3Iub3JnMCIGCCsG
AQUFBzAChhZodHRwOi8vZTUuaS5sZW5jci5vcmcvMBQGA1UdEQQNMAuCCSoua2o1
LnRvcDATBgNVHSAEDDAKMAgGBmeBDAECATCCAQQGCisGAQQB1nkCBAIEgfUEgfIA
8AB2AEiw42vapkc0D+VqAvqdMOscUgHLVt0sgdm7v6s52IRzAAABkZYOgpYAAAQD
AEcwRQIgPu03POjDQNV98t87HQ/9cZC73unefPUvAglkPkBScGcCIQDr57+HxfQP
aDSAffbiZJ2g8fnVYCgc65VqW+wH22vABwB2AN/hVuuqBa+1nA+GcY2owDJOrlbZ
bqf1pWoB0cE7vlJcAAABkZYOg4EAAAQDAEcwRQIhAP6/fjuFcQBW4lZ0NK+DgRsB
VoETY51LuBUkvM11359tAiAicW0xHTZOwhXTVMAaAGZuH9hH+7RknGOJs4niptO0
bDAKBggqhkjOPQQDAwNoADBlAjAYHqQaMGH8ClssO6QfO9NVHs1mx5Vi1AfF8mFB
uvxG+tP+iS6GyipPiz8fAn7t92ECMQCmnpT/GobtsWgDj1oLrYGPeVl3V8I87Uuv
jZQqESbV7bBW1KlnMSnH9AS2DBXvzZA=
NTAeFw0yNTA1MjYwNTI0NDBaFw0yNTA4MjQwNTI0MzlaMBIxEDAOBgNVBAMTB2tq
NS50b3AwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAATsQbFb1vYfocPUK7OykccU
pSn1UL2KAtKYWoYdRkPAVi5YO9EvpcAIeL/AakmSO7ZhVGkGb6B8/qMmrXmZ3hgM
o4ICITCCAh0wDgYDVR0PAQH/BAQDAgeAMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggr
BgEFBQcDAjAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBScEeTg0ldCzWox/93VdsA8
0kcSJTAfBgNVHSMEGDAWgBSfK1/PPCFPnQS37SssxMZwi9LXDTAyBggrBgEFBQcB
AQQmMCQwIgYIKwYBBQUHMAKGFmh0dHA6Ly9lNS5pLmxlbmNyLm9yZy8wHQYDVR0R
BBYwFIIJKi5rajUudG9wggdrajUudG9wMBMGA1UdIAQMMAowCAYGZ4EMAQIBMC0G
A1UdHwQmMCQwIqAgoB6GHGh0dHA6Ly9lNS5jLmxlbmNyLm9yZy81OC5jcmwwggEF
BgorBgEEAdZ5AgQCBIH2BIHzAPEAdgDM+w9qhXEJZf6Vm1PO6bJ8IumFXA2Xjbap
flTA/kwNsAAAAZcLQmXLAAAEAwBHMEUCIQCocOfcpd9n38reJCiCNboImPvypk+8
oKjsLeLkRD/PbAIgLLa2JLx1/C9QHqtFQxYWHVwcoG1EWc0t2KECIfrE9rcAdwAN
4fIwK9MNwUBiEgnqVS78R3R8sdfpMO8OQh60fk6qNAAAAZcLQmW+AAAEAwBIMEYC
IQCWHfppEFs9u9zHQzAj3iiRAeugj4q+M+WieCKW/rG+WwIhAKnhLV78Bj6CzbPm
e78jTDGfQpkYNzdcAY1WWsrMzQKXMAoGCCqGSM49BAMDA2cAMGQCMEk9jbzyK6pH
APfGktIFfYBG4yzf+L7EJ4vhQlB0DDrQiH3SOc4HXfHXozNaujRRwwIwQ9LrwWbA
0XbYYi2wcxpSrSqTilcEgkuKbmPOPqkMgCh+1QHXROdmnLFGLmtTu5Dc
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----

2
uninstall.sh Executable file
View File

@ -0,0 +1,2 @@
#!/bin/bash
podman-compose down