部署你的第一個 Ruby on Rails 網站(七)

現在伺服器還沒辦法下載到 Ruby on Rails 專案的原始碼用來部署,這一篇會介紹該如何把原始碼下載回來,並且在伺服器上將相關的 Ruby Gem 都安裝好。

Deploy Key

要讓 Capistrano 自動在伺服器上下載原始碼,我們必須先讓 GitHub 或者 Gitlab 這類服務允許這台伺服器下載,所以我們要先對 deploy 這個部署用的使用者,產生一組下載原始碼的 SSH Key 也就是所謂的 Deploy Key。

1
2
sudo su - deploy
ssh-keygen -t rsa

利用 ssh-keygen 指令,我們可以生成一組 Private Key 和一組 Public Key 給 deploy 這個使用者使用,跟我們用來 SSH 到伺服器的是一樣的概念,只不過現在是要讓他當作「驗證權限」的證明,讓 GitHub 接受伺服器下載原始碼。

將生成的 ~/.ssh/id_rsa.pub 內容,複製後貼到 GitHub 專案中 Settings > Deploy Keys 裡面,用來允許這台伺服器下載。

螢幕快照 2018-05-20 下午10.08.30.png

GitHub 只允許同一把 Deploy Key 存在一次,所以如果想要讓多台伺服器共用的話,可以先在一台產生,其他伺服器共用。但是盡量避免使用自己電腦中的,因為 Deploy Key 只能讀取會安全許多。

如此一來,在設定正確的狀況下,我們就可以順利的讓伺服器下載到原始碼。

檢查

一般在部署之前,我們都會用 cap staging deploy:check 確認基本的操作都是正常的,也就是產生這次部署的版本、下載原始碼跟設定檔已經正確生成。

1
cap deploy:check

如果伺服器正確的話,應該是不會有錯誤訊息。不過我們嘗試透過 git 來下載原始碼,伺服器上可能是沒有 git 環境的,所以先透過 yum 安裝套件。

1
yum install git

如此一來,cap staging deploy:check 就會回報已經可以正確地產生新的資料夾,以及下載原始碼。

JavaScript Runtime

伺服器環境預設是沒有 JavaScript 的執行環境,不然在我們執行 cap staging deploy 的時候,就可以順利的部署完成。

不過,因為 Assets Precompile 的關係,我們至少需要有 Node.js 的環境才行。

我們可以利用 Node.js 官方提供的設定程式,讓 CentOS 可以支援較新版本的 Node.js

1
2
# Node 8 是寫這篇文章的穩定版
curl --silent --location https://rpm.nodesource.com/setup_8.x | sudo bash -

當這段設定程式執行完畢後,我們就可以利用 yum 指令更新或者安裝。

1
sudo yum install -y nodejs

實際上 Node.js 的環境影響並不大,即使是舊版的 Node.js 環境也是可以正常的完成 Assets Precompile

假設有使用 Webpack 的話,對於 Webpacker 這個 Gem 還會需要使用 Yarn 來安裝 Node.js 套件。

1
2
curl --silent --location https://dl.yarnpkg.com/rpm/yarn.repo | sudo tee /etc/yum.repos.d/yarn.repo
sudo yum install yarn

安裝的方法跟 Node.js 基本上是沒有太大的差異,一樣是透過官方的設定程式將 yum 可以安裝的來源增加,就可以透過 yum 安裝或者升級。

部署

現在我們只需要透過 cap staging deploy 就可以把 Ruby on Rails 專案傳到伺服器,並且將一切都安裝完畢。

如果有出現錯誤,可能就是使用的 Gem 使用了一些 C 語言編寫的套件,需要額外的安裝一些套件才可以解決,這就考驗大家的應變能力了!

小結

到這篇文章為止,我們只剩下一個步驟——設定 Nginx 伺服器。雖然我們安裝好了伺服器,但是並沒有設定這個專案要怎麼被 Passenger 啟動。

下一篇是最後一篇,會講解怎麼設定 Nginx 伺服器以及套用 Let’s Encrypt 來設定 SSL 加密。

留言