Настройка https в Docker-Compose для nginx контейнера на линуксовом хостинге.

E
Заказчик
Отзывы пользователей: + 0 - 0
Зарегистрирована на сайте 11 лет и 10 месяцев
Бюджет: 1 000 руб
12.54 $ — 10.69 €
Исполнитель определен: Александр Матвеев  
Здравствуйте, люди добрые!

Сайт расположен на VPS хостинге.

domen.ru – условно домен.

Задача – сделать возможным обращения к сайту domen.ru по https://
domen.ru

Все измененные настройки должны быть в рабочем состоянии после перезагрузки системы. После решения вопроса нужно подробно описать – что являлось причиной проблемы и какие были внесены изменения.

Проблема:
Не удается получить доступ к сайту Сайт domen.ru не позволяет установить соединение.
Попробуйте сделать следующее:
Проверьте подключение к Интернету.
Проверьте настройки прокси-сервера и брандмауэра.
ERR_CONNECTION_REFUSED

Окружение поднято с помощью docker-compose

Ключевые файлы на мой взгляд:

/var/www/domen/docker-compose.yml (заменил опциональные переменные из .env на очевидные слова для лучшего понимания путей)
/var/www/domen/docker/containers/nginx/dev/Dockerfile (копирование конфига для nginx)
/var/www/domen/docker/nginx/prod.conf (конфиг nginx)

При текущей конфигурации docker-compose.yml открывается только на 80 порту по имени домена и по ip адресу
http://%IP%/
domen.ru

В docker-compose.yml оставлены комменты варианта с отключением ipv6, в таком варианте контейнер nginx вообще не развертывается (docker ps после билда)

Сертификаты сгенерированы certbot – ом и находятся в папке:
/var/www/domen/volumes/ssl

/etc/hosts:

127.0.0.1 localhost
%IP% www.domen.ru domen.ru

docker -v
Docker version 19.03.3, build a872fc2f86

docker-compose -v
docker-compose version 1.24.1, build 4667896b

Доступ:
ssh root@%IP%;
%PASS%;

Файл docker-compose:

version: '3.7'
services:
  nginx:
    container_name: nginx
    build:
      context: ./
      dockerfile: docker/containers/nginx/prod/Dockerfile
    volumes:
      – ${APP_PATH_HOST}:/var/www
      – ./volumes/ssl:/etc/nginx/ssl
      – ./volumes/log/nginx/:/var/log/nginx/
    ports:
      – 80:80
      – 443:443
    extra_hosts:
      – domen.ru:%IP%
  php-fpm:
    container_name: php-fpm
    build: ${CONTAINERS_PATH}/php-fpm
    volumes:
      – ${APP_PATH_HOST}:/var/www
    environment:
      – REDIS_PORT=6379
      – REDIS_HOST=redis
      – DB_CONNECTION=pgsql
      – DB_PORT=5432
      – DB_HOST=pgsql
  php-cli:
    container_name: php-cli
    build: ${CONTAINERS_PATH}/php-cli
    volumes:
      – ${APP_PATH_HOST}:/var/www
    environment:
      – REDIS_PORT=6379
      – REDIS_HOST=redis
      – DB_CONNECTION=pgsql
      – DB_PORT=5432
      – DB_HOST=pgsql
    tty: true
  pgsql:
    container_name: pgsql
    image: postgres:${POSTGRES_VERSION}
    environment:
      – POSTGRES_USER=${DB_USER}
      – POSTGRES_PASSWORD=${DB_PASSWORD}
      – POSTGRES_DATABASE=${DB_NAME}
    ports:
      – 54321:5432
    volumes:
      – ${STORAGE_PATH}/postgres:/var/lib/postgresql/data
  node:
    container_name: node
    image: node:${NODE_VERSION}
    volumes:
        – ${APP_PATH_HOST}:/var/www
    working_dir: /var/www
    tty: true


prod.conf:

server {
    listen 80;
    server_name www.domen.ru domen.ru;

    index index.php index.html;
    root /var/www/public;

    location / {
        try_files $uri /index.php?$args;
    }

    location /docs {
        try_files $uri $uri/;
    }

    location ~ .php$ {
        fastcgi_split_path_info ^(.+.php)(/.+)$;
        fastcgi_pass php-fpm:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }

    # return 301 https://$host$request_uri;
}

server {
    listen 443;
    server_name www.kprussia.ru kprussia.ru;
    #charset utf-8;

    index index.php;
    root /var/www/public;
    location / {
        try_files $uri /index.php?$args;
    }
    location /docs {
        try_files $uri $uri/;
    }

    location ~ .php$ {
        fastcgi_split_path_info ^(.+.php)(/.+)$;
        fastcgi_pass php-fpm:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }

   ssl on;
   ssl_certificate /etc/nginx/ssl/fullchain.pem;
   ssl_certificate_key /etc/nginx/ssl/privkey.pem;
}


PS 
Я хардкорно рестарую окружение сайта с помощью готовой команды в /var/ww/domen/Makefile:

sudo make system-reset-warning;
cd /var/www/domen;

ЛОКАЛЬНО с той же конфигураций сайт открывается как
localhost
localhost:443

А вот так нет:
localhost
Этот сайт не может обеспечить безопасное соединение Сайт localhost отправил недействительный ответ.
ERR_SSL_PROTOCOL_ERROR


ЖЕЛАТЕЛЬНО, НО НЕ ОБЯЗАТЕЛЬНО
Настроить автогенерирование сертификатов внутри nginx контейнера для указанного домена или доп. контейнером certbot. Сейчас серты внутри хостинга.
Разделы:
Опубликован:
12.11.2019 | 19:19

Теги: нужен системный администратор, ищу системного администратора, резюме системного администратора, требуется настройка сетей и серверов

Наши партнеры
Сведения об ООО «Ваан» внесены в реестр аккредитованных организаций, осуществляющих деятельность в области информационных технологий. ООО «Ваан» осуществляет деятельность, связанную с использованием информационных технологий, по разработке компьютерного программного обеспечения, предоставлению доступа к программе для ЭВМ и является правообладателем программы для ЭВМ «Платформа FL.ru (версия 2.0)».