Rvm + Rails + Nginx + рдЧреЗрдВрдбрд╛ рдпрд╛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд░реЗрд▓ рдХреА рдПрдХ рдЧреБрдЪреНрдЫрд╛

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

Ssh рдХреБрдВрдЬреА

рд╣реЗрдбрд░ рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рдЙрд╕ рд╕рд░реНрд╡рд░ рдХреЛ рддреИрдпрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬрд┐рд╕ рдкрд░ рд╣рдо рд╕рдм рдХреБрдЫ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЖрдкрдиреЗ рдмрд╕ рдПрдХ рд╕рд░реНрд╡рд░ рдкрд░ рдПрдХ рдирдпрд╛ рдЙрдмрдВрдЯреВ 10.04 рдПрд▓рдЯреАрдПрд╕ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ (+ рдкрд╣рд▓реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╢реБрд░реВ рд╣реБрдЖ), рдФрд░ рд╡рд╣рд╛рдВ рдУрдкрдирдПрд╕рдПрд╕рдПрдЪ рдбреЗрдореЙрди рдХреЛ рдЙрдард╛рдпрд╛ред рд╡рд╣ рд╕рдм рд╣реИ! рдЕрдм рд╕реЗ, рд╕рд░реНрд╡рд░ рдХреЛ рд╣рдерд┐рдпрд╛рд░, рдкреИрд░ рдФрд░ рдЕрдиреНрдп рдЫреЛрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдЫреБрдЖ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП - рд╣рдо рдЗрд╕рдХреЗ рд╕рд╛рде рдХреЗрд╡рд▓ рджреВрд░ рд╕реЗ рдХрд╛рдо рдХрд░реЗрдВрдЧреЗ, рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реА рдорд╢реАрди рдкрд░ рд╣рдореЗрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:
ssh-copy-id vasya@rails-production.example.com 
рдЬрд╣рд╛рдБ vasya рд╕рд░реНрд╡рд░ рдкрд░ рдЙрд╕ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рдирд╛рдо рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреА рдУрд░ рд╕реЗ рддреИрдирд╛рддреА рдХрд╛ рдЕрдзрд┐рдХрд╛рд░ рдФрд░ рдЕрдзрд┐рдХрд╛рд░ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ rails-production.example.com рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЙрдард╛рдП рдЧрдП рд╕рд░реНрд╡рд░ рдХрд╛ рдкрддрд╛ рдпрд╛ рдирд╛рдо рд╣реЛрддрд╛ рд╣реИред рджрд░реНрдЬ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдореЗрдЬрдмрд╛рди рдХреЛ рдЕрдкрдиреА рдорд╢реАрди рдкрд░ рдЬреНрдЮрд╛рдд рдореЗрдЬрдмрд╛рдиреЛрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣рдордд рд╣реЛрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдЧрд╛ - рдпрд╣ рдареАрдХ рд╣реИ - рдпрд╣ рдареАрдХ рд╣реИред рдФрд░ рд╡рд╛рд╕рд┐рди рдкрд╛рд╕рд╡рд░реНрдб рдбрд╛рд▓реЗрдВред рдпрд╣ рдЖрдЦрд┐рд░реА рдмрд╛рд░ рд╣реЛрдЧрд╛ рдЬрдм рдЖрдк рддреБрд▓рд╕реА рдХрд╛ рдкрд╛рд╕рд╡рд░реНрдб рджрд░реНрдЬ рдХрд░реЗрдВрдЧреЗред рдЕрдм ssh рдХреБрдВрдЬреА рджреНрд╡рд╛рд░рд╛ рд╕рд░реНрд╡рд░ рддрдХ рдкрд╣реБрдВрдЪ рд╕рдВрднрд╡ рд╣реИ рдФрд░ рдХреБрдЫ рднреА рджрд░реНрдЬ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпреЗ рдореВрд▓ рдмрд╛рддреЗрдВ рд╣реИрдВ рдЬрд┐рдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реИ - рд▓реЗрдХрд┐рди рд╣рдореЗрд╢рд╛ рдХреБрдЫ рдкреНрд░рддрд┐рд╢рдд рд▓реЛрдЧ рдРрд╕реЗ рд╣реЛрддреЗ рд╣реИрдВ рдЬрд┐рдирдХреЗ рдкрд╛рд╕ ssh рдХреАрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдорд╢реАрди рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХрд╛ рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реЛрддрд╛ рд╣реИред рдЙрдирдХреЗ рд▓рд┐рдП, рдореИрдВ рдмреНрд░рд╢ рдХреЗ рдЬреЛрдбрд╝реЛрдВ рдХреЗ рдЧрдард┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдорд░рд╣рдо рдХреА рд╕рд▓рд╛рд╣ рджреЗ рд╕рдХрддрд╛ рд╣реВрдВ, рдмрд╛рдХреА рдХреЗ рд▓рд┐рдП рдореИрдВ рд╕рд┐рд░реНрдл рдпрд╣ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ ssh рдЪрд╛рдмрд┐рдпрд╛рдБ рдПрдХ рдЖрд╢реАрд░реНрд╡рд╛рдж рд╣реИрдВред

