Перейти к содержимому
Главная страница » Запуск WordPress в Docker

Запуск WordPress в Docker

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

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

Docker — это программное обеспечение, которое может упаковывать ваше приложение, его зависимости, системные инструменты, системные библиотеки и настройки в единый комплексный виртуальный контейнер. Этот объединённый пакет, содержащий всё необходимое для запуска вашего приложения, называется образом контейнера Docker. Этот образ представляет собой автономный исполняемый программный пакет, который надёжно работает на любом сервере — Linux, Windows, macOS, в общедоступном или частном облаке. Кроме того, эти образы можно использовать для запуска приложения как изолированного процесса в пользовательском пространстве.

Структура проекта

В этой статье мы узнаем, как развернуть WordPress с помощью NGINX, PHP-FPM и MariaDB с помощью Docker Compose на компьютере с Ubuntu. На изображении ниже показано развёртывание с несколькими контейнерами, которое мы собираемся создать.

Установка WordPress в Docker

На сервере уже должны быть установлены: Docker и Docker-compose.

Этапы развертывания кратко описаны ниже.

  1. Создайте файл docker-compose.yml, который позволит нам создать развёртывание с несколькими контейнерами.
  2. Добавьте конфигурацию MariaDB в docker-compose.yml.
  3. Настройте хост-компьютер для обработки файлов базы данных.
  4. Добавьте конфигурацию WordPress в docker-compose.yml.
  5. Добавьте раздел конфигурации в файл nginx.conf.
  6. Добавьте конфигурацию NGINX в docker-compose.yml.
  7. Создайте контейнеры и запустите сервисы.

Создание файла docker-compose.yml

mkdir wordpress
cd wordpress

Создание конфигурации MariaDB

Создайте файл docker-compose.yml и добавьте в него приведенную ниже конфигурацию. Конфигурация для базы данных MariaDB указана под названием службы mysql.

nano docker-compose.yml

Скопируем в файл текст:

version: '3'
services:
 mysql:
 image: mariadb
 volumes:
 - /data/mysql:/var/lib/mysql
 environment:
 MYSQL_ROOT_PASSWORD: mysql_root_pass
 MYSQL_DATABASE: db_name
 MYSQL_USER: user_name
 MYSQL_PASSWORD: user_pass
 restart: always

В приведенном ниже разделе путь к хост-машине монтируется /data/mysql в путь к контейнеру /var/lib/mysql.

volumes:
 - /data/mysql:/var/lib/mysql

Это позволяет хранить все наши файлы БД на хост-компьютере, а не в контейнере. Нам нужно подготовить этот каталог для использования нашим контейнером.

В контейнере MariaDB каталог /var/lib/mysql принадлежит пользователю mysql. Идентификатор пользователя в контейнере — 999. В Ubuntu — на хост-компьютере — он другой. Приведенные ниже команды удаляют любого существующего пользователя с именем mysql и создают нового пользователя с идентификатором 999.

$ sudo userdel mysql
$ sudo useradd -u 999 mysql

Теперь установите владельца каталога/data/mysql на хост-компьютере.

$ sudo mkdir -p /data/mysql
$ sudo chown -R mysql:mysql /data/mysql

Добавление конфигурации WordPress

Добавьте конфигурацию WordPress в файл docker-compose.yml в качестве сервиса с именем wordpress

nano docker-compose.yml
version: '3'
services:
 mysql:
 image: mariadb
 volumes:
 - /data/mysql:/var/lib/mysql
 environment:
 MYSQL_ROOT_PASSWORD: mysql_root_pass
 MYSQL_DATABASE: db_name
 MYSQL_USER: user_name
 MYSQL_PASSWORD: user_pass
 restart: always
 wordpress:
 image: wordpress:php7.3-fpm-alpine
 volumes:
 - /data/html:/var/www/html
 depends_on:
 - mysql
 environment:
 WORDPRESS_DB_HOST: mysql
 MYSQL_ROOT_PASSWORD: mysql_root_pass
 WORDPRESS_DB_NAME: db_name
 WORDPRESS_DB_USER: user_name
 WORDPRESS_DB_PASSWORD: user_pass
 WORDPRESS_TABLE_PREFIX: wp_
 links:
 - mysql
 restart: always

Убедитесь,что переменные среды WordPress: MYSQL_ROOT_PASSWORD, WORDPRESS_DB_NAME,WORDPRESS_DB_USER и WORDPRESS_DB_PASSWORD точно совпадают с переменными среды MariaDB: MYSQL_ROOT_PASSWORD, MYSQL_DATABASE, MYSQL_USER и MYSQL_PASSWORD соответственно. В случае несоответствия приложение WordPress не сможет подключиться к базе данных.

В следующем разделе указано, что служба wordpress зависит от службы mysql. Это означает, что службы запускаются и останавливаются в порядке зависимости.

 depends_on:
 - mysql

Приведённый ниже раздел позволяет сервису wordpress взаимодействовать со службой mysql.

 links:
 - mysql

В приведенном ниже разделе путь к хост-машине монтируется /data/html в путь к контейнеру /var/www/html.

 volumes:
 - /data/html:/var/www/html

