다음 명령으로 apache를 설치하자.
- $ sudo apt-get install apache2
다음의 서버 module들도 사용할 수 있도록 하자
- $ sudo a2enmod proxy_balancer
$ sudo a2enmod proxy_ftp
$ sudo a2enmod proxy_http
$ sudo a2enmod proxy_connect
$ sudo a2enmod rewrite
가상호스트 설정
가상호스트를 설정하자. (http://httpd.apache.org/docs/2.2/ko/vhosts/examples.html 참조 )
여기서는 port 80은 defaut를, port 3000번을 rails application를 위해 사용할 것이다.
설정에 대한 또다른 예는 [Rails] Window에서 apache + proxy_balancer 사용하기 에 있다.(host 이름을 기반)
/etc/apache2/port.conf 에 다음을 추가한다.
- Listen 3000
/etc/apache2/sites-available 에 myapp를 생성해서 다음 설정을 한다. sites-available에는 수행가능한 서버들이 파일로 들어 있다.
- <Proxy balancer://myapp_mongrel_cluster>
BalancerMember http://localhost:3001
BalancerMember http://localhost:3002
</Proxy>
<VirtualHost my_ip:3000>
ServerAdmin webmaster@localhost
DocumentRoot /myapp_path/public
<Directory "/home/pichu/www/pichu/public" >
Options FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
RewriteEngine On
# 정비 페이지가 있나 살펴보고 모든 요청을 재지정한다.
RewriteCond %{DOCUMENT_ROOT}/system/maintenance.html -f
RewriteCond %{SCRIPT_FILENAME} !maintenance.html
RewriteRule ^.*$ /system/maintenance.html [L]
# 정적으로 만들어 둔 인덱스 페이지가 있다면 아파치가 직접 서비스할 수 있도록 한다.
RewriteRule ^/$ /index.html [QSA]
# 레일스가 캐시해 둔 페이지가 있다면 아파치가 직접 서비스 할 수 있도록 한다.
RewriteRule ^([^.]+)$ $1.html [QSA]
# 모든 동적 요청은 백엔드 클러스터로 재지정한다.
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
RewriteRule ^/(.*)$ balancer://myapp_mongrel_cluster%{REQUEST_URI} [P,QSA,L]
ErrorLog /home/myapp/log/err_log
CustomLog /home/myapp/log/ankfactions_log combined
</VirtualHost>
/etc/apache2/sites-enabled 에 /etc/apache2/site-available에 대한 symbolic link를 건다. sites-enabled에는 수행할 서버들이 포함되어 있다.
- $ ln -s /etc/apache2/sites-available/pichu /etc/apache2/sites-enabled/001-pichu
/etc/apache2/mods-available/proxy.conf 파일을 다음과 같이 변경한다.
- <Proxy *>
AddDefaultCharset off
Order deny,allow
Allow from localhost <= localhost로 부터의 접근을 허용.
#Deny from all
#Allow from .example.com
</Proxy>
아파치를 다시 시작한다.
- sudo /etc/init.d/apache2 restart
에러들
만약 외부에서 접속했는데 페이지를 가져오는데 대략 5초정도 delay가 생긴다면,
Allow from localhost 를 Allow from 127.0.0.1 로 변경하자.
delay가 생기는 이유.
apache 가 접속한 client의 ip에 대해 mdns로 domain resolution을 하기 때문이다. 즉 client의 ip가 어떤 domain에 속해 있는지 client에게 물어본다. 만약 client에 이 요청에 대해 응답할 수 있는 protocol이 설치되어 있지 않다면 apache는 timeout이 발생할 때까지 계속 기다리고.. 그래서 5초정도 delay가 생길 수 있다. 그럼 apache는 왜 client의 doamin이 무었인지 궁금해 할까? 그것은 access control을 ip가 아닌 도메인 이름으로 정했기 때문이다.(위의 예에서는 localhost) access control의 이름 중 한개라도 도메인 이름이 있으면 apache는 access control을 위해 client의 ip가 어느 도메인에 속하고 있는지를 알아내려고 한다.
이 글은 스프링노트에서 작성되었습니다.
'Rails > 배포하기' 카테고리의 다른 글
| [Rails] Webistrano를 이용해서 배포하기 (0) | 2008/05/28 |
|---|---|
| [Rails] passenger(mod_rails) 사용해서 배포하기 (0) | 2008/04/17 |
| [Rails] debian에 apache 설치 및 설정 (0) | 2008/02/15 |
| god 사용해서 mongrel들 감시하기 (0) | 2008/02/12 |
| [Rails] Window에서 apache + proxy_balancer 사용하기 (0) | 2008/01/29 |
| [Rails] linux 부팅하면서 mongrel cluster를 실행시키기 (0) | 2008/01/29 |
debian은 apt-get이라는 package관리 시스템을 가지고 있다. 이 시스템을 이용해서 온라인을 통해 손쉽게 package들을 설치 및 삭제할 수 있다. 그런데 데비안은 package를 매우 보수적인 관점에서 관리하고 있기 때문에 stable의 버젼이 매우 낮은 경향이 있다. 최신 버젼을 인스톨하고 싶은 경우는 어떻게 하면 될까?
여기서는 ruby 1.8.6 버젼을 설치해 보자.
현재(2008.1.1) debian의 ruby1.8의 statble 버젼은 1.8.5 이다. 1.8.6을 설치하기 위해서는 testing 버젼을 설치해야 한다.
package의 내용은 데비안 패키지 홈페이지를 통해서 확인가능하다.
/etc/apt/sources.list 를 다음과 같이 수정하자.
- #Stable
deb http://ftp.kr.debian.org/debian stable main non-free contrib
#Testing
deb http://ftp.kr.debian.org/debian testing main non-free contrib
#Unstable
deb http://ftp.kr.debian.org/debian unstable main non-free contrib
/etc/apt/preference 를 다음과 같이 수정하자.(없으면 생성하자)
- Package: *
Pin: release a=stable
Pin-Priority: 700
Package: *
Pin: release a=testing
Pin-Priority: 650
Package: *
Pin: release a=unstable
Pin-Priority: 600
위 preference에 의해 version에 대한 특별한 지시가 없으면 stable 이 높은 우선순위를 가지고 설치된다.
aptitude update
aptitude update로 패키지들의 정보를 사이트와 동기화 시키자.
실행도중 다음 에러가 발생한다면
- E: Dynamic MMap ran out of room
- E: Error occured while processing sqlrelay-sqlite (NewPackage)
- E: Problem with MergeList /var/lib/apt/lists/ftp.us.debian.org_debian_dists_woody_contrib_binary-i386_Packages
- E: The package lists or status file could not be parsed or opened.
/etc/apt/apt.conf.d/70debconf 에 다음을 추가하자.
- APT::Cache-Limit "83886080";
이제 준비가 완료됬으니,
testing 버젼을 설치하자.
- apt-get -t testing install ruby1.8
Reference
http://jaqque.sbih.org/kplug/apt-pinning.html
이 글은 스프링노트에서 작성되었습니다.
'그 밖에..' 카테고리의 다른 글
| IE 8 beta 의 develper tool (0) | 2008/03/10 |
|---|---|
| [mysql] 원격으로 db에 접속하기 (0) | 2008/02/15 |
| [Rails] Logrotate로 log 관리하기 (0) | 2008/01/29 |
| debian 에 최신 버젼의 package 설치하기 (0) | 2008/01/29 |
| apt-get 에 대해 더 자세히 알아보기 (0) | 2008/01/29 |
| debian에서 package 관리 (0) | 2008/01/29 |
apt-get은 debian에서 특정 package를 설치하거나 삭제할때 사용하는 통합 utility이다.
사실, 이것은 자신이 하는 것은 download의 역할이고, 설치 및 관리의 대부분은 dpkg명령이나 dselect명령을 통해서 이루어진다.
download받은 package 파일들은, /var/cache/apt/archives/ directory밑에 저장된다.
저장되었던 package 파일은 앞부분의 text header와 tar.gz 형태로 압축된 binary가 묶여진 형태로 파악된다.
설치를 하게 되면,
dpkg파일이 실행되고, 실행에 관련된 script들은, /var/lib/dpkg/info/ 에 저장되어 있으며,
하나의 package는
- package.list
package.md5sums
package.postinst
package.preinst
package.postrm
package.prerm
과 같은 파일들로 구성되어 있다. install/remove하기 전에 실행시키는 script들로, 설치/삭제중 문제가 발생했다면 해당 script를 분석하면 자세한 원인을 알 수 있다.
이 글은 스프링노트에서 작성되었습니다.
'그 밖에..' 카테고리의 다른 글
| IE 8 beta 의 develper tool (0) | 2008/03/10 |
|---|---|
| [mysql] 원격으로 db에 접속하기 (0) | 2008/02/15 |
| [Rails] Logrotate로 log 관리하기 (0) | 2008/01/29 |
| debian 에 최신 버젼의 package 설치하기 (0) | 2008/01/29 |
| apt-get 에 대해 더 자세히 알아보기 (0) | 2008/01/29 |
| debian에서 package 관리 (0) | 2008/01/29 |
우선 debian에서 관리하는 package에 대해서 간단히 알아보자.
- debian은 package들에 이름을 붙여서 관리한다. ruby의 경우 1.8대 버젼의 이름은 ruby1.8 이고, 1.9대 버젼은 ruby1.9이다.
- debian은 package들을 여러가지 배포판으로 나누어 구분한다. 예를 들어 ruby1.8의 경우 stable 버젼은 1.8.5, testing 버젼은 1.8.6, unstable 버젼은 1.8.6 이다.
배포판의 종류는
stable(etch)
- debian의 최신 공식 릴리즈이다. 안정적이지만 보수적인 debian의 성향으로 인해 최신버젼은 아닐 수 있다.
testing(lenny)
- stable에 포함되기위해 대기중인 릴리즈들이다.
unstable(sid)
- 가장 최근 버젼의 릴리즈, testing에 포함되기 위한 기준을 만족하지 못한 상태
패키지 목록 보기
- 설치된 목록을 보여준다.
- dpkg -l
- ruby라는 이름을 가진 모든 목록을 보여준다.
- dpkg -l *ruby*
- aptitude를 이용하면 더 많이 나온다.
- aptitude search ruby
- p : 설치되지 않았음
- c : 삭제되었으나 configuration은 남아 있음
- i : 설치되었음
- v : 이것은 가상임.(virtual)
- A : 자동으로 설치되었음.
패키지에 대한 정보
ruby1.8에 대한 정보를 보여준다.
- dpkg -s ruby1.8
혹은
- aptitude show ruby1.8
설치(install)
apt-get은 debian의 package를 관리해 주는 CLI명령이다.
- apt-get install ruby1.8
혹은
- aptitude install ruby1.8
package 를 가져오는 곳에 대한 정보는 /etc/apt/sources.list 를 참조한다.
제거(remove)
- apt-get remove ruby1.8
혹은
- aptitude remove ruby1.8
configuration 까지 제거하고 싶으면
- aptitude purge ruby1.8
패키지 목록 갱신
/etc/apt/sources.list를 참조해 얻을 수 있는 설치 가능한 패키지 목록을 갱신한다.
- apt-get update
혹은
- aptitude update
최신버젼으로 업그레이드
설치된 패키지들을 최신 버젼으로 업그레이드 한다.
- apt-get upgrade
혹은
- aptitude upgrade
/etc/apt/sources.list
package들을 가져올 위치 정보를 담고 있다.
testing 버젼을 설치하기를 보라.
에러에 대한 대처
설치 도중 다음과 같은 에러가 발생한다면
- Media Change: Please insert the disc labeled 'Debian GNU/Linux 4.0 r2 _Etch_ - Official i386 DVD Binary-1 20080102-13:19' in the drive '/cdrom/' and press enter
package를 가져오는 곳이 cdrom이어서 cd를 넣으라고 하는 것이니,
/etc/apt/sources.list 에서 다음을 주석으로 처리.
- #deb cdrom:[Debian GNU/Linux 4.0 r2 _Etch_ - Official i386 DVD Binary-1 20080102-13:19]/ etch contrib main
이 글은 스프링노트에서 작성되었습니다.
'Rails > 배포하기' 카테고리의 다른 글
| [Rails] Window에서 apache + proxy_balancer 사용하기 (0) | 2008/01/29 |
|---|---|
| [Rails] linux 부팅하면서 mongrel cluster를 실행시키기 (0) | 2008/01/29 |
| debian에서 package 관리 (0) | 2008/01/29 |
| [Rails] Capistrano 2.0 을 사용해서 deployment 자동화하기 (0) | 2008/01/29 |
| [Rails] debian에서 rails application 설치 및 실행하기 (0) | 2008/01/29 |
| 다음 캘린더 개발이야기 (0) | 2008/01/28 |
우선 debian에서 관리하는 package에 대해서 간단히 알아보자.
- debian은 package들에 이름을 붙여서 관리한다. ruby의 경우 1.8대 버젼의 이름은 ruby1.8 이고, 1.9대 버젼은 ruby1.9이다.
- debian은 package들을 여러가지 배포판으로 나누어 구분한다. 예를 들어 ruby1.8의 경우 stable 버젼은 1.8.5, testing 버젼은 1.8.6, unstable 버젼은 1.8.6 이다.
배포판의 종류는
stable(etch)
- debian의 최신 공식 릴리즈이다. 안정적이지만 보수적인 debian의 성향으로 인해 최신버젼은 아닐 수 있다.
testing(lenny)
- stable에 포함되기위해 대기중인 릴리즈들이다.
unstable(sid)
- 가장 최근 버젼의 릴리즈, testing에 포함되기 위한 기준을 만족하지 못한 상태
패키지 목록 보기
- 설치된 목록을 보여준다.
- dpkg -l
- ruby라는 이름을 가진 모든 목록을 보여준다.
- dpkg -l *ruby*
- aptitude를 이용하면 더 많이 나온다.
- aptitude search ruby
- p : 설치되지 않았음
- c : 삭제되었으나 configuration은 남아 있음
- i : 설치되었음
- v : 이것은 가상임.(virtual)
- A : 자동으로 설치되었음.
패키지에 대한 정보
ruby1.8에 대한 정보를 보여준다.
- dpkg -s ruby1.8
혹은
- aptitude show ruby1.8
설치(install)
apt-get은 debian의 package를 관리해 주는 CLI명령이다.
- apt-get install ruby1.8
혹은
- aptitude install ruby1.8
package 를 가져오는 곳에 대한 정보는 /etc/apt/sources.list 를 참조한다.
제거(remove)
- apt-get remove ruby1.8
혹은
- aptitude remove ruby1.8
configuration 까지 제거하고 싶으면
- aptitude purge ruby1.8
패키지 목록 갱신
/etc/apt/sources.list를 참조해 얻을 수 있는 설치 가능한 패키지 목록을 갱신한다.
- apt-get update
혹은
- aptitude update
최신버젼으로 업그레이드
설치된 패키지들을 최신 버젼으로 업그레이드 한다.
- apt-get upgrade
혹은
- aptitude upgrade
/etc/apt/sources.list
package들을 가져올 위치 정보를 담고 있다.
testing 버젼을 설치하기를 보라.
에러에 대한 대처
설치 도중 다음과 같은 에러가 발생한다면
- Media Change: Please insert the disc labeled 'Debian GNU/Linux 4.0 r2 _Etch_ - Official i386 DVD Binary-1 20080102-13:19' in the drive '/cdrom/' and press enter
package를 가져오는 곳이 cdrom이어서 cd를 넣으라고 하는 것이니,
/etc/apt/sources.list 에서 다음을 주석으로 처리.
- #deb cdrom:[Debian GNU/Linux 4.0 r2 _Etch_ - Official i386 DVD Binary-1 20080102-13:19]/ etch contrib main
이 글은 스프링노트에서 작성되었습니다.
'그 밖에..' 카테고리의 다른 글
| IE 8 beta 의 develper tool (0) | 2008/03/10 |
|---|---|
| [mysql] 원격으로 db에 접속하기 (0) | 2008/02/15 |
| [Rails] Logrotate로 log 관리하기 (0) | 2008/01/29 |
| debian 에 최신 버젼의 package 설치하기 (0) | 2008/01/29 |
| apt-get 에 대해 더 자세히 알아보기 (0) | 2008/01/29 |
| debian에서 package 관리 (0) | 2008/01/29 |
debian 위에 설치할 목록은 다음과 같다.
- Ruby 1.8.5
- Ruby on Rails 1.2.3
- MySQL 5.x Server
- Apache 2.2.x
- Mongrel Cluster
먼저 apt-get 명령을 이용해서 debian 을 debian의 package들을 update하자
- sudo apt-get update
sudo apt-get dist-upgrade
Mysql 설치
mysql을 설치하자.
- $ sudo apt-get install mysql-server mysql-client libmysqlclient15-dev
다음 명령을 통해 root의 password를 설정하자
- $ mysqladmin -u root -h localhost password 'secret'
$ mysqladmin -u root -h myhostname password 'secret'
root로 접속해 database를 생성하자.
- $ mysql -u root -p
Enter password:
mysql> create database myapp
사용자를 생성하고 db 권한을 부여하자.
- mysql> insert into user (host, user, password) values('localhost', 'myid', password('123456'))
- mysql> insert into db values ('%', 'myapp', 'myid', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y' ... )
- mysql> flush privileges
% 는 모든 대역대에서의 접근을 허용함.
원격으로 db에 접근하고 싶다면 [mysql] 원격으로 db에 접속하기 를 참조.
Ruby, Gem, Rails 설치
다음 명령은 ruby 와 rails 그리고 필요한 gem들을 설치해 준다.
- $ sudo
aptitude install rails
현재(7월 31일) ruby의 최신 version은 1.8.6이지만 위 명령으로는 1.8.5가 설치된다. debian의 보수적인 정책때문이라고 한다.
ruby1.8.6을 설치하는 방법은 debian 에 최신 버젼의 package 설치하기를 참조
다음은 rubygem을 설치하자. rubygem은 직접 설치해야 한다.
여기 에서 최신 rubygem을 다운로드하자. 만약 그것이 rubygems-0.9.4.tgz 이라면
- $ wget http://rubyforge.org/frs/download.php/17190/rubygems-0.9.4.tgz
$ tar xvf rubygems-0.9.4.tgz
$ cd rubygems-0.9.4/
$ sudo ruby setup.rb
$ gem -v
이제 필요한 gem들을 설치하자.
- $ sudo gem install rake
- $ sudo gem install mongrel
- $ sudo gem install mongrel_cluster
중간점검
이제 rails application이 제대로 동작하는지 중간 점검을 핑계로 application을 실행해 보자.
우선 rails application을 다운 혹은 생성한 후 db migration을 수행한다.
- rake migrate RAILS_ENV=production
그리고 rails applicaiton을 실행한다.
- ruby script/server
에러들
실행중 mysqld.sock 를 못찾겠다면서 다음과 같은 에러가 발생하면
- $ rake migrate
... (bla bla) ...
rake aborted!
No such file or directory - /tmp/mysql.sock
여러가지 방법이 있는데 다음을 database.yaml 에 추가하거나,
- production:
adapter: mysql
socket: /var/run/mysqld/mysqld.sock
database: photos_development
username: (bla bla)
password: (bla bla)
host: localhost
다음과 같이 symbolic link를 이용하자
- ln -s /var/run/mysqld/mysqld.sock /tmp/mysql.sock
실행 중 아래와 같이 openssl이 없다는 에러가 발생한다면
- no such file to load — openssl
openssl 라이브러리를 설치해 주자.
- mongrel_cluster 설정을 해서 실행시켜 보자.
- $ sudo apt-get install libopenssl-ruby1.8
mongrel_cluser를 이용해서 서버 실행시키기
- $ mongrel_rails cluster::configure -e production -p 3001 -a 127.0.0.1 -N 2 -c /myapp_path
위 명령은 myapp/config/mongrel_cluster.yml 를 생성한다.
만약 외부에서 mogrel server로 직접 접속하기를 원한다면 ip를 127.0.0.1 에서 host ip로 변경한다.
이제 server를 실행해 보자
- $ mogrel_rails cluster::start => 실행
- $ mogrel_rails cluster::stop => 중지
Apache 2.2 설치
apache 의 설치는 [Rails] debian에 apache 설치 및 설정
nginx
rails와 궁합이 더 잘맞는다고 하는데 debian에 설치가 잘 안되서.. 나중에 해보자.
- http://wiki.codemongers.com/Nginx
- http://www.aidanf.net/blog/deploying-rails-applications-using-nginx
참조
http://ariejan.net/2007/06/20/rails-production-server-setup-and-deployment-on-ubuntudebian/
이 글은 스프링노트에서 작성되었습니다.
'Rails > 배포하기' 카테고리의 다른 글
| debian에서 package 관리 (0) | 2008/01/29 |
|---|---|
| [Rails] Capistrano 2.0 을 사용해서 deployment 자동화하기 (0) | 2008/01/29 |
| [Rails] debian에서 rails application 설치 및 실행하기 (0) | 2008/01/29 |
| 다음 캘린더 개발이야기 (0) | 2008/01/28 |
| [Rails] seesaw 사용해서 서비스를 우아하게 재시작하기 (0) | 2008/01/28 |
| [Rails] Capistrano와 seesaw를 이용해서 배포하기 (0) | 2008/01/28 |