Поиск по сайту:

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


Это руководство существует для этих версий ОС

  • Ubuntu 22.04 (Jammy Jellyfish)
  • Ubuntu 16.04 (Xenial Xerus)

На этой странице

  1. Предпосылки
  2. Шаг 1. Настройка брандмауэра
  3. Шаг 2. Установите Docker и Docker Compose
  4. Шаг 3. Создание файла Docker Compose для WordPress
  5. Шаг 4. Обновление Docker Compose для Nginx
  6. Шаг 5. Обновите Docker Compose для SSL
  7. Шаг 6. Запустите и установите WordPress
  8. Шаг 7. Доступ к PhpMyAdmin
  9. Шаг 8. Доступ к WP-CLI
  10. Шаг 9. Резервное копирование WordPress
  11. Шаг 10. Обновите WordPress
  12. Заключение

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 and phpmyadmin.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. Если у вас есть какие-либо вопросы, задайте их в комментариях ниже.