Развернутый Docker-Compose возвращает "502 Bad Gateway" - PullRequest
0 голосов
/ 30 мая 2019

Пожалуйста, помогите.

Я нашел сообщение в блоге https://blog.ssdnodes.com/blog/host-multiple-ssl-websites-docker-nginx/) о развертывании нескольких приложений для создания докеров с одинаковым nginx-proxy, но с разными VIRTUAL_HOST именами

Но по какой-то причине оба приложения возвращают ошибку 502 Bad Gateway

Следующая ошибка - это то, что я вижу при запуске docker-compose logs nginx

2019/05/29 20:52:26 [error] 8#8: *15 connect() failed (111: Connection refused) while connecting to upstream, client: 52.209.30.187, server: gregsithole.com, request: "GET / HTTP/1.1", upstream: "http://172.20.0.5:80/", host: "gregsithole.com"

И я считаю, что upstream использует IP-адрес внутренней док-сети, потому что это не IP для моего Сервера. Мой апстрим определяется следующим файлом: https://raw.githubusercontent.com/jwilder/nginx-proxy/master/nginx.tmpl

Но я не слишком знаком с тем, как это работает.

Ниже приведен пример моих файлов docker-compose:

Nginx-прокси / докер-compose.yaml

version: "3.6"
services:
  nginx:
    image: nginx
    container_name: nginx-proxy
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - conf:/etc/nginx/conf.d
      - vhost:/etc/nginx/vhost.d
      - html:/usr/share/nginx/html
      - certs:/etc/nginx/certs
    labels:
      - "com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy=true"

  dockergen:
    image: jwilder/docker-gen
    container_name: nginx-proxy-gen
    restart: always
    depends_on:
      - nginx
    command: -notify-sighup nginx-proxy -watch -wait 5s:30s /etc/docker-gen/templates/nginx.tmpl /etc/nginx/conf.d/default.conf
    volumes:
      - conf:/etc/nginx/conf.d
      - vhost:/etc/nginx/vhost.d
      - html:/usr/share/nginx/html
      - certs:/etc/nginx/certs
      - /var/run/docker.sock:/tmp/docker.sock:ro
      - ./nginx.tmpl:/etc/docker-gen/templates/nginx.tmpl:ro

  letsencrypt:
    image: jrcs/letsencrypt-nginx-proxy-companion
    container_name: nginx-proxy-le
    restart: always
    depends_on:
      - nginx
      - dockergen
    environment:
      NGINX_PROXY_CONTAINER: nginx-proxy
      NGINX_DOCKER_GEN_CONTAINER: nginx-proxy-gen
    volumes:
      - conf:/etc/nginx/conf.d
      - vhost:/etc/nginx/vhost.d
      - html:/usr/share/nginx/html
      - certs:/etc/nginx/certs
      - /var/run/docker.sock:/var/run/docker.sock:ro

volumes:
  conf:
  vhost:
  html:
  certs:

networks:
  default:
    external:
      name: nginx-proxy

dockerized-призрак / докер-compose.yaml

version: "3.6"
services:

  ghost:
    image: ghost
    restart: always
    expose:
      - 80
    volumes:
      - ../../ghost:/var/lib/ghost/content
    environment:
      NODE_ENV: production
      url: https://blog.gregsithole.com
      VIRTUAL_HOST: blog.gregsithole.com
      LETSENCRYPT_HOST: blog.gregsithole.com
      LETSENCRYPT_EMAIL: hidden-email

networks:
  default:
    external:
      name: nginx-proxy

Пожалуйста, помогите

Ответы [ 2 ]

0 голосов
/ 05 июня 2019

Потратив несколько дней на эту проблему, пробую различные решения. Обновление моего репо несколько раз. Мне удалось это исправить.

Статья в блоге, которую я использовал, устарела, так как была написана еще в 2017 году, и в том же блоге я нашел последнюю статью (https://blog.ssdnodes.com/blog/host-multiple-websites-docker-nginx/), которую при проверке различий использовал nginx-proxy *) 1006 *, 'jwilder / docker-gen' и jrcs/letsencrypt-nginx-proxy-companion.

В последней статье используется только jwilder/nginx-proxy, но я изменил его, добавив также jrcs/letsencrypt-nginx-proxy-companion. См. Мое решение ниже:

version: "3.6"
services:
  nginx-proxy:
    image: jwilder/nginx-proxy
    container_name: nginx-proxy
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - conf:/etc/nginx/conf.d
      - vhost:/etc/nginx/vhost.d
      - html:/usr/share/nginx/html
      - dhparam:/etc/nginx/dhparam
      - certs:/etc/nginx/certs:ro
      - /var/run/docker.sock:/tmp/docker.sock:ro

  letsencrypt-nginx-proxy-companion:
    image: jrcs/letsencrypt-nginx-proxy-companion
    environment:
      NGINX_PROXY_CONTAINER: nginx-proxy
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - vhost:/etc/nginx/vhost.d
      - html:/usr/share/nginx/html
      - certs:/etc/nginx/certs

volumes:
  conf:
  vhost:
  html:
  dhparam:
  certs:

networks:
  default:
    external:
      name: nginx-proxy

Кроме того, еще одна из моих проблем заключалась в том, что порт, который ghost использует по умолчанию, был 2368, поэтому мне пришлось связать его, чтобы использовать порт 80. Поэтому мое решение для этого было вместо того, чтобы выставлять порт 80 на ghost, я создайте службу nginx, которая предоставляет порт 80.

Ниже приведены настройки моего призрака:

version: "3.6"
services:

  ghost:
    image: ghost
    restart: always
    volumes:
      - ../../ghost:/var/lib/ghost/content
    environment:
      - VIRTUAL_HOST=blog.domain.com
      - LETSENCRYPT_HOST=blog.domain.com
      - LETSENCRYPT_EMAIL=name@domain.com
      - NODE_ENV=production
      - url=https://blog.domain.com

  nginx:
    image: nginx
    volumes:
      - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
    expose:
      - 80
    depends_on:
      - ghost
    links:
      - ghost

networks:
  default:
    external:
      name: nginx-proxy

Таким образом, я смог иметь как мой веб-сайт (https://gregsithole.com), так и мой блог (https://blog.gregsithole.com)), работающий под одним прокси

0 голосов
/ 30 мая 2019

Вы должны назначить сетевой nginx-прокси для сервиса-призрака:

  ghost:
    networks:
      - nginx-proxy
    ...

Также назначьте новые работы для nginx

  nginx:
    networks:
      - nginx-proxy
    ...

Также укажите конфигурацию сети следующим образом:

networks:
  nginx-proxy:
    external: true
  default:

И это все, что вам нужно. Помните, что в файле docker compose вы должны объявить сеть как внешнюю, но этого недостаточно. Вы также назначаете его индивидуально для каждой услуги, которую хотите подключить к сети.

Я рекомендую вам перейти на Træfik или посланника. Nginx ограничен в плане масштабируемости, если вы не платите за него.

...