Существует много способов как развернуть wordpress. Один из современных способов — это через docker.
Бэкап
Необходимо сделать копию директории и дамп БД с WordPress
Разворачивание
- Развернуть docker-compose с wordpress
- Все просто если нужно развернуть "с нуля", если нет, то тоже просто
- Забираем код wordpress, пусть он будет в папке
public
и сохраняем дам БД с вордпрессом - в
docker-compose.yml
добавляет строчку для инициализации базы данных с импортированным скриптом:
volumes:
...
- ./wp_dump.sql:/docker-entrypoint-initdb.d/dump.sql
...
таким образом при первом запуске бд будет инициализирована скриптом dump
- для сервиса самого wordpress (в котором кстати используется apache) можно прокинуть директорию папки
public
в/var/www/html
volumes:
...
- ./public:/var/www/html
...
- Итоговый вариант docker-compose.yml
version: "3.9"
services:
wp-db:
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql
- ./dump.sql:/docker-entrypoint-initdb.d/dump.sql
restart: always
environment:
MYSQL_ROOT_PASSWORD: somewordpress
MYSQL_DATABASE: &dbname wordpress
MYSQL_USER: &dbuser wordpress
MYSQL_PASSWORD: &dbpassword wordpress
wordpress:
depends_on:
- wp-db
image: wordpress:latest
volumes:
- ./public:/var/www/html
ports:
- "8000:80"
restart: always
environment:
WORDPRESS_DB_HOST: wp-db:3306
WORDPRESS_DB_USER: *dbuser
WORDPRESS_DB_PASSWORD: *dbuser
WORDPRESS_DB_NAME: *dbname
volumes:
db_data: {}
- Возможные проблемы: если папка wordress переносилась на основе старых данных и подключений, то данных подключения необходимо указать в
wp-config.php
, в качествеDB_HOST
необходимо указать название сервиса с базой данных:
define('DB_HOST', 'wp-db');
Прокси, HTTPS
Далее можно настроить отдельное доменное имя, прокинув на порт указанный в docker-compose.yml
и настроить https например через nginx или же можно воспользоваться например nginx proxy manager
Для того, чтобы все работало корректно и после прокидывания через прокси и установки сертификатов не возникало ошибок, например:
Mixed Content Warnings
Mixed Content: The page at ‘https://example.com/wp-admin/‘ was loaded over HTTPS, but requested an insecure favicon ‘http://example.com/wp-includes/images/w-logo-blue-white-bg.png‘. This request has been blocked; the content must be served over HTTPS.
необходимо добавить HTTP_X_FORWARDED_PROTO
в wp-config.php
/* SSL Settings */
define('FORCE_SSL_ADMIN', true);
/* Turn HTTPS 'on' if HTTP_X_FORWARDED_PROTO matches 'https' */
if (strpos($_SERVER['HTTP_X_FORWARDED_PROTO'], 'https') !== false) {
$_SERVER['HTTPS'] = 'on';
}
Источники
- Quickstart: Compose and WordPress
- php — Setting $_SERVER[‘HTTPS’]=’on’ prevents access to wp-admin — WordPress Development Stack Exchange
- Import data.sql MySQL Docker Container — Stack Overflow