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

2. Установка Docker-Compose

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

3. Установка WordPress с nginx, PHP, MariaDB, PhpMyAdmin

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

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

4. Настройка Docker-Compose

Мы будем использовать 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

Развертывание WordPress с NGINX, PHP-FPM и MariaDB с помощью Docker Compose
Метки:                     

10 мыслей о “Развертывание WordPress с NGINX, PHP-FPM и MariaDB с помощью Docker Compose”

  • 23.09.2020 в 00:20
    Постоянная ссылка

    При входе в панель PHPadmin пишет
    Невозможно подключиться к серверу MySQL
    mysqli::real_connect(): php_network_getaddresses: getaddrinfo failed: No address associated with hostname
    mysqli::real_connect(): (HY000/2002): php_network_getaddresses: getaddrinfo failed: No address associated with hostname

    Ответ
  • 23.09.2020 в 11:36
    Постоянная ссылка

    В последнее время очень сложно найти независимый источник новостей.
    Большинство новостей заангажированные государством и найти что то действительно не завищащее от кого или чего то.
    В Ютубе так же нужно очень долго искать полезную информацию.
    Для себя открыл недавно 2 источника независимых новостей:russinfo.net и russtoday.com.
    Вот одна из статей, которая мне очень понравилась: https://russinfo.net/finance/socialnye-vyplaty/dekretnye-vyplaty-v-rossii.html
    А что читаете ВЫ?

    Ответ
    • 09.11.2020 в 18:09
      Постоянная ссылка

      Намек

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

      Ответ
  • 25.10.2026 в 19:10
    Постоянная ссылка

    Our theatre group is preparing a small production, and I am helping organise the hair references for one character. We are considering a blonde curtain fringe, but the actor needs an unobstructed view throughout the performance. My reference folder uses photographs, since written haircut descriptions alone leave too much room for misunderstanding. While organising these notes, I am using blonde hair with curtain bangs as a reference. Before anything is cut, we want to compare styling the current fringe with using a temporary costume hairpiece. There are two quick costume changes, so a style that needs careful resetting after every scene would be awkward. At rehearsal, I would like to compare front and side views under the actual lights before settling on a shape. Which practical details should we put on the styling sheet so different backstage helpers can follow the same reference?

    Ответ
  • 25.10.2026 в 22:17
    Постоянная ссылка

    I have reached the fitting stage of a trouser project and need a clearer way to record proportions. Standing looks acceptable, while sitting makes the fabric strain around my hips. I keep getting conflicting shape categories from guides that ask for much the same information. I can record waist and hip measurements alongside the pattern size, then note where each adjustment changes the fabric tension. A useful explanation of proportions would help me more than another category to remember. How do other home sewers record measurements separately from the wearing ease of their chosen pattern? This is one reference I bookmarked while sorting out the vocabulary: body shape and colour analysis Colour can wait until the fit is settled; the silhouette is what I need to understand first. I would appreciate a practical sequence for checking proportions before changing the pattern again.

    Ответ
  • 26.10.2026 в 00:25
    Постоянная ссылка

    My wardrobe notebook now contains several weeks of outfit notes. This time I want to review the words before looking at photos. Some entries describe comfort, while others borrow style labels. I bookmarked body shape and colour analysis as one starting point for thinking about those categories. What interests me is whether a style system can help organize observations without replacing them with assumptions about what I ought to wear. Several outfits I liked had a clearly defined waist. But the notes also mention fabric, weather and the day itself. I would struggle to isolate a single reason from these notes. I want the next entries to describe the actual garment more clearly. I also want to leave room for changing my mind, since an outfit that suits one kind of day may feel wrong on another. What would you record before comparing the notes with a style system?

    Ответ

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

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