Развертывание WordPress: Docker, Nginx, Apache и SSL

Упростите развертывание вашего сайта WordPress с помощью нашего простого для понимания руководства. Используйте Docker Compose, Nginx, Apache и SSL для гладкого процесса установки.

Мы также создадим тома, чтобы изменения или обновления сохранялись при перезапуске контейнера.

Этот набор тестировался на облаке Google с экземпляром, работающим под управлением операционной системы Ubuntu 22.04. Вы также можете создать этот набор в любых облачных сервисах, таких как AWS, Azure, DigitalOcean, или на любых выделенных или VPS серверах.

Необходимые условия

  1. Установка Docker на Ubuntu 22.04
  2. Установка Docker Compose на Ubuntu 22.04.

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

  • Домен направлен на IP-адрес вашего сервера.
  • Docker установлен и настроен.
  • Docker Compose установлен и настроен.

После того, как все необходимые условия выполнены, вы можете перейти к созданию набора и настройке WordPress.

Создание директории проекта

Подключитесь к вашему серверу по SSH и начните с создания новой директории проекта с названием wp-project. Вы также можете назвать её как вам нужно.

 
mkdir wp-project

Создание файла docker-compose.yml

Теперь перейдите внутрь директории проекта и создайте новый файл docker-compose.yml с следующей конфигурацией.

 
cd wp-project

Создайте новый файл docker-compose.yml.

 
nano docker-compose.yml

Скопируйте весь содержимое ниже и вставьте его в файл.

Настройка Docker Compose

Убедитесь, что заменили упомянутые ниже переменные окружения.

 

docker-compose.ymlversion: "3.9"
services:
    wordpress:
        container_name: wordpress
        image: wordpress:php8.2-apache
        restart: always
        stdin_open: true
        tty: true
        environment:
            WORDPRESS_DB_HOST: mariadb
            WORDPRESS_DB_USER: db_user
            WORDPRESS_DB_PASSWORD: db_user_pass
            WORDPRESS_DB_NAME: db_name
        volumes:
            - wordpress_data:/var/www/html
    mariadb:
        container_name: mariadb
        image: mariadb
        restart: always
        environment:
            MYSQL_DATABASE: db_name
            MYSQL_USER: db_user
            MYSQL_PASSWORD: db_user_pass
            MYSQL_RANDOM_ROOT_PASSWORD: 'root_pass'
        volumes:
            - db_data:/var/lib/mysql
    nginx:
        container_name: nginx
        image: nginx:latest
        restart: unless-stopped
        ports:
            - 80:80
            - 443:443
        volumes:
            - ./nginx/conf:/etc/nginx/conf.d
            - ./certbot/conf:/etc/nginx/ssl
            - ./certbot/data:/var/www/html
    certbot:
        container_name: certbot
        image: certbot/certbot:latest
        command: certonly --webroot --webroot-path=/var/www/html --email [email protected] --agree-tos --no-eff-email -d domain.com -d www.domain.com
        volumes:
            - ./certbot/conf:/etc/letsencrypt
            - ./certbot/logs:/var/log/letsencrypt
            - ./certbot/data:/var/www/html
volumes:
    db_data:
    wordpress_data:

Нажмите CTRL-X, затем Y и ENTER для сохранения и выхода из файла.

Конфигурация Docker Compose: Объяснение

Вот детали конфигурации:

  • Версия: Составьте файл версии, совместимой с Docker Engine. Вы можете проверить совместимость здесь.
  • Сервисы: Здесь у нас четыре сервиса с названиями WordPress, MariaDB, nginx и certbot.
  • Изображение: Мы используем последние WordPress с PHP 8.2, Apache, Mariadb, Nginx, и Certbotизображения, доступные на Docker hub.
  • Объемы:
    • wordpress_data: Мы настроили эту директорию для синхронизации с директорией, которую мы хотим использовать в качестве корня веб-сайта внутри контейнера.
    • conf: Здесь мы разместим файл конфигурации Nginx для синхронизации с папкой конфигурации Nginx conf.d внутри контейнера.
    • cedtbot/conf: Это место, где мы получим сертификат SSL, и он будет синхронизирован с папкой, которую мы хотим внутри контейнера.
    • ports: Настройте контейнер на прослушивание указанных портов.
    • command: Команда, используемая для получения сертификата SSL.
  • Окружение: Здесь перечислены все переменные окружения, доступные для изображения WordPress.
    • WORDPRESS_DB_HOST: Здесь мы используем имя сервиса контейнера MariaDB.
    • WORDPRESS_DB_USER: Такой же, как настроенный нами в сервисе mariadb.
    • WORDPRESS_DB_PASSWORD: Такой же, как настроенный нами в сервисе mariadb.
    • WORDPRESS_DB_NAME: Такой же, как настроенный нами в сервисе mariadb.

Настройка Nginx

Согласно конфигурации docker-compose.yml, нам нужно создать файл default.conf внутри директории nginx/conf.

Создайте директорию рядом с файлом docker-compose.yml для размещения конфигурационного файла.

 
mkdir -p nginx/conf

Создайте файл с названием default.conf.

 
nano nginx/conf/default.conf

Вставьте следующие конфигурации; здесь мы используем конфигурацию обратного прокси к контейнеру WordPress, работающему на Apache.

 

