Si të vendosni aplikacionet Rails duke përdorur Unicorn dhe Nginx në CentOS 6.5
Statusi: I vjetëruar
Ky artikull mbulon një version të CentOS që nuk mbështetet më. Nëse aktualisht jeni duke përdorur një server që ekzekuton CentOS 6, ne rekomandojmë shumë përmirësimin ose migrimin në një version të mbështetur të CentOS.
Arsyeja:
Shih në vend të tij:
Prezantimi
Serverët e aplikacioneve, të cilët janë krijuar me thjeshtësi, mund t'ju vënë në punë në vetëm disa minuta kur jeni duke vendosur aplikacionin tuaj në internet të bazuar në Rails. Nëse, megjithatë, dëshironi të keni më shumë kontroll mbi konfigurimin e serverit tuaj ose dëshironi të provoni diçka të re që është më fleksibël, përdorimi i një grupi komponentësh të shtresave mund t'ju ndihmojë të arrini qëllimet tuaja – pavarësisht nëse bëhet fjalë për sigurimin e vendosjes në të ardhmen ose nevoja për futjen e elementeve të palëve të treta siç janë serverët e memorizimit.
Në këtë artikull të DigitalOcean, ne do të hedhim një vështrim në montimin e një instalimi të vendosjes me shumë shtresa për të pritur aplikacione në internet Ruby të bazuara në Rails. Për këtë marrëveshje, ne do të përdorim serverin e aplikacionit Unicorn gjithnjë kaq të fuqishëm, fleksibël dhe jashtëzakonisht të suksesshëm që funksionon pas Nginx. Edhe pse ne do ta ndërtojmë këtë strukturë në një server të vetëm për qëllime demonstrimi, ju mund të përdorni lehtësisht pika të shumta për të përhapur gjërat dhe për t'u shkallëzuar lehtësisht - si horizontalisht ashtu edhe vertikalisht!
Fjalorth
1. Vendosja e aplikacionit në ueb, serverët dhe rolet e tyre
- Serveri i aplikacionit Unicorn
- Serveri Nginx HTTP që funksionon si një përfaqësues i kundërt i frontit
2. Përgatitja e serverit të vendosjes
- Përditësimi dhe përgatitja e sistemit operativ
- Konfigurimi i Mjedisit dhe Railave Ruby
- Instalimi i Nginx
- Instalimi i Unicorn
3. Përgatitja e aplikacioneve të binarëve për vendosje
- Krijimi i një aplikacioni shembullor
- Ngarkimi i kodit tuaj burimor
4. Konfigurimi i serverëve
- Njëbrirësh
- Nginx
- Menaxhimi i serverëve
5. Lexim i mëtejshëm
Vendosja e aplikacionit në ueb, serverët dhe rolet e tyre
Kur bëhet fjalë për vendosjen e aplikacioneve në internet, zakonisht përfshihen një mori aplikacionesh, të vendosura në shtresa dhe që punojnë me njëri-tjetrin. Ky lloj konfigurimi i vendosjes në botën reale ndryshon shumë nga përdorimi i një serveri të vetëm zhvillimi, i cili është krijuar për t'u përdorur vetëm për qëllime testimi pasi ato nuk mund të punojnë nën ngarkesat e trafikut aktual të faqes në internet për shkak të mungesës së funksionalitetit dhe veçorive.
Duke folur për veçoritë, duhet të theksohet se ka një pjesë të vogël të serverëve të njohur për të zgjedhur, me secilin prej tyre që ofron funksione të ndryshme: disa duke u fokusuar në thjeshtësi, disa shpejtësi dhe disa pak nga gjithçka me mundësinë për të konfiguruar opsionet për t'iu përshtatur nevojave komplekse të prodhimit.
Në këtë artikull, zgjedhja jonë e serverit të aplikacionit është Unicorn. Unicorn është një server aplikacioni i jashtëzakonshëm që përmban aplikacionin tuaj Rails për të përpunuar kërkesat hyrëse, mundësisht pasi t'i filtroni dhe dërgoni nga një server HTTP i përparmë siç është Nginx.
Serveri Nginx HTTP, nga ana tjetër, është projektuar nga themeli për të vepruar si një server në internet me shumë qëllime, me pamje të përparme. Është i aftë të shërbejë skedarë statikë (p.sh. imazhe, skedarë teksti, etj.) jashtëzakonisht mirë, të balancojë lidhjet dhe të merret me përpjekje të caktuara për shfrytëzime. Ai vepron si pika e parë hyrëse e të gjitha kërkesave dhe ia kalon ato Unicorn që aplikacioni në ueb të përpunojë dhe të kthejë një përgjigje.
Shënim: Për të mësuar rreth serverëve të ndryshëm të aplikacioneve në ueb Ruby dhe për të kuptuar se çfarë është \Rack, shikoni artikullin tonë Një Krahasim i serverëve (Rack) të Uebit për Aplikacionet Ueb Ruby.
Serveri i aplikacionit Unicorn
Unicorn është një server aplikacioni në ueb shumë i pjekur për aplikacione në internet të bazuara në Ruby/Rack. Është i plotësuar, por ai mohon nga dizajni që të përpiqet të bëjë gjithçka. Drejtori i Unicorn është duke bërë atë që duhet bërë nga një server aplikacioni në internet dhe duke deleguar pjesën tjetër të përgjegjësive.
Procesi master i Unicorn krijon punëtorë, sipas kërkesave tuaja, për t'i shërbyer kërkesave. Ky proces gjithashtu monitoron punëtorët në mënyrë që të parandalojë memorien dhe problemet tronditëse të lidhura me procesin. Çfarë do të thotë kjo për administratorët e sistemit është se do të vrasë një proces nëse, për shembull, kërkon shumë kohë për të përfunduar një detyrë ose ndodhin probleme me kujtesën.
Siç u përmend më lart, një nga fushat në të cilat Unicorn delegon detyra është përdorimi i sistemit operativ për balancimin e ngarkesës. Kjo lejon që kërkesat mos të grumbullohen kundër punëtorëve të zënë të krijuar.
Serveri Nginx HTTP që funksionon si një përfaqësues i kundërt i frontit
Nginx është një server në internet/(e kundërt)-proxy me performancë shumë të lartë. Ka arritur popullaritetin e tij për shkak të peshës së lehtë, relativisht të lehtë për t'u punuar dhe të lehtë për t'u zgjeruar (me shtesa/shtesa). Falë arkitekturës së tij, ai është në gjendje të trajtojë shumë kërkesa (praktikisht të pakufizuara), të cilat - në varësi të aplikacionit tuaj ose ngarkesës së faqes në internet - mund të jenë vërtet të vështira për t'u trajtuar duke përdorur disa alternativa të tjera më të vjetra.
Mos harroni: \Trajtimi” i lidhjeve teknikisht do të thotë të mos i lëshoni ato dhe të jeni në gjendje t'u shërbeni atyre me diçka. Ju ende keni nevojë që aplikacioni juaj dhe baza e të dhënave të funksionojnë mirë në mënyrë që Nginx t'u shërbejë klientëve përgjigje që nuk janë mesazhe gabimi.
Për të mësuar më shumë rreth Nginx, mund të vizitoni faqen e saj zyrtare të vendosur në nginx.com.
Përgatitja e serverit të vendosjes
Në këtë seksion, ne do të kryejmë hapat e mëposhtëm:
- Përditësoni sistemin operativ
- Merrni mjetet e nevojshme bazë për vendosje
- Instaloni Ruby, Rails dhe librari
- Instaloni aplikacionin (p.sh. Unicorn) dhe serverin HTTP (Nginx)
Përditësimi dhe përgatitja e sistemit operativ
Për të instaluar Ruby dhe aplikacionin tjetër të nevojshëm (p.sh. serverët tanë), së pari duhet të përgatisim pikën CentOS të transportuar minimalisht dhe ta pajisim atë me disa mjete zhvillimi të nevojshme gjatë rrugës.
Ekzekutoni komandën e mëposhtme për të përditësuar mjetet e paracaktuara të CentOS VPS tuaj:
yum -y update
# This command will update all the base applications
# that come with CentOS by default. Which are mostly
# reserved for use by the operating system.
Instaloni paketën që përmban mjetet e zhvillimit duke ekzekutuar komandën e mëposhtme:
yum groupinstall -y 'development tools'
# With more recent versions of CentOS, such as 6.5 in our case,
# you can simply run:
# yum groupinstall -y development
# instead.
# This bundle of applications contains various tools
# Such as: gcc, make, automake, binutils, git etc.
Disa nga paketat që na duhen për këtë tutorial (p.sh. libyaml-devel, nginx etj.) nuk gjenden brenda depove zyrtare të CentOS. Për të thjeshtuar gjërat dhe për të mos u marrë me instalimin manual të tyre, ne do të shtojmë depon e softuerit EPEL për menaxherin e paketave YUM.
# Enable EPEL Repository
sudo su -c 'rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm'
# Update everything, once more.
yum -y update
Më në fund, duhet të marrim curl-devel
dhe disa mjete dhe biblioteka të tjera për këtë tutorial (p.sh. Rails ka nevojë për sqlite-devel).
Për t'i instaluar ato, ekzekutoni sa më poshtë:
yum install -y curl-devel nano sqlite-devel libyaml-devel
Vendosja e mjedisit dhe binarëve të rubinit
Shënim: Ky seksion është një përmbledhje e artikullit tonë të dedikuar Si të instaloni Ruby 2.1.0 në CentOS 6.5.
Ne do të përdorim Ruby Version Manager (RVM) për të shkarkuar dhe instaluar një përkthyes Ruby.
Ekzekutoni dy komandat e mëposhtme për të instaluar RVM dhe për të krijuar një mjedis sistemi për Ruby:
gpg --keyserver hkp://keys.gnupg.net --recv-keys D39DC0E3
\curl -sSL https://get.rvm.io | bash -s stable
source /etc/profile.d/rvm.sh
Më në fund, për të përfunduar instalimin e Ruby në sistemin tonë, le të marrim RVM për të shkarkuar dhe instaluar versionin 2.1.0 të Ruby:
rvm reload
rvm install 2.1.0
Meqenëse Rails ka nevojë para së gjithash për një përkthyes JavaScript për të punuar, do të na duhet gjithashtu të konfigurojmë Node.js
. Për këtë qëllim, ne do të përdorim menaxherin e paracaktuar të paketave të sistemit YUM.
Ekzekutoni sa vijon për të shkarkuar dhe instaluar nodejs
duke përdorur yum
:
yum install -y nodejs
Ekzekutoni komandën e mëposhtme për të shkarkuar dhe instaluar rails
duke përdorur gem
:
gem install bundler rails
Instalimi i Nginx
Meqenëse e kemi të aktivizuar depo EPEL, është e mundur të merrni Nginx duke përdorur yum.
Ekzekutoni sa vijon për të shkarkuar dhe instaluar Nginx duke përdorur yum
:
yum install -y nginx
Shënim: Ne do ta konfigurojmë këtë mjet në seksionet e mëposhtme.
Instalimi i Unicorn
Ka disa mënyra për të shkarkuar me lehtësi Unicorn. Meqenëse është një varësi e lidhur me aplikacionin, mënyra më logjike është të përdorni RubyGems.
Ekzekutoni sa vijon për të shkarkuar dhe instaluar Unicorn duke përdorur gem
:
gem install unicorn
Shënim: Do të shohim se si të punojmë me këtë mjet në seksionet vijuese.
Përgatitja e aplikacioneve të Rails për vendosje
Shënim: Në këtë seksion, ne do të punojmë me një aplikacion shumë të thjeshtë Ruby On Rails si shembull. Për vendosjen aktuale të aplikacionit tuaj, duhet të ngarkoni bazën tuaj të kodeve dhe të siguroheni që të instaloni të gjitha varësitë e saj (p.sh. pako
).
Krijimi i një shembulli të aplikacionit
Le të fillojmë me krijimin e një aplikacioni shumë bazë Rails brenda drejtorisë sonë të shtëpisë për të shërbyer me Unicorn.
Ekzekutoni komandën e mëposhtme për të marrë Rails të krijojë një aplikacion të ri të quajtur \my_app:
# Create a sample Rails application
cd /var
mkdir www
cd www
rails new my_app
# Enter the application directory
cd my_app
# Create a sample resource
rails generate scaffold Task title:string note:text
# Create a sample database
RAILS_ENV=development rake db:migrate
RAILS_ENV=production rake db:migrate
# Create a directory to hold the PID files
mkdir pids
Për të testuar nëse aplikacioni juaj është vendosur saktë dhe se gjithçka po funksionon mirë, futni direktorinë e aplikacionit dhe drejtoni një server të thjeshtë me rails s
:
# Enter the application directory
cd /var/www/my_app
# Run a simple server
rails s
# You should now be able to access it by
# visiting: http://[your droplet's IP]:3000/tasks
# In order to terminate the server process,
# Press CTRL+C
Ngarkimi i kodit tuaj burimor
Për vendosjen aktuale, sigurisht që do të dëshironi të ngarkoni bazën tuaj të kodit në server. Për këtë qëllim, mund të përdorni ose SFTP ose një mjet grafik, siç është FileZilla, për të transferuar dhe menaxhuar skedarët në distancë në mënyrë të sigurt. Po kështu, mund të përdorni Git dhe një depo qendrore si Github për të shkarkuar dhe konfiguruar kodin tuaj.
- Për të mësuar rreth punës me SFTP, shikoni artikullin: Si të përdorni SFTP.
- Për të mësuar rreth FileZilla, shikoni artikullin mbi temën: Si të përdorni FileZilla.
Konfigurimi i serverëve
Njëbrirësh
Unicorn mund të konfigurohet në disa mënyra. Për këtë tutorial, duke u fokusuar në elementët kryesorë, ne do të krijojmë një skedar nga e para, i cili do të përdoret nga Unicorn kur fillon procesi i demonit të serverit të aplikacionit.
Hapni një dokument bosh unicorn.rb
, i cili do të ruhet brenda drejtorisë config/
:
nano config/unicorn.rb
Vendosni bllokun e mëposhtëm të kodit, duke e modifikuar sipas nevojës:
# Set the working application directory
# working_directory "/path/to/your/app"
working_directory "/var/www/my_app"
# Unicorn PID file location
# pid "/path/to/pids/unicorn.pid"
pid "/var/www/my_app/pids/unicorn.pid"
# Path to logs
# stderr_path "/path/to/log/unicorn.log"
# stdout_path "/path/to/log/unicorn.log"
stderr_path "/var/www/my_app/log/unicorn.log"
stdout_path "/var/www/my_app/log/unicorn.log"
# Unicorn socket
listen "/tmp/unicorn.[app name].sock"
listen "/tmp/unicorn.myapp.sock"
# Number of processes
# worker_processes 4
worker_processes 2
# Time-out
timeout 30
Ruani dhe dilni duke shtypur CTRL+X
dhe duke konfirmuar me Y
.
Shënim: Për të testuar thjesht aplikacionin tuaj me Unicorn, mund të ekzekutoni unicorn_rails
brenda drejtorisë së aplikacionit.
Nginx
Më pas, duhet t'i tregojmë Nginx-it se si të flasë me Unicorn. Për këtë qëllim, mjafton në këtë nivel të redaktoni skedarin e konfigurimit të paracaktuar: default.conf
dhe të lini nginx.conf
siç ofrohet – i cili tashmë është vendosur të përfshijë parazgjedhjen konfigurimet.
nano /etc/nginx/conf.d/default.conf
Zëvendësoni përmbajtjen e skedarëve me ato nga poshtë, duke ndryshuar përsëri pjesët e nevojshme për t'iu përshtatur nevojave tuaja:
upstream app {
# Path to Unicorn SOCK file, as defined previously
server unix:/tmp/unicorn.myapp.sock fail_timeout=0;
}
server {
listen 80;
server_name localhost;
# Application root, as defined previously
root /root/my_app/public;
try_files $uri/index.html $uri @app;
location @app {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://app;
}
error_page 500 502 503 504 /500.html;
client_max_body_size 4G;
keepalive_timeout 10;
}
Ruani dhe dilni duke shtypur CTRL+X dhe duke konfirmuar me Y.
Shënim: Për të mësuar më shumë rreth Nginx, ju lutemi referojuni Si të konfiguroni serverin në internet Nginx në një VPS.
Menaxhimi i serverëve
Pasi të kemi përfunduar konfigurimin e të dy serverëve, është koha për të hyrë në internet!
Le të fillojmë Unicorn dhe ta ekzekutojmë atë si një demon duke përdorur skedarin e konfigurimit:
# Make sure that you are inside the application directory
# i.e. /my_app
unicorn_rails -c config/unicorn.rb -D
# You can set the environment by chaining -E flag
# i.e. unicorn_rails .. .. .. -E [env. name]
Tjetra, ne jemi gati të ringarkojmë dhe rifillojmë Nginx:
service nginx restart
Dhe kjo eshte! Tani mund të kontrolloni vendosjen tuaj duke shkuar te adresa IP e pikës suaj (ose emri i domenit të lidhur me të).
http://[Your droplet's IP addr]/tasks
# Listing tasks
# Title Note
# New Task
Leximi më tej
Firewall:
Vendosja e një muri zjarri duke përdorur tabelat IP
Sigurimi i SSH:
Si të mbroni SSH me fail2ban në Ubuntu
Krijimi i sinjalizimeve:
Si të dërgoni alarme me postë elektronike në një CentOS VPS për monitorimin e sistemit
Monitoroni dhe shikoni regjistrat e aksesit të serverit çdo ditë:
Si të instaloni dhe përdorni Logwatch Log Analyzer and Reporter
Optimizimi i punëtorëve Unicorn:
Si të optimizoni punëtorët e Unicorn në një aplikacion Ruby on Rails