Я сейчас нахожусь в процессе создания приложений WordPress для разработки.И пока все идет хорошо:)
В настоящее время я использую один файл docker-compose.yml (и некоторые конфиги) для каждого приложения.Каждое приложение состоит из nginx-веб-сервера, базы данных и WordPress с fpm.(пример docker-compose.yml ниже).Каждое приложение обрабатывает ssl самостоятельно, и я подтвердил, что оно работает.
Следующим шагом в моем генеральном плане является использование обратного прокси-сервера nginx для одновременной работы всех контейнеров приложений без необходимостииспользуйте разные порты на хосте.
Как я понимаю jwilder / nginx-proxy - лучший инструмент для этой работы.Так что я подумал - и, пожалуйста, поправьте меня, если это не лучшая практика, - чтобы я мог создать файл compose.yml для nginx-proxy, который мог бы работать все время и который предоставил бы порты 80 и 443 хосту при автоматической генерацииконфиги nginx для каждого контейнера, который я запускаю потом.
version: '3.6'
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
networks:
default:
external:
name: nginx-proxy
Я попробовал это с прокси-сервером nginx, который предоставил порт 80 хосту, и настройкой приложения wordpress в его собственном docker-compose.ymlфайл с использованием mariadb: последние и WordPress: последние изображения.Это действительно сработало, просто добавив expose: \ -80 и переменную окружения VIRTUAL_HOST.
Но я не совсем понимаю, как использовать обратный прокси-сервер перед моими вышеупомянутыми WordPress-приложениями.Документация гласит:
Бэкэнды SSL
Если вы хотите, чтобы обратный прокси-сервер подключался к вашему бэкенду с использованием HTTPS вместо HTTP, установите VIRTUAL_PROTO = https в бэкэнд-контейнере.
Примечание. Если вы используете VIRTUAL_PROTO = https и ваш внутренний сервер предоставляет порты 80 и 443, nginx-proxy будет использовать HTTPS на порту 80. Это почти наверняка не то, что вам нужно, поэтому вам также следует включить VIRTUAL_PORT = 443.
, поэтому я попытался добавить эти переменные среды в файл приложения docker-compose.yml.В частности, внутри службы nginx и добавленных открытых портов 80 и 443.
version: '3.6'
services:
wordpress:
image: wordpress:4.7.2-php7.1-fpm
volumes:
- ../public:/var/www/html
environment:
- WORDPRESS_DB_NAME=${WORDPRESS_DB_NAME:-wordpress}
- WORDPRESS_TABLE_PREFIX=${WORDPRESS_TABLE_PREFIX:-wp_}
- WORDPRESS_DB_HOST=${WORDPRESS_DB_HOST:-mysql}
- WORDPRESS_DB_USER=${WORDPRESS_DB_USER:-root}
- WORDPRESS_DB_PASSWORD=${WORDPRESS_DB_PASSWORD:-password}
depends_on:
- db
restart: always
db:
image: mariadb:${MARIADB_VERSION:-latest}
volumes:
- tss-data:/var/lib/mysql
# - ./db:/docker-entrypoint-initdb.d/
environment:
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD:-password}
- MYSQL_USER=${MYSQL_USER:-root}
- MYSQL_PASSWORD=${MYSQL_PASSWORD:-password}
- MYSQL_DATABASE=${MYSQL_DATABASE:-wordpress}
restart: always
nginx:
image: nginx:${NGINX_VERSION:-latest}
container_name: nginx
volumes:
- ${NGINX_CONF_DIR:-./nginx}:/etc/nginx/conf.d
- ${NGINX_LOG_DIR:-./logs/nginx}:/var/log/nginx
- ${WORDPRESS_DATA_DIR:-./wordpress}:/var/www/html
- ${SSL_CERTS_DIR:-./certs}:/etc/letsencrypt
- ${SSL_CERTS_DATA_DIR:-./certs-data}:/data/letsencrypt
environment:
- VIRTUAL_HOST:local.my-app.com
- VIRTUAL_PROTO:https
- VIRTUAL_PORT:443
expose:
- 80
- 443
depends_on:
- wordpress
restart: always
volumes:
tss-data:
networks:
default:
external:
name: nginx-proxy
Увы, если я пытаюсь перейти на local.my-app.com через порт 80, я получаю 503 Сервис временно недоступен
Если я попытаюсь использовать порт 443, обратный прокси-сервер nginx вообще не отвечает.Я чувствую, что упускаю что-то довольно очевидное, но не могу найти это, и я был бы очень признателен за любые мысли по этому поводу.