Krok 1: Vytvořte jednoduchou aplikaci
Krok 2: Vytvořte kontejnery Docker
Krok 3: Nakonfigurujte Nginx
Krok 4: Nasazení aplikace
Když spouštíte webovou aplikaci, obvykle chcete ze svých zdrojů vytěžit maximum, aniž byste museli převádět software, aby používal vícevláknové zpracování nebo složité smyčky událostí. Docker však poskytuje jednoduchý způsob, jak interně vyvážit zatížení vaší aplikace, abyste co nejlépe využili prostředky serveru. Tento článek vám ukáže, jak používat Nginx k vyvážení zatížení vaší webové aplikace pomocí Dockeru na CentOS.
Krok 1: Vytvořte jednoduchou aplikaci
K vytvoření této jednoduché aplikace použijeme rez. Za předpokladu, že máte nainstalovanou rez, spusťte cargo new webapp –bin
. Po úspěchu uvidíte adresář s názvem webapp
. Uvnitř webapp
uvidíte soubor s názvem Cargo.toml
. Připojte k němu následující řádky:
[dependencies.iron]
version = "*"
Dále uvnitř src/main.rs
souboru odeberte vše a naplňte jej následujícím:
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();
}
Poznámka: Neměňte IP v rámci aplikace. To je nakonfigurováno tak, aby Docker mohl poslouchat vaši aplikaci.
Po dokončení zkompilujte aplikaci spuštěním cargo build –release
. V závislosti na vašem serveru to může trvat několik minut. Pokud nejsou žádné chyby, otestujte aplikaci podle následujících kroků:
- Spustit
target/release/webapp
.
- Přejděte
http://0.0.0.0:3000/
ve svém prohlížeči na. Nahraďte 0.0.0.0
ji IP adresou vašeho serveru.
Pokud vše fungovalo správně, uvidíte na stránce "Ahoj Vultr :)".
Krok 2: Vytvořte kontejnery Docker
Vytvořte Dockerfile
a naplňte jej následujícím:
FROM centos:latest
MAINTAINER User <user@localhost>
RUN yum update -y
COPY ./webapp/target/release/webapp /opt/
EXPOSE 3000
WORKDIR /opt
CMD ./webapp
Uložte soubor. Poté vytvořte soubor s názvem deploy.sh
a naplňte jej následujícím způsobem:
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
Když spustíte tento skript, vytvoří obraz a nasadí kontejner na základě množství, které jste nastavili (výchozí je 5). Pokud kontejner existuje, před dalším nasazením jej ukončí a odebere z registru.
Nyní vytvořte konfigurační soubor Nginx a naplňte jej následujícím:
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;
}
}
Nahraďte 0.0.0.0
ji IP adresou vašeho serveru.
Restartujte Nginx provedením systemctl restart nginx
. Vyřešte všechny chyby a pokračujte dalším krokem.
Krok 4: Nasazení aplikace
Nasaďte aplikaci spuštěním bash ./deploy.sh
.
Stav své aplikace můžete zkontrolovat pomocí docker ps
– bude vytvořeno 5 obrázků začínajících na webapp
. Nyní přejděte http://0.0.0.0:3000/
ve svém prohlížeči na, znovu se vám zobrazí zpráva „Ahoj, Vultr :)“.
Takže, jaký je v tom přesně rozdíl?
Pokud spustíte srovnávací test s konfigurací nástroje pro vyrovnávání zatížení, zjistíte, že se využívá více prostředků vašeho serveru, což byste chtěli, zvláště pokud je vaše aplikace postavena v jazycích, jako je Node, kde by normálně byla jednovláknová. Pokud budete někdy potřebovat upgradovat svou aplikaci, můžete to udělat a znovu spustit, deploy.sh
abyste znovu vytvořili bitovou kopii a nasadili své kontejnery.