# 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
```

![](/files/qrVYD8v3zm8HrOTBJd9r)

В целях безопасности, мы не будем работать через 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
```

![](/files/fGCiq8uQPcwjNdTP16vl)

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

```
docker-compose ps
```

![](/files/HNuiXcrcAd37DWbOpQzQ)

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

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

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

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

```
http://server_IP:8080/
```

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

![](/files/kD1eyEdnEExtucNWYDoS)

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

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

![](/files/fszWmkzpvVc39iehzvGF)

Также по адресу <http://server\\_IP:8081/> доступен phpMyAdmin

![](/files/Uds2zsUE46P5jDN0Uhsp)

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
```

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

![](/files/EzhNmRBUykHOz4hTyxAi)

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

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

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

```
show databases;
```

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

![](/files/KWIiU5ViDLE3Wz4HSCBA)

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

```
docker-compose exec wordpress bash
ls -lah
```

![](/files/UFNNToZbhbDPYS6D6oLd)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://book.konstantinsecurity.com/readme/web-dev/docker-compose-wp-nginx-php-mariadb.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
