2011-11-13 3 views
11

서버의 Rails 3.1.1 응용 프로그램에 대한 유용한 배포 자습서를 찾고 있습니다. 그리고 선을 통해 나는 완전한 것을 의미합니다. 내가이 질문을 게시하는 이유는 웹 (Google, 블로그, 서적, 기타 stackoverflow 질문 등 ...)에있는 많은 튜토리얼이 있지만 그것들 모두는 배포 프로세스의 문제 또는 필요한 환경과 일치하지 않는 전개 환경에 대해 몇 가지 가정을하십시오.Rails 3.1 응용 프로그램 배포 자습서

서버에 Rails 응용 프로그램을 배포하면 구성해야하는 다양한 프로그램과 도구가 필요하다는 것을 알게되고, 어쨌든 나는 항상 "작은"것들에 집착하여 나를 매우 좌절하게 만듭니다.

그럼 시작부터 살펴 보겠습니다. 제가 지금 가지고있는 것은 SSH와 도메인 이름을 통해 액세스 할 수있는 서버입니다. www.example.com으로 전화를 걸면됩니다. 서버는 신선한 Ubuntu 10.04 x64를 실행하고 사용자가 설치되어 있습니다. 즉 root (루트를 통해 SSH로 서버에 액세스)입니다. 참고! 아파치, 루비, PHP, MySQL, cPanel 또는 다른 어떤 패널도 설치되어 있지 않습니다. 새로운 설치와 함께 최소한으로 제공됩니다.

또한 웹 서버는 단일 응용 프로그램을 호스트하며 데이터베이스는 동일한 시스템에서 실행됩니다. 나는 이미 다중 사용자 설치 프로세스를 사용하여 RVM을 사용하여 이런 짓을

루비를 (설치

  • : 내 지식에서

    은 레일 응용 프로그램을 배포하는 과정은 다음과 같은 시나리오를 다음과 단순히 루트 사용자 만 있고 자동으로 수행하기 때문에). 이것은 좋은 애프터 워드가 작동하는 것 같습니다 :

    Ruby를 직접 설치하면 RVM을 통하지 않고 설치하는 것이 더 효과적일까요? (아마도 효율성 측면에서 생각할 것입니다 - RVM은 약간의 마술을합니다. scence는 내가 이해하지 못하는 방식으로 몇몇 bash_profile 파일을 수정하는 것입니다. 그리고 이것은 어떻게 든 침해적인 것처럼 보입니다 ...)?

    RVM을 통해 별도의 사용자로 설치하는 것이 더 안전합니까 (안전 문제가 발생할 수 있습니까?).

    • 필요한 보석 이제 루비 보석의 가장 초기 설정 측면이 함께 설치하는 것입니다 무슨 설치되어 있는지

    ?

    번들러 만 설치 했으므로 일단 서버에 응용 프로그램을 업로드하면 번들 설치 명령을 실행하여 필요한 응용 프로그램을 설치합니다.

    질문 - 손에 레일 젬을 설치해야합니까? 다른 보석을 설치해야합니까? 나를 위해 까다로운 얻는 곳

    • 웹 서버

    이다. 나는 배치를 위해 아파치와 mod-passenger를 사용하려고 노력하고있다. (가장 인기가있는 것 같다.)그래서 아파치 웹 서버와 여객 젬 그리고 모든 관련 의존성 (승객이 언급 한 라이브러리)을 설치했습니다.

    이제 문제가 발생합니다. 우선 사용자와 관련된 것입니다. 아파치는 어떻게 달릴까요? 나는 각 사용자 밑에있는 것을 의미합니까? 설치 한 후 루트 사용자를 사용하여 (다시) 시작한 경우 루트 사용자로 영구적으로 실행됩니까? 이것은 나쁜 것입니까? 그렇다면 다른 사용자를 만들어야합니까? 그렇다면 어떻게? 새 사용자를 어떤 그룹에 배치해야하는지, 어떤 권한을 가져야하는지 (즉, 어떤 폴더에 액세스 권한이 있어야하는지). 이 경우 아파치를 시작하는 방법

    • 웹 사이트 구성 (루트 아래에 해당 사용자에 따라 등, 구성 파일에 어딘가에 줄을 추가)

    는 어디 웹 사이트 구성을 넣어 물건? apache.conf에 넣어도 되나요? 아니면 사이트에 새 파일을 만들어야합니까? 또는 단순히 이미 해당 파일이있는 파일을 다시 사용해야합니까? 이전 단계에서 새 사용자가 생성 된 경우 구성 파일과 관련하여 어떤 권한을 가져야합니까?

    또한 ... 레일 애플리케이션을 어디에 넣을 까? 어떤 폴더에서 가장 좋을까요? 집 아래 어딘가에? 어쩌면/var/www 아래? 이 기능이 앱을 제공하는 아파치 프로세스의 권한에 어떻게 영향을 미치는지 알고 싶습니다. (일반적으로 앱을 제공하는 동안 문제가 발생하지만 특정 폴더에 대한 권한이 없다는 불만을 토로합니다. 완전히 이해하지 못하는 새 애셋 파이프 라인을 사용하여 애셋 파일이 생성되고 내가 MySQL을 사용하고 설치하고있어

    • 데이터베이스) ... 데이터베이스로

    을 상위 폴더의 권한을 상속하는 것은 매우 간단합니다. 내가 여기에있는 질문은 다시 사용자 관련입니다. 데이터베이스에 특별한 사용자를 사용해야합니까? MySQL은 실제로 사용자를 관리합니다 (내부 사용자입니까, 아니면 Linux 사용자입니까 ...?). 데이터베이스 사용자가 위에서 "웹 사용자"와 같아야합니까? 아니면 다른 것이어야합니까?

    • 자산 여기

    내가 정말 손실됩니다. 자산 파이프 라인을 만드는 데 문제가 있습니다. railscasts 에피소드와 레일 웹 사이트 자습서를 확인한 결과, 이론적으로 이해할 수있는 것 같지만 실제로는 문제가 있습니다.

    그래서 여기서 질문은 자산을 사전 컴파일하기 위해 어떤 명령을 실행해야합니까? (레이크 에셋을 실행하려고합니다 : 프리 컴파일). 괜찮 니? production.rb 파일에서 무엇을 변경해야합니까? 위에서 생성 된 웹 사용자 또는 데이터베이스 사용자와 관련하여 생성 된 자산은 어떻게 작동합니까? 개인적으로이 단계에서 문제가 발생합니다. 즉, 로그 파일은 일부 CSS 파일에 액세스 할 수 없다고 말합니다 (예 : 공급 업체/자산 폴더 아래에 jqplot 라이브러리가 설치되어 있고 해당 파일에 액세스 할 수 없음). 어떻게 든 매니페스트 파일을 추가해야합니까? ?).

    멋진 기사 또는이 모든 것을 설명하는 자료를 가리키면 정말 좋을 것입니다. 문제가되는 주요 영역은 Apache, Passenger, Ruby, Rails 및 MySQL이 Linux 사용자와 어떻게 상호 작용하는지입니다. Rails 앱 폴더에 대한 권한을 올바르게 설정하는 방법은 무엇입니까? 자산 파이프 라인이이 사용자 권한 항목에 어떤 영향을 줍니까?

    감사합니다

