Развертывание Wordpress в Docker и установка его в командной строке

  • Михаил
  • 12 мин. на прочтение
  • 189
  • 11 Jul 2022
  • 11 Jul 2022

В данной инструкции мы рассмотрим процесс работы с Wordpress из командной строки. Эти навыки будут полезны для автоматизации каких-либо процессов, связанных с данной CMS. Наша работа будет выполняться в системе семейства Linux. Сервисы мы будем поднимать внутри контейнеров.

Подразумевается, что на нашем компьютере уже установлен Docker с docker-composer.

Поднимаем Wordpress в Docker

На момент написания инструкции, в samples docker docs можно было найти пример композера для развертывания контейнеров mysql и wordpress. Его мы возьмем за основу, но поменяем некоторые параметры, и кое-что добавим.

Предположим, что наш проект будет хранится относительно каталога /opt/wordpress. Создадим его:

mkdir /opt/wordpress

После создадим композер-файл:

vi /opt/wordpress/docker-compose.yml

version: "3.9"

services:
  db:
    image: mariadb:latest
    hostname: wp_database
    container_name: wp_database
    volumes:
      - db_data:/var/lib/mysql
    restart: always
    environment:
      TZ: "Europe/Moscow"
      MYSQL_ROOT_PASSWORD: somewordpress
      MYSQL_DATABASE: ${DB_NAME}
      MYSQL_USER: ${DB_USER}
      MYSQL_PASSWORD: ${DB_PASSWORD}
  
  wordpress:
    depends_on:
      - db
    image: wordpress:latest
    hostname: wp_app
    container_name: wp_app
    volumes:
      - wordpress_data:/var/www/html
    ports:
      - "8000:80"
    restart: always
    user: www-data
    environment:
      TZ: "Europe/Moscow"
      WORDPRESS_DB_HOST: ${DB_HOST}
      WORDPRESS_DB_USER: ${DB_USER}
      WORDPRESS_DB_PASSWORD: ${DB_PASSWORD}
      WORDPRESS_DB_NAME: ${DB_NAME}

  cli:
    depends_on:
      - db
      - wordpress
    image: wordpress:cli
    hostname: wp_cli
    container_name: wp_cli
    volumes:
      - wordpress_data:/var/www/html
    restart: "no"
    user: www-data
    environment:
      TZ: "Europe/Moscow"
      WORDPRESS_DB_HOST: ${DB_HOST}
      WORDPRESS_DB_USER: ${DB_USER}
      WORDPRESS_DB_PASSWORD: ${DB_PASSWORD}
      WORDPRESS_DB_NAME: ${DB_NAME}

volumes:
  db_data: {}
  wordpress_data: {}

* в файле мы описали 3 контейнера, 2 из которых будут запускаться и работать постоянно — для wordpress и СУБД, а cli мы будем запускать по необходимости. Обратите внимание, что в качестве значений для настройки подключения к базе данных мы указали переменные — их мы зададим через .env файл.
** рассмотрим некоторые параметры:

  • image — образ, из которого будет разворачиваться контейнер.
  • hostname — задаем имя хоста. По именам контейнеры одного композера могут обращаться друг к другу.
  • container_name — задаем имя, которое будет задано контейнеру после его запуска.
  • volumes — прокидывает в контейнер директорию сервера. Таким образом, важные данные не будут являться частью контейнера и не будут удалены после его остановки.
  • restart — режим перезапуска. В нашем случае всегда (always) — после перезагрузки сервера, наши контейнеры запустятся.
  • environment — задает системные переменные. В данном примере, временную зону и пароли. Некоторые системные переменные имеют свои особенности для конкретного контейнера, например, WORDPRESS_DB_HOST задает в настройках Wordpress базу данных для хранения информации.
  • depends_on — указываем, какие контейнеры должны быть запущены, чтобы мог запуститься текущий контейнер.
  • ports — при необходимости, указываем порт, который будет наш сервер пробрасывать запрос внутрь контейнера.

Создаем файл .env, в котором перечислим переменные, необходимые для композера:

vi /opt/wordpress/.env

