Nginx и whoami через Docker compose

Ребят подскажите!

Осваиваю докер, nginx и whoami через Docker compose по отдельности работают. Но как их заставить работать в связке? Чтоб nginx выдавал запросы от whoami? И как потом к этому всему прикрутить SSL? Нужно их обоих прописать в docker_compose.ymi? Каким образом? Или нужно еще использовать dockerfile?

Привет!

Отлично, что осваиваешь Docker и nginx. Давай попробуем разобраться, как настроить связку этих сервисов с помощью Docker Compose.

Шаг 1: Создание docker-compose.yml

Для начала создадим файл docker-compose.yml, в котором будут описаны оба сервиса: nginx и whoami.

version: '3.8'

services:
  whoami:
    image: "containous/whoami"
    ports:
      - "8000:80"
    
  nginx:
    image: "nginx:latest"
    ports:
      - "443:443"
      - "80:80"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
    depends_on:
      - whoami

Теперь у нас есть два сервиса: whoami и nginx.

Шаг 2: Настройка nginx

Создадим файл nginx.conf в той же директории, где находится docker-compose.yml. В этом файле будет описание конфигурации nginx для проксирования запросов на сервис whoami.

events {}

http {
    upstream whoami {
        server whoami:80;
    }

    server {
        listen 80;

        location / {
            proxy_pass http://whoami;
        }
    }
}

Данный конфигурационный файл указывает nginx проксировать все запросы, которые приходят на порт 80, на сервис whoami.

Шаг 3: SSL

Для добавления SSL необходимо немного модифицировать конфигурацию nginx и добавить сертификаты. Если у тебя нет сертификатов, можешь использовать самоподписанные или как вариант - воспользоваться Let’s Encrypt.

Я приведу пример для использования самоподписанного сертификата. Сначала нужно создать директории certs и private и сгенерировать в них сертификаты:

mkdir -p certs private
openssl req -new -newkey rsa:4096 -days 365 -nodes -x509 \
    -keyout private/nginx.key -out certs/nginx.crt

После генерации сертификатов модифицируем nginx.conf:

events {}

http {
    upstream whoami {
        server whoami:80;
    }

    server {
        listen 80;
        listen [::]:80;
        server_name _;

        location / {
            return 301 https://$host$request_uri;
        }
    }

    server {
        listen 443 ssl;
        listen [::]:443 ssl;
        server_name _;

        ssl_certificate /etc/nginx/certs/nginx.crt;
        ssl_certificate_key /etc/nginx/private/nginx.key;

        location / {
            proxy_pass http://whoami;
        }
    }
}

И не забудь добавить volume для сертификатов в docker-compose.yml:

volumes:
  - ./nginx.conf:/etc/nginx/nginx.conf
  - ./certs:/etc/nginx/certs
  - ./private:/etc/nginx/private

Запуск

Теперь, когда у нас готовы файлы конфигураций и сертификаты, можем запустить docker-compose:

docker-compose up -d

Сервисы должны подняться и работать так, что nginx будет проксировать запросы на whoami, а также поддерживать SSL.

Надеюсь, это поможет! Удачи в освоении Docker и nginx! Если возникнут вопросы, не стесняйся спрашивать. . Я ответил на ваш вопрос?