LINUX.ORG.RU
ФорумAdmin

nginx в докере

 


0

1

Добрый день!

Я хочу разобраться как деплоить свое web-приложение. Решил установить MongoDB и Mongo Express в докере. Так работает. Я хочу чтобы Mongo Express работала через proxy сервер, для этого я запустил nginx тоже в докере, прописал три сервиса в docker-compose.yml. Но заставить работать nginx пока не получается. Нашел несколько статей, например: эту и эту.

У меня простая задача: пробросить веб-сервер Mongo Express через nginx.

Вот мой docker-compose.yml:

version: '3'

services:
  mongo:
    image: mongo
    container_name: mongo
    environment:
      MONGO_INITDB_ROOT_USERNAME: mongouser
      MONGO_INITDB_ROOT_PASSWORD: mongopass
    ports:
      - "27017:27017"
    volumes:
      - /home/silart/mongodb:/data/db

  mongoexpress:
    image: mongo-express
    container_name: mongoexpress
    ports:
      - 8081:8081
    environment:
      ME_CONFIG_BASICAUTH_USERNAME: user
      ME_CONFIG_BASICAUTH_PASSWORD: pass
      ME_CONFIG_MONGODB_PORT: 27017
      ME_CONFIG_MONGODB_ADMINUSERNAME: mongouser
      ME_CONFIG_MONGODB_ADMINPASSWORD: mongopass

  nginx:
    image: nginx:latest
    container_name: nginx
    ports:
      - 80:80
      - 443:443
    volumes:
      - ./nginx/nginx.conf:/etc/nginx/nginx.conf
    depends_on:
      - mongoexpress
    links:
      - mongoexpress

Файл nginx.conf:

worker_processes 1;

events { worker_connections 1024; }

http {

    sendfile on;

    upstream docker-nginx {
        server mongoexpress:8081;
    }

    server {
        listen 8080;

        location / {
            proxy_pass         http://docker-nginx;
            proxy_redirect     off;
            proxy_set_header   Host $host;
            proxy_set_header   X-Real-IP $remote_addr;
            proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header   X-Forwarded-Host $server_name;
        }
    }

}

Если я обращаюсь к серверу так: http://localhost:8081, это работает, но запросы идут напрямую к mongoexpress (я пробрасываю порты: 8081:8081)

А если обращаться так: http://localhost:8080, то не работает.

Подскажите пожалуйста, что можно сделать.


Ответ на: комментарий от hippi90

Да, действительно! Открыл порт и заработало. Спасибо!

А вы не знаете, можно ли сделать так, чтобы mongoexpress не был доступен извне, только через ngnix?

version: '3'

services:
  mongo:
    image: mongo
    container_name: mongo
    environment:
      MONGO_INITDB_ROOT_USERNAME: mongouser
      MONGO_INITDB_ROOT_PASSWORD: mongopass
    ports:
      - "27017:27017"
    volumes:
      - /home/silart/mongodb:/data/db

  mongoexpress:
    image: mongo-express
    container_name: mongoexpress
    ports:
      - 8081:8081
    environment:
      ME_CONFIG_BASICAUTH_USERNAME: user
      ME_CONFIG_BASICAUTH_PASSWORD: pass
      ME_CONFIG_MONGODB_PORT: 27017
      ME_CONFIG_MONGODB_ADMINUSERNAME: mongouser
      ME_CONFIG_MONGODB_ADMINPASSWORD: mongopass

  nginx:
    image: nginx:latest
    container_name: nginx
    ports:
      - 80:80
      - 443:443
    volumes:
      - ./nginx/nginx.conf:/etc/nginx/nginx.conf
    depends_on:
      - mongoexpress
    links:
      - mongoexpress

А то получается что он еще доступен по 8081 порту

silart ()
Ответ на: комментарий от hippi90

Хм... Убрал я мапинг портов:

  mongoexpress:
    image: mongo-express
    container_name: mongoexpress
    environment:
      ME_CONFIG_BASICAUTH_USERNAME: user
      ME_CONFIG_BASICAUTH_PASSWORD: pass
      ME_CONFIG_MONGODB_PORT: 27017
      ME_CONFIG_MONGODB_ADMINUSERNAME: mongouser
      ME_CONFIG_MONGODB_ADMINPASSWORD: mongopass

И перестал он видеться по 8081 порту, а по 80 порту видится. Как так, если в конфиге ngnix указан порт:

    upstream docker-nginx {
        server mongoexpress:8081;
    }

Объясните пожалуйста

silart ()