рд░реВрдмреА рдСрди рд░реЗрд▓реНрд╕ред 15 рдорд┐рдирдЯ рдореЗрдВ VDS рдкрд░ рдПрдХ рд╕реНрдерд╛рдиреАрдп рд╣реЛрд╕реНрдЯ рд╕реЗ

рд╢реБрдн рджрд┐рди, рд╣рдмреНрд░реЛрд╕реНрдХ!

15 рдорд┐рдирдЯ рдореЗрдВ рд╡реАрдбреАрдПрд╕ рдореЗрдВ рдХреИрд╕реЗ рдЬрд╛рдПрдВ рдФрд░ рдирдВрдЧреЗрдХреНрд╕, рдпреВрдирд┐рдХреЙрд░реНрди рдФрд░ рдХреИрдкрд┐рд╕реНрдЯреНрд░рд╛рдиреЛ рдХреЗ рдЕрдзреНрдпрдпрди рдореЗрдВ рдЧрд╣рд░рд╛рдИ рд╕реЗ рди рдЬрд╛рдПрдВред рдХрдЯ рдХреЗ рддрд╣рдд рдХрджрдо рд╕реЗ рдХрджрдо рдирд┐рд░реНрджреЗрд╢ред

рдореИрдВ рдЕрдкрдиреЗ рдХрдИ рджреЛрд╕реНрддреЛрдВ рдХреЗ PHP рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рд╕реЗ рд▓рдЧрд╛рддрд╛рд░ рд╕реБрдирддрд╛ рд╣реВрдВ рдХрд┐ рд╡реЗ рд╕рд┐рд░реНрдл рд░реЗрд▓ рдкрд░ рдирд╣реАрдВ рдЬрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рдХреНрдпреЛрдВрдХрд┐ рд╕рд╛рдорд╛рдиреНрдп рдирд┐рдпрдВрддреНрд░рдг рдХрдХреНрд╖ рдХреЗ рд╕рд╛рде рдкрд░реНрдпрд╛рдкреНрдд рдФрд░ рд╕рд╕реНрддреА рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдирд╣реАрдВ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рд╕рд╡рд╛рд▓ рд╣реИ рдХрд┐ рдпрд╣ рдХрд╣рд╛рдБ рд╣реЛрд╕реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдпрджрд┐ рдЖрдк рд░реЗрд▓ рдкрд░ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рддреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣рдм рдкрд░ рд╕реМ рдмрд╛рд░ рдЙрдард╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛ред рдЬрдм рдореИрдВрдиреЗ рдкрд╣рд▓реА рдмрд╛рд░ рд░реЗрд▓ рдкрд░ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдирд╛рдИ, рддреЛ рдореБрдЭреЗ рдПрдХ рд╣реЛрд╕реНрдЯрд░ рдХреА рддрд▓рд╛рд╢ рдереА, рд▓реЗрдХрд┐рди рдпрд╣ рднреА рдмрд╛рдд рдирд╣реАрдВ рдереА, рдореЗрд░реЗ рд▓рд┐рдП рдореБрдЦреНрдп рдмрд╛рдд рдПрдХ рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдкрд░ рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреА рд╢реНрд░рдорд╕рд╛рдзреНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдереАред рдореИрдВрдиреЗ VDS рдЦрд░реАрджрдиреЗ рдФрд░ рдЗрд╕реЗ рдПрдХ рдкрд░реАрдХреНрд╖рдг рд╕рд░реНрд╡рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред рд╡реАрдбреАрдПрд╕ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдФрд░ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЗрд╕ рддрдереНрдп рд╕реЗ рдЬрдЯрд┐рд▓ рдереА рдХрд┐ рдореБрдЭреЗ рдП рд╕реЗ рдЬреЗрдб рддрдХ рдирд┐рд░реНрджреЗрд╢ рдирд╣реАрдВ рдорд┐рд▓рд╛ рдерд╛, рдФрд░ рдЪреВрдВрдХрд┐, рдореЛрдЯреЗ рддреМрд░ рдкрд░ рдмреЛрд▓ рд░рд╣рд╛ рд╣реВрдВ, рдореИрдВ рди рдХреЗрд╡рд▓ рд╡реАрдбреАрдПрд╕ рдХреЗ рд╡рд┐рдиреНрдпрд╛рд╕ рдореЗрдВ рдЬреНрдЮрд╛рди рдХреЗ рд╕рд╛рде рдЪрдордХрддрд╛ рдерд╛, рдмрд▓реНрдХрд┐ рдирдЧреНрдиреЗрдХреНрд╕ рдФрд░ рдпреВрдирд┐рдХреЙрд░реНрди рдФрд░ рднреА рдмрд╣реБрдд рдХреБрдЫред рдЕрддреНрдпрдзрд┐рдХ рд▓реЛрдб рдХрд┐рдП рдЧрдП рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ 200-рд▓рд╛рдЗрди рдХреЙрдиреНрдлрд┐рдЧрд░ рдФрд░ рдмрд╣реБрдд рдЙрд▓рдЭрди рд╡рд╛рд▓реА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рдереА, рдореЗрд░рд╛ рдХрд╛рдо рдХреЗрд╡рд▓ рд╕рд╛рдЗрдЯ рдХреЛ рдХрдо рд╕реЗ рдХрдо рдкреИрд╕реЗ рдФрд░ рд╕рдордп рдХреЗ рд▓рд┐рдП рд▓реЙрдиреНрдЪ рдХрд░рдирд╛ рдерд╛ рдФрд░ рдЗрд╕ VDS рдХреЗ рд╕рд╛рде рдЧреНрд░рд╛рд╣рдХ рдХреЛ рджреЗрдирд╛ рдерд╛ред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрд╕ рдирд┐рд░реНрджреЗрд╢ рдХреЛ рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬрд┐рд╕рдХреА рдореБрдЭреЗ рдмрд╣реБрдд рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА, рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рдХрдИ рд╢реБрд░реБрдЖрддреА рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд░реЗрд▓ рдкрд░ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ рдФрд░ рдЙрди PHP рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреНрд░реЛрддреНрд╕рд╛рд╣рди рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░реЗрдЧрд╛ рдЬреЛ рдЕрднреА рднреА рд╕рдВрджреЗрд╣ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрд╕ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВ рдкрдЯрд░рд┐рдпреЛрдВ рдкрд░ рд░реВрдмреА рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдФрд░ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВред рдпрд╣ рдореБрдЭреЗ рд╡рд╣реА рд▓рдЧрддрд╛ рд╣реИ рдЬрд┐рд╕рдиреЗ рдПрдХ рдорд░реНрд╕рд┐рдбреАрдЬ рд╕реЗ рдЗрдВрдЬрди рдХреЛ рдПрдХ рдкреИрд╕рд╛ рдореЗрдВ рд░рдЦрд╛ред рдпрд╣ рдбрд░рд╛рд╡рдирд╛ рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рднреА рд╡реИрд╕рд╛ рдирд╣реАрдВ рд╣реИред

