人生就是不斷學習,調整與更新持續前進。

Rails-Kamal + Docker 新的deploy工作流 v1

Rails開發部署工作流程 技術部落格.

使用 Kamal gemfile (Docker)

Rails版本: rails8.0以上, ruby3.3.0以上都可.

 

Ubuntu 24.04 安裝 Docker 完整流程

1. 更新系統套件

sudo apt update
sudo apt upgrade -y

2. 安裝必要的套件

sudo apt install -y apt-transport-https ca-certificates curl gnupg lsb-release

3. 添加 Docker 官方 GPG 密鑰

curl -fsSL <https://download.docker.com/linux/ubuntu/gpg> | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

4. 添加 Docker 儲存庫

echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] <https://download.docker.com/linux/ubuntu> $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

5. 更新套件索引

sudo apt update

6. 安裝 Docker Engine

sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

7. 啟動並啟用 Docker 服務

sudo systemctl start docker
sudo systemctl enable docker

8. 將使用者加入 docker 群組(避免每次都要 sudo)

sudo usermod -aG docker $USER

9. 重新載入群組權限

newgrp docker

10. 驗證 Docker 安裝

docker --version
docker compose version

11. 測試 Docker 是否正常運作

docker run hello-world

額外配置建議

安裝 Git(如果還沒有的話)

sudo apt install -y git

配置 Git(如果需要的話)

git config --global user.name "Your Name"
git config --global user.email "[email protected]"

 

安裝 Kamal(用於部署你的 Rails 應用)

gem install kamal

部署你的專案

安裝完 Docker 後,你可以:

  1. clone 你的專案
git clone 你的  { projects } 

  1. 配置 Kamal 部署設定
    • 修改 config/deploy.yml 中的 IP 地址
    • 設定域名和 SSL 配置
    • 配置 registry 資訊
  2. 設定環境變數
kamal setup
  1. 部署應用
kamal deploy

kamal app stop

kamal app remove

kamal app exec 'env | grep DATABASE'

kamal envify

kamal app exec 'cat /rails/.env' 2>/dev/null || echo "No .env file in container"
kamal app exec -i bash

# 先啟動資料庫(如果還沒啟動)
kamal accessory boot db

# 推送新的環境變數
kamal env push

# 重新部署應用
kamal deploy

kamal app exec 'env | grep DATABASE_URL'

安全建議

  1. 設定防火牆
sudo ufw allow ssh
sudo ufw allow 80
sudo ufw allow 443
sudo ufw enable

  1. 定期更新系統
sudo apt update && sudo apt upgrade -y

 

deploy.yml 和 dockerfile要寫好
.gitignore 處理一下敏感資訊