Passenger/Nginx/Ubuntu/MySQL詳盡部署Rails 4.2.1/Ruby2.2.2


關於Rails部署在Ubuntu下,網上有很多相應的方法。剛開始學習時,部署成了最大的難題。相對於Java的部署,要更復雜些,更重要Rails對Windows的支持不好,所以建議使用Linux進行部署。

我的VPS為Linode的Ubuntu14.04 LTS,總結一下網上所學到的知識和自己的部署過程,以方便初學者可以更容易的部署環境。因為我剛開始部署時,遇到了非常多的問題,而且Rails更新快,中文資料跟不上Rails的發展,每個Rails版本的更新都有不少的區別。昨天重新部署了一下VPS,過程很順利,下面跟大家分享一下部署的過程和一些注意懂問題。

 

更新源

$sudo apt-get update
$sudo apt-get upgrade

 

校正時區 

$sudo dpkg-reconfigure tzdata

選擇Asia,然后再選擇自己所在的時區【shanghai】。

 

安裝所需的linux包 

$sudo apt-get install build-essential bison openssl libreadline6 libreadline6-dev curl git-core zlib1g zlib1g-dev libssl-dev libyaml-dev  libxml2-dev libxslt-dev autoconf libc6-dev zlib1g-dev libssl-dev build-essential curl git-core libc6-dev g++ gcc

 

添加一個rails用戶和一個passenger用戶組 

$sudo addgroup server
$sudo adduser deploy
$sudo usermod -G server,www-data,sudo deploy
$su - deploy

 

Ruby安裝(開發環境RVM安裝)

 

安裝 rvm(可以進行ruby版本控制)

gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3
\curl -sSL https://get.rvm.io | bash -s stable

安裝過程命令行有詳細的提示。

 

加載rvm (只需第一次安裝時加載)

$source .bashrc

 

安裝完畢后,重啟終端,可以根據以下這個命令看一下是否安裝成功:

$rvm –v

 

打開bashrc文件

$sudo vim ~/.bashrc
#添加以下代碼:
[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm"
#然后終端運行
$source .bashrc

如果有類似與版本提示相關而非報錯,說明安裝成功。如果這里說RVM不是一個命令,最簡單的辦法是關閉命令行重新打開一個再試。

 

安裝Ruby

$rvm install 2.2.2  #2.2.2為ruby的版本

 

這里假設安裝的版本是2.2.2,安裝命令非常簡單,安裝完成后,需要設置默認的Ruby版本如下:

$rvm 2.2.2 --default  #設置2.2.2為默認的版本
$ruby –v #查看當前ruby的版本

查看當前Ruby的版本,方法同上,碰到檢測不到的時候先關閉命令窗口再重新打開。(注意:每次關閉命令窗口后,登錄的用戶名均使用剛剛添加的帳號進行登錄)

Ruby安裝(服務器Rbenv)

git clone git://github.com/sstephenson/rbenv.git ~/.rbenv
# 用來編譯安裝 ruby
git clone git://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
# 用來管理 gemset, 可選, 因為有 bundler 也沒什么必要
git clone git://github.com/jamis/rbenv-gemset.git  ~/.rbenv/plugins/rbenv-gemset
# 通過 gem 命令安裝完 gem 后無需手動輸入 rbenv rehash 命令, 推薦
git clone git://github.com/sstephenson/rbenv-gem-rehash.git ~/.rbenv/plugins/rbenv-gem-rehash
# 通過 rbenv update 命令來更新 rbenv 以及所有插件, 推薦
git clone https://github.com/rkh/rbenv-update.git ~/.rbenv/plugins/rbenv-update

然后把下面的代碼放到 ~/.bashrc 里:

export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"

安裝 ruby

rbenv install --list  # 列出所有 ruby 版本
rbenv install 2.2.2     # 安裝 2.2.2

列出版本

rbenv versions               # 列出安裝的版本
rbenv version                # 列出正在使用的版本

設置版本

rbenv global 2.2.2      # 默認使用 2.2.2

參考:https://ruby-china.org/wiki/rbenv-guide

Rails的安裝

安裝Rails

$gem install rails  #我安裝時候的rails版本為4.2.1

這里是不需要獲取管理員權限再執行的,因為據說如果加了sudo的話那么以后這個只能給管理員本人用了。直接由rvm進行rails版本的控制,gem安裝可以更加方便的進行有效的版本控制。安裝成功后可以通過以下命令查看使用的版本:

$rails -v 
$gem –v

這里可以分別看到Rails和負責安裝的Gem的版本,如果讀取異常,可以關閉命令行重新打開。操作方式完全同上面的查看版本驗證方式。

 

因為Rails的默認數據庫是sqlite,因此需要安裝相關的支持: 

$sudo apt-get install sqlite3 
$sudo apt-get install libsqlite3-dev
$gem install sqlite3-ruby

 

Rails里面自帶着一個服務器,方便使用的時候進行測試,開啟的命令是rails server。現在我們安裝相關的支持:

$sudo apt-get install openssl libssl-dev 
$sudo apt-get install libopenssl-ruby1.9.1

 

 

安裝 Nginx/Puma

在使用puma后,我已經把服務器和開發環境都使用了Nginx和puma的配置,已經不在使用Passenger了。

安裝Nginx:

sudo apt-get install nginx

啟動Nginx:

$sudo /etc/init.d/nginx start

然后只需要在每個服務中,裝上Puma,就可以非常方便的使用了。

配置Nginx方式如下:

到 /etc/nginx/sites-enabled 目錄下,添加一個example.conf文件:

upstream example {
  server unix:///tmp/example.sock;
}

server {
  listen 80;
  server_name www.example.com;
  root /home/deploy/www/example/current/public;
  location / {
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_redirect off;

    if (-f $request_filename/index.html) {
      rewrite (.*) $1/index.html break;
    }

    if (-f $request_filename.html) {
      rewrite (.*) $1.html break;
    }

    if (!-f $request_filename) {
      proxy_pass http://example;
      break;
    }
  }
} 

安裝 passenger/nginx(選)

passenger/nginx安裝命令 

$gem install passenger
$sudo apt-get install libcurl4-openssl-dev #安裝SSL gem
#
遵從passenger官方安裝指南(http://www.modrails.com/install.html)的提示,開始安裝:
$rvmsudo passenger-install-nginx-module #都是默認選擇,選擇1,安裝目錄也選擇默認 /opt/nginx/

passenger 會自動修改config, 添加passenger所在的rvm的ruby和gem環境地址。

 

安裝nginx啟動腳本 

$wget https://raw.github.com/gist/1548664/53f6d7ccb9dfc82a50c95e9f6e2e60dc59e4c2fb/nginx
$sudo cp nginx /etc/init.d/
$sudo chmod +x /etc/init.d/nginx
$sudo update-rc.d nginx defaults

 

nginx啟動和停止命令 

$sudo /etc/init.d/nginx start  #nginx啟動
$sudo /etc/init.d/nginx stop #nginx停止(我在用這個命令之后無法完全把nginx停止,再次開啟的時候會出現端口占用情況,如果有誰可以知道問題所在可以給我留言)
#
目前使用該命令停止nginx $sudo /opt/nginx/sbin/nginx -s stop
$sudo /etc/init.d/nginx restart #重啟nginx

 

簡易配置nginx

配置文件在 /opt/nginx/config/nginx.conf

參考: http://wiki.nginx.org/NginxFullExample

參考: http://wiki.nginx.org/NginxChsFullExample

參考: http://modrails.com/documentation/Users%20guide%20Nginx.html

 

因為我對nginx不太熟悉,對配置文件只是做簡單的配置。 

gzip  on;  #去除gzin on的注釋,此行作用是對訪問網站進行代碼的壓縮,加快訪問速度

 

原本server的配置對對應的站點地址進行修改。

#原來的配置
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}

....
}