рддреЛ рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ

рдЖрдкрдХреЛ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:

рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП: рд╕рднреА рдХрд╛рд░реНрд░рд╡рд╛рдИ, рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЙрдмрдВрдЯреВ рд╕рд░реНрд╡рд░ 11.10 рдХреЗ рд╕рд╛рде рд╡реАрдбреАрдПрд╕ рдкрд░ рдХреА рдЬрд╛рддреА рд╣реИрдВред

рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ рдФрд░ nginx рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ

рд╣рдо рдЯрд░реНрдорд┐рдирд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ ssh рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдорд╢реАрди рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ:
:~ ssh root@<ip >

рд╣рдо рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА рд╕реЗ рдирд╛рдЬрд╝рд┐рдирдХреНрд╕ рдбрд╛рд▓рддреЗ рд╣реИрдВ:
:~ apt-get install nginx

рд╣рдо рдЕрдкрдиреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд╡рд┐рдиреНрдпрд╛рд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдмрдирд╛рддреЗ рд╣реИрдВ, рдЕрдЪрд╛рдирдХ рдЙрдирдореЗрдВ рд╕реЗ рдХрдИ рд╣реЛрдВрдЧреЗ:
:~ mkdir /etc/nginx/sites

рд╣рдо рдкрд╣рд▓реЗ рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдиреНрдпрд╛рд╕ рд▓рд┐рдЦ рд░рд╣реЗ рд╣реИрдВред рдореИрдВ рд╡рд┐рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕реНрд╡рд╛рдж рдХрд╛ рдорд╛рдорд▓рд╛ рд╣реИ, рдЖрдк рдХрдо рд╕реЗ рдХрдо рдорд╛рдирдХ рдиреИрдиреЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
:~ vi /etc/nginx/sites/first_app.conf

рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд╛рдордЧреНрд░реА рдпрд╣рд╛рдБ рд▓рд┐рдЦрддреЗ рд╣реИрдВ:
server {
listen 80;
# , .
# , , .
server_name first_app.com;
root /home/first_app/web-app/public;
client_max_body_size 32m;
location / {
try_files $uri @unicorn;
}
location @unicorn {
proxy_set_header Client-Ip $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_pass unix:/home/first_app/web-app/tmp/sockets/unicorn.sock;
}
}


рдЕрдм рд╣рдо рд╕реНрд╡рдпрдВ nginx рд╕рд░реНрд╡рд░ рдХреЗ рдХреЛрдлрд╝рд┐рдЧ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдиреАрдЪреЗ рдкреВрд░реНрдг рдХреЙрдиреНрдлрд╝рд┐рдЧ рдлрд╝рд╛рдЗрд▓ рд╣реИ:
user nobody nogroup;
worker_processes 4;
pid /var/run/nginx.pid;

events {
worker_connections 4096;
# multi_accept on;
}

http {

##
# Basic Settings
##

sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
# server_tokens off;

# server_names_hash_bucket_size 64;
# server_name_in_redirect off;

include /etc/nginx/mime.types;
default_type application/octet-stream;

##
# Logging Settings
##

log_format main '$remote_addr - $remote_user[$time_local] "$request"'
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "http_x_forwarded_for"'

access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;

##
# Gzip Settings
##

gzip on;
gzip_disable "msie6";

# gzip_vary on;
gzip_proxied any;
# gzip_comp_level 6;
# gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;

##
# Virtual Host Configs
##

include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites/*.conf;
}

#mail {
# # See sample authentication script at:
# # wiki.nginx.org/ImapAuthenticateWithApachePhpScript
#
# # auth_http localhost/auth.php;
# # pop3_capabilities "TOP" "USER";
# # imap_capabilities "IMAP4rev1" "UIDPLUS";
#
# server {
# listen localhost:110;
# protocol pop3;
# proxy on;
# }


VDS рд╢реБрд░реВ рд╣реЛрдиреЗ рдкрд░ рдЕрдм рд╣рдореЗрдВ рд╕реНрд╡рддрдГ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП nginx рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд░рдирд░ рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:
:~ apt-get install runit
:~ mkdir /etc/sv/nginx

Nginx рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ:
:~ vi /etc/sv/nginx/run

рдФрд░ рдЗрд╕реЗ рд▓рд┐рдЦреЗрдВ:
#!/bin/sh
exec 2>&1
exec /usr/sbin/nginx

рд╣рдо рдЗрд╕реЗ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдмрдирд╛рддреЗ рд╣реИрдВ:
:~ chmod +x /etc/sv/nginx/run

рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдкреВрд░реА рдмрд╛рдд рдХрд╛рдо рдХреА рд╣реИ:
:~ /etc/sv/nginx/run
:~ ps aux | grep nginx


рдпрджрд┐ рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИ, рддреЛ рдЖрдкрдХреЛ 4 рд░рдирд┐рдВрдЧ рд╡рд░реНрдХрд░_рдкреНрд░реЛрд╕реЗрд╕ рдФрд░ рдиреЗрдЧрдиреЗрдХреНрд╕ рд╕рд░реНрд╡рд░ рдЪрд▓ рд░рд╣реЗ рджрд┐рдЦрд╛рдИ рджреЗрдВрдЧреЗред рд╕рдорд╕реНрдпрд╛ рдХреЗрд╡рд▓ рддрднреА рд╣реЛ рд╕рдХрддреА рд╣реИ рдЬрдм Apache VDS рдкрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рддреЛ рдпрд╣ рдореЗрд░реЗ рд╕рд╛рде рдерд╛, рдЬреЛ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рдПрдХ рд╡реНрдпрд╕реНрдд 80 рдмрдВрджрд░рдЧрд╛рд╣ рдХрд╛ рдорддрд▓рдм рд╣реИред рдЕрдкрд╛рдЪреЗ рдХреЛ рдзреНрд╡рд╕реНрдд рдХрд░рдиреЗ рдФрд░ рдЗрд╕рдХреА рд╕рднреА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдорд╛рд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рдорд╣рд╕реВрд╕ рдХрд░реЗрдВред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЖрдк рдЕрдЪреНрдЫрд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рд╣рдо рдЖрдЧреЗ рднреА рдЬрд╛рд░реА рд░рдЦреЗрдВрдЧреЗред рдпрд╣ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд▓реЙрдиреНрдЪ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд┐рдореНрд▓рд┐рдВрдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд╣реБрдЖ рд╣реИ:
:~ ln -s /etc/sv/nginx/ /etc/service

рдмрдзрд╛рдИ рдирдЧреАрдиреЗрдХреНрд╕ рд╕реНрдерд╛рдкрд┐рдд рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЙрдЪрд┐рдд рдЙрдкрдХрд░рдг рдХреЗ рд╕рд╛рде рд╕рдм рдХреБрдЫ рдХрд░рдиреЗ рдореЗрдВ рд▓рдЧрднрдЧ 2 рдорд┐рдирдЯ рдХрд╛ рд╕рдордп рд▓рдЧреЗрдЧрд╛ред рдЖрдкрдХреЛ рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмрдирд╛рдиреЗ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рддрд╣рдд рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:
:~ adduser first_app
:~ vi home/itnotes/.bashrc


рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:
export RAILS_ENV=production

RVM рдФрд░ RubyGems рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ

рдЙрд╕реА рдЯрд░реНрдорд┐рдирд▓ рдореЗрдВ рд╣рдо рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВ:
:~ apt-get install curl
:~ bash -s stable < <(curl -s raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer)
:~ apt-get install build-essential bison openssl libreadline6 libreadline6-dev zlib1g zlib1g-dev libssl-dev libyaml-dev libsqlite3-0 libsqlite3-dev sqlite3 libxml2-dev libxslt-dev autoconf libc6-dev ncurses-dev
:~ gpasswd -a first_app rvm
:~ apt-get install rubygems
:~ rvm use --create ruby-1.9.2-p318@first_app
:~ rvm ruby-1.9.2-p318@global gem install bundler
:~ mkdir /home/first_app/web-app
:~ apt-get install git-core git-gui git-doc


рдпрд╣рд╛рдВ рд╣рдо рдХрд░реНрд▓ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдлрд┐рд░ рдЖрд░рд╡реАрдПрдо рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдкреИрдХреЗрдЬ рдХрд╛ рдПрдХ рдкреИрдХреЗрдЯ рд╡рд┐рддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд░реВрдмреА, рд╕рд╛рдЗрдХреНрд▓рд╛рдЗрдЯ, рдЖрджрд┐ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрддреЗ рд╣реИрдВред рдЙрд╕рдХреЗ рдмрд╛рдж, Rubygems рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ, рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рд░рддреНрди рдмрдирд╛рдПрдБ, рд╕рднреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдВрдбрд▓рд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ рдФрд░ рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдШрд░ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рдПрдВред рдЧрд┐рдЯ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВред
рд╣рдо рдЬрдбрд╝ рдХреЛ рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВ, рдкреВрд░рд╛ sshред

рд░реВрдмреА рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ

рд╣рдо ssh рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдиреАрдЪреЗ рдЬрд╛рддреЗ рд╣реИрдВ:
:~ ssh first_app@<IP >
:~ rvm install ruby-1.9.2-p318

рд╣рдо рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рд╕реЗ рдЬрдбрд╝ рдХреЗ рдиреАрдЪреЗ рдЪрд▓реЗ рдЬрд╛рддреЗ рд╣реИрдВред

рдбреАрдмреА, рдХреИрдкрд┐рд╕реНрдЯреНрд░рд╛рдиреЛ рдФрд░ рдпреВрдирд┐рдХреЙрд░реНрди

рдЕрдзрд┐рдХрд╛рдВрд╢ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, mysql рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рдореЗрд░реА рдирд┐рдЬреА рд░рд╛рдп рд╣реИ рдХрд┐ рдпрджрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдбрд╝реА рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╡реЗрдмрд╕рд╛рдЗрдЯ рдЦреБрдж рд╡рд╣рд╛рдВ рдХреБрдЫ рдХрд░рддреА рд╣реИ, рддреЛ рдЙрд╕реЗ рдЗрд╕ рддрд░рд╣ рдХреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, sqlite рдЙрд╕рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдЧрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо рдмрд╣реБрдд рд╕рдордп рднреА рдмрдЪрд╛рдПрдВрдЧреЗред рдлрд┐рд░ mysql рдкрд░ рдЬрд╛рдПрдВ, рдпрджрд┐ рдЖрдкрдХреЛ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдк рдЗрд╕реЗ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХреЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдХрд┐рд╕реА рднреА рдЙрдк рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рддреБрд░рдВрдд рдХреИрдкрд┐рд╕реНрдЯреНрд░рд╛рдиреЛ рдкрд░ рдЬрд╛рдПрдВред
рдЬреЗрдордлрд╛рдЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:
group :development do
...
gem 'capistrano-deploy', '~> 0.1.1', :require => nil
end
group :production do
...
gem 'unicorn', '~> 3.6.2', :require => nil
end


рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдЬрдбрд╝ рдореЗрдВ рдПрдХ Capfile рдмрдирд╛рдПрдБ:
$:.unshift(File.expand_path('./lib', ENV['rvm_path']))
require "rvm/capistrano"
set :rvm_ruby_string, '1.9.2'

require 'capistrano-deploy'
use_recipes :git, :rails, :bundle, :unicorn

server '<IP >', :web, :app, :db, :primary => true
set :user, 'first_app'
set :deploy_to, '/home/first_app/web-app'
set :repository, 'git@github.com:<>'

after 'deploy:update', 'bundle:install'
after 'deploy:restart', 'unicorn:stop'


рдПрдХ рдЫреЛрдЯреА рд╕реА рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рд╣реИ, рдпрджрд┐ рдЖрдк, рдореЗрд░реА рддрд░рд╣, рдЬреАрдЖрдИрдЯреАрдмреА рдкрд░ рдПрдХ рдЧрд┐рдЯ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╕реНрдерд┐рдд рд╣реИ, рддреЛ рд╣рдореЗрдВ рд╡реАрдбреАрдПрд╕ рдкрд░ рдмрдирд╛рдП рдЧрдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдиреАрдЪреЗ рд╕реЗ рдЖрд░рдПрд╕рдП рдХреАрдЬ рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛ рдирд╣реАрдВ рднреВрд▓рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдХреИрд╕реЗ рдХрд░реЗрдВ рдЗрд╕ рдкрд░ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд▓рд┐рдЦрд╛ рд╣реИ github.comред

рдЯрд░реНрдорд┐рдирд▓ рдореЗрдВ рд╣рдо рд▓рд┐рдЦрддреЗ рд╣реИрдВ:
:~ mkdir /etc/sv/first_app_unicorn
:~ touch /etc/sv/first_app_unicorn/run
:~ chmod +x /etc/sv/first_app_unicorn/run
:~ vi /etc/sv/first_app_unicorn/run


рд╣рдо рдЗрд╕ рдлрд╛рдЗрд▓ рдХреЛ рдЗрд╕ рдлрд╛рдЗрд▓ рдореЗрдВ рд▓рд┐рдЦрддреЗ рд╣реИрдВ:
#!/bin/sh
exec 2>&1
export USER=first_app
export HOME=/home/$USER
export RAILS_ENV=production
UNICORN="/usr/local/rvm/bin/rvm ruby-1.9.2-p318@first_app exec bundle exec unicorn"
UNICORN_CONF=/etc/unicorn/first_app.rb
cd $HOME/web-app
exec chpst -u $USER:$USER $UNICORN -c $UNICORN_CONF


рдЗрд╕рдХреЗ рдмрд╛рдж рдлрд╛рдЗрд▓ /etc/unicorn/first_app.rb рдореЗрдВ рднрд░реЗрдВ:
worker_processes 4
working_directory "/home/first_app/web-app"
listen "/home/first_app/web-app/tmp/sockets/unicorn.sock", :backlog => 64
pid "/home/first_app/web-app/tmp/pids/unicorn.pid"
stderr_path "/home/first_app/web-app/log/unicorn.stderr.log"
stdout_path "/home/first_app/web-app/log/unicorn.stdout.log"


рдЕрдВрддрд┐рдо рд╕реНрдерд╛рди:
ln -s /etc/sv/first_app_unicorn /etc/service

рдбреЛрдореЗрди рд╕реЗрдЯрд┐рдВрдЧ

рдЕрдкрдиреЗ VDS рдХреЗ IP рдХреЛ рджрд░реНрд╢рд╛рддреЗ рд╣реБрдП, subdomains @ рдФрд░ www рдХреЗ рд▓рд┐рдП, A: рдХреЗ 2 рд░рд┐рдХреЙрд░реНрдб рдЬреЛрдбрд╝рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рд╕рд░реНрд╡рд░ рд╕реЗрдЯ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдРрд╕рд╛ рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛, рдлрд┐рд░ рдЬрдм рдЖрдк рд╕рднреА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВрдЧреЗ рддреЛ рдмрджрд▓рд╛рд╡ рдкреНрд░рднрд╛рд╡реА рд╣реЛрдВрдЧреЗред

рд╕реИрдВрдбрд╡рд┐рдЪ рдмрдирд╛рдПрдВ рдФрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдЪрд▓рд╛рдПрдВред

рдирд┐рд╖реНрдХрд░реНрд╖

рд╕рд╛рдЗрдЯ рдкрд░ рдЫреЛрдЯреЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдЗрд╕ рдлрд╛рдЗрд▓ рдХреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдореВрд▓ рдореЗрдВ рдмрдирд╛рдпрд╛ рд╣реИ:
git add .
git commit -a -m "Release"
git push
cap deploy:update
cap deploy:restart


рдЗрд╕реЗ рддреИрдирд╛рдд рдХрд┐рдпрд╛ рдФрд░ рдЗрд╕реЗ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдмрдирд╛ рджрд┐рдпрд╛ред рдЕрдм, рд╕рд╛рдЗрдЯ рдХреЛ github рдФрд░ VDS рдкрд░ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреЗрд╡рд▓ рдПрдХ рдХрдорд╛рдВрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
:~ ./deploy

Source: https://habr.com/ru/post/In140910/


All Articles