Как установить WordPress с помощью Docker Compose

WordPress CMS (Content Management System) — это широко используемая платформа с открытым исходным кодом, которая позволяет пользователям создавать, управлять и публиковать цифровой контент, в основном для веб-сайтов и блогов. Выпущенная в 2003 году, WordPress стала самой популярной в мире CMS, на которой работает более 40 % всех сайтов в Интернете. Она предлагает удобный интерфейс, позволяющий людям, практически не имеющим опыта работы с кодами, создавать и поддерживать веб-сайты профессионального качества.

WordPress обладает широкими возможностями настройки, тысячи тем и плагинов расширяют его функциональность, удовлетворяя самые разнообразные потребности — от простых блогов до сложных сайтов электронной коммерции. Сильная поддержка сообщества, регулярные обновления и обширная документация делают его надежным и универсальным выбором как для новичков, так и для опытных разработчиков.

Docker — это платформа с открытым исходным кодом, предназначенная для автоматизации развертывания, масштабирования и управления приложениями в рамках легких переносимых контейнеров.

Появившись в 2013 году, Docker произвел революцию в разработке программного обеспечения, обеспечив согласованную среду для запуска приложений независимо от того, где они развернуты — на локальной машине разработчика, в локальных центрах обработки данных или в облаке. Контейнеры объединяют приложение со всеми его зависимостями, библиотеками и конфигурационными файлами, обеспечивая согласованную производительность в различных средах.

Контейнеризация упрощает рабочий процесс разработки, улучшает совместную работу и повышает эффективность, позволяя разработчикам создавать, совместно использовать и запускать приложения без проблем. Экосистема Docker включает в себя инструменты и сервисы для оркестровки контейнеров, такие как Docker Swarm и Kubernetes, которые облегчают управление крупномасштабными развертываниями контейнеров, что делает эту технологию краеугольным камнем в современной практике DevOps.

В этом руководстве вы узнаете, как установить WordPress с помощью Docker/Docker Compose. Используя Docker, процесс установки предпочтительного стека становится намного проще. Вы можете использовать одну и ту же конфигурацию для быстрой установки WordPress на нескольких серверах. Мы также установим инструмент phpMyAdmin для управления базами данных и прокси-сервер Nginx для обслуживания сайта через SSL.

Предварительные условия

  • Сервер Linux с пользователем, не являющимся пользователем root и имеющим привилегии sudo. В нашем учебнике мы используем сервер под управлением Ubuntu 24.04.
  • Полностью определенное доменное имя (FQDN), указывающее на ваш сервер. Для наших целей мы будем использовать example.com в качестве доменного имени для сайта WordPress и phpmyadmin.example.com для сайта phpMyAdmin.
  • Убедитесь, что все обновлено.$ sudo apt update
  • Установите основные пакеты утилит. Некоторые из них могут быть уже установлены.$ sudo apt install wget curl nano software-properties-common dirmngr apt-transport-https gnupg gnupg2 ca-certificates lsb-release ubuntu-keyring unzip -y

Шаг 1 — Настройка брандмауэра

Первым шагом будет настройка брандмауэра. По умолчанию Ubuntu поставляется с ufw (Uncomplicated Firewall).

Проверьте, запущен ли брандмауэр.

$ sudo ufw status

Вы должны получить следующий результат.

Status: inactive

Разрешите порт SSH, чтобы брандмауэр не разорвал текущее соединение при его включении.

$ sudo ufw allow OpenSSH

Разрешите также порты HTTP и HTTPS.

$ sudo ufw allow http$ sudo ufw allow https

Включите брандмауэр

$ sudo ufw enableCommand may disrupt existing ssh connections. Proceed with operation (y|n)? yFirewall is active and enabled on system startup

Еще раз проверьте состояние брандмауэра.

$ sudo ufw status

Вы должны увидеть аналогичный результат.

Status: activeTo Action From— —— —-OpenSSH ALLOW Anywhere80/tcp ALLOW Anywhere443 ALLOW AnywhereOpenSSH (v6) ALLOW Anywhere (v6)80/tcp (v6) ALLOW Anywhere (v6)443 (v6) ALLOW Anywhere (v6)

Шаг 2 — Установите Docker и Docker Compose

Ubuntu 22.04 поставляется со старой версией Docker. Чтобы установить последнюю версию, сначала импортируйте ключ Docker GPG.

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg —dearmor -o /etc/apt/keyrings/docker.gpg

Создайте файл репозитория Docker.

$ echo «deb [arch=$(dpkg —print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable» | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Обновите список системных репозиториев.

$ sudo apt update

Установите последнюю версию Docker.

$ sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin

Убедитесь, что он запущен.

$ sudo systemctl status docker? docker.service — Docker Application Container Engine Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled) Active: active (running) since Fri 2024-07-19 17:11:19 UTC; 3s agoTriggeredBy: ? docker.socket Docs: https://docs.docker.com Main PID: 1163 (dockerd) Tasks: 7 Memory: 21.9M CPU: 221ms CGroup: /system.slice/docker.service ??2803 /usr/bin/dockerd -H fd:// —containerd=/run/containerd/containerd.sock

По умолчанию Docker требует привилегий root. Если вы хотите избежать использования sudo каждый раз, когда вы запускаете docker , добавляйте свое имя пользователя в docker группу.

$ sudo usermod -aG docker $(whoami)

Чтобы включить это изменение, вам нужно выйти из сервера и снова войти в него под тем же пользователем или использовать следующую команду.

$ su — ${USER}

Убедитесь, что ваш пользователь добавлен в группу Docker.

$ groupsnavjot wheel docker

Шаг 3 — Создание файла Docker Compose для WordPress

Я буду выполнять всю установку Docker WordPress в /opt. Вы можете выбрать другое расположение, например /var или /home, в зависимости от ваших потребностей.

cd /opt

Создайте каталог для конфигурации WordPress.

$ mkdir wordpress

Перейдите в директорию.

$ cd wordpress

Создайте и откройте для редактирования файл Docker compose.

$ nano docker-compose.yml

Вставьте в него следующий код.

services: wp: image: wordpress:latest container_name: wordpress-app restart: unless-stopped expose: — 8080 volumes: — ./config/php.conf.ini:/usr/local/etc/php/conf.d/conf.ini — ./wp-app:/var/www/html #- ./plugin-name/trunk/:/var/www/html/wp-content/plugins/plugin-name # Plugin development #- ./theme-name/trunk/:/var/www/html/wp-content/themes/theme-name # Theme development environment: WORDPRESS_DB_HOST: db WORDPRESS_DB_NAME: «${DB_NAME}» WORDPRESS_DB_USER: «${DB_USER_NAME}» WORDPRESS_DB_PASSWORD: «${DB_USER_PASSWORD}» VIRTUAL_HOST: example.com LETSENCRYPT_HOST: example.com depends_on: — db links: — db wpcli: image: wordpress:cli container_name: wpcli_app volumes: — ./config/php.conf.ini:/usr/local/etc/php/conf.d/conf.ini — ./wp-app:/var/www/html environment: WORDPRESS_DB_HOST: db WORDPRESS_DB_NAME: «${DB_NAME}» WORDPRESS_DB_USER: «${DB_USER_NAME}» WORDPRESS_DB_PASSWORD: «${DB_USER_PASSWORD}» depends_on: — db — wp pma: image: phpmyadmin/phpmyadmin container_name: pma restart: unless-stopped environment: # https://docs.phpmyadmin.net/en/latest/setup.html#docker-environment-variables PMA_HOST: db PMA_PORT: 3306 MYSQL_ROOT_PASSWORD: «${DB_ROOT_PASSWORD}» UPLOAD_LIMIT: 50M VIRTUAL_HOST: phpmyadmin.example.com LETSENCRYPT_HOST: phpmyadmin.example.com expose: — 8081 links: — db:db db: image: mysql:latest container_name: wordpressdb restart: unless-stopped command: [ ‘—default_authentication_plugin=mysql_native_password’, ‘—character-set-server=utf8mb4’, ‘—collation-server=utf8mb4_unicode_ci’ ] volumes: — ./wp-data:/docker-entrypoint-initdb.d — db_data:/var/lib/mysql environment: MYSQL_DATABASE: «${DB_NAME}» MYSQL_ROOT_PASSWORD: «${DB_ROOT_PASSWORD}» MYSQL_USER: «${DB_USER_NAME}» MYSQL_PASSWORD: «${DB_USER_PASSWORD}»volumes: db_data:

Сохраните файл, нажав кнопку Ctrl + X и ввести Y при появлении запроса.

Есть два образа WordPress, которые мы извлекаем. Один — для сайта, другой — для инструмента WP-CLI. Оба образа зависят от докер-образа MySQL 8.0. Здесь мы задаем переменные окружения для учетных данных базы данных. Мы создали два тома для обоих контейнеров, один из которых указывает на общедоступные файлы сайта WordPress, а второй — на пользовательское расположение PHP.ini. Мы также задали переменные окружения для домена виртуального хоста Nginx и домена Let’s encrypt SSL для сайта WordPress.

Вы можете добавить больше переменных окружения и добавить пользовательские wp-config.php данные в файл Docker. О дополнительных переменных окружения вы можете узнать из раздела Страница WordPress DockerHub.

Следующее изображение предназначено для phpMyAdmin, который зависит от того же образа MySQL и подключается к нему с помощью пароля root. Ограничение на загрузку составляет 50 МБ. Вы можете изменить его в соответствии с вашими требованиями и размером вашей базы данных. Как и в случае с сайтом WordPress, мы определили домен виртуального хоста Nginx и доменное имя Let’s encrypt SSL для сайта phpMyAdmin.

Последнее изображение предназначено для базы данных MySQL. Мы передали ей несколько команд для установки метода аутентификации по умолчанию и набора символов. Мы также создали пару томов для хранения данных и настроили переменные окружения для учетных данных базы данных.

Следующим шагом будет создание файла окружения для переменных, используемых в файле compose. Создайте и откройте для редактирования файл окружения.

$ sudo nano .env

Вставьте в него следующий код.

DB_NAME=wordpress

DB_USER_NAME=username

DB_USER_PASSWORD=userpassword

DB_ROOT_PASSWORD=password

Вы можете сохранить файл, нажав Ctrl + X и ввести Y , когда появится запрос. Замените переменные на выбранные вами имя пользователя и пароль.

Вы можете настроить конфигурацию PHP с помощью пользовательского файла php.ini.

Создайте папку для конфигурации PHP.

$ mkdir config

Создайте и откройте папку php.conf.ini файл для редактирования.

$ nano config/php.conf.ini

Вставьте в него следующий код. Отрегулируйте значения в соответствии с вашими требованиями. Лимит загрузки для контейнера PhpMyadmin не зависит от значений, которые вы используете в этом файле.

file_uploads = Onmemory_limit = 500Mupload_max_filesize = 30Mpost_max_size = 30Mmax_execution_time = 600

Сохраните файл, нажав кнопку Ctrl + X и ввести Y при появлении запроса.

Шаг 4 — Обновление Docker Compose для Nginx

Создайте каталог для конфигурации Nginx.

$ mkdir nginx

Создайте каталог для виртуальных хостов внутри этого каталога.

$ mkdir nginx/vhost

Создайте и откройте каталог nginx/vhost/wordpress.example.com для редактирования.

$ nano nginx/vhost/wordpress.example.com

Вставьте в него следующий код.

server_tokens off;client_max_body_size 30m;

Сохраните файл, нажав кнопку Ctrl + X и ввести Y при появлении запроса.

Сделайте то же самое для nginx/vhost/phpmyadmin.example.com файла.

$ nano nginx/vhost/phpmyadmin.example.com

Вставьте в него следующий код.

server_tokens off;client_max_body_size 50m;

Сохраните файл, нажав кнопку Ctrl + X и ввести Y при появлении запроса.

Снова откройте файл docker compose.

$ nano docker-compose.yml

Вставьте следующий код перед строкой volumes: db_data: строкой.

nginx: container_name: nginx image: nginxproxy/nginx-proxy restart: unless-stopped ports: — 80:80 — 443:443 volumes: — /var/run/docker.sock:/tmp/docker.sock:ro — ./nginx/html:/usr/share/nginx/html — ./nginx/certs:/etc/nginx/certs — ./nginx/vhost:/etc/nginx/vhost.d logging: options: max-size: «10m» max-file: «3»

Сохраните файл, нажав кнопку Ctrl + X и ввести Y при появлении запроса.

В приведенном выше коде мы извлекаем Docker-образ прокси-сервера Nginx и открываем порты 80 и 443 для хост-контейнера, который будет использоваться для подключения к внешнему миру. Мы также создали тома для HTML-страницы Nginx, каталог, где будут храниться все SSL-сертификаты, и каталог для виртуальных хостов, который мы использовали выше для добавления дополнительных настроек Nginx. Мы настроили размер загружаемых файлов для сайтов WordPress и phpMyAdmin. Доменное имя сайта выбирается из переменных окружения, которые мы задали в предыдущем шаге.

Шаг 5 — Обновление Docker Compose для SSL

Откройте файл docker compose для редактирования.

$ nano docker-compose.yml

Вставьте следующий код перед строкой volumes: db_data: строкой.

acme-companion: container_name: acme-companion image: nginxproxy/acme-companion restart: unless-stopped volumes_from: — nginx volumes: — /var/run/docker.sock:/var/run/docker.sock — ./nginx/acme:/etc/acme.sh environment: DEFAULT_EMAIL: [email protected]

Сохраните файл, нажав кнопку Ctrl + X и ввести Y при появлении запроса.

Здесь, мы извлекаем Docker-образ Acme companion, который работает с прокси-сервером Nginx. Он извлекает тома из контейнера Nginx. Мы также определяем том для в файле acme.sh инструмент, в котором хранятся все настройки Let’s Encrypt SSL. Наконец,, мы определяем переменную окружения для регистрации SSL-сертификата в Let’s Encrypt.

Шаг 6 — Запуск и установка WordPress

Теперь, когда все наши конфигурационные файлы готовы, пришло время запустить контейнеры.

$ docker compose up -d

Подождите пару минут и проверьте состояние контейнеров.

$ docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

c1e8a9b5169d nginxproxy/acme-companion «/bin/bash /app/entr…» 14 seconds ago Up 7 seconds acme-companion

8a37c78ff790 wordpress:latest «docker-entrypoint.s…» 14 seconds ago Up 7 seconds 80/tcp, 8080/tcp wordpress-app

4f9c777c97c2 phpmyadmin/phpmyadmin «/docker-entrypoint.…» 14 seconds ago Up 7 seconds 80/tcp, 8081/tcp pma1b1dede46b07 nginxproxy/nginx-proxy «/app/docker-entrypo…» 14 seconds ago Up 11 seconds 0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp nginx

b9cf64a2f4a3 mysql:latest «docker-entrypoint.s…» 14 seconds ago Up 11 seconds 3306/tcp, 33060/tcp wordpressdb

Откройте URL-адрес https://example.com , чтобы запустить программу установки WordPress.

Выбор языка программы установки WordPress

Выберите язык и нажмите кнопку Продолжить , чтобы перейти на следующую страницу.

 

Заполните данные о сайте, выберите имя пользователя, пароль и адрес электронной почты и нажмите кнопку Установить WordPress , чтобы начать установку.

Успешная установка WordPress

Вы попадете на страницу успешной установки. Нажмите на кнопку Войти , чтобы перейти на страницу входа в систему.

Страница входа в систему WordPress

Введите свои данные для входа и нажмите кнопку Войти , чтобы открыть приборную панель WordPress.

Приборная панель WordPress

Вы можете начать использовать WordPress прямо сейчас.

Шаг 7 — Доступ к PhpMyAdmin

Вы можете получить доступ к phpMyAdmin по URL https://phpmyadmin.example.com.

Страница входа в phpMyAdmin

Введите root в качестве имени пользователя и пароль root и нажмите кнопку Войти , чтобы открыть приборную панель.

Панель управления phpMyAdmin

Вы можете начать использовать phpMyAdmin прямо сейчас.

Шаг 8 — Доступ к WP-CLI

Вы можете получить доступ к WP-CLI с помощью следующей команды.

$ docker compose run —rm wpcli cli version

Вы получите следующий результат.

[+] Running 2/0 ? Container wordpressdb Running 0.0s ? Container wordpress-app Running 0.0sWP-CLI 2.7.1

Чтобы не набирать каждый раз такую длинную команду, мы можем воспользоваться функцией псевдонимов в Linux.

$ alias wp=»docker compose -f ~/wordpress/docker-compose.yml run —rm wpcli»

Теперь вы можете набрать следующую команду из любого места вашего контейнера.

$ wp cli version

Псевдонимы в Linux являются временными. Чтобы сделать псевдоним постоянным, вам нужно отредактировать файл ~/.bashrc файл. Откройте его для редактирования.

$ nano ~/.bashrc

Вставьте следующую строку в конец файла.

# Custom aliasesalias wp=»docker compose -f ~/wordpress/docker-compose.yml run —rm wpcli»

Сохраните файл, нажав кнопку Ctrl + X и ввести Y при появлении запроса.

Выберите источник файла, чтобы перезагрузить конфигурацию.

$ source ~/.bashrc

Вы можете начать использовать WP-CLI.

Шаг 9 — Резервное копирование WordPress

Существует несколько способов резервного копирования WordPress. Самый простой способ — использовать плагин. Для этого существует несколько плагинов. Вы также можете использовать phpMyAdmin для создания резервной копии.

Вы также можете использовать командную строку для создания резервной копии базы данных WordPress. Перейдите в директорию WordPress.

$ cd ~/wordpress

Используйте следующую команду для резервного копирования базы данных WordPress. Вам будет предложено ввести пароль корня MySQL.

$ docker compose exec db sh -c «exec mysqldump wordpress -uroot -p» | sudo tee wp-data/data_`date +%d-%m-%Y»_»%H_%M_%S`.sql >/dev/nullEnter password: password

Приведенная выше команда создаст резервную копию SQL в файле ~/wordpress/wp-data каталоге.

Проверьте содержимое каталога.

$ ls -al wp-datatotal 908drwxr-xr-x 2 root root 4096 Jan 11 10:15 ./drwxrwxr-x 6 navjot navjot 4096 Jan 11 10:05 ../-rw-r—r— 1 root root 919814 Jan 11 10:14 data_11-01-2023_10_14_40.sql

Вы можете увидеть базу данных, сохраненную в каталоге. Вы можете восстановить эту базу данных с помощью инструмента phpMyAdmin или с помощью следующей команды.

$ docker compose exec db sh -c «exec mysql -uroot -p»

You can create a cron job to back up the database regularly.

Create the backup script in the /etc/cron.daily directory and open it for editing.

$ sudo nano /etc/cron.daily/wpbackup.sh

Вставьте в нее следующий код.

#!/bin/bashdocker compose exec db sh -c «exec mysqldump wordpress -uroot -p» | tee wp-data/data_`date +%d-%m-%Y»_»%H_%M_%S`.sql >/dev/null

Сохраните файл, нажав кнопку Ctrl + X и ввести Y при появлении запроса.

Сделайте скрипт исполняемым.

$ sudo chmod +x /etc/cron.daily/wpbackup.sh

Теперь резервное копирование вашей базы данных будет выполняться ежедневно.

Шаг 10 — Обновление WordPress

Самый простой способ обновить WordPress — воспользоваться встроенным средством обновления. Вы также можете обновить его с помощью Docker. Первым шагом будет создание резервной копии базы данных WordPress с помощью команды из шага 9.

Затем перейдите в директорию.

$ cd ~/wordpress

Остановите контейнеры.

$ docker compose down —remove-orphans

Вытащите последние образы контейнеров.

$ docker compose pull

Внесите любые изменения в docker-compose.yml , если хотите.

Перезапустите контейнеры WordPress.

$ docker compose up -d

Друзья помогите этому контенту стать доступнее в социальных сетях.

Не проходи мимо жмакни по кнопке возможно кому то еще он будет полезен!