From b4896750034ae75cfb31236e0f6a0fd049617463 Mon Sep 17 00:00:00 2001 From: amorozov Date: Fri, 8 Sep 2023 11:31:39 +0300 Subject: [PATCH] feature: added default port forwarding logic and readme --- Dockerfile | 14 ++++++++------ README.MD | 46 ++++++++++++++++++++++++++++++++++++++++++++ default.nginx.conf | 8 -------- docker-entrypoint.sh | 18 +++++++++++++++++ 4 files changed, 72 insertions(+), 14 deletions(-) create mode 100644 README.MD delete mode 100644 default.nginx.conf diff --git a/Dockerfile b/Dockerfile index 0ca7f11..9d2d981 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,17 +1,19 @@ -ARG BASE_IMAGE="nginx" +ARG BASE_IMAGE="fabiocicerchia/nginx-lua:1.25.2-alpine3.18.3" FROM ${BASE_IMAGE} # Install ping and ip -RUN apt update && \ - apt install -y iproute2 iputils-ping +RUN apk add --no-cache iproute2 iputils bash # Default nginx proxy envs -ENV NGINX_PROXY_SOURCE_PORT=${NGINX_PROXY_SOURCE_PORT:-Please configure NGINX_PROXY_SOURCE_PORT env!} -ENV NGINX_PROXY_SOURCE_ADDRESS=${NGINX_PROXY_SOURCE_ADDRESS:-Please configure NGINX_PROXY_SOURCE_ADDRESS env!} +ENV NGINX_PROXY_SOURCE_PORT=${NGINX_PROXY_SOURCE_PORT:-"Please configure NGINX_PROXY_SOURCE_PORT env!"} +ENV NGINX_PROXY_SOURCE_ADDRESS=${NGINX_PROXY_SOURCE_ADDRESS:-"Please configure NGINX_PROXY_SOURCE_ADDRESS env!"} # Copy default nginx configuration -COPY default.nginx.conf /etc/nginx/nginx.conf +#COPY default.nginx.conf /etc/nginx/nginx.conf + +# Remove default nginx config +RUN rm -r /etc/nginx/nginx.conf # Copy entrypoint COPY docker-entrypoint.sh /usr/local/bin/docker-entrypoint.sh diff --git a/README.MD b/README.MD new file mode 100644 index 0000000..38e510b --- /dev/null +++ b/README.MD @@ -0,0 +1,46 @@ +# Nginx Routes Helper + +Специальный образ NGINX, который упрощает работу с проксированием портов между разными сетками у докер контейнеров. + +По-умолчанию установлены утилиты для работы с роутами. + +# Пре-стартовый скрипт + +При старте контейнера происходит проверка на наличие скрипта, который должен быть выполнен в самом начале. + +Скрипт располагается в `/invoke_initial_script.sh`, собственно сюда его и надо монтировать. + +Например, требуется добавить роуты в контейнер при его старте. + +`/invoke_initial_script.sh`: +```bash +#!/usr/bin/env bash +echo "Adding routes..." +ip route add 192.168.255.0/24 via 172.20.20.2 +echo "Routes added!" +``` + +Тут может быть совершенно что угодно, этот скрипт выполнится до старта NGINX. + +# Проброс портов по-умолчанию + +Если пользователь не примонтирует свой `/etc/nginx/nginx.conf`, то по-умолчанию будет использоваться +обычный `stream` прокси с порта на адрес. Слушаемый порт и целевой адрес указываются через переменные окружения: +- `NGINX_PROXY_SOURCE_PORT` - Порт (например `80`), который слушает NGINX +- `NGINX_PROXY_TARGET_ADDRESS` - Адрес и порт (например `localhost:25565`), куда будет отправляться трафик + +Пример использования в `docker-compose`: +```yml +version: '3.7' +services: + test-nginx: + image: "git.tswf.io/docker-base-images/nginx-routes:latest" + ports: + - "25565:25565" + environment: + NGINX_PROXY_SOURCE_PORT: 25565 + NGINX_PROXY_TARGET_ADDRESS: "another_container:9000" + another_container: + image: "blablabla" + #... +``` \ No newline at end of file diff --git a/default.nginx.conf b/default.nginx.conf deleted file mode 100644 index cf705c2..0000000 --- a/default.nginx.conf +++ /dev/null @@ -1,8 +0,0 @@ -events {} - -stream { - server { - listen ${NGINX_PROXY_SOURCE_PORT}; - proxy_pass ${NGINX_PROXY_SOURCE_ADDRESS}; - } -} \ No newline at end of file diff --git a/docker-entrypoint.sh b/docker-entrypoint.sh index 025c255..1e42937 100644 --- a/docker-entrypoint.sh +++ b/docker-entrypoint.sh @@ -6,6 +6,24 @@ if [ -f "/invoke_initial_script.sh" ]; then source /invoke_initial_script.sh fi +# Проверяем наличие файла /etc/nginx/nginx.conf +if [ ! -f "/etc/nginx/nginx.conf" ]; then + # Заполняем файл /etc/nginx/nginx.conf с использованием переменных окружения + cat > /etc/nginx/nginx.conf <