Перейти до вмісту

Установка SSL сертификата на ВордПресс с помощью docker-compose

Установка SSL сертификата на контейнер Докер с установленным ВордПресс может быть довольно не простой затеей. Я лично потратил на это 2 дня (потому советую каждому использовать облачные сервера и решения для своих сайтов). Но используя эту инструкцию и docker-compose файл, который я опишу, ты сможешь развернуть своё веб приложение в считанные минуты.

Для нашего приложения будем использовать сервис Let’sencrypt, который предоставляет бесплатные сертификаты для шифрованного соединения. Моё решения основано на вот этом видеоролике и на вот этом гит репозитории, но модифицировано для установки ВордПресс.

Начнём установку нашего сертификата с корректной конфигурации DNS сервера. Я использую услугу амазоновский DNS Amazon Route 53. Для этой инструкции я создам субдомен “тест” test.kievlyanin.com и постараюсь создать для него SSL сертификат.

Amazon Route 53
Добавление записи в реестр DNS на Amazon Route 53

После добавления сертификата, устанавливаем Докер и 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: {}
 

И если все шаги сделаны верно, вы увидите это:

Безопасная среда
Установка ВордПресс в защищённой среде с помощью установленного сертификата

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *