рдХрд▓реНрдкрдирд╛ рдХреАрдЬрд┐рдП: рдЖрдк рдПрдХ рд╡реЗрдм рдбреЗрд╡рд▓рдкрд░ рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдЕрднреА рд╣рд╛рд▓ рд╣реА рдореЗрдВ рд░реВрдмреА рдСрди рд░реЗрд▓реНрд╕ рдореЗрдВ рдорд╣рд╛рд░рдд рд╣рд╛рд╕рд┐рд▓ рдХреА рд╣реИред рдФрд░ рдпрд╣рд╛рдВ рдЖрдкрдХрд╛ рдкрд╣рд▓рд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЙрд╕ рдЪрд░рдг рдореЗрдВ рдЖрддрд╛ рд╣реИ рдЬрдм рдЗрд╕реЗ рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдкреЛрд╕реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
рдмреЗрд╢рдХ, рдЖрдк рдЗрд╕реЗ рд╣рд░реЛрдХреВ рдкрд░ рдЕрдкрд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡рд╣рд╛рдВ рдХреА рдХреАрдорддреЗрдВ рдереЛрдбрд╝реА рдХрдо рд╣реЛ рдЬрд╛рддреА рд╣реИрдВред рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ VPS рдЦрд░реАрджрдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИ, рдЗрд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ рдФрд░ рд╡рд╣рд╛рдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд▓рдЧрд╛рдПрдВред
"рдХреНрдпрд╛ рд╕рд░рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ?" рдореБрдЭреЗ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рдорд╛рд░реНрдЧрджрд░реНрд╢рд┐рдХрд╛ рдорд┐рд▓реЗрдЧреА, рд▓реЗрдХрд┐рди рдореИрдВ рдЙрд╕рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕рдм рдХреБрдЫ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддрд╛ рд╣реВрдВред рдпрд╣рд╛рдВ рдХреЗрд╡рд▓ рдРрд╕реЗ рдорд╛рд░реНрдЧрджрд░реНрд╢рдХ рд╣реИрдВ рдЬреЛ рди рдХреЗрд╡рд▓ рдЯреАрдореЛрдВ рдХреЛ рдмрд╛рд╣рд░ рдХрд░рддреЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рдпрд╣ рднреА рд╕рдордЭрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдпреЗ рдЯреАрдореЗрдВ рдХреНрдпрд╛ рдХрд░рддреА рд╣реИрдВ - рдЗрдХрд╛рдЗрдпрд╛рдВ, рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╡реЗ рдХреИрдкрд┐рд╕реНрдЯреНрд░рд╛рдиреЛ рдХреЗ рдкрд╣рд▓реЗ рд╕реЗ рдкреБрд░рд╛рдиреЗ рджреВрд╕рд░реЗ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
рдЗрд╕рд▓рд┐рдП, рдореИрдВрдиреЗ рдЕрдкрдирд╛ рдЧрд╛рдЗрдб рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдЬрд┐рд╕рдореЗрдВ рдореИрдВ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛:
- рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕рд░реНрд╡рд░ рд╕реЗрдЯрдЕрдк
- рдирдВрдЧреЗрдХреНрд╕ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ (рдкреЗрдЬрд╕реНрдкреАрдб рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд╛рде), рдкреЛрд╕реНрдЯрдЧреНрд░реИрд╕реНрдХрд▓, рд░реЗрдбрд┐рд╕
- Rvm, рд░реЗрд▓ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ
- рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлреЛрд░рдореИрди рд░рддреНрди рдХреА рд╕реНрдерд╛рдкрдирд╛
- рдпреВрдирд┐рдХреЙрд░реНрди рд╕рд░реНрд╡рд░ рд╕реЗрдЯрдЕрдк
- рддреИрдирд╛рддреА рд╕реНрд╡рдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП Capistrano Gem (v3.1) рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛
рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рдЧрд╛рдЗрдб рди рдХреЗрд╡рд▓ рд╢реБрд░реБрдЖрддреА рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП, рдмрд▓реНрдХрд┐ рдЕрдиреБрднрд╡реА рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рднреА рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред
рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕рд░реНрд╡рд░ рд╕реЗрдЯрдЕрдк
рдЖрдкрдиреЗ рдЕрдкрдирд╛ рдкрд╣рд▓рд╛ VPS рдЦрд░реАрджрд╛, OS рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ (рдореИрдВ ubuntu 12.04 LTS рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдореИрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕рднреА рдХрдорд╛рдВрдб рдЕрдкрд▓реЛрдб рдХрд░реВрдВрдЧрд╛), рдФрд░ SSH рдкрд░ рдЪрд▓рд╛ рдЧрдпрд╛ред рдЖрдЧреЗ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ?
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рд░реВрдЯ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдкрд╛рд╕рд╡рд░реНрдб рдмрджрд▓реЗрдВ
passwd
рдПрдХ рдирдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмрдирд╛рдПрдБ:
adduser deployer
рдЙрд╕реЗ sudo рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рджреЗрдВ:
visudo
рдФрд░ рдЬреЛрдбрд╝реЗрдВ:
deployer ALL=(ALL:ALL) ALL
рдЖрдЗрдП ssh рд╕рд░реНрд╡рд░ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдмрджрд▓рддреЗ рд╣реИрдВ (рд╣рдо рд▓реЙрдЧрд┐рди рдХреЛ рд░реВрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░реЗрдВрдЧреЗ, рдбреЛрдореЗрди рдирд╛рдо рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд░реЗрдВрдЧреЗ рдФрд░ рдХреЗрд╡рд▓ рд▓реЙрдЧрд┐рди рдХреЛ рд╣рдорд╛рд░реЗ рдирдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдиреБрдорддрд┐ рджреЗрдВрдЧреЗ)ред рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ '/ etc / ssh / sshd_config':
PermitRootLogin no UseDNS no AllowUsers deployer
рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде ssh рд╕рд░реНрд╡рд░ рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░реЗрдВ:
reload ssh
Ssh рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╕рдордп рд╣рд░ рдмрд╛рд░ рдкрд╛рд╕рд╡рд░реНрдб рджрд░реНрдЬ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЖрдкрдХреА рдорд╢реАрди рд╕реЗ рд╕рд░реНрд╡рд░ рдкрд░ ssh рдХреБрдВрдЬреА рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд╕реНрдерд╛рдиреАрдп рдорд╢реАрди рдкрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рд╣реИ
ssh-copy-id deployer@123.123.123.123
(Popsh рдкрд░ ssh-copy-id рдЗрдВрд╕реНрдЯрд╛рд▓реЗрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЗрд╕реЗ рдХрд╛рдврд╝рд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд╡рд┐рдВрдбреЛрдЬ рдкрд░ рдореБрдЭреЗ рдЪрд╛рдмрд┐рдпрд╛рдБ рдХреЙрдкреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЯреВрд▓ рдирд╣реАрдВ рдкрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдмрд╣реБрдд рд╕реА рджрд┐рд▓рдЪрд╕реНрдк рдЪреАрдЬреЗрдВ рд╣реИрдВ)ред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЬрдм рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд░реВрдЯ рдХреЗ рддрд╣рдд рд╣реИрдВ, рддреЛ рдЖрдк рдПрдХ SWAP рдлрд╝рд╛рдЗрд▓ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХрдо рд░реИрдо рд╣реИред рдпрд╣ рдЗрд╕ рддрд░рд╣ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
dd if=/dev/zero of=/swapfile bs=1024 count=512k mkswap /swapfile swapon /swapfile
рдЕрдЧрд▓рд╛, '/ etc / fstab' рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд▓рд╛рдЗрди рдЬреЛрдбрд╝реЗрдВ:
/swapfile none swap sw 0 0
рдФрд░ рдлрд┐рд░ рд╣рдо рдХрд░рддреЗ рд╣реИрдВ:
echo 0 > /proc/sys/vm/swappiness sudo chown root:root /swapfile sudo chmod 0600 /swapfile
рдЖрдк рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде SWAP рдлрд╝рд╛рдЗрд▓ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рд░рд┐рдмреВрдЯ рдФрд░ рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
swapon -s
рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ рдФрд░ nginx рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ
рдЗрд╕ рдмрд╛рд░ рд╣рдо рдЕрдкрдиреЗ рдирдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрдорд╛рдВрдб рдХреЗ рддрд╣рдд рд▓реЙрдЧ рдЗрди рдХрд░рддреЗ рд╣реИрдВ
ssh deployer@123.123.123.123
(рд╕реНрдерд╛рдиреАрдп рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░)ред
рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореИрдВ рдкреЗрдЬрд╕реНрдкреАрдб рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рд╕реНрд╡рдпрдВ рдирдЧреНрдиреЗрдХреНрд╕ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддрд╛ рд╣реВрдВред рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ, рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдФрд░ рдПрдХ рд╕рдлрд▓ рдмрд┐рд▓реНрдб рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдкреИрдХреЗрдЬ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
sudo apt-get update sudo apt-get dist-upgrade sudo apt-get install build-essential zlib1g-dev libpcre3 libpcre3-dev unzip
рдЕрдм рд╣рдо рдПрдХрддреНрд░ рдХрд░рддреЗ рд╣реИрдВ:
wget https://github.com/pagespeed/ngx_pagespeed/archive/v1.7.30.1-beta.zip unzip v1.7.30.1-beta.zip cd ngx_pagespeed-1.7.30.1-beta wget https://dl.google.com/dl/page-speed/psol/1.7.30.1.tar.gz tar -xzvf 1.7.30.1.tar.gz wget http://nginx.org/download/nginx-1.4.4.tar.gz tar -xzvf nginx-1.4.4.tar.gz cd nginx-1.4.4 ./configure --add-module=$HOME/ngx_pagespeed-1.7.30.1-beta make sudo checkinstall
рдирдЧрдиреЗрдХреНрд╕ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ
рдЕрдкрд╕реНрдЯрд╛рд░реНрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦрддреЗ рд╣реИрдВред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде '/etc/init/nginx.conf' рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ:
рдЖрджрд┐ / init / nginx.conf description "nginx http daemon" author "George Shammas <georgyo@gmail.com>" start on (filesystem and net-device-up IFACE=lo) stop on runlevel [!2345] env DAEMON=/usr/local/nginx/sbin/nginx env PID=/var/run/nginx.pid expect fork respawn respawn limit 10 5 #oom never pre-start script $DAEMON -t if [ $? -ne 0 ] then exit $? fi end script exec $DAEMON
рдЕрдм рдЖрдк рдкреНрд░рджрд░реНрд╢рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
sudo start/stop/restart/status nginx
рд╣рдорд╛рд░рд╛ nginx.conf '/usr/local/nginx/conf/nginx.conf' рдкрд░ рд╕реНрдерд┐рдд рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдм рд╣рдо рдЗрд╕реЗ рд╕реНрдкрд░реНрд╢ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред рд╣рдо рдЗрд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рдкрд╣рд▓реА рддреИрдирд╛рддреА рдкрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рднрд░ рджреЗрдВрдЧреЗред
рд╣рдорд╛рд░реЗ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдирдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдФрд░ рдПрдХ рдирдпрд╛ рд╕рдореВрд╣ рдмрдирд╛рдПрдВрдЧреЗ, рдЗрд╕ рд╕рдореВрд╣ рдореЗрдВ рдЦреБрдж рдХреЛ рдЬреЛрдбрд╝реЗрдВрдЧреЗ рдФрд░ рдПрдХ рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рдПрдВрдЧреЗ:
sudo useradd -s /sbin/nologin -r nginx sudo groupadd web sudo usermod -a -G web nginx sudo usermod -a -G web deployer sudo mkdir /var/www sudo chgrp -R web /var/www sudo chmod -R 775 /var/www
рд╣рдореЗрдВ рдПрдХ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд▓рд┐рдЦрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЕрдкрдиреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЙрдЧ рдЖрдЙрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдлрд┐рд░ рд╕реЗ рд▓реЙрдЧ рдЗрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
PostgreSQL рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ
Ubuntu рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдПрдХ рдкреБрд░рд╛рдирд╛ рд╕рдВрд╕реНрдХрд░рдг рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдПрдХ рддреГрддреАрдп-рдкрдХреНрд╖ рд░реЗрдкреЛ рдЬреЛрдбрд╝ рджреЗрдВрдЧреЗред рдлрд╝рд╛рдЗрд▓ рдореЗрдВ '/etc/apt/sources.list.d/pgdg.list' рдЬреЛрдбрд╝реЗрдВ:
deb http://apt.postgresql.org/pub/repos/apt/ precise-pgdg main
рдлрд┐рд░ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреБрдВрдЬреА рдЬреЛрдбрд╝реЗрдВ рдФрд░ PostgreSQL рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:
wget --quiet -O - http://apt.postgresql.org/pub/repos/apt/ACCC4CF8.asc | sudo apt-key add - sudo apt-get update sudo apt-get install postgresql-9.3 postgresql-server-dev-9.3
рдФрд░ рдПрдХ рдирдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмрдирд╛рдПрдБ:
sudo -u postgres psql create user deployer with password ' '; alter role deployer superuser createrole createdb replication; \q
рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕реНрдерд╛рдиреАрдп рдХрдВрдкреНрдпреВрдЯрд░ рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП '/etc/postgresql/9.3/main/postgresql.conf' рдореЗрдВ рд╣рдо рдкреИрд░рд╛рдореАрдЯрд░
listen_addresses = 'localhost'
рдХреЛ
listen_addresses = '*'
' рдореЗрдВ рдмрджрд▓рддреЗ рд╣реИрдВ рдФрд░ рдлрд╛рдЗрд▓ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ '/etc/postgresql/9.33/main .conf 'рд▓рд╛рдЗрди
host all deployer ..ip. 255.255.255.0 md5
Postgresql рдХрдорд╛рдВрдб рдХреЛ рд░рд┐рдмреВрдЯ рдХрд░реЗрдВ
sudo service postgresql restart
Redis рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ
рдпрджрд┐ рдЖрдк рдордгрд┐
рд░рд┐рд╕рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ
рдХрд░рддреЗ рд╣реИрдВ , рддреЛ рдЖрдкрдХреЛ
рд░реЗрдбрд┐рд╕ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдХреНрдпреЛрдВрдХрд┐ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХрд╛ рдПрдХ рдкреБрд░рд╛рдирд╛ рд╕рдВрд╕реНрдХрд░рдг рд╣реИ, рдореИрдВ рдЗрд╕реЗ рд╕реНрд░реЛрдд рд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕рдореЗрдВ рдереЛрдбрд╝рд╛ рд╕рдордп рд▓рдЧрддрд╛ рд╣реИ:
sudo apt-get install tcl8.5 wget http://download.redis.io/redis-stable.tar.gz tar xvzf redis-stable.tar.gz cd redis-stable make make test sudo cp src/redis-server /usr/local/bin sudo cp src/redis-cli /usr/local/bin
Redis рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕рдВрд░рдХреНрд╖рд┐рдд рдкрд╛рд╕рд╡рд░реНрдб рдирд╣реАрдВ рд╣реИ рдФрд░ рд╕рднреА рдХреЗ рд▓рд┐рдП рдЦреБрд▓рд╛ рд╣реИ, рддреЛ рдЖрдЗрдП рдПрдХ рдкрд╛рд╕рд╡рд░реНрдб рд╕реЗрдЯ рдХрд░реЗрдВ: 'redis.conf' рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕рд╡рд░реНрдб рдХреЗ рд╕рд╛рде
requirepass
рдкреИрд░рд╛рдореАрдЯрд░ рдЬреЛрдбрд╝реЗрдВред рд░реЗрдбрд┐рд╕ рдХреЛ рдмрд▓ рджреЗрдирд╛ рдЖрд╕рд╛рди рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдХрдо рд╕реЗ рдХрдо 100 рдЕрдХреНрд╖рд░реЛрдВ рдХрд╛ рдкрд╛рд╕рд╡рд░реНрдб рдмрдирд╛рддрд╛ рд╣реВрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рддрд╛рдХрд┐ рдмрд╛рдж рдореЗрдВ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рди рд╣реЛрдВ, рд╣рдо
dir
рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ
/var/www/other
рдмрджрд▓рддреЗ рд╣реИрдВ, рдкрд╣рд▓реЗ рдРрд╕рд╛ рдлрд╝реЛрд▓реНрдбрд░ (
mkdir /var/www/other
) рдмрдирд╛ рдЪреБрдХреЗ рд╣реИрдВред
рд╣рдорд╛рд░реЗ config рдХрдорд╛рдВрдб рдХреЛ рдХреЙрдкреА рдХрд░реЗрдВ
sudo cp redis.conf /etc/redis/redis.conf
рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрддреЗ рдХреЗ рд╕рд╛рде '/etc/init/redis-server.conf' рдкрддреЗ рдкрд░ рдПрдХ рдЕрдкрд╕реНрдЯрд╛рд░реНрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдирд╛рддреЗ рд╣реИрдВ:
/etc/init/redis-server.conf #!upstart description "Redis Server" env USER=deployer start on runlevel [2345] stop on runlevel [016] respawn exec start-stop-daemon --start --make-pidfile --pidfile /var/run/redis-server.pid --chuid $USER --exec /usr/local/bin/redis-server /etc/redis/redis.conf >> /var/www/log/redis.log 2>&1
рдЕрдм рд╣рдо Redis рдХрдорд╛рдВрдб рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
sudo start/stop/restart/status redis-server
рдкрд╣рд▓реЗ рд▓реЙрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рдХрд░ (
mkdir /var/www/log
)ред
RVM, Ruby, Rails, Bundler рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ
рдХреБрдЫ рднреА рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИ:
sudo apt-get install git curl python-software-properties sudo add-apt-repository ppa:chris-lea/node.js sudo apt-get update sudo apt-get install nodejs curl -L get.rvm.io | bash -s stable source ~/.rvm/scripts/rvm rvm requirements rvm install 2.0.0 rvm use 2.0.0 --default gem install rails --no-ri --no-rdoc gem install bundler
GitHub / BitBucket рдкрд░ рдПрдХ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдмрдирд╛рдПрдВ

