Развертывание Wordpress в Docker и установка его в командной строке
В данной инструкции мы рассмотрим процесс работы с 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
Только полноправные пользователи могут оставлять комментарии. Аутентифицируйтесь пожалуйста, используя сервисы.