---
title: "Rails 部署實踐 - 補上 Rails 教學缺少的一塊"
date: 2022-02-04T00:00:00+08:00
publishDate: 2022-02-04T12:40:24+08:00
lastmod: 2023-09-03T17:41:34+08:00
tags: ["Rails","教學","部署","實作","Rails 部署實踐"]
series: "rails-deployment-in-practice"
toc: true
permalink: "https://blog.aotoki.me/posts/2022/02/04/rails-deployment-in-practice-introduce/"
language: "zh-tw"
---


在我們學習 Rails 的過程中，從安裝環境、設計系統到撰寫程式在市面上都已經有非常詳細的教學，然而到了部署階段受限於篇幅大多只有 Heroku 這個選項，很少有人針對 Rails 的部署深入討論。

這會是一系列的文章，你可以選擇[訂閱弦而時習之](https://mailchi.mp/aotoki/rails-deployment-in-practice)來收到最新的文章更新，同時在未來如果有額外的內容，也會透過訂閱列表發送給有訂閱的讀者。

<!--more-->

## 部署是什麼{#what-is-deployment}

部署（Deployment）簡單來說就是將軟體安裝到適合的環境運行，這個環境可以是你的電腦（開發環境）、用來檢驗軟體品質的測試環境（Staging 或 Test）或者是正式運行的生產環境（Production）之中。

其實，在我們看著 Rails 教學一步一步的讓電腦可以把 Rails 跑起來的時候，就已經具備了最基本的「部署」技能，然而我們的部署技巧只限於「開發」使用，這表示在測試或者生產環境中，是不夠的。

## 部署的知識{#knowledge-of-deployment}

在開發環境中，我們只需要考慮到能夠運行我們所撰寫的 Ruby 程式即可，然而要如何保護網站、如何提供使用者服務等等，都是在進行部署所需要的知識。在這一系列的文章中，我們會討論不同類型的部署方式，像是以容器部署、在實體或虛擬伺服器上部署、使用 PaaS 部署。

不同類型的網站部署都會需要有對應的技巧，以 PaaS 部署最為容易，我們不需要考慮防火牆、網路的設定，然而透過容器或者虛擬伺服器部署，我們就必須要對網路有所概念，才能夠規劃合理的 VPC（Virtual Private Cloud，通常指雲端的網路設定）以及提供安全的網路環境。

除此之外，我們在使用不同的方式部署時，也會因為使用的技術、自動化程度有許多不同的差異。像是採用容器技術（Container）的時候，我們可能會根據部署類型設計 Immutable Architecture（不可變架構），才能正確設計容器的配置。

## 馬上能用的技巧{#useable-instantly}

這系列的文章會從「容器技術」開始討論，基於[如何在幾分鐘內容器化 Rails 專案](https://blog.aotoki.me/posts/2021/12/19/containerize-ruby-on-rails-in-a-few-minutes/)這篇文章我所使用的幾套 Ruby Gem 讓我們得以馬上使用在 2022 年最為主流的容器技術，並且實踐持續整合（Integration）、持續部署（Continuous Deployment）以及在測試、生產環境中該如何配置。

接下來再進入到網路設定、使用雲端等等不同的概念，將關於部署的知識完善，我們再回到 PaaS 以及虛擬伺服器的部署方式繼續了解從過去在單機上部署到多台伺服器、使用 PaaS 以及演變到現今採用容器、Kubernetes 的完整脈絡。

那麼，各位準備好開始部署你的網站了嗎？

