В данной статье рассмотрим вопрос - Как включать или отключать базовую аутентификацию в контейнере докер nginx, в зависимости от ENV переменной?
Итак, для начала создадим директорию docker/nginx/ для размещения всех файлов, связанных со сборкой контейнера nginx. И в корне проекта разместим файл .env c настройками проекта:
Файл
.env
APP_DOMAIN="host.docker.internal"
BASIC_AUTH=1
BASIC_AUTH_USER=user
BASIC_AUTH_PASSWORD=passwordФайл
docker-compose.yaml
services:
nginx:
container_name: nginx
build:
context: .
dockerfile: docker/nginx/Dockerfile
args:
basic_auth: ${BASIC_AUTH}
environment:
- APP_DOMAIN=${APP_DOMAIN}
- BASIC_AUTH=${BASIC_AUTH} #0 or 1
- BASIC_AUTH_USER=${BASIC_AUTH_USER}
- BASIC_AUTH_PASSWORD=${BASIC_AUTH_PASSWORD}
- BASIC_AUTH_CONF_FILE=/etc/nginx/basic_auth.conf
ports:
- "80:80"
restart: alwaysФайл
docker/nginx/Dockerfile
FROM nginx:1.27
ARG basic_auth
# Если нужна авторизация - то устанавливаем пакет apache2-utils
RUN test "$basic_auth" -eq 1 && (apt -y update && apt -y install apache2-utils) || echo "Basic auth disabled"
# Копируем дополнительный скрипт в директорию /docker-entrypoint.d
COPY ./docker/nginx/1-check-basic-auth.sh /docker-entrypoint.d/
# Копируем шаблон с настройками nginx
COPY ./docker/nginx/default.conf.template /etc/nginx/templates/default.conf.template
# Для теста копируем страницу index.html
COPY ./docker/nginx/index.html /usr/share/nginx/html/index.html
EXPOSE 80Файл
docker/nginx/1-check-basic-auth.sh
#!/bin/sh
HTPASSWD_FILE="/etc/nginx/.htpasswd"
# Создаем пустой файл с настройками авторизации
echo "" > "$BASIC_AUTH_CONF_FILE"
if [ "$BASIC_AUTH" -eq 1 ]; then
echo "Basic auth enabled: creating .htpasswd file"
# Генерируем .htpasswd файл
htpasswd -cb -B $HTPASSWD_FILE "$BASIC_AUTH_USER" "$BASIC_AUTH_PASSWORD"
# Записываем в конфиг параметры для авторизации
echo 'auth_basic "Restricted Access";' >> "$BASIC_AUTH_CONF_FILE"
echo "auth_basic_user_file $HTPASSWD_FILE;" >> "$BASIC_AUTH_CONF_FILE"
fiФайл
docker/nginx/default.conf.template
server {
# Порт, на котором работает nginx
listen [::]:80;
listen 80;
server_name ${APP_DOMAIN};
location / {
# подключаем файл с настроками для авторизации, созданный в скрипте 1-check-basic-auth.sh
include ${BASIC_AUTH_CONF_FILE};
root /usr/share/nginx/html;
index index.html;
}
}Ссылка на github - https://github.com/disoft-by/example-docker-nginx-basic-auth-optional
- 22.02.2026
- 11 просмотров
Добавить комментарий
Может быть интересно