Упростите развертывание вашего сайта WordPress с помощью нашего простого для понимания руководства. Используйте Docker Compose, Nginx, Apache и SSL для гладкого процесса установки.
Мы также создадим тома, чтобы изменения или обновления сохранялись при перезапуске контейнера.
Этот набор тестировался на облаке Google с экземпляром, работающим под управлением операционной системы Ubuntu 22.04. Вы также можете создать этот набор в любых облачных сервисах, таких как AWS, Azure, DigitalOcean, или на любых выделенных или VPS серверах.
Необходимые условия
Пожалуйста, убедитесь, что вы выполнили все шаги, упомянутые выше.
- Домен направлен на 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