Hapi 1: Krijoni një aplikacion të thjeshtë
Hapi 2: Krijoni kontejnerë Docker
Hapi 3: Konfiguro Nginx
Hapi 4: Vendosni aplikacionin
Kur ekzekutoni një aplikacion në ueb, zakonisht dëshironi të përfitoni sa më shumë nga burimet tuaja pa pasur nevojë të konvertoni softuerin tuaj për të përdorur ciklin e ngjarjeve me shumë fije ose komplekse. Docker, megjithatë, ofron një mënyrë të thjeshtë që ju të ngarkoni balancën e aplikacionit tuaj brenda për të përfituar sa më shumë nga burimet e serverit. Ky artikull do t'ju tregojë se si të përdorni Nginx për të ngarkuar balancën e aplikacionit tuaj të internetit duke përdorur Docker në CentOS.
Hapi 1: Krijoni një aplikacion të thjeshtë
Ne do të përdorim ndryshkun për të ndërtuar këtë aplikacion të thjeshtë. Duke supozuar se keni instaluar ndryshk, ekzekutoni cargo new webapp –bin
. Pas suksesit, do të shihni një drejtori të quajtur webapp
. Brenda webapp
, do të shihni një skedar të quajtur Cargo.toml
. Shtojini atij rreshtat e mëposhtëm:
[dependencies.iron]
version = "*"
Më pas, brenda src/main.rs
skedarit, hiqni gjithçka dhe plotësoni atë me sa vijon:
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();
}
Shënim: Mos e ndryshoni IP-në brenda aplikacionit. Ky është konfiguruar në mënyrë që Docker të mund të dëgjojë aplikacionin tuaj.
Pasi të keni mbaruar, përpiloni aplikacionin duke ekzekutuar cargo build –release
. Në varësi të serverit tuaj, mund të duhen disa minuta. Nëse nuk ka gabime, provoni aplikacionin duke ndjekur këto hapa:
- Vraponi
target/release/webapp
.
- Navigoni te
http://0.0.0.0:3000/
në shfletuesin tuaj. Zëvendësoni 0.0.0.0
me adresën IP të serverit tuaj.
Nëse gjithçka funksionoi siç duhet, do të shihni "Hello Vultr :)" në faqe.
Hapi 2: Krijoni kontejnerë Docker
Krijoni një Dockerfile
dhe plotësoni atë me sa vijon:
FROM centos:latest
MAINTAINER User <user@localhost>
RUN yum update -y
COPY ./webapp/target/release/webapp /opt/
EXPOSE 3000
WORKDIR /opt
CMD ./webapp
Ruani skedarin. Pastaj krijoni një skedar të quajtur deploy.sh
dhe plotësoni atë me sa vijon:
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
Kur ekzekutoni këtë skript, ai do të ndërtojë imazhin dhe do të vendosë kontejnerin bazuar në sasinë që keni vendosur (parazgjedhja është 5). Nëse kontejneri ekziston, ai do ta vrasë dhe do ta heqë nga regjistri përpara se të vendoset përsëri.
Tani, krijoni një skedar konfigurimi Nginx dhe plotësoni atë me sa vijon:
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;
}
}
Zëvendësoni 0.0.0.0
me adresën IP të serverit tuaj.
Rinisni Nginx duke bërë systemctl restart nginx
. Zgjidhini çdo gabim, pastaj vazhdoni në hapin tjetër.
Hapi 4: Vendosni aplikacionin
Vendosni aplikacionin duke ekzekutuar bash ./deploy.sh
.
Ju mund të kontrolloni statusin e aplikacionit tuaj me docker ps
- do të krijohen 5 imazhe që fillojnë me webapp
. Tani, lundroni te http://0.0.0.0:3000/
në shfletuesin tuaj, do të shihni përsëri mesazhin "Përshëndetje, Vultr :)".
Pra, çfarë ndryshimi bën kjo, saktësisht?
Nëse kryeni një test standard kundrejt konfigurimit të balancuesit të ngarkesës, do të vini re se më shumë nga burimet e serverit tuaj po përdoren, gjë që do të dëshironit, veçanërisht nëse aplikacioni juaj është ndërtuar në gjuhë si Node ku normalisht do të ishte me një filetim të vetëm. Nëse ndonjëherë ju duhet të përditësoni aplikacionin tuaj, mund ta bëni këtë dhe ta ekzekutoni përsëri deploy.sh
për të rindërtuar imazhin dhe për të vendosur kontejnerët tuaj.