thinってオワコンじゃないですよね?herokuで採用されているし別にいいですよね。
本当はunicorn使いたかったんですが難しい…… ><;
ぐぐると記事沢山出てきますが uninitialized constant errorで起動しない問題が解決できなくてやめちゃいました。いつかリベンジします。
CentOS 6
マシンはvagrant使ってcentos6を用意しました。
参考:http://www.ryuzee.com/contents/blog/4292
vagrantって便利ですね。元々Virtual Boxでwindows動かしてたのですんなりです。ホントに。するっと。
IPアドレスと
config.vm.network :hostonly, "192.168.33.10"
メモリとnameを設定しておきました
config.vm.customize do |vm|
vm.memory_size = 1024
vm.name = 'vagrant_centos6'
end
Ruby
rbenv + ruby-buildで1.9.3-p194をインストール
Thin
Gemfileのgroup :productionにgem 'thin'を追加して普通にbundle install
config/thin.ymlは
pid: tmp/pids/thin.pid
log: log/thin.log
servers: 1
port: 3000
daemonize: true
environment: production
user: vagrant
group: staff
以下で起動、停止、再起動
$ be thin start|stop|restart -C config/thin.yml
Nginx
yumでnginxをインストール(参考:http://blog.livedoor.jp/sasata299/archives/51810645.html)
/etc/nginx/nginx.confは
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
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 main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
gzip on;
# include /etc/nginx/conf.d/*.conf;
upstream backend {
server localhost:3000;
}
upstream backend2 {
server localhost:3001;
}
server {
listen 80;
server_name centos6.vag;
location / {
proxy_pass http://backend;
}
}
server {
listen 80;
server_name 2.centos6.vag;
location / {
proxy_pass http://backend2;
}
}
}
試す
あとはmacのhostsに
192.168.33.10 centos6.vag
192.168.33.10 2.centos6.vag
を設定してブラウザでアクセス!
サクセス!
でもnginx.confの書き方冗長だなぁもっといいのあるんだろうか。
※追記
上記の状態で試しに request.url を覗いてみたら http://backend2/ とかでちゃったよ!困るよ!
というわけでnginx.confを一部修正してみたら問題なく動いた
...省略...
upstream 2.centos6.vag {
server localhost:3001;
}
server {
listen 80;
server_name 2.centos6.vag;
location / {
proxy_pass http://2.centos6.vag;
}
}
...省略...
request.url でhttp://2.centos6.vagが返ってきた!
※追記2
画像など静的ファイルが返らないことがわかったので以下のようにconfig修正
server {
listen 80;
server_name 2.centos6.vag;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_max_temp_file_size 0;
location ~ .*\.(jpg|JPG|gif|GIF|png|PNG|swf|SWF|css|CSS|js|JS|inc|INC|ico|ICO) {
root /home/vagrant/sample2/public;
ssi on;
break;
}
location / {
proxy_pass http://2.centos6.vag;
}
}
※追記3
thinの再起動などダウンタイムにnginxのデフォルトエラーページが返されるのでconfig追加
error_page 500 502 503 504 /500.html;↲
location = /500.html {↲
root /home/vagrant/sample2/public;↲
}
※追記4
マシンを再起動したときにthinも自動起動するようにした!
/etc/init.d/sampleを作成
#!/bin/sh
# chkconfig: 2345 86 25
# description: Sample
#
PATH=/home/vagrant/.rbenv/shims:/home/vagrant/.rbenv/bin:$PATH
eval "$(rbenv init -)"
APP_DIR=/home/vagrant/sample
THIN_CONFIG=$APP_DIR/config/thin.yml
case $1 in
start)
cd $APP_DIR
bundle exec thin start -C $THIN_CONFIG
;;
stop)
cd $APP_DIR
bundle exec thin stop -C $THIN_CONFIG
;;
restart)
cd $APP_DIR
bundle exec thin restart -C $THIN_CONFIG
;;
esac
exit 0
登録する
$ sudo /etc/init.d/sample start
$ sudo chkconfig sample on