DB_HOST = db
DB_USER = wordpress
DB_PASSWORD = wordpress
DB_NAME = wordpress

* в данном примере мы оставили значения из примера официальной документации. В рабочей среде стоит задать более стойкий пароль (DB_PASSWORD). DB_HOST должен соответствовать имени сервиса с контейнером СУБД.

Переходим в каталог с композер-файлом и запускаем проект:

cd /opt/wordpress

docker-compose up -d

Система загрузит нужные образы и запустит контейнеры. В итоге, мы должны увидеть:

...
Creating wp_database ... done
Creating wp_cli      ... done
Creating wp_app      ... done

Убедимся, что наши контейнеры запущены:

docker ps | grep wp_

Мы должны увидеть 2 контейнера — wp_app и wp_database.

И так, мы подняли на внешнем порту 8000 веб-приложение с установленным CMS Wordpress и СУБД MariaDB, которая принимает запросы по внутреннему порту 3306. Попробуем перейти на страницу <IP-адрес сервера>:8000 — должна открыться страница установки Wordpress.

Если мы обращаемся к серверу по сети, и на нем используется брандмауэр, то необходимо будет открыть порт 8000. В зависимости от утилиты управления фаерволом, наши команды будут отличаться.

а) IPTABLES (как правило, на системах deb):

iptables -A INPUT -p tcp --dport 8000 -j ACCEPT

б) Firewalld (как правило, на системах rpm):

firewall-cmd --permanent --add-port=8000/tcp

firewall-cmd --reload

Но мы не будем выполнять установку через веб-интерфейс. Воспользуемся командной строкой.

Устанавливаем Wordpress через командную строку

Для завершения установки нам нужно выбрать предпочитаемый язык и прописать настройки для доступа к базе данных. После будут созданы необходимые таблицы в базе данных. Чаще всего, это делают в веб-интерфейсе, но мы рассмотрим вариант работы с wp-cli.

Завершаем установку системы управления следующей командой:

docker-compose run --rm cli wp core install --url=dmosk.local:8000 --title="Dmosk Local Blog" --admin_name=admin --admin_email=admin@dmosk.local --skip-email --admin_password=password

* в данном примере мы запустили наш контейнер с wp-cli и дали команду на установку CMS со следующими опциями:

  • url — адрес сайта. В примере по умолчанию, контейнер стартует на 8000 порту, поэтому мы указываем его. В вашем случае порт может быть другой или доступ может осуществляться через entry point.
  • title — заголовок для сайта. Можно указать произвольный текст.
  • admin_name — имя администратора для входа в систему управления.
  • admin_email — адрес электронной почты администратора.
  • skip-email — не отправлять приветственное письмо на адрес администратора.
  • admin_password — пароль для доступа к панели управления.

Установим русский язык: 

docker-compose run --rm cli wp language core install ru_RU

И активируем его:

docker-compose run --rm cli wp language core activate ru_RU

Система развернута. Попробуем перейти на страницу <IP-адрес сервера>:8000 — должна открыться страница сайта.

Работа с плагинами

Рассмотрим примеры работы с плагинами из командной строки при помощи WP-CLI.

Установить плагин:

docker-compose run --rm cli wp plugin install "Classic Editor"

Активировать плагин:

docker-compose run --rm cli wp plugin activate "classic-editor"

* обратите внимание на другое название при обращении к плагину. 

Деактивация:

docker-compose run --rm cli wp plugin deactivate "classic-editor"

Удаление:

docker-compose run --rm cli wp plugin delete "classic-editor"

Полный список команд можно посмотреть на официальном сайте.

Пример команд

Отдельно приведем некоторые дополнительные команды, которые могут быть полезны в процессе работы.

Работа с docker-compose

Остановка всех сервисов из композер-файла:

docker-compose down

Остановка всех сервисов из композер-файла с удалением данных:

docker-compose down --volumes

Работа с WP-CLI

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

Изменить страницу сайта:

wp option set siteurl https://www.dmosk.ru:8000

Изменить домашнюю страницу сайта:

wp option set home https://www.dmosk.ru:8000