nginx/conf/default.conf server {
    listen [::]:80;
    listen 80;

    server_name domain.com www.domain.com;

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

    location ~ /.well-known/acme-challenge {
        allow all; 
        root /var/www/html;
    }

    location / {
        try_files $uri @apache;
    }

    location ~ ^/.user.ini {
        deny all;
    }

    location ~*  .(svg|svgz)$ {
        types {}
        default_type image/svg+xml;
    }

    location = /favicon.ico {
        log_not_found off;
        access_log off;
    }

    location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
    }

    location @apache {
        proxy_set_header X-Real-IP  $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Host $host;
        proxy_pass http://wordpress:80;
    }

    location ~[^?]*/$ {
        proxy_set_header X-Real-IP  $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Host $host;
        proxy_pass http://wordpress:80;
    }

    location ~ .php$ {
        proxy_set_header X-Real-IP  $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Host $host;
        proxy_pass http://wordpress:80;
    }
} 

Нажмите CTRL-X, затем Y и ENTER для сохранения и выхода из файла.

Теперь у вас есть конфигурация docker-compose и конфигурация Nginx.

Развертывание WordPress с помощью Docker Compose

Запустите контейнеры с помощью следующей команды; вы получите сертификаты SSL после запуска контейнеров.

 
docker-compose up -d

После запуска всех контейнеров вы увидите два дополнительных каталога, certbot и WordPress, созданных рядом с вашим файлом docker-compose.yml.

Каталог wordpress содержит все исходные коды вашего сайта WordPress.

Каталог certbot содержит все файлы, связанные с вашими сертификатами SSL.

Чтобы просмотреть контейнеры, вы можете выполнить следующую команду.

 
docker-compose ps

Настройка SSL Let’s Encrypt с Nginx

Поскольку вы получили сертификат SSL Let’s Encrypt, вы можете настроить HTTPS и установить перенаправление на HTTPS.

Редактируйте default.conf и внесите следующие изменения.

 
nano nginx/conf/default.conf

 

nginx/conf/default.confserver {
    listen [::]:80;
    listen 80;

    server_name domain.com www.domain;

    return 301 https://www.domain.com$request_uri;
}

 server {
    listen [::]:443 ssl http2;
    listen 443 ssl http2;

    server_name domain.com;

    ssl_certificate /etc/nginx/ssl/live/domain.com/fullchain.pem;
    ssl_certificate_key /etc/nginx/ssl/live/domain.com/privkey.pem;

    return 301 https://www.domain.com$request_uri; 
}

server {
    listen [::]:443 ssl http2;
    listen 443 ssl http2;

    server_name www.domain.com;

    ssl_certificate /etc/nginx/ssl/live/domain.com/fullchain.pem;
    ssl_certificate_key /etc/nginx/ssl/live/domain.com/privkey.pem;

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

    location ~ /.well-known/acme-challenge {
         allow all; 
         root /var/www/html;
    }

    location / {
        try_files $uri @apache;
    }

    location ~ ^/.user.ini {
        deny all;
    }

    location ~*  .(svg|svgz)$ {
        types {}
        default_type image/svg+xml;
    }

    location = /favicon.ico {
        log_not_found off;
        access_log off;
    }

    location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
    }

    location @apache {
        proxy_set_header X-Real-IP  $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Host $host;
        proxy_pass http://wordpress:80;
    }

    location ~[^?]*/$ {
        proxy_set_header X-Real-IP  $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Host $host;
        proxy_pass http://wordpress:80;
    }

    location ~ .php$ {
        proxy_set_header X-Real-IP  $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Host $host;
        proxy_pass http://wordpress:80;
    }
} 

Нажмите CTRL-X, затем Y и ENTER для сохранения и выхода из файла.

Теперь вы можете перезапустить службу Nginx для загрузки новых конфигураций.

 
docker-compose restart nginx

Теперь вы можете проверить ваш домен в браузере. Вы получите перенаправление на HTTPS, и увидите страницу установки WordPress для завершения установки.

Устранение неполадок

Ниже приведены некоторые советы по SSH в контейнеры; смотрите логи ошибок.

SSH в Docker контейнер

Чтобы SSH в контейнер wordpress, вы можете использовать следующую команду.

 
docker-compose exec wordpress /bin/bash

Для SSH в контейнер nginx можно использовать следующую команду.

 
docker-compose exec nginx /bin/bash

Проверка Логов Контейнера

Для проверки логов контейнеров с помощью docker-compose можно использовать следующую команду.

 
docker-compose logs -f

Перезапуск Контейнеров

Контейнеры можно перезапустить с помощью команды restart легко.

 
docker-compose restart container_name

Замените container_name на имя вашего контейнера (wordpress, nginx, certbot)

Остановка Всех Контейнеров Docker

Все контейнеры Docker можно остановить с помощью следующей команды.

docker-compose down

Удаление Всех Контейнеров и Объемов

С помощью docker-compose можно удалить все контейнеры и их объемы с помощью следующей команды.

 
docker compose rm -fv

Удаление Всех Контейнеров Docker

Все контейнеры можно удалить с помощью следующей команды.

 
docker rm -f $(docker ps -a -q)

Удаление Всех Объемов

Все объемы также можно удалить с помощью следующей команды.

 
docker volume rm $(docker volume ls -q)

Запуск Всех Контейнеров

Сочетанием команд Docker compose можно запустить все контейнеры.

 
docker-compose up -d

Заключение

Теперь вы узнали, как установить и настроить WordPress с Nginx, Apache, PHP 8.2, MariaDB и Let’s Encrypt с Docker и Docker Compose на Ubuntu 22.04.

Спасибо за ваше время.

Source:
https://dzone.com/articles/wordpress-deployment-docker-nginx-apache-ssl