рдбреЗрдЯрд╛рдмреЗрд╕

рдпрд╣рд╛рдВ рдореИрдВ рдХреЗрд╡рд▓ рджреЛ рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп DBMS рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реБрдЭрд╛рд╡ рджреВрдВрдЧрд╛:
 sudo apt-get install mysql-server mysql-client libmysqld-dev # MySQL sudo apt-get install postgresql postgresql-client postgresql-server-dev #Postgresql 
рд╕рд░реНрд╡рд░ рдкрд░ DBMS рдХреЛ рдЯреНрдпреВрдирд┐рдВрдЧ рдХрд░рдирд╛ рдПрдХ рдЕрд▓рдЧ рд▓реЗрдЦ рдХрд╛ рд╡рд┐рд╖рдп рд╣реИ, рдЗрд╕рд▓рд┐рдП рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЖрдк рдЗрд╕ рд╕реЗ рдЦреБрдж рдирд┐рдкрдЯ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП - рддрджрдо! DBMS рдКрдкрд░ рдФрд░ рдЪрд▓ рд░рд╣рд╛ рд╣реИред

rvm

рдЖрд░рд╡реАрдПрдо рдПрдХ рд░реВрдмреА рд╕рдВрд╕реНрдХрд░рдг рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рдгрд╛рд▓реА рдЙрдкрдХрд░рдг рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рд░рддреНрдиреЛрдВ рд╕реЗ рдЕрд▓рдЧ "рд╡рд╛рддрд╛рд╡рд░рдг" рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬреЛ рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рдЖрдк рдмрдВрдбрд▓рд░ рдФрд░ рдЖрд░рд╡реАрдПрдо рдЬрд╡рд╛рд╣рд░рд╛рдд рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдорд╣рд╕реВрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╡реЗ рдПрдХ рд╣реА рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдП рдЧрдП рд╣реИрдВ - рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдмрдВрдбрд▓рд░ рдордгрд┐ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╢рд╛рдирджрд╛рд░ рддрд░реАрдХрд╛ рд╣реИ, рдФрд░ рд░реЗрд▓ 3 рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЪреВрдВрдХрд┐ рд╣рдо рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ - рдореИрдВ рд░реЗрд▓ 2.3.x рдХреЗ рд▓рд┐рдП рдмрдВрдбрд▓рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ, рдпрд╣ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЗрд╕рдХрд╛ рд╡рд░реНрдгрди рдпрд╣рд╛рдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

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

рдпрджрд┐ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдкрдврд╝рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рд╢рд╛рдпрдж рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЖрд░рд╡реАрдПрдо рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рджреЛ рддрд░реАрдХреЗ рд╣реИрдВ - рд░реВрдЯ рд╕реЗ (рддрдерд╛рдХрдерд┐рдд рд╕рд┐рд╕реНрдЯрдо рд╡рд╛рдЗрдб рдЗрдВрд╕реНрдЯрд╛рд▓) рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рдПрдХ - рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдПред рдЗрд╕рд▓рд┐рдП, рдлрд┐рд░ рд╕реЗ рдореИрдВ рдЖрдкрдХреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ - рдЬрдбрд╝ рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рди рдХрд░реЗрдВред рд╡реНрдпрд░реНрде рдореЗрдВ рдирд╣реАрдВ рд╣рдордиреЗ рддреИрдирд╛рддреА рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд┐рдпрд╛ред рдЗрд╕рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рддреБрд▓рд╕реА рдХреЗ рддрд╣рдд рд╕рд░реНрд╡рд░ рдкрд░ рдЬрд╛рдХрд░, рд╣рдо рдХрдорд╛рдВрдб рдХреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЕрдиреБрдХреНрд░рдо рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВ:

 sudo apt-get install git-core curl #  ,    Rvm. curl -L https://get.rvm.io | bash -s stable --ruby type rvm | head -1 
