Корак 1: Направите једноставну апликацију
Корак 2: Креирајте Доцкер контејнере
Корак 3: Конфигуришите Нгинк
Корак 4: Поставите апликацију
Када покрећете веб апликацију, обично желите да максимално искористите своје ресурсе без потребе да конвертујете свој софтвер да користи вишенитно или сложене петље догађаја. Доцкер вам, међутим, пружа једноставан начин да интерно уравнотежите оптерећење ваше апликације како бисте на најбољи начин искористили ресурсе сервера. Овај чланак ће вам показати како да користите Нгинк за балансирање оптерећења ваше веб апликације користећи Доцкер на ЦентОС-у.
Корак 1: Направите једноставну апликацију
Користићемо руст да направимо ову једноставну апликацију. Под претпоставком да имате инсталиран руст, покрените cargo new webapp –bin
. Након успеха, видећете директоријум под називом webapp
. Унутар webapp
, видећете датотеку под називом Cargo.toml
. Додајте му следеће редове:
[dependencies.iron]
version = "*"
Затим, унутар src/main.rs
датотеке, уклоните све и попуните је следећим:
extern crate iron;
use iron::prelude::*;
use iron::status;
fn main() {
Iron::new(|_: &mut Request| {
Ok(Response::with((status::Ok, "Hello Vultr :)")))
}).http("0.0.0.0:3000").unwrap();
}
Напомена: Немојте мењати ИП у оквиру апликације. Ово је конфигурисано тако да Доцкер може да слуша вашу апликацију.
Када завршите, компајлирајте апликацију тако што ћете извршити cargo build –release
. У зависности од вашег сервера, може потрајати неколико минута. Ако нема грешака, тестирајте апликацију пратећи ове кораке:
- Трчи
target/release/webapp
.
- Идите на
http://0.0.0.0:3000/
у свом претраживачу. Замените 0.0.0.0
ИП адресом вашег сервера.
Ако је све функционисало како треба, видећете „Здраво Вултр :)“ на страници.
Корак 2: Креирајте Доцкер контејнере
Направите а Dockerfile
и попуните га следећим:
FROM centos:latest
MAINTAINER User <user@localhost>
RUN yum update -y
COPY ./webapp/target/release/webapp /opt/
EXPOSE 3000
WORKDIR /opt
CMD ./webapp
Сачувајте датотеку. Затим креирајте датотеку под називом deploy.sh
и попуните је следећим:
DEFAULT_PORT=45710
APP_PORT=3000
DEPLOY=5
NAME="webapp"
docker build -t webapp:example .
for ((i=0; i<DEPLOY; i++)); do
docker kill $NAME$i ; docker rm $NAME$i
docker run --name $NAME$i -p 127.0.0.1:$(((i * 1000) + DEFAULT_PORT)):$APP_PORT -d webapp:example
done
Када покренете ову скрипту, она ће изградити слику и применити контејнер на основу количине коју сте подесили (подразумевано је 5). Ако контејнер постоји, он ће га убити и уклонити из регистра пре него што се поново примени.
Сада креирајте Нгинк конфигурациону датотеку и попуните је следећим:
upstream application {
server localhost:45710;
server localhost:46710;
server localhost:47710;
server localhost:48710;
server localhost:49710;
}
server {
listen 0.0.0.0:80;
location / {
expires 1w;
proxy_pass http://application;
proxy_redirect off;
proxy_http_version 1.1;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
}
}
Замените 0.0.0.0
ИП адресом вашег сервера.
Поново покрените Нгинк тако што ћете урадити systemctl restart nginx
. Отклоните све грешке, а затим пређите на следећи корак.
Корак 4: Поставите апликацију
Покрените апликацију тако што ћете покренути bash ./deploy.sh
.
Можете проверити статус ваше апликације помоћу docker ps
- биће креирано 5 слика које почињу са webapp
. Сада, идите до http://0.0.0.0:3000/
у свом претраживачу, поново ћете видети поруку „Здраво, Вултр :)“.
Дакле, каква је то разлика?
Ако покренете бенцхмарк тест у односу на конфигурацију балансера оптерећења, приметићете да се користи више ресурса вашег сервера, што бисте и желели, посебно ако је ваша апликација изграђена на језицима као што је Ноде где би иначе била једнонитна. Ако икада будете требали да надоградите своју апликацију, можете то учинити и поново покренути да deploy.sh
бисте поново направили слику и поставили своје контејнере.