🚀
【続編】Shlink-UI-RailsをOracle Cloud A1でCI/CD運用してみた
はじめに
以前の記事では、Shlink-UI-Rails の紹介と開発環境構築についてまとめました。
今回はその続編として、Oracle Cloud Free Tier の A1 インスタンスに本番運用を導入した構成と運用経験を紹介します。
リポジトリ: GitHub - enjoydarts/shlink-ui-rails
本番環境の構成
- Oracle Cloud Ampere A1 (ARM64) … 無料枠で常時稼働
- GitHub Actions … push をトリガーに CI/CD を実行
- GitHub Container Registry (GHCR) … Docker イメージの保存先
- docker-compose … サービス管理
- deploy.sh … デプロイ処理を自動化(ヘルスチェック・ロールバック含む)
GitHub Actions の設定
.github/workflows/deploy.yml では以下を実行しています。
- RSpec と RuboCop によるテスト
- ARM64 向けの Docker イメージをビルド
- GHCR への push
- SSH 経由で本番サーバに接続し、デプロイスクリプトを実行
- name: Build and push Docker image
uses: docker/build-push-action@v6
with:
context: .
file: ./Dockerfile.production
platforms: linux/arm64 # OCI Ampere A1 用
push: true
tags: ${{ steps.meta.outputs.tags }}
デプロイスクリプト
サーバ側の scripts/deploy.sh は以下を担当します。
- GHCR から最新イメージを pull
- 既存コンテナをバックアップ
- DB スキーマを Ridgepole で適用
- docker-compose でゼロダウンタイム再起動
-
/healthで稼働確認、失敗時はロールバック
# ヘルスチェック
wait_for_health() {
log "INFO" "Waiting for application health..."
timeout 300 bash -c '
while ! curl -sf http://localhost:3000/health; do
sleep 10
done
'
}
運用してみて
本番運用を始めてから、以下の点を実感しました。
-
デプロイ作業の効率化
GitHub に push すればテストからリリースまで自動で完結。 -
サーバ管理の簡素化
本番サーバは Docker ホストとして動作するのみ。依存関係やライブラリ更新は CI 側で完結。 -
無料での安定運用
GitHub Actions と Oracle Cloud A1 の組み合わせでコストゼロ。 -
ロールバック機能の安心感
大きな障害はまだないが、仕組みとして備えていることで安定感がある。 -
通知による可視性
Slack / Discord に成功・失敗が通知され、外出先からでも状況確認が可能。
まとめ
GitHub Actions × GHCR × Oracle Cloud A1 を利用することで、無料で本番運用に耐える CI/CD 環境を構築できました。
個人開発や小規模サービスにおいても十分実用的な構成だと感じています。
お知らせ
Rails や Laravel の技術記事のほか、ガジェットやイヤホン、香水のレビューもブログで発信しています。今回の Shlink-UI-Rails の開発記録も随時まとめていく予定です。
👉 コードと音と香りの交差点 https://enjoydarts.blog
Discussion