답변

8

여기에 배포 레일의 내 방법 :

  • 루비 설치
그것과 함께 제대로 실행 얻을 매우 까다로운 때문에 RVM을 사용하지 않을

cron 작업과 같은 것들. Doable (예 : 래퍼)하지만 약간의 번거 로움. 해당 시스템에 다른 Ruby 버전이 필요하지 않으면 직접 소스에서 설치하십시오.

  • 보석

그냥 Bundler를 그 마술을 할 수 있습니다. 플래그 --without test development --deployment과 함께 설치하는 것을 잊지 마십시오. 나는 그렇게 생각하지 않을 것이다. 번들러가 있는지 확인하십시오. (Apache 또는 Nginx에 하나 포함) 여객를 사용

  • 웹 서버

벌금 쉬운 선택입니다. apt에서 아파치를 설치하면 특수 사용자로 실행됩니다.

Apache가 우분투에서 자동으로 올바르게 구성되었습니다. 재부팅 할 때 시작됩니다.

  • 웹 사이트 구성

모든 구성에서의/etc/아파치합니다./etc/apache2/sites-available에 가상 호스트 구성을두고 사용하려면 a2ensite을 사용하십시오.

우분투의 기본 위치이기 때문에 앱을 /var/www에 넣으십시오. 나는 보통 배포 사용자를 만듭니다.

사용자가 www-data 그룹에 앱을 할당하여 애플리케이션에 액세스 할 수 있는지 확인하십시오.

  • 데이터베이스

MySQL은 자체 사용자 시스템이 있습니다. 루트 사용자로 로그인하고 SQL을 사용하여 새 사용자를 만듭니다 GRANT ALL ON 'application_production'.* TO 'deploy' IDENTIFIED BY 'some password';

  • 자산

자산이 응용 프로그램을 소유 한 사용자로 생성해야한다. production.rb에 css 및 javascript 파일을 추가해야합니다.예를 들어 :

config.assets.precompile += %w(backend.css) 
  • 결론

Capistrano 같은 배포 도구를 사용하는 데 도움이됩니다. capify을 실행할 때는 Capfile에서 해당 줄의 주석 처리를 제거하여 자산을 컴파일하십시오. 여기 내거야 :

ENV['RAILS_ENV'] = 'production' 
load 'deploy' if respond_to?(:namespace) # cap2 differentiator 
load 'deploy/assets' 
load 'config/deploy' 
require 'capistrano/ext/multistage' 
require "bundler/capistrano" 
require 'capistrano_colors' 

이것은 내가 보통 내 레일 애플 리케이션을 설치하는 방법이다. 이게 당신이 갈 수 있기를 바랍니다. 최근에 capistrano-chef-solo라고하는 Chef-solo를 Capistrano와 통합하기위한 보석을 작성했습니다. 알파로 매우 복잡하기 때문에 배포를 시작하기 만하면되지만, 도움이 될 수 있습니다.

+0

나는 여기 거의 모든 것에 동의한다. RVM없이 시스템 루비를 컴파일하고 설치하려면 [ruby-build] (https://github.com/sstephenson/ruby-build)를 사용합니다 (rbenv없이). Capistrano를 사용한다면 bundler gem이 설치되어 있어야하고 나머지는 올바른 명령 행 인수로 설치해야합니다. Cap이 대신 할 것입니다. –