Skip to content

Instantly share code, notes, and snippets.

@fokayx
Last active August 29, 2015 14:19
Show Gist options
  • Save fokayx/3a99d1b33f94bf65d90e to your computer and use it in GitHub Desktop.
Save fokayx/3a99d1b33f94bf65d90e to your computer and use it in GitHub Desktop.
Deploy a Rails App with Passenger and Nginx on Ubuntu 14.04 @ DigitalOcean

佈署Rails APP到DigitalOcean

Pessenger/ Nginx / Ubuntu 14.04

###步驟1: 建立DigitOcean帳戶、選擇方案,Ubuntu系統
選擇DigitalOcean方案: 一開始測水溫的APP雞絲就用$5/月的唄,DigitalOcean常常發出一些新用戶優惠的例如:免費送你$10。

選擇Ubuntu系統: 32bit Ubuntu,64bit比32多用約50%的記憶體,如果你需要台大機器,或者可能記憶體可能升級到超過4GB以上,那麼就直上64-bit

###步驟2: 建立系統超級使用者

Sudo(substitute user [或 superuser] do),是一種程式,用於類Unix作業系統如BSD,Mac OS X,以及GNU/Linux以允許使用者透過安全的方式使用特殊的權限執行程式(通常為系統的超級使用者)。

Server安裝,要不要看一下

###步驟3:可以跳過略過,設定Domain
對你的新Sever,設定DNS指向你的網址名稱Domain name

了解更多hostname 設置

總之不想設定這個,先跳過也沒關係,(這不設定是佈署上去是要叫人家怎麼看)

###步驟4: 安裝 RUBY <3
在做任何事之前呢。咱們還是先確認一下所有東西都是最新的版本兒 。↓

sudo apt-get update

下一個安裝一些週邊小玩意,會讓接下來過程更滑順。 ↓

sudo apt-get install build-essential libssl-dev libyaml-dev libreadline-dev openssl curl git-core zlib1g-dev bison libxml2-dev libxslt1-dev libcurl4-openssl-dev nodejs libsqlite3-dev sqlite3

給我們的小RUBY建一個暫時性的資料夾存放Ruby source files。 ↓

mkdir ~/ruby

進去資料夾看看。 ↓

cd ~/ruby

下載最新且穩定的Ruby版本,這會已經來到Ruby2.2.2.版了,
如果你在Ruby官網,看到有更新的版本的話,就把下面指令中的連結換掉唄。 ↓

如果使用不同版本的RUBY記得要自己手動修改指令呀(連結、檔名、資料夾名稱連貫炮),不要傻傻地直接複製貼上

wget http://cache.ruby-lang.org/pub/ruby/2.2/ruby-2.2.2.tar.gz

下載完畢,再來個解壓縮的動作。 ↓

tar -xzf ruby-2.2.2.tar.gz

找到那個目錄,進入他。 ↓

cd ruby-2.2.2

執行 configure script. 這會花點時間,和幾個步驟進行程式碼的編譯。因為他要去確認dependencies裝好沒,環境適不適合居住,然後建立一個 Makefile。 ↓

./configure

跑一下make,召喚Makefie建立一些小程式,應該也可以先去看個小短片。 ↓

make

嘿,然後請sudo大大出來進行下一步的安裝,東西會被裝在這邊/usr/local/bin,根據回報也是要裝一陣子才行。 ↓

sudo make install

登登登登RUBY登場,鼓掌!!!
順利完成的話,RUBY應該已經安裝在你的系統上了,用下面的指令來確認一下唄,有跑出安裝的RUBY版本的話,就表示您成功了,恭禧
。 ↓

�ruby -v

最後就可以把一開始那個暫時居留所給滅了。 ↓

rm -rf ~/ruby

###步驟5: 安裝 Passenger和 Nginx 聽說以前人安裝Passenger喜歡透過RubyGems的方式(passenger-install-nginx-module),不過現在在Ubuntu上,你可以使用 Advanced Packaging Tool(APT),有人說用了這個在安裝和更新上,真的好簡單。

首先安裝PGP key:↓

sudo apt-key adv --keyserver keyserver.ubuntu.com --revb-keys 561F9B9CAC40B2F7

建立APT sourve file(必須召喚sudo大大)。 ↓

sudo nano /etc/atp/sources.list.d/passenger.list

進去passenger.list檔案中,插入下面這行。 ↓

deb https://oss-binaries.phusionpassenger.com/apt/passenger trusty main

按下CTRL+x離開,按 y 儲存,再按ENTER確認檔案位置。

更改檔案的擁有者和權限。 ↓

sudo chown root: /etc/apt/sources.list.d/passenger.list
sudo chmod 600 /etc/apt/sources.list.d/passenger.list

更新APT cache。 ↓

sudo apt-get update

唷,可以安裝Passenger with Nginx了窩,撒花 。 ↓

sudo apt-get install nginx-extras passenger

這招會蓋掉咱家舊的Ruby版本,怎麼解決這個呢,來來來:移除不正確路徑的Ruby,然後給正宮的Ruby建立新的連結

sudo rm /usr/bin/ruby
sudo ln -s /usr/local/ruby /usr/bin/ruby

###步驟6: 裝上你的Web Server 打開 Nginx onfiguration file。 ↓

sudo nano /etc/nginx/nginx.conf

把下面那2行給我揪出來。 ↓

# passenger_root /usr/lib/ruby/vendor_ruby/phusion_passenger/locations.ini;
# passenger_ruby /usr/bin/ruby;

然後給他們做個更新,他們應該長得像這樣。 ↓

passenger_root /usr/lib/ruby/vendor_ruby/phusion_passenger/locations.ini;
passenger_ruby /usr/local/bin/ruby;

好的,可以儲存兼離開了

###步驟7: 佈署- Deploy 在這個節點上,你終於可以佈署自己的Rails-應用程式了。如果你已經有打造好的RailsAPP,你可以直接上傳你的專案到Sever上,跳過/etc/nginx/sites-available/default step.這個步驟。

在本篇教學中,我們會直接在你的Droplet(DigitalOcean的機器稱號)創造一個新的RailsApp。

將所在位置移到根目錄,不要在任何資料夾底下,不然會噴錯No such file or directory - getcwd)。 ↓

cd~

安裝rails gem,--no-rodc和no-ri是指不要安裝rails附加的一些這樣可以快點安裝完畢。 ↓

sudo gem install --no-rdoc --no-ri rails

然後就可以rails new一個新的APP,在例子中會使用"testapp"為這個RailsApp的名稱,你可以另取新名,要注意下面有用到"RailsApp名字"的地方要換成自己取的名字,記住取名字是很重要的,!在新增的時候先暫時跳過bundle,等做完一些設定後再手動執行。 ↓

rails new testapp ---skip-bundle

接著進到testapp的目錄中。 ↓

cd testapp

下一步是安裝一個JavaScript的翻譯蒟蒻,透過therubyracer這個gem,就能讓Ruby和JavaScript互表心意,打開你的Gemfile。 ↓

nano Gemfile

掃出這一行。 ↓

#gem 'therubyracer', platforms: :ruby

取消註解,therubyracer解除封印。 ↓

gem 'therubyracer', platforms: :ruby

儲存,離開,接著可以做一個Bundle的動作。 ↓

bundle install

好的,下一個我們需要對Nginx做點設定,打開Nginx config設定檔案。 ↓

sudo nano /etc/nginx/sites-available/default

然後看看這兩行,把他們註掉。 ↓

listen 80 default_server;
listern[::]:80 default_server ipv6only=on;
加上#,讓他們變註解吧
#listen 80 default_server;
#listern[::]:80 default_server ipv6only=on;

存檔,離開之後,給我們的RailsApp生一個Nginx設定檔。 ↓

sudo nano /etc/nginx/sites-available/testapp

加入server的設定。 ↓

server{
    listen 80 default_sever;
    server_name www.mydomain.com;
    passenger_enabled on;
    passenger_app_env development;
    root /home/rails/testapp/public;
}

在這裡面設定了80 port、網域名稱、啟用Passenger、root指向public。 In this file, we enable listening on port 80, set your domain name, enable Passenger, and set the root to the public directory of our new project. The root line is the one you'll want to edit to match the upload location of your Rails app.

如果還不想給這個RailsApp指定網域名稱,可以跳過server_name這行,或是改用IP位置也行。

好,再來確認以上所做的設定是否無誤,測試一下能不能看到Rails的Welcome aboard頁面,不過Welcome aboard頁面只出現在development環境中,而Passenger預設就是production環境,所以我們得先更改passenger_app_evn的選項,或者你已經迫不及待要上線,就不用這一步了。

存檔(CTRL+x, y, Enter)

建一個symlink。 ↓

sudo ln -s /etc/nginx/sites-abailable/testapp /etc/nginx/sites-enabled/testapp

重啟Nginx。 ↓

sudo nginx -s reload

喔耶,現在你的RailsAPP應該是可以連上了,立馬去Droplet's domain或IP位置看看。 ↓

http://droplet_ip_address

沒事的話應該可以看到Rails Welcome aboar頁面,恭禧你的RailsApp已完成佈署,撒花。

###步驟8: 三不五時,更新及時 如果要更新Ruby版本,得把"步驟4、5"再進行一次,因為有了新版本的Ruby要把舊版本的Ruby刪除,再建新的symlink到Ruby binary檔案。

更新Passenger with Nginx的話,就要跑一次系統更新。 ↓

sudo apt-get update && sudo apt-get upgrade

完成所有更新程序,記得重開你的web sever。 ↓

sudo sever nginx restart

OKAY_以上待測試....

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment