Βήμα 1: Δημιουργήστε μια απλή εφαρμογή
Βήμα 2: Δημιουργήστε κοντέινερ Docker
Βήμα 3: Διαμορφώστε το Nginx
Βήμα 4: Ανάπτυξη εφαρμογής
Όταν εκτελείτε μια εφαρμογή Ιστού, συνήθως θέλετε να αξιοποιήσετε στο έπακρο τους πόρους σας χωρίς να χρειάζεται να μετατρέψετε το λογισμικό σας για χρήση πολυνηματικών ή πολύπλοκων βρόχων συμβάντων. Το Docker, ωστόσο, παρέχει έναν απλό τρόπο για να φορτώσετε την ισορροπία της εφαρμογής σας εσωτερικά για να αξιοποιήσετε στο έπακρο τους πόρους του διακομιστή. Αυτό το άρθρο θα σας δείξει πώς να χρησιμοποιήσετε το Nginx για να φορτώσετε την ισορροπία της εφαρμογής Ιστού σας χρησιμοποιώντας το Docker στο CentOS.
Βήμα 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();
}
Σημείωση: Μην αλλάζετε την IP εντός της εφαρμογής. Αυτό έχει ρυθμιστεί έτσι ώστε το Docker να μπορεί να ακούσει την εφαρμογή σας.
Μόλις ολοκληρώσετε, μεταγλωττίστε την εφαρμογή εκτελώντας cargo build –release
. Ανάλογα με τον διακομιστή σας, μπορεί να χρειαστούν μερικά λεπτά. Εάν δεν υπάρχουν σφάλματα, δοκιμάστε την εφαρμογή ακολουθώντας αυτά τα βήματα:
- Τρέξε
target/release/webapp
.
- Πλοηγηθείτε στο
http://0.0.0.0:3000/
στο πρόγραμμα περιήγησής σας. Αντικαταστήστε 0.0.0.0
με τη διεύθυνση IP του διακομιστή σας.
Εάν όλα λειτουργούσαν σωστά, θα δείτε το "Hello Vultr :)" στη σελίδα.
Βήμα 2: Δημιουργήστε κοντέινερ Docker
Δημιουργήστε ένα 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). Εάν το κοντέινερ υπάρχει, θα σκοτώσει και θα το καταργήσει από το μητρώο προτού αναπτυχθεί ξανά.
Τώρα, δημιουργήστε ένα αρχείο διαμόρφωσης Nginx και συμπληρώστε το με τα εξής:
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
με τη διεύθυνση IP του διακομιστή σας.
Επανεκκινήστε το Nginx κάνοντας systemctl restart nginx
. Επιλύστε τυχόν σφάλματα και, στη συνέχεια, προχωρήστε στο επόμενο βήμα.
Βήμα 4: Ανάπτυξη εφαρμογής
Αναπτύξτε την εφαρμογή εκτελώντας bash ./deploy.sh
.
Μπορείτε να ελέγξετε την κατάσταση της αίτησής σας με docker ps
- θα δημιουργηθούν 5 εικόνες που ξεκινούν με webapp
. Τώρα, μεταβείτε http://0.0.0.0:3000/
στο πρόγραμμα περιήγησής σας, θα δείτε ξανά το μήνυμα "Hello, Vultr :)".
Λοιπόν, τι διαφορά έχει αυτό ακριβώς;
Εάν εκτελέσετε μια δοκιμή αναφοράς σε σχέση με τη διαμόρφωση του εξισορροπητή φορτίου, θα παρατηρήσετε ότι χρησιμοποιούνται περισσότεροι από τους πόρους του διακομιστή σας, κάτι που θα θέλατε, ειδικά εάν η εφαρμογή σας είναι ενσωματωμένη σε γλώσσες όπως το Node, όπου κανονικά θα ήταν μονού νήματος. Εάν χρειαστεί ποτέ να αναβαθμίσετε την εφαρμογή σας, μπορείτε να το κάνετε και να το επαναλάβετε deploy.sh
για να δημιουργήσετε ξανά την εικόνα και να αναπτύξετε τα κοντέινερ σας.