Борьба за интеграцию Nginx Proxy + LetsEncrypt Companion с составленным веб-приложением My Docker - PullRequest
0 голосов
/ 28 января 2019

Чего я пытаюсь достичь

Я пытаюсь интегрировать SSL-сертификат для моей производственной площадки, бонус, если я могу создать самозаверяющий сертификат для локальной разработки.

У меня проблема

При попытке интегрировать nginx-proxy и letsencrypt-companion это всегда приводит кв цикле перенаправления или Ошибка шлюза 502.

Я искал различные способы интеграции этих двух компаньонов, но я все еще застрял в том, как интегрировать это, но всегда задаю себе одни и те же вопросы при попыткеинтегрироваться в мою среду.

Подробнее о моей среде

Я использую многоконтейнерное веб-приложение Docker Compose, которое использует PHP / PHP-FPM 7.2, MySQL и Nginx.Конфигурация выглядит так:

version: '3.1'

networks:
  mywebapp:

services:
  nr_nginx:
    build: ./env/nginx
    networks:
      - mywebapp
    ports:
      - 80:80
      - 443:443
    env_file:
      - ./env/nginx/.env
    depends_on:
      - nr_php72
    tty: true
    volumes:
      - ./src:/home/www/mywebapp/src
      - ./storage:/home/www/storage/mywebapp
      - ./data/nginx/logs:/var/log/nginx
      - ./env/nginx/webserver/nginx.conf:/etc/nginx/nginx.conf
      - ./env/nginx/webserver/conf.d:/etc/nginx/conf.d
      - ./env/nginx/webserver/defaults:/etc/nginx/defaults
      - ./env/nginx/webserver/global:/etc/nginx/global
      - ./env/nginx/ssl/:/etc/letsencrypt/
      - ./env/nginx/share:/usr/share/nginx/html
      - /var/run/docker.sock:/tmp/docker.sock:ro

  nr_mysql:
    build: ./env/mysql
    networks:
      - mywebapp
    ports:
      - 3306:3306
    env_file:
      - ./env/mysql/.env
    volumes:
      - ./data/mysql:/var/lib/mysql
      - ./env/mysql/conf.d:/etc/mysql/conf.d
      - ./data/dbimport/:/docker-entrypoint-initdb.d

  nr_php72:
    build: ./env/php72
    hostname: php72
    networks:
      - mywebapp
    depends_on:
      - nr_mysql
    ports:
      - 9000:9000
      - 8080:8080
    volumes:
      - ./env/composer:/home/www/.composer
      - ./env/global/bashrc:/home/www/.bashrc
      - ./data/bash/.bash_history:/home/www/.bash_history
      - ~/.ssh:/home/www/.ssh:ro
      - ~/.gitconfig:/home/www/.gitconfig:ro
      - ./storage:/home/www/storage/mywebapp
      - ./src:/home/www/mywebapp/src

Вопросы

  1. Должен ли прокси-сервер nginx заменить мой существующий контейнер "nr_nginx"?
  2. ДелатьЯ удалил сопоставление портов 80:80, 433: 433 для "nr_nginx" и вместо этого назначил случайный уникальный порт по своему выбору, например, 5000?
  3. Если да, на вопрос 2, как мне сказать nginx-proxyпрокси перейти на мой контейнер порта 5000?

1 Ответ

0 голосов
/ 31 января 2019

Хорошо, так что я думаю, что решил это:

  1. Нет, это не должно заменять вашу собственную конфигурацию nginx
  2. Да, удалите порты 80 и 443, поскольку это будет обработанос помощью nginx-proxy вместо выставьте порты в вашем контейнере.
  3. Вам не требуется вручную настраивать proxy_pass, поскольку nginx-proxy делает это за вас, если вы укажетеVIRTUAL_PORT переменная окружения.

Вот пример кода, который работал для меня:

Boilerpalte nginx-proxy-letsencrypt-companion

docker-compose.yml:

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

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

networks:
  default:
    external:
      name: nginx-proxy

Boilerplate Nginx PHP MySQL Environment

docker-compose.yml

version: '3.1'

services:

  nginx:
    container_name: nginx
    build: ./env/nginx
    ports:
      - 5000:5000
    expose:
      - 80
      - 443
    environment:
      - VIRTUAL_HOST=your.domain.com,www.your.domain.com
      - VIRTUAL_PORT=5000
      - LETSENCRYPT_EMAIL=your@email.com
      - LETSENCRYPT_HOST=your.domain.com
    depends_on:
      - php72
    tty: true
    volumes:
      - ./src:/home/www/webapp/src
      - ./storage:/home/www/storage/webapp
      - ./data/nginx/logs:/var/log/nginx
      - ./env/nginx/webserver/nginx.conf:/etc/nginx/nginx.conf
      - ./env/nginx/webserver/conf.d:/etc/nginx/conf.d
      - ./env/nginx/webserver/defaults:/etc/nginx/defaults
      - ./env/nginx/webserver/global:/etc/nginx/global
      - /var/run/docker.sock:/tmp/docker.sock:ro

  mysql:
    container_name: mysql
    build: ./env/mysql
    ports:
      - 3306:3306
    env_file:
      - ./env/mysql/.env
    volumes:
      - ./data/mysql:/var/lib/mysql
      - ./env/mysql/conf.d:/etc/mysql/conf.d
      - ./data/dbimport/:/docker-entrypoint-initdb.d

  php72:
    container_name: php72
    build: ./env/php72
    hostname: php72
    depends_on:
      - mysql
    ports:
      - 9000:9000
    volumes:
      - ./env/composer:/home/www/.composer
      - ./env/global/bashrc:/home/www/.bashrc
      - ./data/bash/.bash_history:/home/www/.bash_history
      - ~/.ssh:/home/www/.ssh:ro
      - ~/.gitconfig:/home/www/.gitconfig:ro
      - ./storage:/home/www/storage/webapp
      - ./src:/home/www/webapp/src

networks:
  default:
    external:
      name: nginx-proxy

/ etc /nginx / conf.d / default.conf - внутри контейнера "nginx":

server {

    listen 5000;
    listen [::]:5000;

    server_name www.your.domain.com;

    root /my/web/root/src;
    index index.php;

    include /any/conf/includes/here.conf;

    location / {
        fastcgi_param HTTPS 'on';
        try_files $uri $uri/ /index.php$is_args$args;
    }
}

fastcgi_param HTTPS 'on'; conf предотвращает цикл перенаправления, вы также можете добавить $_SERVER['HTTPS'] = 'on'; в ваш index.php

...