Docker Compose wp nginx php mariadb

https://admin812.ru/razvertyvanie-wordpress-s-nginx-php-fpm-i-mariadb-s-pomoshhyu-docker-compose.html

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

Рассмотрим как развернуть WordPress с Nginx, PHP-FPM и MariaDB и PhpMyAdmin с помощью Docker Compose на компьютере с Ubuntu.

1. Подготовка хост-машины

sudo apt update && sudo apt-get upgrade
sudo apt-get install -y docker.io

Добавим докер в автоматический запуск при загрузке ОС:

systemctl start docker
systemctl enable docker

Docker-Compose доступен в репозитории, но его версии немного отстают от последней. Поэтому скачаем актуальную версию с GitHub

sudo wget -O  /usr/local/bin/docker-compose https://github.com/docker/compose/releases/download/1.26.0/docker-compose-Linux-x86_64
sudo chmod +x /usr/local/bin/docker-compose

После завершения процесса проверьте установленную версию docker-compose:

 docker-compose version

В целях безопасности, мы не будем работать через root, а добавим существующего пользователя в группу docker и перезагрузим службу:

usermod -a -G docker $USER
systemctl restart docker

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

mkdir -p wordpress-compose
cd wordpress-compose/
touch docker-compose.yml
mkdir -p nginx/
mkdir -p logs/
mkdir -p logs/nginx
mkdir -p data/
mkdir -p data/html
mkdir -p data/mysql

docker-compose.yml — это конфигурационный файл, в котором мы описываем какие контейнеры запускать, их настройки и связи между контейнерами.

— nginx/: каталог используемый для дополнительной конфигурации nginx, как виртуального хоста и т. д.

— logs/: каталог логов для nginx, mariadb и php.

— data/: каталог с файлами wordpress и файлы базы данных.

Далее в директории wordpress-compose/nginx создайте новый файл с конфигурацией nginx.

nano ~/wordpress-compose/nginx/nginx.conf

Вставьте следующее содержимое:

server {
  listen 80;
  server_name site1.ru;

  root /var/www/html;
  index index.php;

  access_log /var/log/nginx/site-access.log;
  error_log /var/log/nginx/site-error.log;

  location / {
    try_files $uri $uri/ /index.php?$args;
  }

  location ~ \.php$ {
    try_files $uri =404;
    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 PATH_INFO $fastcgi_path_info;
    }
}

Сохраните файл и выйдите из редактора

Мы будем использовать Nginx последней версии. Настроим сопоставление портов для порта 8080 на хосте с портом 80 в контейнере. Настроим конфигурацию виртуального хоста Nginx, файлы журнала Nginx и корневой каталог веб-сервера /var/www/html. Также укажем что контейнер Nginx связан с контейнером WordPress.

Отредактируем файл docker-compose.yml:

nano docker-compose.yml
nginx:
    image: nginx:latest
    volumes:
      - ./nginx:/etc/nginx/conf.d
      - ./data/html:/var/www/html
    ports:
      - 8080:80
    links:
      - wordpress

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

Далее определим сервер MySQL, мы используем образ MariaDB последней версии. Назначим root пароль MySQL, имя базы данных, пользователя базы и его пароль. Для этого, вставьте в конфигурационный docker-compose.yml текст:

  mysql:
    image: mariadb
    volumes:
      - ./data/mysql:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: 4m3SxCpaQb*6LB#
      MYSQL_DATABASE: db_wordpress
      MYSQL_USER: user_wp
      MYSQL_PASSWORD: 9UqfqeE9#hn2@t^
    restart: always

Теперь мы будем настраивать WordPress с помощью образа WordPress с PHP-FPM 7.4. Подключаем том Docker для директории /var/www/html в каталоге хоста WordPress, настроим базу данных, определив переменную среду WordPress, и свяжем WordPress с MySQL. Данные по настройке базы данных должны соответствовать предыдущей секции. Вставьте в конфигурационный docker-compose.yml текст:

  wordpress:
    image: wordpress:php7.4-fpm-alpine
    volumes:
      - ./data/html:/var/www/html
    depends_on:
      - mysql
    environment:
      WORDPRESS_DB_HOST: mysql
      MYSQL_ROOT_PASSWORD: 4m3SxCpaQb*6LB#
      WORDPRESS_DB_NAME: db_wordpress
      WORDPRESS_DB_USER: user_wp
      WORDPRESS_DB_PASSWORD: 9UqfqeE9#hn2@t^
      WORDPRESS_TABLE_PREFIX: wp_
    links:
      - mysql
    restart: always

Для управления СУБД прикручиваем phpmyadmin и на порт 8081:

pma:
  image: phpmyadmin/phpmyadmin
  restart: always
  links:
    - mysql:mysql
  ports:
    - 8081:80
  environment:
  PMA_HOST=mysql
  MYSQL_USERNAME=root
  MYSQL_ROOT_PASSWORD: 4m3SxCpaQb*6LB#

После добавления составных частей в docker-compose.yml — файла, сохраните его и выйдите из редактора. Конфигурация docker-compose готова. У Вас должен получиться файл с таким содержимым:

version: '3'
services:
  mysql:
    image: mariadb
    volumes:
      - ./data/mysql:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: 4m3SxCpaQb*6LB#
      MYSQL_DATABASE: db_wordpress
      MYSQL_USER: user_wp
      MYSQL_PASSWORD: 9UqfqeE9#hn2@t^
    restart: always
  wordpress:
    image: wordpress:php7.4-fpm-alpine
    volumes:
      - ./data/html:/var/www/html
    depends_on:
      - mysql
    environment:
      WORDPRESS_DB_HOST: mysql
      MYSQL_ROOT_PASSWORD: 4m3SxCpaQb*6LB#
      WORDPRESS_DB_NAME: db_wordpress
      WORDPRESS_DB_USER: user_wp
      WORDPRESS_DB_PASSWORD: 9UqfqeE9#hn2@t^
      WORDPRESS_TABLE_PREFIX: wp_
    links:
      - mysql
    restart: always
  nginx:
    image: nginx:latest
    volumes:
      - ./nginx:/etc/nginx/conf.d
      - ./data/html:/var/www/html
    ports:
      - 8080:80
    links:
      - wordpress

  pma:
    image: phpmyadmin/phpmyadmin
    restart: always
    links:
      - mysql:mysql
    ports:
      - 8081:80
    environment:
      MYSQL_ROOT_PASSWORD: 4m3SxCpaQb*6LB#

5. Запуск docker-compose

Начнем создание новых контейнеров с docker-compose. Перейдите в каталог WordPress и запустите новые контейнеры на основании созданного нами файла.

cd ~/wordpress-compose/
docker-compose up -d

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

docker-compose ps

Если вы хотите увидеть вывод журнала из контейнера, вы можете использовать команды ниже:

docker-compose logs nginx
docker-compose logs mysql
docker-compose logs wordpress

6. Установка CMS WordPress

Теперь откройте веб-браузер и введите URL-адрес сервера или IP-адрес.

http://server_IP:8080/

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

Если у Вас не открылась страница установки, посмотрите логи nginx, а также файл hosts на компьютере с которого вы пытаете открыть сайт.

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

Также по адресу http://server_IP:8081/ доступен phpMyAdmin

WordPress установлен с помощью docker-compose.

7. Доступ в контейнеры docker

Чтобы убедиться, что все контейнеры доступны и проверить их состояние введите команду:

docker-compose ps

У нас уже 4 контейнера, теперь мы можем попытаться войти в каждый. Войдите в первый контейнер nginx с помощью команды docker-compose.

docker-compose exec nginx bash

nginx – имя файла в Docker-Compose yml

bash – выполнение команды в оболочке bash.

Теперь проверим наши настройки виртуального хоста на WordPress.

cat /etc/nginx/conf.d/nginx.conf

Файл доступен в контейнере.

Далее попробуйте войти в контейнер MySQL, а затем в оболочку MySQL с помощью нашего пароля на файле.

docker-compose exec mysql bash
mysql -u root -p

Посмотреть список баз данных:

show databases;

Вы увидите нашу базу данных WordPress.

В контейнере WordPress вы увидите все файлы CMS WordPress.

docker-compose exec wordpress bash
ls -lah

Last updated