#修改
server {
listen 80;
server_name www.XX.net;
root /home/railsu/***/public; #你項目中的public目錄
passenger_enabled on;
rails_env development; #此處可以設置,rails的模式

#charset koi8-r;
#access_log logs/host.access.log main;
#注釋下面的配置
# location / {
# root html;
# index index.html index.htm;
# }

....
}


現在啟動nginx還會報nobody無法取得某些目錄的寫入權限。因為nginx默認為nobody啟動的。可以有兩個方法:

1、  將應用和應用目錄下所有文件夾和文件都置為權限777。執行 chmod 777 –R 應用目錄

2、  將nginx的啟動用戶設置為具有操作應用目錄的用戶。如root(不建議)或者用戶本身。具體做法是更改/opt/nginx/conf/nginx.conf第一行。user 用戶名 組名

 

而我進行如下的設置,例如我這里設置的是railsu用戶,站點文件夾的名字為website。 

chown jesktop -R website

 

特別提示,在對文件夾進行權限設置時,不要設置為777。可以通過:

chmod -R 755 website                       #確保文件夾是755
find mysite -type f -exec chmod 644 {} \; #文件是644權限


安裝node.js

因為rails3.1版本以上,需要對asset等的支持,可以需要安裝上node.js(Installing Node.js via package manager),安裝方法如下: 

$sudo apt-get install python-software-properties
$sudo add-apt-repository ppa:chris-lea/node.js
$sudo apt-get update
$sudo apt-get install nodejs
#It installs current stable Node on the current stable ubuntu.

#If you want to compile Node C++ modules:

$sudo apt-get install nodejs-dev
#Or configure shell script for install node.js using http://apptob.org

 

安裝PostgreSQL

參考: http://technobytz.com/install-postgresql-9-3-ubuntu.html

 

安裝MySQL

安裝MySQL命令 

$sudo apt-get install mysql-server mysql-client  #請牢記安裝過程中輸入的密碼
$sudo apt-get install libmysql-ruby libmysqlclient-dev
$gem install mysql2


修改MySQL配置,以便可以進行外部訪問和支持UTF-8,中國市區,紅色為需要添加地方

$sudo vim /etc/mysql/my.cnf  #運行配置文件

#修改配置文件
[client]
default-character-set = utf8
port = 3306
socket = /var/run/mysqld/mysqld.sock

# Here is entries for some specific programs
#
The following values assume you have at least 32M ram
#
This was formally known as [safe_mysqld]. Both versions are currently parsed.

[mysqld_safe]
socket = /var/run/mysqld/mysqld.sock
nice = 0

[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
init_connect = 'SET NAMES utf8'
default-time-zone = '+8:00'

# Instead of skip-networking the default is now to listen only on
#
localhost which is more compatible and is not less secure.

#bind-address = 127.0.0.1

 

重啟mysql服務 

$sudo service mysql restart

 

登錄mysql 

$mysql –u root –p “密碼”

 

登錄mysql 

 

update mysql.user set password=PASSWORD("你的密碼") where User="root"

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM