diff --git a/AnPServer/Dockerfile.debian b/AnPServer/Dockerfile.debian new file mode 100644 index 0000000..5b71f21 --- /dev/null +++ b/AnPServer/Dockerfile.debian @@ -0,0 +1,9 @@ +from debian +volume ./git /Projects +volume ./scripts /Scripts +volume ./files /Files +volume ../docker/Nginx/tmp /Nginx +copy install.sh /install.sh +run chmod +x /install.sh +run /install.sh +run rm /install.sh \ No newline at end of file diff --git a/AnPServer/files/AnP.py.settings.secrets.json b/AnPServer/files/AnP.py.settings.secrets.json new file mode 100755 index 0000000..41a7a75 --- /dev/null +++ b/AnPServer/files/AnP.py.settings.secrets.json @@ -0,0 +1,17 @@ +{ + "language" : "espanol", + "print_files_pattern" : "/Python\\/(common.py|Application|Managers|Drivers|Models)/", + "print_types_allowed" : ["unkn", "info", "ok", "warn", "erro", "exce", "test", "note", "help"], + "i18n_show_add_ok_message" : false, + "path_show_load_ok_message" : false, + "http_show_add_ok_message" : false, + "managers_routes_show_add_file_error_message" : true, + "managers_mime_extensions_show_add_ok_message" : false, + "managers_mime_extensions_show_add_extension_ok_message" : false, + "path_show_get_modified_date_ok_message" : false, + "threads_show_add_ok_message" : false, + "managers_routes_show_go_ok_message" : false, + "threads_show_remove_ok_message" : false, + "show_print_types_add_item_ok_message" : false, + "unix_domain_socket_web_server_show_process_request_ok_message" : false +} diff --git a/AnPServer/files/AnP.py.settings.server.secrets.json b/AnPServer/files/AnP.py.settings.server.secrets.json new file mode 100644 index 0000000..9bcfdea --- /dev/null +++ b/AnPServer/files/AnP.py.settings.server.secrets.json @@ -0,0 +1,37 @@ +{ + "servers" : { + "UnixDomainSocketWeb" : { + "driver" : "Drivers.UnixDomainSocketWebServer", + "path" : "/Nginx/anp.sock", + "clients" : 5, + "permissions_acl" : false, + "users" : ["kyman", "www-data"], + "http_version" : "1.1", + "sudo" : false + } + }, + "applications" : { + "CDN" : { + "path" : "/Projects/CDN/Python", + "class" : "Application.CDN" + }, + "ErrorsManager" : { + "path" : "/Projects/ErrorsManager/Python", + "class" : "Application.ErrorsManager" + }, + "WMarkDown" : { + "path" : "/Projects/WMarkDown/Python", + "class" : "Application.WMarkDown" + }, + "PythonMapper" : { + "path" : "/Projects/PythonMapper/Python", + "load" : false, + "class" : "Application.PythonMapper" + }, + "AnPWeb" : { + "path" : "/Projects/AnP/Python", + "load" : false, + "class" : "Application.AnPWeb" + } + } +} \ No newline at end of file diff --git a/AnPServer/install.sh b/AnPServer/install.sh new file mode 100644 index 0000000..16553de --- /dev/null +++ b/AnPServer/install.sh @@ -0,0 +1,4 @@ +#!/bin/bash +# apt update && apt -y upgrade && apt -y autoremove +apt update +apt -y install python3 git \ No newline at end of file diff --git a/AnPServer/rebuild.sh b/AnPServer/rebuild.sh new file mode 100755 index 0000000..09f7468 --- /dev/null +++ b/AnPServer/rebuild.sh @@ -0,0 +1,4 @@ +#!/bin/bash +directory=`dirname $(readlink -f "$0")` +[ "$(docker images -q kyman:anp-server 2>/dev/null)" ] && docker image remove kyman:anp-server --force +docker build -f $directory/Dockerfile.debian -t kyman:anp-server $directory --no-cache \ No newline at end of file diff --git a/AnPServer/scripts/entrypoint.sh b/AnPServer/scripts/entrypoint.sh new file mode 100755 index 0000000..2e12f4e --- /dev/null +++ b/AnPServer/scripts/entrypoint.sh @@ -0,0 +1,59 @@ +#!/bin/bash + +closed= + +# rm -R /Projects/* +if [[ "$1" == "1" ]];then + rm -R /Projects/* +fi + +[[ "$(cat /etc/passwd|grep kyman)" == "" ]] && useradd -u 1000 -m kyman +[[ "$(cat /etc/passwd|grep www-data)" == "" ]] && useradd -u 33 www-data + +build(){ + + local name=$2 + + cd /Projects + + if [[ ! -d $name ]];then + + local group=$1 + + git clone https://git.k3y.pw/$group/$name + + if [[ "$name" == "AnP" ]];then + [[ -d /Projects/$name/Python/Modules ]] || mkdir /Projects/$name/Python/Modules + for module in ErrorsManager WMarkDown;do + ln -s /Projects/$module/Python/$module.py /Projects/$name/Python/Modules/$module.py + done + else + [[ -d /Projects/$name/Python/Abstracts ]] || mkdir /Projects/$name/Python/Abstracts + for file in AnPMap Applications;do + ln -s /Projects/AnP/Python/Abstracts/$file.py /Projects/$name/Python/Abstracts/$file.py + done + fi + + fi + +} + +build KyMAN ErrorsManager +build Whalers WMarkDown +build AnP AnP +build KyMAN PythonMapper +build KyMAN CDN + +[[ -f /Projects/AnP/JSON/AnP.py.settings.secrets.json ]] || +ln -s /Files/AnP.py.settings.secrets.json /Projects/AnP/JSON/AnP.py.settings.secrets.json + +[[ -f /Projects/AnP/JSON/AnP.py.settings.server.secrets.json ]] || +ln -s /Files/AnP.py.settings.server.secrets.json /Projects/AnP/JSON/AnP.py.settings.server.secrets.json + +trap "closed=1" INT TERM EXIT +while [[ "$closed" != "1" ]];do + wait || wait + sleep 1 +done + +# [[ -f /Scripts/stop.sh ]] && source /Scripts/stop.sh \ No newline at end of file diff --git a/AnPServer/scripts/run.sh b/AnPServer/scripts/run.sh new file mode 100755 index 0000000..21a3fed --- /dev/null +++ b/AnPServer/scripts/run.sh @@ -0,0 +1,3 @@ +#!/bin/bash +cd /Projects/AnP/Tools +./server.py.sh diff --git a/Documentation/espanol.md b/Documentation/espanol.md new file mode 100644 index 0000000..52f5e3c --- /dev/null +++ b/Documentation/espanol.md @@ -0,0 +1,32 @@ +El proyecto **AnPDockerServer** es un pequeño proyecto de muestreo y guía para montar un servidor AnP con Docker, con sus Scripts correspondientes y gestión de dependencias y ficheros locales. El servidor AnP irá puenteado por un servidor Proxy que gestione la salida pública del mismo, al poder ser, mediante un Socket de Dominio Unix (Unix Domain Server o UDS). A medida que vaya desarrollándose dicho proyecto aparecerán nuevas tecnologías y métodos por los que comunicarse mediante puenteo Proxy. + +Se usará el Docker Compose para gestionar el conjunto de las herramientas, y cada contenedor será Buildeado a partir de un Script que tendrán cada uno acompañado a su correspondiente Dockerfile, el cual será siempre "rebuild.sh". Las nomenclaturas del Dockerfile no será el estándar *Dockerfile* sino que será continuado por el sistema operativo por el que operará separado de un punto, por lo general como *Dockerfile.debian*. + +La subred del Docker Compose será **172.22.0.0/24** por defecto, y todos los contenedores que éste lance será siempre sobre dicha subred. + +# Nginx + +Nginx es una tecnología Proxy de origen ruso Full Open Source muy extendido. Es cierto que existe una alternativa Full Free Open Source, pero en este caso, se decidió montar sobre la tecnología original. + +> Somos conscientes de que ya existe un contenedor público en Docker Hub de Nginx, sin embargo, éste no sigue el patrón de funcionamiento original de Nginx, pese a ser original y propio de los creadores de Nginx, por lo que se decidió crear de 0 un contenedor base Debian con esta tecnología para que éste coincida con la documentación oficial del mismo, pero eso no quita que pueda ser usado de la misma manera el contenedor oficial que los creadores dejaron público. + +El servidor Nginx operará directamente sobre la IP **172.22.0.86** y levantará los siguientes puertos: + +- **80**: Para las salidas y peticiones HTTP. +- **443**: Para las salidas y peticiones HTTPS. + +También compartirá los siguientes directorios: + +- **/Projects**, *"/Nginx/projects" en local*: Este directorio se usa para compartir y gestionar desde el anfitrión los ficheros de configuración del propio Nginx. +- **/Certificates**, *"/certificates" en local*: Este directorio contendría los certificados acordes a los distintos dominios que tengamos registrados en el Nginx. +- **/Scripts**, *"/Nginx/scripts" en local*: Este directorio almacena los Scripts para que el OS pueda ejecutar en entorno de ejecución o que el propio usuario habra una nueva terminal mediante "docker exec -it nginx-server bash" y pueda operar de forma más sencilla las diferentes partes que el proyecto toca. +- **/var/log/nginx**, *"/Nginx/logs" en local*: Este será un directorio autocreado que contendrá los Logs del propio Nginx compartidos con el anfitrión para que el usuario tenga acceso a los mismos externamente al contenedor y éstos no se pierdan por cada reinicio o apagado del contenedor. +- **/tmp/pointers**, *"/Nginx/tmp" en local*: Este directorio se automontará en local y sólo contendrá cosas cuando éste sea usado por el propio Nginx, como es el caso de la creación por parte de terceras aplicaciones un archivo de gestión de comunicación de Sockers de Dominio Unix, por ejemplo. + +En los proyectos nos encontraremos dos ficheros, los cuales son: + +- **/Projects/nginx.80.conf**: El cual está diseñado para funcionar sobre el puerto 80, tanto en escucha como en envío, es decir, por el protocolo HTTP. +- **/Porjects/nginx.443.conf**: El cual está diseñador para funcionar sobre el puerto 443, tanto en escucha como en envío, es decir, por el protocolo HTTP con SSL, es decir, HTTPS. Éste depende plenamente de los certificados, donde tenemos uno de prueba para opera con éste aunque no concuerde con el dominio que está firmando. + + + diff --git a/Nginx/Dockerfile.debian b/Nginx/Dockerfile.debian new file mode 100644 index 0000000..c3ff87e --- /dev/null +++ b/Nginx/Dockerfile.debian @@ -0,0 +1,8 @@ +from debian +expose 80/tcp +expose 443/tcp +volume ./projects /Projects +volume ./certificates /Certificates +volume ./scripts /Scripts +volume ./logs:/var/log/nginx +volume ./tmp:/tmp/pointers \ No newline at end of file diff --git a/Nginx/certificates/test.crt b/Nginx/certificates/test.crt new file mode 100644 index 0000000..b0d1879 --- /dev/null +++ b/Nginx/certificates/test.crt @@ -0,0 +1,34 @@ +-----BEGIN CERTIFICATE----- +MIIF9TCCA92gAwIBAgIUPRDqUDcgk39zrxJkR2vfrHq9z50wDQYJKoZIhvcNAQEL +BQAwgYkxCzAJBgNVBAYTAkVTMRAwDgYDVQQIDAdHYWxpY2lhMQ8wDQYDVQQHDAZG +ZXJyb2wxDjAMBgNVBAoMBUt5TUFOMQ4wDAYDVQQLDAVLeU1BTjEVMBMGA1UEAwwM +a3ltYW4uazN5LnB3MSAwHgYJKoZIhvcNAQkBFhEwa3ltYW4wQGdtYWlsLmNvbTAe +Fw0yNDEwMTIxMjEyNDhaFw0yNTEwMTIxMjEyNDhaMIGJMQswCQYDVQQGEwJFUzEQ +MA4GA1UECAwHR2FsaWNpYTEPMA0GA1UEBwwGRmVycm9sMQ4wDAYDVQQKDAVLeU1B +TjEOMAwGA1UECwwFS3lNQU4xFTATBgNVBAMMDGt5bWFuLmszeS5wdzEgMB4GCSqG +SIb3DQEJARYRMGt5bWFuMEBnbWFpbC5jb20wggIiMA0GCSqGSIb3DQEBAQUAA4IC +DwAwggIKAoICAQCD2VGd97703Bhu05saVh/d/nHyUxmV9QEoxdgl53kiN2+FlIi7 +vObnk5eszSCPd78gDDCjyNCeQDlHYstJezToGZ96NFhPUfx5Ir6jy1FybE0UeVGR +hT2J1RT4NLFSnwHLJuo9uKTpcoVO7Nfh20jaFzZKaUhTiGQLs/cHXzh7v7B31obu +Hg7NyvTZt20za73KqOY80kQzPj1siK0cizCeL03nlhQj+JRvWPo4cXjdrDtIPvlq +Uf51ZC6lVk6AbZlbfgfajr+gJQ1THEsdrfqiiXtBTUDzLYM+6py2gzuQ2PMR/APD +CVzbqnn5REDCfKwJmhX4gzM921UnHGrOV1sMW6XUZ/258t89qroyE1AbyHnZwEHo +BFCx6hWl20AKlZSCLBJ3Ct4p38xIAqd26GLgGX2qbc2Jj30R2gkvN1cfLhqITNI5 +lsqv67nya1sGghRZsxQPwIbHCWx+GG8jYcwdYV4A9WVEx0/gEhkUNIM2pyvMebtp +6FBDBocqXysmZxCf+lRlewj7QfaVYPRD+aVuged76CjjojwPchuENlYatRs45o2M +sdT2jS+6XogdJGvDIrea0+Y/wGwbI5Mh/7DHzwpIZQVMtY1SIF+I3wxpZMO01aZh +MV1Z+qEQUsDgjYbfBO7u+1sogoAGDvxpWUJ/SwUyVRZDxdz1UKMe2fFGzwIDAQAB +o1MwUTAdBgNVHQ4EFgQUEOhgBTFCqYI3x6o5N4fekvFWCVUwHwYDVR0jBBgwFoAU +EOhgBTFCqYI3x6o5N4fekvFWCVUwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0B +AQsFAAOCAgEAdBd+NsYTVBwD5RNjxzhSzxvCBT31De6dDwbSdGfyYF1gSMtZmjvE +715HXtgTz0A7OB4sY1gUMv9UmzNOajr6E5ND3dfHuzBY4GYc1+hk5c+Inl3aldMd +1gYgFLTVptJx7Yn7yRWx+UXf9E6NZTMjlYYQE23RbA+g0Ig8ovm4NcgPGjkQ/rq9 +xFETNYB/O8/AAxa7zVndFEUCgcKn602Zz5j2IiPpnKZIaLeqr2/eBUBYsM+AfnwE +KvsLmBYQYlvfV3pOpOPDsNyFPwDkOj5UQdD4z6ve+OAzo/XTNPGpCKL4LH63ig9E +bPms0ZmeAJgeGgCe3zVfQ+ln90k8mNF85w+gyixGXuP1TbLEw6waynhKzXeTGb2J +AV/Jpil5Hlacnqv9SXC7WyqmVTpACpQAVa1r5xH5M9RCA12/ZSaAL37Ec/awUCIh +kfA0pjYRM4SFM+DArVasBfPMY585dB67wUiOZ0ZJYakdJ1npXemGiinGtBy5IN4Z +XC4rpFH+MT56dE6u1AeU9vyzwbGoWO+Ks9Z45O82JPqgE66UYwkBP/LhYwCGuvsd +TOy+/fkzTsq7S3KqS3BrXDuFCRt9u/Qp/yQ8SMZsAsPJ34QT8piO2O2zkmKfOta4 +jgrBWJAhub+FWhjEAq0jVWkA+Sd2Mu3RTFi4lu/5rFX/tveRLQOPJMw= +-----END CERTIFICATE----- diff --git a/Nginx/certificates/test.key b/Nginx/certificates/test.key new file mode 100644 index 0000000..9427e1a --- /dev/null +++ b/Nginx/certificates/test.key @@ -0,0 +1,52 @@ +-----BEGIN PRIVATE KEY----- +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 +RR+gn4ay5Dbpfo4ZIuT2tAwA3RQW +-----END PRIVATE KEY----- diff --git a/Nginx/projects/nginx.443.conf b/Nginx/projects/nginx.443.conf new file mode 100644 index 0000000..b057d0d --- /dev/null +++ b/Nginx/projects/nginx.443.conf @@ -0,0 +1,41 @@ +server { + listen 80 default_server; + listen [::]:80 default_server; + access_log /var/log/nginx/default.access.log; + access_log /var/log/nginx/default.error.log; + return 301 https://$host$request_uri; +} + +server { + listen 443 ssl default_server; + listen [::]:443 ssl default_server; + ssl_certificate /Certificates/test.crt; + ssl_certificate_key /Certificates/test.key; + access_log /var/log/nginx/default.433.access.log; + error_log /var/log/nginx/default.433.error.log; + location / { + root /Projects/default; + index index.html index.htm; + } +} + +server { + listen 443 ssl; + server_name ~^(anp|cdn|errorsmanager|wm(arkdown|d)|pythonmapper)\.local?$; + ssl_certificate /Certificates/test.crt; + ssl_certificate_key /Certificates/test.key; + access_log /var/log/nginx/default.433.access.log; + error_log /var/log/nginx/default.433.error.log; + location / { + proxy_set_header Host $host; + proxy_set_header X-Real-IP $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto https; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Host $proxy_add_x_forwarded_for; + proxy_pass http://socket_anp/; + } +} + +upstream socket_anp { + server unix:/tmp/pointers/anp.sock; +} \ No newline at end of file diff --git a/Nginx/projects/nginx.80.conf b/Nginx/projects/nginx.80.conf new file mode 100644 index 0000000..e0d5a1c --- /dev/null +++ b/Nginx/projects/nginx.80.conf @@ -0,0 +1,29 @@ +server { + listen 80 default_server; + listen [::]:80 default_server; + root /Projects/default; + access_log /var/log/nginx/default.access.log; + access_log /var/log/nginx/default.error.log; + location / { + try_files /index.html = 404; + } +} + +server { + listen 80; + server_name ~^(anp|cdn|errorsmanager|wm(arkdown|d)|pythonmapper)\.local?$; + access_log /var/log/nginx/default.80.access.log; + error_log /var/log/nginx/default.80.error.log; + location / { + proxy_set_header Host $host; + proxy_set_header X-Real-IP $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto https; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Host $proxy_add_x_forwarded_for; + proxy_pass http://socket_anp/; + } +} + +upstream socket_anp { + server unix:/tmp/pointers/anp.sock; +} \ No newline at end of file diff --git a/Nginx/rebuild.sh b/Nginx/rebuild.sh new file mode 100755 index 0000000..003a6b5 --- /dev/null +++ b/Nginx/rebuild.sh @@ -0,0 +1,4 @@ +#!/bin/bash +directory=`dirname $(readlink -f "$0")` +[ "$(docker images -q kyman:nginx-server 2>/dev/null)" ] && docker image remove kyman:nginx-server --force +docker build -f $directory/Dockerfile.debian -t kyman:nginx-server $directory --no-cache \ No newline at end of file diff --git a/Nginx/scripts/create_certificate.sh b/Nginx/scripts/create_certificate.sh new file mode 100755 index 0000000..6d62ec2 --- /dev/null +++ b/Nginx/scripts/create_certificate.sh @@ -0,0 +1,25 @@ +#!/bin/bash + +name=$1 +days=$2 + +if [[ "$name" == "" ]];then + echo -e "[ERRO] I need a name for the new certificate. Use the next example for your command where days is optional and it is 365 (1 year) by default:\n./create_certificate.sh NAME [DAYS]" +else + + echo "[INFO] Creating the new certificate '$name'..." + + if [[ "$(command -v openssl)" == "" ]];then + echo "[INFO] Installing the 'openssl' command application for create the new certificate." + apt install -y openssl + fi + + if [[ "$days" == "" ]];then + days=365 + fi + + openssl req -newkey rsa:4096 -x509 -sha256 -days $days -nodes -out $name.crt -keyout $name.key && + echo "[ OK ] The new certificate '$name' was created for $days days. Look for the '$name.crt' and '$name.key' files in this folder." || + echo "[ERRO] There was any error creating the new certificate '$name'." + +fi \ No newline at end of file diff --git a/Nginx/scripts/run.sh b/Nginx/scripts/run.sh new file mode 100644 index 0000000..b03175a --- /dev/null +++ b/Nginx/scripts/run.sh @@ -0,0 +1,42 @@ +#!/bin/bash + +closed= +mode=80 # 80 || 443 <=> http || https + +if [[ "$(command -v nginx)" == "" ]];then + + echo "[INFO] Installing Nginx..." + + apt update && apt -y upgrade && apt -y autoremove + apt install -y nginx + + # chmod +x docker.entrypoint.sh + +fi + +echo "[INFO] Settings Nginx..." + +/etc/init.d/nginx restart +[[ -f /etc/nginx/sites-enabled/default ]] && +run rm /etc/nginx/sites-enabled/default +for type in available enabled;do + [[ ! -f /etc/nginx/sites-$type/nginx.$mode.conf ]] && + [[ -f /Projects/nginx.$mode.conf ]] && + ln -s /Projects/nginx.$mode.conf /etc/nginx/sites-$type/nginx.$mode.conf +done + +echo "[ OK ] Nginx installet and set fully." + +echo "[INFO] Restarting Nginx..." + +/etc/init.d/nginx restart + +trap "closed=1" INT TERM EXIT +while [[ "$closed" != "1" ]];do + wait || wait + sleep 1 +done + +echo "[INFO] Stopping Nginx..." + +/etc/init.d/nginx stop \ No newline at end of file diff --git a/README.md b/README.md index d669813..172ae01 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,5 @@ # AnPDockerServer -A Single project for deploy the AnP Server in Docker. In the first, it was deployed by Nginx, but it was change with new technologies, without removed old. \ No newline at end of file +A Single project for deploy the AnP Server in Docker. In the first, it was deployed by Nginx, but it was change with new technologies, without removed old. + +[![Español](https://cdn.local/images/flags/espanol.svg)](Documentation/espanol.md) \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..4216ca6 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,38 @@ +services: + + anp_server: + image: kyman:anp-server + container_name: anp-server + volumes: + - ./AnPServer/git:/Projects + - ./AnPServer/scripts:/Scripts + - ./AnPServer/files:/Files + - ./Nginx/tmp:/Nginx + networks: + dev-network-tests: + ipv4_address: 172.22.0.190 + command: /Scripts/entrypoint.sh + + nginx_server: + image: kyman:nginx-server + container_name: nginx-server + ports: + - 80:80/tcp + - 443:443/tcp + volumes: + - ./Nginx/projects:/Projects + - ./certificates:/Certificates + - ./Nginx/scripts:/Scripts + - ./Nginx/logs:/var/log/nginx + - ./Nginx/tmp:/tmp/pointers + networks: + dev-network-tests: + ipv4_address: 172.22.0.86 + command: /Scripts/run.sh + +networks: + dev-network-tests: + driver: bridge + ipam: + config: + - subnet: 172.22.0.0/24 \ No newline at end of file diff --git a/version b/version new file mode 100644 index 0000000..3bc5d84 --- /dev/null +++ b/version @@ -0,0 +1 @@ +0.0.1.0 \ No newline at end of file