Проект «SnakeProject» Михаила КозловаРегистрация

Навигация
⇒FreeBSD and Nix⇒

⇐CISCO
⇐Voice(Asterisk\Cisco)
⇐Microsoft
⇐Powershell
⇐Python
⇐SQL\T-SQL
⇐1С
⇐Общая
⇐WEB Разработка
⇐ORACLE SQL \ JAVA
⇐Мото

Docker Nginx + PHP + MySQL


 

Docker Nginx + PHP + MySQL


В продолжение серии статей про докер:
http://snakeproject.ru/rubric/article.php?art=docker_5_01.2019


Предполагается, что compose уже установлен
Установка на Centos:
yum install epel-release
yum -y install docker-compose


Теперь создадим связку Nginx + PHP (пока без MySQL)


Создадим каталоги для проекта:
mkdir -p /data/web
mkdir /data/web/nginx
mkdir /data/web/logs
mkdir /data/web/public


Создадим конфиг для nginx:

Заметьте, в fastcgi_pass php-fpm
В docker-compose.yml будет отсылка к образу с этим именем
links: - php-fpm


Создадим файлы для логов nginx:
touch /data/web/logs/nginx-error.log
touch /data/web/logs/nginx-access.log


Создадим тестовый файл php:

 

Создадим compose файл для объединения образов nginx и php:


Образ nginx использует образы с именами tutum/nginx и линковку на образ php-fpm:
tutum/nginx
php-fpm

Пробрасываем файлы, инча после каждого перезапуска контейнера все будет очищаться

В контейнер:
- ./nginx/default:/etc/nginx/sites-available/default
- ./nginx/default:/etc/nginx/sites-enabled/default
- ./logs/nginx-access.log:/var/log/nginx/access.log
- ./logs/nginx-error.log:/var/log/nginx/error.log


Образ php-fpm использует порт из конфига nginx 9000
Сам образ использует образ php:fpm
volumes: - ./public:/application/public - это root из конфига nginx

Т.е. из каталога на машине с докером мы пробрасываем папку веб-проекта в контейнер


Собираем проект:
cd /data/web/
docker-compose up -d


Проверяем:
docker ps
CONTAINER ID IMAGE       COMMAND                 STATUS        PORTS                             NAMES
97d8b54f1145 tutum/nginx "/usr/sbin/nginx"       Up 2 minutes  0.0.0.0:80->80/tcp                web_nginx_1
401891b69b07 php:fpm     "docker-php-entrypoi…"  Up 2 minutes  0.0.0.0:9000->9000/tcp, 9000/tcp  web_php-fpm_1


Если какой-либо из контейнеров не запускается, смотрим логи:
docker logs 97d8b54f1145


Столкнулся с проблемой, которую так и не понял, как решить толком, как сделал

Если столкнетесь с ошибкой:
nginx: [emerg] invalid number of arguments in "fastcgi_param" directive in /etc/nginx/sites-enabled/default:11

Это про сторку: fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

Как я вокруг нее не плясал, все бестолку, контейнер не собирался
Удаляем ее из конфига, собираем контейнеры - docker-compose up -d
Далее заходим в контейнер и добавляем ее в конфиг ручками и перезапускаем nginx, после контейнер пересобирался нормально


Проверяем:
http://127.0.0.1:80/index.php


Управление проектом compose:
docker-compose stop
docker-compose start

 

Теперь добавим MySQL


Дополним compose файл:


Тут мы добавили образ MySQL версии 8
Задали учетные данные для подключения
volumes: - /var/lib/mysql:/var/lib/mysql - сделано для того, чтоб данные сохранялись
Если этого не сделать, то при каждом перезапуске проектов данные будут пропадать
depends_on: - mysql - указали зависимость от образа


Еще нам нужно установить драйверы для php для подключения к MySQL
Это делается в Dockerfile (Поэтому мы убрали image)


mkdir /data/web/php-fpm


Собираем:
cd /data/web/
docker-compose up -d


Проверяем:
docker ps
CONTAINER ID  IMAGE        COMMAND                  PORTS                               NAMES
06638849b713  tutum/nginx  "/usr/sbin/nginx"        0.0.0.0:80->80/tcp                  web_nginx_1
b840c2388b81  web_php-fpm  "docker-php-entrypoi…"   0.0.0.0:9000->9000/tcp              web_php-fpm_1
c2de120b6e7f  mysql:8.0    "docker-entrypoint.s…"   0.0.0.0:3306->3306/tcp, 33060/tcp   web_mysql_1

 

Подключимся и создадим тестовые данные в MySQL:
docker exec -it c2de120b6e7f bash


Пароль вводим указанный в файле docker-compose.yml:
mysql -u root -p

Выбираем базу данных из файла docker-compose.yml:
show databases;
+--------------------+
| Database           |
+--------------------+
| dbname             |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+

USE dbname;

Создаем тестовые данные:
CREATE TABLE test
(
    id INT NOT NULL auto_increment,
    name VARCHAR(30) NOT NULL DEFAULT '',
    PRIMARY KEY (id)
);

INSERT INTO test (name) VALUES ("testname1");
INSERT INTO test (name) VALUES ("testname2");
INSERT INTO test (name) VALUES ("testname3");

А эта строка, чтоб не вылезла ошибка
Uncaught PDOException: PDO::__construct():
The server requested authentication method unknown to the client [caching_sha2_password]:

alter user 'root'@'%' identified with mysql_native_password by '32167';

\q
exit


Приводим файл к такому виду:
vi /data/web/public/index.php


Теперь проверим:
http://127.0.0.1:80/index.php
1 testname1

2 testname2

3 testname3

 

 

 
 

Комментарии пользователей

Эту новость ещё не комментировалиНаписать комментарий
Анонимам нельзя оставоять комментарии, зарегистрируйтесь!

© Snakeproject.ru создан в 2013 году. При копировании материала с сайта - оставьте ссылку.


Яндекс.Метрика

Goon Каталог сайтов Рейтинг@Mail.ru