Nginx + Passenger + Rails4 Setup on Ubuntu12.04


Outline
  1. 1. 目錄
  2. 2. 一、環境設定 Linux + Rails
  3. 3. 二、環境設定 Nginx (via passenger RubyGems)
  4. 4. 三、環境設定 mysql
  5. 5. 四、部署設定 mina
  6. 6. 五、資安處理
  7. 7. Reference

因為最近要架一個系統,想說從來沒有自己 host server ,就把流程都記錄一下吧。

據說比 Apache 快 數十倍的利器

目錄

  • 一、環境設定 Linux + Rails
  • 二、環境設定 Nginx (via passenger RubyGems)
  • 三、環境設定 mysql(for Mac Hombrew)
  • 四、部署設定 mina
  • 五、資安處理

一、環境設定 Linux + Rails

  • SSH 登入:
1
$ ssh evenchange4@hostip
  • os: Ubuntu 12.04.2 LTS (GNU/Linux 3.2.0-23-generic x86_64)
  • rvm install:
1
$ \curl -L https://get.rvm.io | bash -s stable --rails # Or, --ruby=1.9.3
  • 檢查環境
1
2
3
4
5
6
7
8
9
$ rails -v
Rails 4.0.0
$ ruby -v
ruby 2.0.0p195 (2013-05-14 revision 40734) [x86_64-linux]
$ rvm list
rvm rubies
=* ruby-2.0.0-p195 [ x86_64 ]
1
sudo apt-get install git
1
2
$ gem install therubyracer
$ sudo apt-get install nodejs

二、環境設定 Nginx (via passenger RubyGems)

Nginx (pronounced engine-x) is a free, open-source, high-performance HTTP server and reverse proxy.

-反向代理概念

  • 其中 Web 伺服器可以是 Apache、Nginx,但是它除了提供靜態檔案之外,其餘的任務就只是做 reverse proxy 將 request 分發到應用程式伺服器。

  • 安裝 nginx proxy server 配置:2.2 (via passenger RubyGems)

1
2
3
4
5
6
7
8
9
10
11
$ gem install passenger
$ chmod o+x /home/evenchange4/.rvm/gems/ruby-2.0.0-p195/gems/passenger-4.0.5/
$ chmod o+x /home/evenchange4/.rvm/gems/ruby-2.0.0-p195/gems
$ chmod o+x /home/evenchange4/.rvm/gems/ruby-2.0.0-p195
$ chmod o+x /home/evenchange4/.rvm/gems
$ chmod o+x /home/evenchange4/.rvm
$ chmod o+x /home/evenchange4
$ sudo apt-get install libcurl4-openssl-dev
$ rvmsudo passenger-install-nginx-module
  • 設定 Nginx: $ sudo vi /opt/nginx/conf/nginx.conf ,Add a server block inside http block
1
2
3
4
5
6
7
8
9
10
...
server {
listen 80;
server_name 127.0.0.1;
root /home/evenchange4/test123/public;
passenger_enabled on;
rails_env development; # 切換
#rails_env production;
}
...
1
2
3
4
$ wget -O init-deb.sh http://library.linode.com/assets/1139-init-deb.sh
$ sudo mv init-deb.sh /etc/init.d/nginx
$ chmod +x /etc/init.d/nginx
$ sudo /usr/sbin/update-rc.d -f nginx defaults
  • start/stop/restart nginx
1
$ sudo /etc/init.d/nginx start/stop/restart
  • nginx status
1
$ passenger-memory-stats

三、環境設定 mysql

  • Install(Mac Hombrew):
1
$ brew install mysql
  • Install(Ubuntu):
1
$ sudo apt-get install mysql-server mysql-common mysql-client libmysqlclient-dev
  • run mysql server
1
2
3
4
5
# mac
$ mysql.server start/stop
# ubuntu
$ sudo service mysql start
  • login
1
$mysql -u root -p
  • create database
1
2
mysql> CREATE DATABASE ass_development;
mysql> show databases;
  • 檢查 mysql 是否支援中文 utf8

    1. 更改 /etc/mysql/my.cnf 詳細教學
    2. 砍掉 db
  • 匯入 (必須需要有database name)

1
$ mysql -uroot -pmcc2012 NTUMB_development < code/2013-04-24_10_45.NTUMB_development
  • new RailsApps project,選擇 I want to build my own application 來作設定。

  • production

1
2
3
4
5
$ rake db:drop RAILS_ENV=production
$ rake db:create RAILS_ENV=production
$ rake db:migrate RAILS_ENV=production
$ rake db:seed RAILS_ENV=production
$ sudo /etc/init.d/nginx restart

四、部署設定 mina

  • 因為 capistrano 非常缺乏文檔資料,加上不太支援 Rails4 ,所以挑選 mina 來幫助部署。
  • 透過 mina 的輔助,可以將 source code(須先 commit 到 github上) 透過 ssh 連線自動部署到 hosting server 上。並且可以直接寫 rake script 的指令來隨心所欲的執行指令。
  • mina
1
$ mina init
1
2
# Password prompt in mina doesn't work
set :term_mode, nil
1
$ mina setup
  • 自行到 server 編輯 database.yml
1
2
3
$ git commit -a -m "deploy"
$ git push
$ mina deploy

五、資安處理

Reference

  1. rvmsudo passenger-install-nginx-module
  2. YamlDb