запуск двух нод для web кластера nginx (сам
прокси-балансировщик в отдельной статье)
устанавливаем docker
#yum install docker
включаем и стартуем сервис:
#systemctl enable docker.service
#systemctl start docker.service
Для начала создадим под этот проект папку и заходим в нее:
#mkdir /site (папка может быть названа как угодно)
#cd /site
Дальше строим структуру папок таким образом:
#mkdir mysql nginx php
Создаем понятную среду для nginx:
#cd nginx
#mkdir core html logs www
Создадим конфигурационный файл для Nginx:
#cd /core
#mkdir node1 node2
в каждой директории создаём по файлу test.conf
содержание:
server {
listen 81; ## listen for ipv4; this line is default and implied
root /var/www/html/test.ru;
index index.php index.html index.htm;
# Make site accessible from http://localhost/
server_name test.ru;
Disable sendfile as per https://docs.vagrantup.com/v2/synced-folders/virtualbox.html
sendfile off;
Add stdout logging
error_log /var/log/nginx/test.ru-error.log info;
access_log /var/log/nginx/test.ru-access.log;
Add option for x-forward-for (real ip when behind elb)
real_ip_header X-Forwarded-For;
set_real_ip_from 172.16.0.0/12;
block access to sensitive information about git
location /.git {
deny all;
return 403;
}
location / {
First attempt to serve request as file, then
as directory, then fall back to index.html
try_files $uri $uri/ =404;
}
error_page 404
/404.html;
location = /404.html {
root /var/www/errors;
internal;
}
location ^~ /sad.svg {
alias /var/www/errors/sad.svg;
access_log off;
}
location ^~ /twitter.svg {
alias /var/www/errors/twitter.svg;
access_log off;
}
location ^~ /gitlab.svg {
alias /var/www/errors/gitlab.svg;
access_log off;
}
pass the PHP scripts to FastCGI server listening on socket
#
location ~ .php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+.php)(/.+)$;
fastcgi_pass
unix:/var/run/php-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_index index.php;
# fastcgi_param GEOIP2_LONGITUDE $geoip2_data_longitude;
# fastcgi_param GEOIP2_LATITUDE $geoip2_data_latitude;
# fastcgi_param GEOIP2_CONTINENT_CODE $geoip2_data_continent_code;
# fastcgi_param GEOIP2_CONTINENT_NAME $geoip2_data_continent_name;
# fastcgi_param GEOIP2_COUNTRY_CODE $geoip2_data_country_code;
# fastcgi_param GEOIP2_COUNTRY_NAME $geoip2_data_country_name;
# fastcgi_param GEOIP2_STATE_CODE $geoip2_data_state_code;
# fastcgi_param GEOIP2_STATE_NAME $geoip2_data_state_name;
# fastcgi_param GEOIP2_CITY_NAME $geoip2_data_city_name;
# fastcgi_param GEOIP2_POSTAL_CODE $geoip2_data_postal_code;
include fastcgi_params;
}
location ~* .(jpg|jpeg|gif|png|css|js|ico|webp|tiff|ttf|svg)$ {
expires 5d;
}
deny access to . files, for security
#
location ~ /. {
log_not_found off;
deny all;
}
location ^~ /.well-known {
allow all;
auth_basic off;
}
}
и точно такой же файл в node2 с другим портом который прослушивает nginx
В папке /site/nginx/logs создаём две директории с названиями
#cd /site/nginx/logs
#mkdir node1 node2
скачиваем образ с nginx+php-fpm
#docker pull richarvey/nginx-php-fpm:latest
создаём контейнеры
#docker run -d --net=host -v /site/nginx/www/:/var/www/html -v /site/nginx/core/node1:/etc/nginx/sites-enabled -v /site/nginx/Logs/node1:/var/log/nginx --name node1 richarvey/nginx-php-fpm
#docker run -d --net=host -v /site/nginx/www/:/var/www/html -v /site/nginx/core/node2:/etc/nginx/sites-enabled -v /site/nginx/Logs/node2:/var/log/nginx --name node2 richarvey/nginx-php-fpm
--name node2 имя контейнера. так с ним удобнее работать
аргумент -d указываем для того, чтобы отвязать
работу контейнеров от консоли, т.е.
запустить в режиме демона
параметр --net=host говорит от том,
что нужно запускать на физическом хосте,
а не в отдельной подсети(по-умолчанию).
так проще обращаться по портам.
-v проброс директории с контейнера на физический хост.
Так же при запуск необходимо сделать
автозапуск контейнеров.
для этого в документации есть описание:
https://docs.docker.com/config/containers/start-containers-automatically/
но мы запустили без параметра
docker run --restart=always
поэтому обновим конфиг с помощью команды update:
#docker update --restart=always node1
#docker update --restart=always node2
другие полезные команды:
#docker ps -a
просмотр контейнеров
#docker rm имя контейнера или id
удаление контейнера
#docker stop site
#docker start site
#docker exec --tty --interactive "имя контейнера" bash
подключение к контейнеру для запуска команд.
Запустить контейнер с автоматическим удалением (после остановки)
#docker run --rm -ti my_container my_image
Показать список образов
#docker images
Удалить нерабочие контейнеры
#docker container prune -f
Удалить лишние образы
#docker image prune -fa
Показать логи контейнера
#docker logs my_container -f
Запись опубликована в рубрике
docker,
Новости. Добавьте в закладки
постоянную ссылку.