рдЕрдВрддрд┐рдо рдХрдорд╛рдВрдб "рдЖрд░рд╡реАрдПрдо рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ" рдпрд╛ рд░реВрд╕реА рдореЗрдВ рдПрдХ рдПрдирд╛рд▓реЙрдЧ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ - рдпрд╣ рдЕрдзреНрдпрдпрди рдХреЛ рдпрд╣рд╛рдВ рд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдФрд░ рдЗрд╕ рдХреНрд╖рдг рддрдХ - "рдЬрдм рддрдХ рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рддрдм рддрдХ рд▓рд╛рдпрдХ рд╣реИред"

рдЧрд╣рд░реЗ рд▓рд╛рд▓ рд░рдВрдЧ рдХрд╛

рдорд╛рдгрд┐рдХ рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЪреБрдирд╛рд╡ рдЗрд╕ рдмрд╛рдд рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЖрд╡реЗрджрди рдореЗрдВ рд░реЗрд▓ рдХреЗ рдХрд┐рд╕ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: рдЗрд╕рд▓рд┐рдП 2.3.x рдХреЗ рд▓рд┐рдП рд░реВрдмреА рдПрдВрдЯрд░рдкреНрд░рд╛рдЗрдЬ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ, 3.x рдХреЗ рд▓рд┐рдП 1.9.3 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреА рдЧрдИ рд╣реИред рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдХреНрд░рдорд╢рдГ 2.3.x рдФрд░ ree рдкрд░ рдПрдХ рдЖрд╡реЗрджрди рд╣реИред рдФрд░ рдЕрдЧрд░ рд░реВрдмреА 1.9.3 рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд┐рд╕реНрдЯрдо рд╕реЗ рдХреБрдЫ рднреА рдЕрд╕рд╛рдзрд╛рд░рдг рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ, рддреЛ рд░реА рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рд╕рд┐рд╕реНрдЯрдо рдкреИрдХреЗрдЬреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ:
 sudo apt-get install build-essential bison openssl libreadline6 libreadline6-dev curl git-core zlib1g zlib1g-dev libssl-dev libyaml-dev libsqlite3-0 libsqlite3-dev sqlite3 libxml2-dev libxslt-dev autoconf libc6-dev ncurses-dev rvm install ree-1.8.7-2011.03 #  ree rvm ree # ,   Ruby .      -     : rvm ree@myapp --create.   Bundler    . gem install bundler #  gem,    . sudo mkdir -p /srv/myapp #  ,      . sudo chown -R vasya:vasya /srv/myapp #      (   ,  -R  ). 


nginx

рдЪреВрдБрдХрд┐ рд╣рдо рдпреВрдирд┐рдХреЙрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рд╣рдо рдмрд┐рдирд╛ рдирдЧреНрдиреЗрдХреНрд╕ рдХреЗ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ - рдпреВрдирд┐рдХреЙрд░реНрди рдореЗрдВ рдРрд╕реА рд╕реБрд╡рд┐рдзрд╛ рд╣реИ - рдпрд╣ рдзреАрдореЗ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд╕рдЪ рд╣реИ, рдЗрд╕рдХрд╛ рдкреНрд░рддрд┐рд░реВрдк рд╣реИ, рдЬреЛ рд░реЗрдирдмреЛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдирдЧреНрдиреЗрдХреНрд╕ рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдмреЗрд╣рдж рдЙрдкрдпреЛрдЧреА, рдЕрдЪреНрдЫрд╛ рдФрд░ рдЙрдкрдпреЛрдЧ рдореЗрдВ рдЖрд╕рд╛рди рд╣реИред рдЖрдк рдЗрд╕ рдЕрджреНрднреБрдд рд╕рд░реНрд╡рд░ рдХреЗ рд▓реЗрдЦрдХ рдХреА рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рд╕реНрдерд╛рдкрдирд╛ рдирд┐рд░реНрджреЗрд╢ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ - рдЗрдЧреЛрд░ рд╕рд╛рдпрд╕реЛрд╡ред рдореИрдВ рдмрд╕ рдПрдХ рд╕рд░рд▓ init рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ nginx рдФрд░ nginx.conf рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рджреВрдВрдЧрд╛:
 #! /bin/sh EXEC_PATH="/usr/local/nginx/sbin/nginx" case "$1" in start) echo "Starting NginX" start-stop-daemon --start --exec $EXEC_PATH ;; stop) echo "Stopping NginX" start-stop-daemon --stop --exec $EXEC_PATH ;; restart) echo "Stopping NginX" start-stop-daemon --stop --exec $EXEC_PATH sleep 1 echo "Starting NginX" start-stop-daemon --start --exec $EXEC_PATH ;; *) echo "Usage: {start|stop|restart}" exit 1 ;; esac exit 0 

 worker_processes 1; #       . user vasya vasya; #      worker -   ,    . pid /tmp/nginx.pid; #       - Nginx. error_log /tmp/nginx.error.log; events { worker_connections 1024; #        . accept_mutex off; #         - . } http { #     -       - -  : include mime.types; default_type application/octet-stream; access_log /tmp/nginx.access.log combined; sendfile on; tcp_nopush on; tcp_nodelay off; gzip on; #    .    upstream .        ,     . upstream myapp_server { server unix:/srv/myapp/shared/unicorn.sock fail_timeout=0; #        config/unicorn.rb    . } server { listen 80 default deferred; #  ,       ip   ,      -  myapp.mydomain.ru:80 client_max_body_size 1G; #     (   -       ). server_name myapp.mydomain.ru; #   keepalive_timeout 5; root /srv/myapp/current/public; #        public Rails .  current       Capistrano try_files $uri/index.html $uri.html $uri @myapp; #     - ,    location    location @myapp { proxy_pass http://myapp_server; #   http://       upstream . proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; } error_page 500 502 503 504 /500.html; location = /500.html { root /srv/myapp/current/public; } } } 

