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

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

* в фай­ле мы опи­са­ли 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_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