Thank you for reading this post, don't forget to subscribe!
Поднимаем Wordpress в Docker
На момент написания инструкции, в samples docker docs можно было найти пример композера для развертывания контейнеров mysql и wordpress. Его мы возьмем за основу, но поменяем некоторые параметры, и кое-что добавим.
Предположим, что наш проект будет хранится относительно каталога /opt/wordpress. Создадим его:
mkdir /opt/wordpress
После создадим композер-файл:
vi /opt/wordpress/docker-compose.yml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
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
1 2 3 4 |
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=test.local:8000 --title="Test Local Blog" --admin_name=admin --admin_email=admin@test.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.test.ru:8000
Изменить домашнюю страницу сайта:
wp option set home https://www.test.ru:8000