рдпрд╣ рддреБрд░рдВрдд рдЪреЗрддрд╛рд╡рдиреА рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдЬрдм рдирд┐рдЧреНрдиреЗрдХреНрд╕ рдПрдХ рд╕рд╛рде рдХрдИ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рджреЗрддрд╛ рд╣реИ, рддреЛ server { ... } рдмреНрд▓реЙрдХреНрд╕ рдХреЛ /usr/local/nginx/conf/vhosts рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рд▓реЗ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рд▓рд┐рдЦрдирд╛ include /usr/local/nginx/conf/vhosts/* nginx.conf рдореЗрдВред include /usr/local/nginx/conf/vhosts/* - рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдпрд╣ рд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдПрдХ рддрдВрдЧрд╛рд╡рд╛рд▓рд╛

рдкреВрд░реЗ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рдпреВрдирд┐рдХреЙрд░реНрди рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП - рдЬреЗрдорд╛рдЗрд▓ рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рд░рддреНрди рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕рд╣реА рд╣реИ:
 gem 'unicorn' 
рдФрд░ bundle exec рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдЧреЗрдВрдбрд╛ рдЪрд▓рд╛рдПрдВред рд╡реИрд╕реЗ, рд╕рд┐рдлрд╛рд░рд┐рд╢ рди рдХреЗрд╡рд▓ рдпреВрдирд┐рдХреЙрд░реНрди рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддреА рд╣реИ, рдмрд▓реНрдХрд┐ рд░рддреНрдиреЛрдВ рдХреЗ рд╕рд╛рде рдЖрдиреЗ рд╡рд╛рд▓реА рдХрд┐рд╕реА рднреА рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╛рдЗрд▓реЛрдВ рдкрд░ рднреА рд▓рд╛рдЧреВ рд╣реЛрддреА рд╣реИред рд╡рд┐рд╢рд┐рд╖реНрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рднреАрддрд░ рдпреВрдирд┐рдХреЙрд░реНрди рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рдПрдХ рдорд╢реАрди рдкрд░ рдХрдИ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЕрдЧрд▓рд╛, рдореИрдВ рдПрдХ рд╕рд░реНрд╡рд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреВрдВрдЧрд╛ рдЬреЛ рддрдерд╛рдХрдерд┐рдд рд╢реВрдиреНрдп рдбрд╛рдЙрдирдЯрд╛рдЗрдо рдХреЛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рддреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ / unicorn.rb:
 deploy_to = "/srv/myapp" rails_root = "#{deploy_to}/current" pid_file = "#{deploy_to}/shared/pids/unicorn.pid" socket_file= "#{deploy_to}/shared/unicorn.sock" log_file = "#{rails_root}/log/unicorn.log" err_log = "#{rails_root}/log/unicorn_error.log" old_pid = pid_file + '.oldbin' timeout 30 worker_processes 4 #      ,       listen socket_file, :backlog => 1024 pid pid_file stderr_path err_log stdout_path log_file preload_app true #    ,  ,    . GC.copy_on_write_friendly = true if GC.respond_to?(:copy_on_write_friendly=) #   ,    ,     . before_exec do |server| ENV["BUNDLE_GEMFILE"] = "#{rails_root}/Gemfile" end before_fork do |server, worker| #  ,     ,    . defined?(ActiveRecord::Base) and ActiveRecord::Base.connection.disconnect! #   ,   0 downtime deploy. if File.exists?(old_pid) && server.pid != old_pid begin Process.kill("QUIT", File.read(old_pid).to_i) rescue Errno::ENOENT, Errno::ESRCH # someone else did our job for us end end end after_fork do |server, worker| #      ,     . defined?(ActiveRecord::Base) and ActiveRecord::Base.establish_connection end 


Capistrano

рдареАрдХ рд╣реИ, рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдм рдХреБрдЫ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рд╣реИ рдЬреЛ рдмреБрдирд┐рдпрд╛рджреА рдЪреАрдЬреЗрдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ , рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдХреИрдкрд┐рд╕реНрдЯреНрд░рд╛рдиреЛ рд╕реЗ рдирд┐рдкрдЯрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдХреИрдкрд┐рд╕реНрдЯреНрд░рд╛рдиреЛ рд░рддреНрди рдХреЛ рд╣рдорд╛рд░реЗ рдЬреЗрдордлрд╛рдЗрд▓ рдХреЗ рд╡рд┐рдХрд╛рд╕ рд╕рдореВрд╣ рдореЗрдВ рдбрд╛рд▓реЗрдВ, рдФрд░ рдЖрд░рд╡реАрдПрдо (рд╕рдВрд╕реНрдХрд░рдгреЛрдВ rvm> = 1.1.0 рдХреЗ рд▓рд┐рдП) рдХреЗ рд╕рд╛рде рдПрдХреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдЖрд░рд╡реАрдПрдо-рдХреИрдкрд┐рд╕реНрдЯреНрд░рд╛рдиреЛ рднреА рдбрд╛рд▓реЗрдВ:
 group :development do gem "capistrano" gem "rvm-capistrano" end 
рдордгрд┐ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВ:
 bundle exec capify . 
рдФрд░ рд╣рдореЗрдВ рд▓рдЧрднрдЧ рдЦрд╛рд▓реА рдХреЙрдиреНрдлрд┐рдЧ / рддреИрдирд╛рддреА.рдмреАрдЖрд░ рдлрд╛рдЗрд▓ рдорд┐рд▓рддреА рд╣реИред рдореИрдВ рдЕрдкрдиреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреВрдВрдЧрд╛:
 require 'rvm/capistrano' #   rvm require 'bundler/capistrano' #   bundler.    bundler      ,       . set :application, "myapp" set :rails_env, "production" set :domain, "vasya@rails-production.example.com" #      ssh.             ,    . set :deploy_to, "/srv/#{application}" set :use_sudo, false set :unicorn_conf, "#{deploy_to}/current/config/unicorn.rb" set :unicorn_pid, "#{deploy_to}/shared/pids/unicorn.pid" set :rvm_ruby_string, 'ree' #    ,  Ruby    . set :scm, :git #  git. , ,  -  - svn, ,         git -  git. set :repository, "git@github.com:myprojects/myapp.git" #    . ,         ,   ,     rsa        deployment keys   . set :branch, "master" #        . set :deploy_via, :remote_cache #   ,              .       . role :web, domain role :app, domain role :db, domain, :primary => true before 'deploy:setup', 'rvm:install_rvm', 'rvm:install_ruby' #  rvm  capistrano  ,    cap deploy:setup      rvm_ruby_string . after 'deploy:update_code', :roles => :app do #           - database.yml.       /srv/myapp/shared/config    .           . run "rm -f #{current_release}/config/database.yml" run "ln -s #{deploy_to}/shared/config/database.yml #{current_release}/config/database.yml" end #      unicorn.       -  . #    Rails 3    bundle exec unicorn_rails  bundle exec unicorn namespace :deploy do task :restart do run "if [ -f #{unicorn_pid} ] && [ -e /proc/$(cat #{unicorn_pid}) ]; then kill -USR2 `cat #{unicorn_pid}`; else cd #{deploy_to}/current && bundle exec unicorn_rails -c #{unicorn_conf} -E #{rails_env} -D; fi" end task :start do run "bundle exec unicorn_rails -c #{unicorn_conf} -E #{rails_env} -D" end task :stop do run "if [ -f #{unicorn_pid} ] && [ -e /proc/$(cat #{unicorn_pid}) ]; then kill -QUIT `cat #{unicorn_pid}`; fi" end end 


рдкреБрдирд╢реНрдЪ рдЕрдЧрд░ рдХреЛрдИ рдкреНрд░рд╕реНрддреБрдд рд╕рд╛рдордЧреНрд░реА рдпрд╛ рд░рдЪрдирд╛рддреНрдордХ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рд╕реБрдзрд╛рд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реИ, рддреЛ рдореБрдЭреЗ рдкрдврд╝рдиреЗ рдФрд░ рд╕рд╣реА рдХрд░рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреАред

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


All Articles