first commit
This commit is contained in:
commit
f3d2a76dc3
60
Dockerfile
Normal file
60
Dockerfile
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
# Usamos Debian 13 como base
|
||||||
|
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 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
|
||||||
|
|
||||||
|
|
||||||
|
# Eliminamos los logs de apt
|
||||||
|
RUN rm -rf \
|
||||||
|
/var/lib/apt/lists/* \
|
||||||
|
/var/log/alternatives.log \
|
||||||
|
/var/log/apt/history.log \
|
||||||
|
/var/log/apt/term.log \
|
||||||
|
/var/log/dpkg.log
|
||||||
|
|
||||||
|
# Habilitar servicios
|
||||||
|
RUN systemctl enable mariadb.service && \
|
||||||
|
systemctl enable php8.2-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
|
||||||
|
|
||||||
|
# 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
|
||||||
|
|
||||||
|
# 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
|
||||||
|
|
||||||
|
# Configuración de puertos
|
||||||
|
EXPOSE 80
|
||||||
|
EXPOSE 443
|
||||||
|
|
||||||
|
# Use systemd as command
|
||||||
|
CMD [ "/sbin/init" ]
|
21
LICENSE
Normal file
21
LICENSE
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) [year] [fullname]
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
45
bin/adddomain
Normal file
45
bin/adddomain
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
function main() {
|
||||||
|
bold=$(tput bold)
|
||||||
|
normal=$(tput sgr0)
|
||||||
|
phpsocket="/run/php/root8.2.sock"
|
||||||
|
|
||||||
|
echo -n "${bold}Ingresa el dominio nombre del subdominio: $normal"
|
||||||
|
read -r domain
|
||||||
|
echo -e "Creando configración para \"$domain\" \U2705"
|
||||||
|
|
||||||
|
mkdir "/var/www/$domain"
|
||||||
|
|
||||||
|
echo "server {
|
||||||
|
listen 80;
|
||||||
|
|
||||||
|
index index.html index.php;
|
||||||
|
|
||||||
|
server_name $domain;
|
||||||
|
|
||||||
|
root /var/www/$domain;
|
||||||
|
|
||||||
|
location ~ \\.php\$ {
|
||||||
|
include snippets/fastcgi-php.conf;
|
||||||
|
fastcgi_pass unix:$phpsocket;
|
||||||
|
}
|
||||||
|
|
||||||
|
location / {
|
||||||
|
try_files \$uri \$uri/ /index.php?\$args;
|
||||||
|
}
|
||||||
|
}"> "/etc/nginx/sites-available/$domain"
|
||||||
|
|
||||||
|
ln -s "/etc/nginx/sites-available/$domain" "/etc/nginx/sites-enabled/"
|
||||||
|
|
||||||
|
if nginx -t && service nginx reload;
|
||||||
|
then
|
||||||
|
echo "${bold}Instalación finalizada con éxito $normal \U2705 "
|
||||||
|
echo ""
|
||||||
|
echo "URL: http://$domain/"
|
||||||
|
else
|
||||||
|
echo "${bold} Error al instalar la configuración nginx $normal \U274C"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
main
|
56
bin/addsubdomain
Normal file
56
bin/addsubdomain
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
function main() {
|
||||||
|
bold=$(tput bold)
|
||||||
|
normal=$(tput sgr0)
|
||||||
|
mainDomain="kj5.top"
|
||||||
|
phpsocket="/run/php/root8.2.sock"
|
||||||
|
|
||||||
|
echo -n "${bold}Ingresa el dominio nombre del subdominio: $normal"
|
||||||
|
read -r domain
|
||||||
|
domain=$domain.$mainDomain
|
||||||
|
echo -e "Creando configración para \"$domain\" \U2705"
|
||||||
|
|
||||||
|
mkdir "/var/www/$domain"
|
||||||
|
|
||||||
|
echo "server {
|
||||||
|
listen 80;
|
||||||
|
server_name $domain;
|
||||||
|
return 301 https://\$server_name\$request_uri;
|
||||||
|
}
|
||||||
|
|
||||||
|
server {
|
||||||
|
listen 443 ssl;
|
||||||
|
|
||||||
|
ssl_certificate /etc/nginx/ssl/fullchain.cer;
|
||||||
|
ssl_certificate_key /etc/nginx/ssl/certificate.key;
|
||||||
|
|
||||||
|
index index.html index.php;
|
||||||
|
|
||||||
|
server_name $domain;
|
||||||
|
|
||||||
|
root /var/www/$domain;
|
||||||
|
|
||||||
|
location ~ \\.php\$ {
|
||||||
|
include snippets/fastcgi-php.conf;
|
||||||
|
fastcgi_pass unix:$phpsocket;
|
||||||
|
}
|
||||||
|
|
||||||
|
location / {
|
||||||
|
try_files \$uri \$uri/ /index.php?\$args;
|
||||||
|
}
|
||||||
|
}"> "/etc/nginx/sites-available/$domain"
|
||||||
|
|
||||||
|
ln -s "/etc/nginx/sites-available/$domain" "/etc/nginx/sites-enabled/"
|
||||||
|
|
||||||
|
if nginx -t && service nginx reload;
|
||||||
|
then
|
||||||
|
echo "${bold}Instalación finalizada con éxito $normal \U2705"
|
||||||
|
echo ""
|
||||||
|
echo "URL: https://$domain/"
|
||||||
|
else
|
||||||
|
echo "${bold} Error al instalar la configuración nginx $normal \U274C"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
main
|
2
build.sh
Normal file
2
build.sh
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
podman image build -t localhost/debian-web:latest .
|
11
php-root.conf
Normal file
11
php-root.conf
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
[www-root]
|
||||||
|
user = root
|
||||||
|
group = root
|
||||||
|
|
||||||
|
listen = /run/php/root8.2.sock
|
||||||
|
|
||||||
|
listen.owner = www-data
|
||||||
|
listen.group = www-data
|
||||||
|
|
||||||
|
pm = ondemand
|
||||||
|
pm.max_children = 5
|
44
readme.org
Normal file
44
readme.org
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
#+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.
|
||||||
|
|
||||||
|
* Instalación
|
||||||
|
|
||||||
|
(documentación pendiente...)
|
||||||
|
|
||||||
|
* 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.
|
5
ssl/certificate.key
Normal file
5
ssl/certificate.key
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
-----BEGIN EC PRIVATE KEY-----
|
||||||
|
MHcCAQEEICwNmZf9mSvXJHuk1wuRSdTcRHWGmEqMgviO1Whvp3K4oAoGCCqGSM49
|
||||||
|
AwEHoUQDQgAEEcVfavQwO0/YTjJZxsn58TKa1wKMfW5UzU7jWYl1PayQhw/m18E6
|
||||||
|
e3ID46MYeuogcDsqKT7LnWAF9b9lirNUuw==
|
||||||
|
-----END EC PRIVATE KEY-----
|
48
ssl/fullchain.cer
Normal file
48
ssl/fullchain.cer
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIIDczCCAvmgAwIBAgISA5/lI800ye9jHaYtywYsyw7iMAoGCCqGSM49BAMDMDIx
|
||||||
|
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=
|
||||||
|
-----END CERTIFICATE-----
|
||||||
|
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIIEVzCCAj+gAwIBAgIRAIOPbGPOsTmMYgZigxXJ/d4wDQYJKoZIhvcNAQELBQAw
|
||||||
|
TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh
|
||||||
|
cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMjQwMzEzMDAwMDAw
|
||||||
|
WhcNMjcwMzEyMjM1OTU5WjAyMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNTGV0J3Mg
|
||||||
|
RW5jcnlwdDELMAkGA1UEAxMCRTUwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQNCzqK
|
||||||
|
a2GOtu/cX1jnxkJFVKtj9mZhSAouWXW0gQI3ULc/FnncmOyhKJdyIBwsz9V8UiBO
|
||||||
|
VHhbhBRrwJCuhezAUUE8Wod/Bk3U/mDR+mwt4X2VEIiiCFQPmRpM5uoKrNijgfgw
|
||||||
|
gfUwDgYDVR0PAQH/BAQDAgGGMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcD
|
||||||
|
ATASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBSfK1/PPCFPnQS37SssxMZw
|
||||||
|
i9LXDTAfBgNVHSMEGDAWgBR5tFnme7bl5AFzgAiIyBpY9umbbjAyBggrBgEFBQcB
|
||||||
|
AQQmMCQwIgYIKwYBBQUHMAKGFmh0dHA6Ly94MS5pLmxlbmNyLm9yZy8wEwYDVR0g
|
||||||
|
BAwwCjAIBgZngQwBAgEwJwYDVR0fBCAwHjAcoBqgGIYWaHR0cDovL3gxLmMubGVu
|
||||||
|
Y3Iub3JnLzANBgkqhkiG9w0BAQsFAAOCAgEAH3KdNEVCQdqk0LKyuNImTKdRJY1C
|
||||||
|
2uw2SJajuhqkyGPY8C+zzsufZ+mgnhnq1A2KVQOSykOEnUbx1cy637rBAihx97r+
|
||||||
|
bcwbZM6sTDIaEriR/PLk6LKs9Be0uoVxgOKDcpG9svD33J+G9Lcfv1K9luDmSTgG
|
||||||
|
6XNFIN5vfI5gs/lMPyojEMdIzK9blcl2/1vKxO8WGCcjvsQ1nJ/Pwt8LQZBfOFyV
|
||||||
|
XP8ubAp/au3dc4EKWG9MO5zcx1qT9+NXRGdVWxGvmBFRAajciMfXME1ZuGmk3/GO
|
||||||
|
koAM7ZkjZmleyokP1LGzmfJcUd9s7eeu1/9/eg5XlXd/55GtYjAM+C4DG5i7eaNq
|
||||||
|
cm2F+yxYIPt6cbbtYVNJCGfHWqHEQ4FYStUyFnv8sjyqU8ypgZaNJ9aVcWSICLOI
|
||||||
|
E1/Qv/7oKsnZCWJ926wU6RqG1OYPGOi1zuABhLw61cuPVDT28nQS/e6z95cJXq0e
|
||||||
|
K1BcaJ6fJZsmbjRgD5p3mvEf5vdQM7MCEvU0tHbsx2I5mHHJoABHb8KVBgWp/lcX
|
||||||
|
GWiWaeOyB7RP+OfDtvi2OsapxXiV7vNVs7fMlrRjY1joKaqmmycnBvAq14AEbtyL
|
||||||
|
sVfOS66B8apkeFX2NY4XPEYV4ZSCe8VHPrdrERk2wILG3T/EGmSIkCYVUMSnjmJd
|
||||||
|
VQD9F6Na/+zmXCc=
|
||||||
|
-----END CERTIFICATE-----
|
Loading…
Reference in New Issue
Block a user