Установка SSL сертификата на контейнер Докер с установленным ВордПресс может быть довольно не простой затеей. Я лично потратил на это 2 дня (потому советую каждому использовать облачные сервера и решения для своих сайтов). Но используя эту инструкцию и docker-compose файл, который я опишу, ты сможешь развернуть своё веб приложение в считанные минуты.
Для нашего приложения будем использовать сервис Let’sencrypt, который предоставляет бесплатные сертификаты для шифрованного соединения. Моё решения основано на вот этом видеоролике и на вот этом гит репозитории, но модифицировано для установки ВордПресс.
Начнём установку нашего сертификата с корректной конфигурации DNS сервера. Я использую услугу амазоновский DNS Amazon Route 53. Для этой инструкции я создам субдомен “тест” test.kievlyanin.com и постараюсь создать для него SSL сертификат.

После добавления сертификата, устанавливаем Докер и docker-compose на нашей машине Убунту (как это сделать тут – делаем всё до “создания файла конфигурации”, именно этим, но с SSL мы займёмся ниже).
Создание файла конфигурации контейнеров Докер (docker-compose) для SSL сервиса
Красота файлов конфигурации в том, что можно буквально одним кликом настроить всю нужную инфраструктуру (даже не владея навыками работы с контейнерами или сетевым окружением, как это и есть в моём случае).
Итак, в папке проекта создаём файл docker-compose.yml. Наш стек будет состоять из прокси сервера nginx, компаньона nginx, который будет ответственным за скачивание и установку сертификатов и обновлением основного прокси, базы данных для ВордПресс и в конце-концов самим сервером Апаче для ВордПресс. Рассмотрим внимательнее конфигурацию:
jwilder/nginx-proxy будет слушать входящий трафик на портах 80 (http) и 443 (https), будет иметь три “внешних жёстких накопителя” для персистенции и обмена информацией и его задача будет перенаправлять траффик в нужноу место, в зависимости от запроса.
jrcs/letsencrypt-nginx-proxy-companion скачивает, устанавливает сертификаты и управляет настойками jwilder/nginx-proxy
О базе данных много не буду говорить, просто контейнер базы данных для ВордПресс. Просто замените MYSQL_ROOT_PASSWORD: rootchangeme
и MYSQL_PASSWORD: changeme
на другие значения.
Ну и сам сервер Апаче ВордПресс. Нужно изменить для регистрации сертификата и правильного подключения базы данных:
- VIRTUAL_HOST=test.kievlyanin.com
- LETSENCRYPT_HOST=test.kievlyanin.com
- [email protected]
- WORDPRESS_DB_PASSWORD=changeme
Просто скопируйте этот код в пустой файл docker-compose.yml, измените нужные параметры и инициируйте команду docker-compose up -d (не забудьте открыть порта 80 и 443 на вашем роутере и сервере)
version: '3'
services:
nginx-proxy:
image: jwilder/nginx-proxy
restart: always
ports:
- "80:80"
- "443:443"
volumes:
- /var/run/docker.sock:/tmp/docker.sock:ro
- certs:/etc/nginx/certs:ro
- vhostd:/etc/nginx/vhost.d
- html:/usr/share/nginx/html
labels:
- com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy
letsencrypt:
image: jrcs/letsencrypt-nginx-proxy-companion
restart: always
environment:
- NGINX_PROXY_CONTAINER=nginx-proxy
volumes:
- certs:/etc/nginx/certs:rw
- vhostd:/etc/nginx/vhost.d
- html:/usr/share/nginx/html
- /var/run/docker.sock:/var/run/docker.sock:ro
db:
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: yupiiii
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: yupiiii
wordpress:
depends_on:
- db
- nginx-proxy
- letsencrypt
image: wordpress:latest
restart: always
volumes:
- wordpress_data:/var/www/html
expose:
- "80"
restart: always
environment:
- VIRTUAL_HOST=test.kievlyanin.com
- LETSENCRYPT_HOST=test.kievlyanin.com
- [email protected]
- WORDPRESS_DB_HOST=db:3306
- WORDPRESS_DB_USER=wordpress
- WORDPRESS_DB_PASSWORD=yupiiii
- WORDPRESS_DB_NAME=wordpress
volumes:
certs:
html:
vhostd:
db_data: {}
wordpress_data: {}
И если все шаги сделаны верно, вы увидите это:
