diff --git a/.env b/.env index e1cd840..a44d1aa 100644 --- a/.env +++ b/.env @@ -1,5 +1,6 @@ # Parameter für NGINX-Server NGINX_VERSION=mainline-alpine +NGINX_USE_SSL=true # true = SSL aktivieren, false = SSL deaktivieren, Port sollte auch angepasst werden NGINX_HOST_PORT=443 NGINX_SERVER_NAME=kbp_crm.mylocal.de NGINX_STATIC_DIR=/home/schoschi/Entwicklung/Projekte_Runden/kbcrm/NGINX_Server/html diff --git a/NGINX_Server/10-select-ssl.sh b/NGINX_Server/10-select-ssl.sh new file mode 100644 index 0000000..88cbe95 --- /dev/null +++ b/NGINX_Server/10-select-ssl.sh @@ -0,0 +1,17 @@ +#!/bin/sh +# Wählt das NGINX-Template abhängig von NGINX_USE_SSL aus. +# Kopiert das passende Template aus dem Staging-Mount (read-only) in das +# container-interne Verzeichnis, das vom envsubst-Skript verarbeitet wird. +# Läuft als 10-… vor dem eingebauten 20-envsubst-on-templates.sh. + +src_dir="/etc/nginx/configtemplates" +dst_dir="/etc/nginx/templates" + +# Falls noch ein Template aus einem vorherigen Start im dst_dir liegt, entfernen. +rm -f "$dst_dir"/kbp_crm.*.conf.template + +if [ "$NGINX_USE_SSL" = "false" ]; then + cp "$src_dir/kbp_crm.nossl.conf.template" "$dst_dir/" +else + cp "$src_dir/kbp_crm.ssl.conf.template" "$dst_dir/" +fi diff --git a/NGINX_Server/Dockerfile b/NGINX_Server/Dockerfile index c4da972..b3add02 100644 --- a/NGINX_Server/Dockerfile +++ b/NGINX_Server/Dockerfile @@ -1,4 +1,6 @@ ARG NGINX_VERSION FROM nginx:${NGINX_VERSION} RUN ln -sf /usr/share/zoneinfo/Europe/Berlin /etc/localtime -RUN mkdir /etc/certs \ No newline at end of file +RUN mkdir -p /etc/certs /etc/nginx/templates +COPY 10-select-ssl.sh /docker-entrypoint.d/10-select-ssl.sh +RUN chmod +x /docker-entrypoint.d/10-select-ssl.sh \ No newline at end of file diff --git a/NGINX_Server/configtemplates/kbp_crm.nossl.conf.template b/NGINX_Server/configtemplates/kbp_crm.nossl.conf.template new file mode 100644 index 0000000..ecc4b17 --- /dev/null +++ b/NGINX_Server/configtemplates/kbp_crm.nossl.conf.template @@ -0,0 +1,35 @@ +# Zunächst wird ein Default-Server definiert. +# Das Standardverhalten von NGINX ist nämlich wie folgt: +# Wenn im Request ein Server-Name reinkommt und NGINX keinen Server-Block findet, in dem dieser +# Servername definiert wird, wird einfach der erste definierte Serverblock genommen. +# Dadurch, dass ein expliziter Default-Server definiert wird, wird dieser verwendet. +# Falls jetzt also ein Servername übergeben wird, den es nicht gibt, gibt NGINX den Error-Code 404 zurück +server { + listen 4430 default_server; + return 404; +} + +server { + listen 4430; + server_name ${NGINX_SERVER_NAME}; + resolver 127.0.0.11 valid=30s; # notwendig, damit der Upstream (s.u.) nicht direkt den nginx-Server stoppt, falls pythonapp noch nicht soweit ist + # https://sandro-keil.de/blog/let-nginx-start-if-upstream-host-is-unavailable-or-down/ + + location /static { + root /usr/share/nginx/html; + } + + location / { + # Variable muss benutzt werden (s.o. bei resolver Direktive) + set $upstream pythonapp:8080; + proxy_pass http://$upstream; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + } + + location /health-check { + add_header Content-Type text/plain; + return 200 "success $time_iso8601"; + } +} diff --git a/NGINX_Server/configtemplates/kbp_crm.conf.template b/NGINX_Server/configtemplates/kbp_crm.ssl.conf.template similarity index 97% rename from NGINX_Server/configtemplates/kbp_crm.conf.template rename to NGINX_Server/configtemplates/kbp_crm.ssl.conf.template index 99bdb89..e3dbd60 100644 --- a/NGINX_Server/configtemplates/kbp_crm.conf.template +++ b/NGINX_Server/configtemplates/kbp_crm.ssl.conf.template @@ -1,38 +1,38 @@ -ssl_certificate /etc/certs/${NGINX_CERT}; -ssl_certificate_key /etc/certs/${NGINX_CERT_KEY}; - -# Zunächst wird ein Default-Server definiert. -# Das Standardverhalten von NGINX ist nämlich wie folgt: -# Wenn im Request ein Server-Name reinkommt und NGINX keinen Server-Block findet, in dem dieser -# Servername definiert wird, wird einfach der erste definierte Serverblock genommen. -# Dadurch, dass ein expliziter Default-Server definiert wird, wird dieser verwendet. -# Falls jetzt also ein Servername übergeben wird, den es nicht gibt, gibt NGINX den Error-Code 404 zurück -server { - listen 4430 ssl default_server; - return 404; -} - -server { - listen 4430 ssl; - server_name ${NGINX_SERVER_NAME}; - resolver 127.0.0.11 valid=30s; # notwendig, damit der Upstream (s.u.) nicht direkt den nginx-Server stoppt, falls pythonapp noch nicht soweit ist - # https://sandro-keil.de/blog/let-nginx-start-if-upstream-host-is-unavailable-or-down/ - - location /static { - root /usr/share/nginx/html; - } - - location / { - # Variable muss benutzt werden (s.o. bei resolver Direktive) - set $upstream pythonapp:8080; - proxy_pass http://$upstream; - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - } - - location /health-check { - add_header Content-Type text/plain; - return 200 "success $time_iso8601"; - } -} \ No newline at end of file +ssl_certificate /etc/certs/${NGINX_CERT}; +ssl_certificate_key /etc/certs/${NGINX_CERT_KEY}; + +# Zunächst wird ein Default-Server definiert. +# Das Standardverhalten von NGINX ist nämlich wie folgt: +# Wenn im Request ein Server-Name reinkommt und NGINX keinen Server-Block findet, in dem dieser +# Servername definiert wird, wird einfach der erste definierte Serverblock genommen. +# Dadurch, dass ein expliziter Default-Server definiert wird, wird dieser verwendet. +# Falls jetzt also ein Servername übergeben wird, den es nicht gibt, gibt NGINX den Error-Code 404 zurück +server { + listen 4430 ssl default_server; + return 404; +} + +server { + listen 4430 ssl; + server_name ${NGINX_SERVER_NAME}; + resolver 127.0.0.11 valid=30s; # notwendig, damit der Upstream (s.u.) nicht direkt den nginx-Server stoppt, falls pythonapp noch nicht soweit ist + # https://sandro-keil.de/blog/let-nginx-start-if-upstream-host-is-unavailable-or-down/ + + location /static { + root /usr/share/nginx/html; + } + + location / { + # Variable muss benutzt werden (s.o. bei resolver Direktive) + set $upstream pythonapp:8080; + proxy_pass http://$upstream; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + } + + location /health-check { + add_header Content-Type text/plain; + return 200 "success $time_iso8601"; + } +} diff --git a/docker-compose.base.yaml b/docker-compose.base.yaml index 2142ece..394dd0a 100644 --- a/docker-compose.base.yaml +++ b/docker-compose.base.yaml @@ -10,9 +10,10 @@ services: - ${NGINX_HOST_PORT}:4430 volumes: - ${NGINX_STATIC_DIR}:/usr/share/nginx/html:ro - - ${NGINX_CONFIG_TEMPLATE_DIR}:/etc/nginx/templates + - ${NGINX_CONFIG_TEMPLATE_DIR}:/etc/nginx/configtemplates:ro - ${NGINX_CERTS}:/etc/certs environment: + - NGINX_USE_SSL=${NGINX_USE_SSL:-true} - NGINX_CERT=${NGINX_CERT} - NGINX_CERT_KEY=${NGINX_CERT_KEY} - NGINX_SERVER_NAME=${NGINX_SERVER_NAME} diff --git a/docker-compose.save.yaml b/docker-compose.save.yaml index 2a9d2b1..0cda9af 100644 --- a/docker-compose.save.yaml +++ b/docker-compose.save.yaml @@ -9,9 +9,10 @@ services: - ${NGINX_HOST_PORT}:4430 volumes: - ${NGINX_STATIC_DIR}:/usr/share/nginx/html:ro - - ${NGINX_CONFIG_TEMPLATE_DIR}:/etc/nginx/templates + - ${NGINX_CONFIG_TEMPLATE_DIR}:/etc/nginx/configtemplates:ro - ${NGINX_CERTS}:/etc/certs environment: + - NGINX_USE_SSL=${NGINX_USE_SSL:-true} - NGINX_CERT=${NGINX_CERT} - NGINX_CERT_KEY=${NGINX_CERT_KEY} - NGINX_SERVER_NAME=${NGINX_SERVER_NAME}