Как установить WordPress с помощью Docker Compose
Это руководство существует для этих версий ОС
- Ubuntu 22.04 (Jammy Jellyfish)
- Ubuntu 16.04 (Xenial Xerus)
На этой странице
- Предпосылки
- Шаг 1. Настройка брандмауэра
- Шаг 2. Установите Docker и Docker Compose
- Шаг 3. Создание файла Docker Compose для WordPress
- Шаг 4. Обновление Docker Compose для Nginx
- Шаг 5. Обновите Docker Compose для SSL
- Шаг 6. Запустите и установите WordPress
- Шаг 7. Доступ к PhpMyAdmin
- Шаг 8. Доступ к WP-CLI
- Шаг 9. Резервное копирование WordPress
- Шаг 10. Обновите WordPress
- Заключение
WordPress — самая популярная платформа для ведения блогов в мире. Существует множество способов установки WordPress, включая команды оболочки, ручную установку с использованием сценариев или использование веб-установщика, который предоставляют популярные веб-хостинги. Запуск WordPress включает установку стека LAMP (Linux, Apache, MySQL и PHP) или LEMP (Linux, Nginx, MySQL и PHP).
В этом руководстве вы узнаете, как установить WordPress с помощью Docker/Docker Compose. Используя Docker, процесс установки предпочтительного стека становится намного проще. Вы можете использовать одну и ту же конфигурацию для быстрой установки WordPress на несколько серверов. Мы также установим инструмент phpMyAdmin для управления базами данных вместе с прокси-сервером Nginx для обслуживания сайта через SSL.
Предпосылки
-
A Linux server with a non-root user having sudo privileges. We are using a server running Ubuntu 22.04 for our tutorial.
-
A fully qualified domain name (FQDN) pointing to your server. For our purposes, we will use
example.com
as the domain name for the WordPress site andphpmyadmin.example.com
for the phpMyAdmin website. -
Make sure everything is updated.
$ sudo apt update
-
Install basic utility packages. Some of them may already be installed.
$ 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 (простой брандмауэр).
Проверьте, работает ли брандмауэр.
$ sudo ufw status
Вы должны получить следующий вывод.
Status: inactive
Разрешить порт SSH, чтобы брандмауэр не разорвал текущее соединение при его включении.
$ sudo ufw allow OpenSSH
Разрешить также порты HTTP и HTTPS.
$ sudo ufw allow http $ sudo ufw allow https
Включить брандмауэр
$ sudo ufw enable Command may disrupt existing ssh connections. Proceed with operation (y|n)? y Firewall is active and enabled on system startup
Еще раз проверьте состояние брандмауэра.
$ sudo ufw status
Вы должны увидеть аналогичный вывод.
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere 80/tcp ALLOW Anywhere 443 ALLOW Anywhere OpenSSH (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 Mon 2023-01-09 13:19:16 UTC; 9s ago TriggeredBy: ? docker.socket Docs: https://docs.docker.com Main PID: 1863 (dockerd) Tasks: 7 Memory: 20.5M CPU: 278ms CGroup: /system.slice/docker.service ??1863 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
По умолчанию Docker требует привилегий root. Если вы хотите избежать использования sudo
при каждом запуске команды docker
, добавьте свое имя пользователя в docker
группа.
$ sudo usermod -aG docker $(whoami)
Вам нужно будет выйти из сервера и снова войти в систему под тем же пользователем, чтобы включить это изменение, или использовать следующую команду.
$ su - ${USER}
Подтвердите, что ваш пользователь добавлен в группу Docker.
$ groups navjot wheel docker
Шаг 3 — Создайте файл Docker Compose для WordPress
Создайте каталог для конфигурации WordPress.
$ mkdir wordpress
Перейдите в каталог.
$ cd wordpress
Создайте и откройте файл компоновки Docker для редактирования.
$ nano docker-compose.yml
Вставьте в него следующий код.
version: '3.9' 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 и домена Lets encrypt SSL для сайта WordPress.
Вы можете добавить дополнительные переменные среды и добавить пользовательские данные wp-config.php
в файл Docker. Вы можете узнать о дополнительных переменных среды на странице WordPress DockerHub.
Следующий образ предназначен для phpMyAdmin, который зависит от того же образа MySQL и подключается к нему с помощью пароля root. Он имеет ограничение на загрузку 50 МБ. Вы можете изменить его в соответствии с вашими требованиями и размером вашей базы данных. Как и в случае с сайтом WordPress, мы определили домен виртуального хоста Nginx и зашифровали доменное имя SSL для сайта phpMyAdmin.
Последнее изображение для базы данных MySQL. Мы передали ему несколько команд, чтобы установить метод аутентификации по умолчанию и набор символов. Мы также создали пару томов для хранения данных. Мы также настроили переменные среды для учетных данных базы данных.
Следующим шагом является создание файла среды для переменных, используемых в файле компоновки. Создайте и откройте файл окружения для редактирования.
$ 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 = On memory_limit = 500M upload_max_filesize = 30M post_max_size = 30M max_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 при появлении запроса.
Снова откройте файл компоновки докеров.
$ 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
Откройте файл компоновки докеров для редактирования.
$ 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:
Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.
Здесь мы загружаем образ Docker-компаньона Acme, который работает вместе с прокси-сервером Nginx. Он извлекает тома из контейнера Nginx. Мы также определяем том для инструмента acme.sh, в котором хранятся все настройки, касающиеся Lets encrypt SSL. И, наконец, мы определяем переменную среды для регистрации SSL-сертификата с помощью Lets 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 pma 1b1dede46b07 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 прямо сейчас.
Шаг 7 — Доступ к PhpMyAdmin
Вы можете получить доступ к phpMyAdmin через URL-адрес https://phpmyadmin.example.com
.
Введите root
в качестве имени пользователя и пароля root и нажмите «Войти», чтобы открыть панель управления.
Вы можете начать использовать 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.0s WP-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 aliases alias 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/null Enter password: password
Приведенная выше команда создаст резервную копию SQL в каталоге ~/wordpress/wp-data
.
Проверьте содержимое каталога.
$ ls -al wp-data total 908 drwxr-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" < wp-data/data_11-01-2023_10_14_40.sql
Вы можете создать задание cron для регулярного резервного копирования базы данных.
Создайте сценарий резервного копирования в каталоге /etc/cron.daily
и откройте его для редактирования.
$ sudo nano /etc/cron.daily/wpbackup.sh
Вставьте в него следующий код.
#!/bin/bash docker 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
Заключение
На этом мы завершаем наше руководство по установке WordPress с помощью Docker Compose, phpMyAdmin и WP-CLI. Если у вас есть какие-либо вопросы, задайте их в комментариях ниже.