Railway/Guides
Gin アプリをデプロイする
Railway を使って Golang の Gin API をデプロイする方法を解説します。動的なポート設定と、軽量なマルチステージ Dockerfile を使ったデプロイ手順を説明します。
著者: AIイノベーションズ 阿部隼也(X / Twitter)Gin アプリをデプロイする
Golang の Gin API の開発が完了したら、次はいよいよデプロイです。このガイドでは、Gin API を Docker 化し、Railway にホスティングする手順を解説します。
Gin API の概要
まず、Golang で書かれた基本的な Gin API の実装を見てみましょう。これは "Hello World" を返す単一の GET リクエストを備えています。
package main
import (
"os"
"github.com/gin-gonic/gin"
)
func main() {
// Gin ルーターを初期化
router := gin.Default()
// GET ルートを定義
router.GET("/", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "Hello, World!",
})
})
// 重要: 動的なポートを設定
port := os.Getenv("PORT")
if port == "" {
port = "8080" // 開発用のデフォルトポート
}
// ルーターを起動
router.Run(":" + port)
}
動的なポート設定 (重要)
Railway でのデプロイで非常に重要なのが、動的なポート設定です。開発中は localhost:8080
のようにポートを自分で設定しますが、Railway にデプロイする際は、Railway が提供する PORT
環境変数を利用する必要があります。この環境変数は Railway によって自動的に設定されるため、自分で設定する必要はありません。
// 重要: 動的なポートを設定
port := os.Getenv("PORT")
if port == "" {
port = "8080" // 開発用のデフォルトポート
}
// ルーターを起動
router.Run(":" + port)
Docker化
API を Docker 化すると、Docker をサポートするあらゆる環境でアプリケーションが確実に動作するようになります。以下は、ビルドを軽量に保つためのマルチステージ Dockerfile の例です。
# 最新の Golang ベースイメージを使用
FROM golang:latest AS builder
# コンテナ内の作業ディレクトリを設定
WORKDIR /app
# 依存関係ファイルをコピー
COPY go.mod go.sum ./
# 依存関係をインストール
RUN go mod download
# ソースコードをコピー
COPY . .
# アプリケーションをビルド
RUN CGO_ENABLED=0 GOOS=linux go build -o main .
# 新しいビルドステージを開始
FROM alpine:latest
# 証明書をインストール
RUN apk --no-cache add ca-certificates
# 作業ディレクトリを設定
WORKDIR /root/
# ビルダー段階からバイナリをコピー
COPY --from=builder /app/main .
# ポート 8080 を公開
EXPOSE 8080
# 実行可能ファイルを実行するコマンド
CMD ["./main"]
デプロイプロセス
API と Dockerfile の準備ができたら、以下の手順で Railway にデプロイします。
- プロジェクト(
main.go
とDockerfile
を含む)を GitHub リポジトリにアップロードします。 - Railway ダッシュボードで、「+ New Project」→「Deploy from Github repo」を選択し、自分のリポジトリを選びます。
- 「Deploy Now」をクリックすると、Railway が数分で API のビルドと起動を行います。
- デプロイが「Active」になったら、「Settings」タブの「Networking」セクションにある「Generate Domain」ボタンからドメインを追加できます。
これで、Gin API が Railway 上で稼働します。
PR