Это позволяет хранить все файлы нашего приложения WordPress на хост-компьютере, а не в контейнере. Нам нужно подготовить этот каталог для использования нашим контейнером.

В контейнере WordPress каталог /var/www/html принадлежит пользователю www-data. Идентификатор пользователя в контейнере — 82. В Ubuntu — на хост-машине — он другой. Приведенные ниже команды удаляют любого существующего пользователя с именем www-data и создают нового пользователя с идентификатором 82.

$ sudo userdel www-data
$ sudo useradd -u 82 www-data

Теперь установите владельца каталога/data/html на хост-компьютере.

$ sudo mkdir -p /data/html
$ sudo chown -R www-data:www-data /data/html

Добавьте следующие строки в раздел server в nginx.conf, чтобы все PHP-запросы отправлялись в службу PHP-FPM.

# pass the PHP scripts to FastCGI server listening on wordpress:9000
location ~ \.php$ {
 fastcgi_split_path_info ^(.+\.php)(/.+)$;
 fastcgi_pass wordpress:9000;
 fastcgi_index index.php;
 include fastcgi_params;
 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
 fastcgi_param SCRIPT_NAME $fastcgi_script_name;
}

Добавление конфигурации NGINX

Добавьте конфигурацию NGINX в файл docker-composer.yml в качестве сервиса с именем nginx.

nano docker-compose.yml
version: '3'
services:
 mysql:
 image: mariadb
 volumes:
 - /data/mysql:/var/lib/mysql
 environment:
 MYSQL_ROOT_PASSWORD: mysql_root_pass
 MYSQL_DATABASE: db_name
 MYSQL_USER: user_name
 MYSQL_PASSWORD: user_pass
 restart: always
 wordpress:
 image: wordpress:php7.3-fpm-alpine
 volumes:
 - /data/html:/var/www/html
 depends_on:
 - mysql
 environment:
 WORDPRESS_DB_HOST: mysql
 MYSQL_ROOT_PASSWORD: mysql_root_pass
 WORDPRESS_DB_NAME: db_name
 WORDPRESS_DB_USER: user_name
 WORDPRESS_DB_PASSWORD: user_pass
 WORDPRESS_TABLE_PREFIX: wp_
 links:
 - mysql
 restart: always
 nginx:
 image: nginx:alpine
 volumes:
 - nginx:/etc/nginx/conf.d
 - /data/html:/var/www/html
 ports:
 - 8080:80
 links:
 - wordpress

Убедитесь,что путь к хосту, указанный в конфигурации nginx, — /data/html — совпадает с путем к хосту, указанным в конфигурации WordPress.

Приведённый ниже раздел позволяет сервису wordpress взаимодействовать со службой mysql.

В приведенном ниже разделе порт 8080 хост-машины сопоставляется с портом 80 контейнера. Обратите внимание, что ни один другой контейнер не имеет открытого порта для хост-машины. Это повышает безопасность нашего развертывания.

ports:
 - 8080:80

Нам также нужно предоставить файл конфигурации для сервера Nginx. Создайте каталог с именем nginx и поместите приведенный ниже текст в файл с именем nginx.conf в этом каталоге.

mkdir nginx
cd nginx
nano nginx.conf
server {
 listen 80;
 listen [::]:80;
 access_log off;
 root /var/www/html;
 index index.php;
 server_name example.com;
 server_tokens off;
 location / {
 # First attempt to serve request as file, then
 # as directory, then fall back to displaying a 404.
 try_files $uri $uri/ /index.php?$args;
 }
 # pass the PHP scripts to FastCGI server listening on wordpress:9000
 location ~ \.php$ {
 fastcgi_split_path_info ^(.+\.php)(/.+)$;
 fastcgi_pass wordpress:9000;
 fastcgi_index index.php;
 include fastcgi_params;
 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
 fastcgi_param SCRIPT_NAME $fastcgi_script_name;
 }
}

Запуск WordPress в Docker

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

$ sudo docker-compose up -d

После завершения установки откройте в браузере URL http://localhost:8080. Вы должны увидеть страницу начальной настройки WordPress.

Обратите внимание, что файлы базы данных хранятся в каталоге /data/mysql на хост-компьютере, а файлы WordPress хранятся в каталоге /data/wordpress на хост-компьютере.

В нашей установке это единственные каталоги, содержащие пользовательские данные. И оба этих каталога находятся на хост-компьютере. Таким образом, вы можете легко создать резервную копию всех пользовательских данных, просто создав архив каталога /data по приведенной ниже инструкции:

$ sudo tar -jcvf data.tar.bz2 /data

Как обновить WordPress в Docker?

Другой вопрос заключается в том, как обновить до последней версии образы Docker nginx или WordPress в нашем развёртывании. Поскольку все пользовательские данные находятся за пределами контейнеров, мы можем легко удалить контейнеры и создать их заново, чтобы обновить нашу установку.

$ sudo docker-compose down --rmi all
$ sudo docker-compose up -d

Источник: WordPress Deployment with NGINX, PHP-FPM and MariaDB using Docker Compose

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *