@AE42

Несколько конфигов nginx конфигов на докере?

Доброе утро!

У меня есть несколько проектов, которые стоят на 1 сервере
Как можно настроить nginx в docker-compose так, чтобы он использовал несколько конфигов

На данный момент мой docker-compose.yml выглядит так:
version: '3.6'
services:
  postgres:
    image: postgres:12
    restart: always
    volumes:
    - db_data:/var/lib/postgresql/data
    environment:
      POSTGRES_USER: qwe
      POSTGRES_PASSWORD: qwe
      POSTGRES_DB: qwe
  graphql-engine:
    image: hasura/graphql-engine:v1.2.2
    ports:
    - "8080:8080"
    depends_on:
    - "postgres"
    restart: always
    environment:
      HASURA_GRAPHQL_DATABASE_URL: postgres://qwe:qwe@postgres:5432/qwe
      HASURA_GRAPHQL_ENABLE_CONSOLE: "true" # set to "false" to disable console
      HASURA_GRAPHQL_ENABLED_LOG_TYPES: startup, http-log, webhook-log, websocket-log, query-log
      ## uncomment next line to set an admin secret
      HASURA_GRAPHQL_ADMIN_SECRET: admin
  backend:
    build: ./backend/
    container_name: backend
    restart: always
    ports:
      - '4000:4000'
    env_file:
      - ./backend/.env
  nginx:
    restart: always
    image: nginx:stable
    container_name: hasura-nginx
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - /root/certs/:/root/certs/
      - ./nginx:/etc/nginx/conf.d
    depends_on:
      - graphql-engine
volumes:
  db_data:

/nginx/default.conf
server {
  listen 443 ssl http2;
	listen [::]:443 ssl http2;
  server_name hasura.test.ru;

  ssl_certificate /root/certs/cert.crt;
  ssl_certificate_key /root/certs/cert.key;

  location / {
    proxy_pass http://graphql-engine:8080/;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
  }
}

server {
  listen 443 ssl http2;
	listen [::]:443 ssl http2;
  server_name api.test.ru;

  ssl_certificate /root/certs/cert.crt;
  ssl_certificate_key /root/certs/cert.key;

  location / {
    proxy_pass http://backend:4000;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }
}


Как сделать, чтобы для graphql-engine и backend был свой docker-compose.yml?
На данный момент этот способ работает, но чтобы обновить какой-либо сервис, приходится заново все эти компоненты билдить
  • Вопрос задан
  • 492 просмотра
Пригласить эксперта
Ответы на вопрос 2
Robur
@Robur
Знаю больше чем это необходимо
тут не "например" нужен, а конфиги, описание контейнеров, и что где слушает и куда проксирует.

А вообще посмотрите на dokku - там nginx и проксирование встроенное, просто говорите какой контейнер на какой хост/порт привязать.
Ответ написан
@genteelknight
Fullstack web developer
Во время разработки можно взять прокси, который генерирует конфиг nginx на основе запущенных контейнеров. Например, я в работе такой использую https://github.com/spaceonfire/localhost-docker

На сервере конечно лучше взять какой-нибудь kubernetes или ранее упомянутый dokku
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы