---
title: "部署你的第一個 Ruby on Rails 網站（一）"
date: 2018-03-20T00:00:00+08:00
publishDate: 2018-03-20T20:44:52+08:00
lastmod: 2025-10-19T11:52:04+08:00
tags: ["教學","DevOps","Ruby on Rails"]
permalink: "https://blog.aotoki.me/posts/2018/03/20/Getting-started-deploy-your-Ruby-on-Rails-Part-1/"
language: "zh-tw"
---


最近在公司發現其實不少同事都還沒有實際部署過一台伺服器的經驗，在有人負責 DevOps 的情況下，也許真的不太需要。又或者因為還是初級工程師的關係，沒有那個權限可以去安裝一次伺服器。甚至其實一直都使用著 Heroku 或者 AWS CodeDeploy 等服務的便利性，而沒有嘗試自己安裝一次。

不管是基於甚麼原因，總之先來安裝一次吧！

<!--more-->

## VPS 主機

在我學習架站的時候，除了是個窮學生之外，就是伺服器的成本其實相對的高。一個月最低的租用方案至少是 20 美元起跳，能用的資源也不高。

不過很幸運的是，隨著雲端相關的技術興起，我們現在可以用 5 美元左右就能租到一台適合的 VPS （Virtual Private Server） 主機，來放一些自己寫的小工具，或者個人網站。

下面推薦幾家台灣開發者比較常用的主機商（朋友提醒推薦連結雙方都有獎金，所以連結是我的推薦連結）：

 * [Vultr](https://www.vultr.com/?ref=6889049)
 * [Linode](https://www.linode.com/?r=36799dcc49cac9cef00c4a8fd49aaaf93a8148cc)
 * [DigitalOcean](https://m.do.co/c/55a8b594beba)

除了 DigitalOcean 沒有東京的機房之外，選擇東京（Tokyo）機房再連線速度上會是最適合的。不過 DigitalOcean 的新加坡機房其實也不慢，如果需要比較多的功能 DigitalOcean 在這方面表現的就相對其他好上很多。

> 效能表現上都有些微差異，不過者幾家在台灣連線過去的操作大多不會有卡頓的感覺。

## SSH Key

在把第一台伺服器開始之前，我們要先來談談 `SSH` 和 `SSH Key` 這兩個東西。簡單來說 `SSH` (Secure Shell) 是一種可以讓我們在遠端電腦上執行 Shell （打指令的地方）的工具，透過成對的 `SSH Key` 來進行加密傳輸。

目前的 VPS 主機商大多會支援讓我們預先把 Public Key （兩組鑰匙可以公開的那一組）登記到主機商那邊，以便在開啟新伺服器的時候能夠預先的安裝進去。

下面這個指令在 macOS 或是 Linux 上都可以執行。

```bash
ssh-keygen -t rsa
```

中間會有一些問題，一般來說只要按 Enter 按鍵繼續執行即可。

> 如果你已經設定過 git 並且能夠上傳到 GitHub 的話，就代表你已經產生過小心不要覆蓋掉摟！

我們會在下面的路徑得到兩個檔案：

* ~/.ssh/id_rsa
* ~/.ssh/id_rsa.pub

其中下面檔名為 `id_rsa.pub` 的檔案，就是公開的金鑰。在開始之前可以先把他設定到 VPS 主機商自己的帳號上，以利後續的動作。

> 兩個都是純文字檔案，如果不清楚怎麼複製可以用 `cat ~/.ssh/id_rsa.pub` 顯示檔案內容後複製。

## 開設伺服器

設定上來說參考這張截圖即可。

![DigitalOcean - Create Droplets.png](images/getting-started-deploy-your-ruby-on-rails-part-1/new_droplet.png)

這次我們要用的是 CentOS 這套作業系統，算是我最早接觸架設伺服器的時候所使用的作業系統。原型是 RedHat 這套商用作業系統，可以視為開源版本。

唯一要注意的是 SSH Key 的部分有確實的被新增進去，現在的伺服器為了安全會盡可能的使用 SSH Keys 來登入，而不是使用密碼。密碼有可能會被猜出來，但是 SSH Key 保存在你的電腦，也不容易直接推算出來，所以相對的安全不少。

> 圖上的機房位置是選錯的，要記得選成 Singapore（新加坡）操作起來才會比較順暢。

## 進入伺服器

當伺服器呈現 Ready 或者其它表示「開機完畢」的狀態時，我們就可以透過顯示在網頁上的 IP 位置來連上伺服器。

```bash
ssh root@172.31.1.1
```

> 上面指令的 `172.31.1.1` 記得換成你的 IP 位置。

上面推薦的 Vultr、Linode 和 DigitalOcean 預設帳號都會是 `root`（系統管理員）透過這個帳號，我們就可以進入伺服器進行所有操作。

## 建立使用者

不過，直接使用 `root` 帳號來操作是非常危險的，所以我們會開設一個屬於自己的帳號，並且透過 `sudo` （Super User Do）這指令來表示「透過 `root` 的權力執行指令」

```
useradd elct9620 -G wheel
```

上面的指令表示新增一個 `elct9620` 的使用者，並且加入 `wheel` 這個群組。

> `wheel` 這個群組在 CentOS 7 通常會視為「有權限執行 `sudo` 指令」的使用者們

## 透過新使用者登入

為了要可以透過新使用者登入，我們需要先對這個使用者設定 SSH Key 才行。

```bash
su - elct9620
```

因為是管理員，所以我們可以用 `su` (Switch User) 來切換到 `elct9620` 這個帳號。

```bash
mkdir ~/.ssh
```

接著透過 `mkdir`（Make Directory）指令對 `elct9620` 這個帳號產生儲存 SSH 資訊的資料夾。

```bash
vim ~/.ssh/authorized_keys
```

這邊會透過 `vim` 來編輯檔案，因為操作對入門者有點困難，但是在管理伺服器上的時候卻很方便，所以建議大家至少熟悉可以插入內容。

按下 `i` 進入 Insert Mode 後，可以直接用 Ctrl + V 把前面我們複製過的 `id_rsa.pub` 貼上，之後按 ESC 離開 Insert Mode 再依序按下鍵盤的 `:wq` 進行 Write and Quit （存檔並離開）

最後，需要對檔案設定正確的權限（限定自己可以使用）

```
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
```

如此一來，我們就可以改成 `ssh elct9620@172.31.1.1` 來連上伺服器了！

## 小結

到此為止，我們僅是能夠簡單的連上伺服器，並且以正確的使用者來進行操作。距離安裝伺服器還有一段距離，這系列的文章會盡可能的針對操作「詳細」的解釋。如果大家有注意到的話，會發現 Linux 的指令其實是把對應動作的單字重組，透過這樣的方式我們就可以「稍微容易」的記起常用的幾個操作。

下一篇文章我們會稍微對伺服器做一些簡單的設定，並且熟悉基本操作。


