Переход wordpress в docker

Существует много способов как развернуть wordpress. Один из современных способов — это через docker.

Бэкап

Необходимо сделать копию директории и дамп БД с WordPress

Разворачивание

  1. Развернуть docker-compose с wordpress
  2. Все просто если нужно развернуть "с нуля", если нет, то тоже просто
  3. Забираем код wordpress, пусть он будет в папке public и сохраняем дам БД с вордпрессом
  4. в docker-compose.yml добавляет строчку для инициализации базы данных с импортированным скриптом:
    volumes:
        ...
        - ./wp_dump.sql:/docker-entrypoint-initdb.d/dump.sql
        ...

таким образом при первом запуске бд будет инициализирована скриптом dump

  1. для сервиса самого wordpress (в котором кстати используется apache) можно прокинуть директорию папки public в /var/www/html
    volumes:
        ...
        - ./public:/var/www/html
        ...
  1. Итоговый вариант 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: {}
  1. Возможные проблемы: если папка 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';
}

Источники

Leave a comment

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.