рд╣рдо рдЕрдкрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рддреИрдирд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░рд┐рдореЛрдЯ рд╕рд░реНрд╡рд░ рдкрд░ git рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдЖрдк рд╣рдорд╛рд░реЗ рд╡реАрдкреАрдПрд╕ рдкрд░ рдПрдХ рдЬреАрдЖрдИрдЯреА рд╕рд░реНрд╡рд░ рдХреЛ рднреА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХреНрдпреЛрдВ, рдпрджрд┐ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдореБрдлреНрдд рд╕рдорд╛рдзрд╛рди рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рд╣рдо GitHub / BitBucket рдкрд░ рдПрдХ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдмрдирд╛рддреЗ рд╣реИрдВ (BitBucket рдореЗрдВ рдореБрдлреНрдд рдореЗрдВ рдкреНрд░рд╛рдЗрд╡реЗрдЯ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╣реИ), рд▓реЗрдХрд┐рди рд╣рдо рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рд╡рд╣рд╛рдВ рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЬрд▓реНрджреА рдореЗрдВ рдирд╣реАрдВ рд╣реИрдВ, рдкрд╣рд▓реЗ .gitignore рдлрд╛рдЗрд▓ рдХреЛ рдПрдбрд┐рдЯ рдХрд░реЗрдВ (рдпрд╣ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд░реВрдЯ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИ) рддрд╛рдХрд┐ рд░реЗрдкреЛ рдореЗрдВ рдХреЛрдИ рднреА рдЧреЛрдкрдиреАрдп рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рди рд╣реЛ (рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ)ред рдЕрдЧрд░ рд░реЗрдкреЛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╣реИ), рдФрд░ рдЙрд╕реА рд╕рдордп рд╣рдореЗрдВ рд╡рд╣рд╛рдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ:
/config/database.yml # /Procfile # /config/deploy/ # Capistrano /shared/ # , , /public/system/ # Paperclip
рдЕрдм рдЖрдк рдкрд╣рд▓реЗ рдХрдорд┐рдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ git рдореЗрдВ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред
git init git remote add origin
рд╣рдореЗрдВ рдЕрдкрдиреЗ рд╕рд░реНрд╡рд░ рдХреА рдХреБрдВрдЬреА рдХреЛ Github / BitBucket рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдкреИрдирд▓ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдпрд╣ рдПрдХ рдкреВрд░реНрд╡рд╛рдкреЗрдХреНрд╖рд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдкрд░рд┐рд╡рд░реНрддрди рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╕реЗ рд╕рд░реНрд╡рд░ рдкрд░ рдЕрдкрд▓реЛрдб рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗред рдЖрдк рдпрд╣ рдЬрд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╣реЗрд▓реНрдк рд╣реЗрд▓реНрдк рд╕рд░реНрд╡рд┐рд╕ рдореЗрдВ рдРрд╕рд╛ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдордгрд┐ рдХрд╛ рдЕрдЧреНрд░рднрд╛рдЧ
рдлреЛрд░рдореИрди - рдЖрд╡реЗрджрди рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП рдордгрд┐ред рд╕реНрдерд╛рдиреАрдп рдорд╢реАрди рдкрд░, рдпрд╣ рдЖрдкрдХреЛ рдПрдХ рдмрд╛рд░ рдореЗрдВ рдПрдХ рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдкреНрд░реЛрдХреНрдлрд╛рдЗрд▓ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕рднреА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ
foreman start
рдФрд░ рдЙрдирдХреЗ рдирд┐рд╖реНрдХрд░реНрд╖ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред
рд╕рд░реНрд╡рд░ рдЯреАрдо рдкрд░
foreman export upstart
рдпрд╣ рд╕реНрдЯрд╛рд░реНрдЯ / рд╕реНрдЯреЙрдк / рд░рд┐рд╕реНрдЯрд╛рд░реНрдЯ рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдкрд╕реНрдЯрд╛рд░реНрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдирд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдж рдореЗрдВред рдЕрднреА рдХреЗ рд▓рд┐рдП, рдмрд╕ рдЗрд╕реЗ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВ, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рдЬрдбрд╝ рдореЗрдВ рдПрдХ рдкреНрд░реЙрдХреНрдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдВ рдФрд░ рдЗрд╕реЗ рд╕реНрдерд╛рдиреАрдп рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдкреЙрдкреНрдпреБрд▓реЗрдЯ рдХрд░реЗрдВред рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдРрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред
web: rails s job1: bundle exec rake resque:work PIDFILE=./tmp/pids/resque2.pid QUEUES=send_email job2: bundle exec rake resque:work PIDFILE=./tmp/pids/resque2.pid QUEUES=send_email
рд╣рдо рдЙрддреНрдкрд╛рджрди рд╡рд┐рдиреНрдпрд╛рд╕ рдХреЛ рдмрд╛рдж рдореЗрдВ рд▓рд┐рдЦреЗрдВрдЧреЗ, рдЬрдм рдпрд╣ Capistrano рдХреА рдмрд╛рдд рдЖрддреА рд╣реИред
рдЧреЗрдВрдбрд╛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ
рдпреВрдирд┐рдХреЙрд░реНрди рдПрдХ рдЙрдиреНрдирдд HTTP рд╕рд░реНрд╡рд░ рд╣реИред рдЗрд╕реЗ рдЬреЛрдбрд╝рдХрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ
group :production do gem 'unicorn' end
рдордгрд┐ рдореЗрдВред (
bundle install
рдмрд╛рд░реЗ рдореЗрдВ рдордд рднреВрд▓рдирд╛)
'/ Config /' рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ, рд▓рдЧрднрдЧ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рдПрдХ unicon.rb рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ:
Unicorn.rb worker_processes 2 working_directory "/var/www/apps/_/current"
APPLICATION_NAME рдХреЛ рдЕрдкрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдирд╛рдо рд╕реЗ рдмрджрд▓реЗрдВ, рдЬрд┐рд╕реЗ рдЖрдкрдиреЗ рдлрд┐рд░ Capistrano рд╕реЗрдЯрд┐рдВрдЧ рдореЗрдВ рд╕реЗрдЯ рдХрд┐рдпрд╛ рд╣реИред
Capistrano
Capistrano рдЖрд╡реЗрджрди рдХреЛ рддреИрдирд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╣реБрдд рд╣реА рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЙрдкрдХрд░рдг рд╣реИ, рднрд▓реЗ рд╣реА рдпрд╣ рдкрд╣рд▓реА рдмрд╛рд░ рдореЗрдВ рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реЛред Gemfile рдХреЛ рдЬреЛрдбрд╝рдХрд░ рдЖрд╡рд╢реНрдпрдХ рдкрд░рд┐рд╡рд░реНрдзрди рдХреЗ рд╕рд╛рде рдЗрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:
group :development do gem 'capistrano' gem 'capistrano-rails' gem 'capistrano-bundler' gem 'capistrano-rvm' end
рд╣рдо
bundle exec cap install
рдирд┐рд╖реНрдкрд╛рджрд┐рдд
bundle exec cap install
рд▓рдЧрд╛рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ Capfile рдореЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ:
require 'capistrano/deploy' require 'capistrano/rvm' require 'capistrano/bundler' require 'capistrano/rails'
рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдм, рдмрд╕ рд╕рд░реНрд╡рд░ рдХрд╛ рдкрддрд╛, рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдФрд░ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдлрд╝реЛрд▓реНрдбрд░ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛, Capistrano:
- рдпрд╣ рдЖрдкрдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╕реЗ рд╕рд░реНрд╡рд░ рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ
_/_/releases/_/
рдлрд╝реЛрд▓реНрдбрд░ _/_/releases/_/
рдмрд┐рдирд╛ рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд╣рдЯрд╛рдП (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдпрд╣ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ 5 рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ)ред - рдмрдВрдбрд▓ рдмрдВрдбрд▓ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВред
- рд░рди рдбреАрдмреА: рдорд╛рдЗрдЧреНрд░реЗрдЯред
- рд╕рдВрдкрддреНрддрд┐рдпрд╛рдВ рдЪрд▓рд╛рдПрдВ: precompileред
_/_/current
рдХреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдлрд╝реЛрд▓реНрдбрд░ рд╕реЗ _/_/current
рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдмрдирд╛рддрд╛ рд╣реИ
рд▓реЗрдХрд┐рди рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИред рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
- рдкрд╣рд▓реА рддреИрдирд╛рддреА рдкрд░, nginx, рдЧреЗрдВрдбрд╛ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ, рдХреБрдЫ рдлрд╛рдЗрд▓реЗрдВ рдЕрдкрд▓реЛрдб рдХрд░реЗрдВ рдЬреЛ рдирд╣реАрдВ рдмрджрд▓реЗрдЧреА, рдПрдХ upstart рд╕реНрдХреНрд░рд┐рдкреНрдЯ (рдлреЛрд░рдореИрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) рдмрдирд╛рдПрдВред
- рдкреНрд░рддреНрдпреЗрдХ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рд╕реЗ рдкрд╣рд▓реЗ, рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ git рдРрдб, git рдХрдорд┐рдЯ, git рдкреБрд╢ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ (рдХрдореЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗ рдкреВрдЫреЗрдВ)ред рдкреНрд░рддреНрдпреЗрдХ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдХреЗ рдмрд╛рдж, рд╕реАрд▓рд┐рдВрдХ рдмрдирд╛рдПрдВ рдФрд░ рдпреВрдирд┐рдХреЙрд░реНрди рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░реЗрдВред
рд╣рдо рдХреЗрд╡рд▓ рдкрд╣рд▓реА рдмрд╛рд░ рд╕рд╛рдЭрд╛ рдХрд┐рдП рдЧрдП рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдВрдЧреЗ (рд╕реНрдерд╛рдиреАрдп рдорд╢реАрди рдкрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ), рд╡реНрдпрд░реНрде рдореЗрдВ рдирд╣реАрдВ рд╣рдордиреЗ рдЗрд╕реЗ .gitignore рдореЗрдВ рдЬреЛрдбрд╝рд╛ред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд▓рдЧрднрдЧ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде nginx.conf рдмрдирд╛рдПрдВ:
nginx.conf user nginx web; pid /var/run/nginx.pid; error_log /var/www/log/nginx.error.log; events { worker_connections 1024; # increase if you have lots of clients accept_mutex off; # "on" if nginx worker_processes > 1 use epoll; # enable for Linux 2.6+ # use kqueue; # enable for FreeBSD, OSX } http { # nginx will find this file in the config directory set at nginx build time include mime.types; types_hash_max_size 2048; server_names_hash_bucket_size 64; # fallback in case we can't determine a type default_type application/octet-stream; # click tracking! access_log /var/www/log/nginx.access.log combined; # you generally want to serve static files with nginx since neither # Unicorn nor Rainbows! is optimized for it at the moment sendfile on; tcp_nopush on; # off may be better for *some* Comet/long-poll stuff tcp_nodelay off; # on may be better for some Comet/long-poll stuff # we haven't checked to see if Rack::Deflate on the app server is # faster or not than doing compression via nginx. It's easier # to configure it all in one place here for static files and also # to disable gzip for clients who don't get gzip/deflate right. # There are other gzip settings that may be needed used to deal with # bad clients out there, see http:
рдпрд╣ рдирдЧрдиреЗрдХреНрд╕ рдХреЗ рд▓рд┐рдП рдореЗрд░рд╛ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рд╣реИ, рд╡рд╣рд╛рдВ 'APPLICATION_NAME' рдХреЛ рдЖрдкрдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдирд╛рдо рдХреЛ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдХреА рдкрд╣рд▓реА рд▓рд╛рдЗрди / рддреИрдирд╛рддреА рдХреЗ рд╕рд╛рде рдмрджрд▓рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ редrb (рд╕реЗрдЯ: рдПрдкреНрд▓рд┐рдХреЗрд╢рди, 'APPLICATION_NAME')ред
рдЕрдм рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд╛рдордЧреНрд░реА (/ рд╕рд╛рдЭрд╛ /) рдХреЗ рд╕рд╛рде рдкреНрд░реЙрдХреНрдлрд╝рд╛рдЗрд▓ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ:
web: bundle exec unicorn_rails -c /var/www/apps/_/current/config/unicorn.rb -E production job1: bundle exec rake resque:work RAILS_ENV=production PIDFILE=/var/www/apps/_/run/resque1.pid QUEUES=* job2: bundle exec rake resque:work RAILS_ENV=production PIDFILE=/var/www/apps/_/run/resque2.pid QUEUES=*
рдпрд╣ рджреЛ рд░реЗрд╕рдХреНрдпреВ рд╢реНрд░рдорд┐рдХреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдиреНрдпрд╛рд╕ рд╣реИред рдпрджрд┐ рдЖрдк Resque рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХреЗрд╡рд▓ рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рдЫреЛрдбрд╝ рджреЗрдВред
рдпрджрд┐ рдЖрдк Figaro рд░рддреНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рд╣рдо рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдФрд░ application.yml рдХреЗ рд╕рд╛рде database.yml рднреА рдмрдирд╛рддреЗ рд╣реИрдВред
рд╣рдорд╛рд░реА Capistrano рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рд░реНрд╡рд░ рдкрд░ рд╕реБрдкрд░рдпреБрд╕рд░ рдХреА рдУрд░ рд╕реЗ рдХреБрдЫ рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдЧреАред рдЙрд╕реЗ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП, рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ
sudo visudo
рд╕рд░реНрд╡рд░ рдкрд░ рдФрд░ рд▓рд╛рдЗрди рдЬреЛрдбрд╝реЗрдВ:
deployer ALL=NOPASSWD: /usr/sbin/service, /bin/ln, /bin/rm, /bin/mv, /sbin/start, /sbin/stop, /sbin/restart, /sbin/status
рдпрд╣ рдХреЗрд╡рд▓ Capistrano рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд╣реБрдЖ рд╣реИред рдлрд╝рд╛рдЗрд▓ 'рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ / рддреИрдирд╛рддреА / рдЙрддреНрдкрд╛рджрди' рдореЗрдВ рд╣рдо рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рддреЗ рд╣реИрдВ:
server 'IP ', user: 'deployer', roles: %w{web app db}
рдлрд╝рд╛рдЗрд▓ рдореЗрдВ 'config / рддреИрдирд╛рдд.rb' рд╢реАрд░реНрд╖ рдкрд░ рдЬреЛрдбрд╝реЗрдВ:
deploy.rb set :repo_url, ' ' set :application, '_' application = '_' set :rvm_type, :user set :rvm_ruby_version, '2.0.0-p353' set :deploy_to, '/var/www/apps/_' namespace :foreman do desc 'Start server' task :start do on roles(:all) do sudo "start #{application}" end end desc 'Stop server' task :stop do on roles(:all) do sudo "stop #{application}" end end desc 'Restart server' task :restart do on roles(:all) do sudo "restart #{application}" end end desc 'Server status' task :status do on roles(:all) do execute "initctl list | grep #{application}" end end end namespace :git do desc 'Deploy' task :deploy do ask(:message, "Commit message?") run_locally do execute "git add -A" execute "git commit -m '#{fetch(:message)}'" execute "git push" end end end
рдЗрд╕ рд╕рдмрдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ? рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рд╡рд┐рдиреНрдпрд╛рд╕ рд╣реИред рдлрд┐рд░ рд╣рдо рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВред рдПрдХ рдлреЛрд░рдореИрди рдХрд╛рд░реНрдп рд╣реИ рдЬрд┐рд╕рдореЗрдВ 4 рдХреНрд░рд┐рдпрд╛рдПрдВ рд╣реИрдВ: рдкреНрд░рд╛рд░рдВрдн, рд░реЛрдХ, рдкреБрдирд░рд╛рд░рдВрдн рд╕реНрдерд┐рддрд┐ред рд╕реНрдерд╛рдиреАрдп рдорд╢реАрди рдкрд░ 'рдХреИрдк рдкреНрд░реЛрдбрдХреНрд╢рди рдлреЛрд░рдореИрди: рд╕реНрдЯрд╛рд░реНрдЯ' рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╕рдордп, рд╕рд░реНрд╡рд░ 'sudo start APPLICATION_NAME' рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдЕрднреА рддрдХ рдпрд╣ рд╣рдореЗрдВ рдХреБрдЫ рдирд╣реАрдВ рджреЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдлреЛрд░рдореИрди рдиреЗ рдЕрднреА рддрдХ рдЕрдкрд╕реНрдЯрд╛рд░реНрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдирд╣реАрдВ рдмрдирд╛рдИ рд╣реИред рдЖрдЧреЗ рдмрдврд╝реЗрдВ: рдПрдХ рдХрд╛рд░реНрдп рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдХрд╛рд░реНрд░рд╡рд╛рдИ рд╣реИред 'рдХреИрдк рдкреНрд░реЛрдбрдХреНрд╢рди рдЬреАрдЖрдИрдЯреА: рддреИрдирд╛рддреА' рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╕рдордп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗ рдХрдореЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдЙрд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:
git add -A git commit -m '' git push
рдмрд┐рд▓реНрдХреБрд▓ рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИ, рд╣реИ рдирд╛? рд▓реЗрдХрд┐рди рд╣рдо рдЗрди рдЖрджреЗрд╢реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реНрд╡рдпрдВ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рд╡реЗ рддрдм рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрдВрдЧреЗ рдЬрдм рдЕрдиреНрдп рд▓рд┐рдкрд┐рдпреЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЕрдм 'рдиреЗрдорд╕реНрдкреЗрд╕: рдбрд┐рдкреНрд▓реЙрдп рдбреВ' рдРрдб рдХреЗ рдЕрдВрджрд░
deploy.rb desc 'Setup' task :setup do on roles(:all) do execute "mkdir #{shared_path}/config/" execute "mkdir /var/www/apps/#{application}/run/" execute "mkdir /var/www/apps/#{application}/log/" execute "mkdir /var/www/apps/#{application}/socket/" execute "mkdir #{shared_path}/system" sudo "ln -s /var/log/upstart /var/www/log/upstart" upload!('shared/database.yml', "#{shared_path}/config/database.yml") upload!('shared/Procfile', "#{shared_path}/Procfile") upload!('shared/nginx.conf', "#{shared_path}/nginx.conf") sudo 'stop nginx' sudo "rm -f /usr/local/nginx/conf/nginx.conf" sudo "ln -s #{shared_path}/nginx.conf /usr/local/nginx/conf/nginx.conf" sudo 'start nginx' within release_path do with rails_env: fetch(:rails_env) do execute :rake, "db:create" end end end end desc 'Create symlink' task :symlink do on roles(:all) do execute "ln -s #{shared_path}/config/database.yml #{release_path}/config/database.yml" execute "ln -s #{shared_path}/Procfile #{release_path}/Procfile" execute "ln -s #{shared_path}/system #{release_path}/public/system" end end desc 'Foreman init' task :foreman_init do on roles(:all) do foreman_temp = "/var/www/tmp/foreman" execute "mkdir -p #{foreman_temp}"
рдПрдХ рдирд┐рдпрдд рдХрд╛рд░реНрдп рд╣реИ рдФрд░ рд╣рдордиреЗ 4 рдирдИ рдХреНрд░рд┐рдпрд╛рдПрдВ рдЬреЛрдбрд╝реА рд╣реИрдВ: рд╕реЗрдЯрдЕрдк (рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реЗрдЯрдЕрдк), рдлреЛрд░рдореИрди_рдЗрдирд┐рдЯ (рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдЕрдкрд╕реНрдЯрд╛рд░реНрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдирд╛рдирд╛), рд╕рд┐рдорд▓рд┐рдВрдХ (рдкреНрд░рддреАрдХрд╛рддреНрдордХ рд▓рд┐рдВрдХ рдмрдирд╛рдирд╛) рдФрд░ рдкреБрдирд░рд╛рд░рдВрдн (рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдкреБрдирдГ рд▓реЛрдб рдХрд░рдирд╛)ред рд╣рдо рдпрд╣ рднреА рдмрддрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдХрд┐рди рдЪрд░рдгреЛрдВ рдХреЗ рдкрд╣рд▓реЗ / рдмрд╛рдж рдореЗрдВ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИред
рдкрд░рд┐рдирд┐рдпреЛрдЬрди: рд╕реЗрдЯрдЕрдк рд╕рд░реНрд╡рд░ рдХреЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реЗрдЯрдЕрдк рдХреЛ рдХрд░рддрд╛ рд╣реИ: рд╕реНрдерд╛рдиреАрдп рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рд╕рд╛рдЭрд╛ рдлрд╝реЛрд▓реНрдбрд░ рд╕реЗ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рддрд╛ рд╣реИ, рд╕рд░реНрд╡рд░ рдкрд░ рд╕рд╛рдЭрд╛ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдЬрд╛рддрд╛ рд╣реИ, рдирдЧреНрдиреЗрдХреНрд╕ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реИ, рдЖрд╡рд╢реНрдпрдХ рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рддреИрдирд╛рдд рдХрд░рддрд╛ рд╣реИ: рдлреЛрд░рдореИрди_рдЗрдирд┐рдЯ, рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ рдлреЛрд░рдореИрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдкрд╕реНрдЯреНрд░реАрдо рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ / рдЖрджрд┐ / рдХреЙрдкреА рдХрд░рддрд╛ рд╣реИред init, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рд╣рдо рдЕрдкрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ
sudo start/stop/restart/status _
рдХреЗ рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рддреИрдирд╛рддреА рд╕реЗ рдкрд╣рд▓реЗ: рд╕реЗрдЯрдЕрдк, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рд╕рд╛рдорд╛рдиреНрдп рддреИрдирд╛рддреА рдХреЗ рдкрд╣рд▓реЗ рддреАрди рдЪрд░рдгреЛрдВ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддреН, рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рд░реНрд╡рд░ рдкрд░ рдЕрдкрд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░
bundle install
рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдХреЗ рдмрд╛рдж, рдПрдХ рдирдпрд╛ рд╕рд┐рдорд▓рд┐рдВрдХ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдпреВрдирд┐рдХреЙрд░реНрди рд░рд┐рдмреВрдЯ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдВрдд рдореЗрдВ
before :deploy, 'git:deploy'
рдХреЗрд╡рд▓
before :deploy, 'git:deploy'
рд╣реА рд░рд╣рддрд╛ рд╣реИ
before :deploy, 'git:deploy'
рдФрд░ рдЕрдм рдкреНрд░рддреНрдпреЗрдХ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рд╕реЗ рдкрд╣рд▓реЗ рдирдП рдмрджрд▓рд╛рд╡ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗред
рдПрдХ рдмрд╛рд░ рдлрд┐рд░:
- рд╣рдо
cap production deploy:setup
рдЖрдкрдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рдкрд╣рд▓реА рддреИрдирд╛рддреА рдкрд░ cap production deploy:setup
ред - рд╣рдо рдЖрдкрдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдкрд░ рд▓рд╛рдЧреВ
cap production deploy
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рддреЗ рд╣реИрдВред
рдареАрдХ рдЗрд╕реА рддрд░рд╣ рдореИрдВ рд╣рдореЗрд╢рд╛ рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рд╡реАрдкреАрдПрд╕ рдореЗрдВ рддреИрдирд╛рдд рдХрд░рддрд╛ рд╣реВрдВред рдмреЗрд╢рдХ, рдпрд╣ рд╡рд┐рдзрд┐ рдЕрдВрддрд┐рдо рд╕рддреНрдп рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдпрд╣ рд╕рдордЭрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдХрд┐ рдХреИрдкрд┐рд╕реНрдЯреНрд░рд╛рдиреЛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рддрд╛рдХрд┐ рдПрдХ рд╢реБрд░реБрдЖрдд рдореЗрдВ рднреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЙрд╕рдХреА рдЬрд░реВрд░рддреЛрдВ рдХреЛ рдмрджрд▓рдиреЗ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рди рд╣реЛред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВ рдпрд╣ рджрд╛рд╡рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рдХрд┐ рдореЗрд░реЗ nginx.conf рдФрд░ unicorn.rb рдЖрджрд░реНрд╢ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдм рд▓рдЧрднрдЧ рдПрдХ рд╕рд╛рд▓ рд╕реЗ рдореИрдВ рдЙрдирдХреЗ рд╕рд╛рде рдереЛрдбрд╝рд╛ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд╡реАрдкреАрдПрд╕ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рд▓реЛрдб рдХреЗ рддрд╣рдд рднреА рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рдереАред