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
При входе в панель 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
В последнее время очень сложно найти независимый источник новостей.
Большинство новостей заангажированные государством и найти что то действительно не завищащее от кого или чего то.
В Ютубе так же нужно очень долго искать полезную информацию.
Для себя открыл недавно 2 источника независимых новостей:russinfo.net и russtoday.com.
Вот одна из статей, которая мне очень понравилась: https://russinfo.net/finance/socialnye-vyplaty/dekretnye-vyplaty-v-rossii.html
А что читаете ВЫ?
а как войти в phpmyadmin..
через root и user_wp не пускает
Намек
pma:
image: phpmyadmin/phpmyadmin
restart: always
links:
– mysql:mysql
ports:
– 8081:80
environment:
PMA_HOST: mysql
MYSQL_USERNAME: root
MYSQL_ROOT_PASSWORD: 4m3SxCpaQb*6LB#
Спасибо большое за статью. Поправьте конфигурацию pma.
бомба
Всё круто, только не раскрыта тема, увеличения лимитов upload PHP и nginx