1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

DockerとGoで構築したバックエンドをRenderに本番デプロイする

Last updated at Posted at 2024-12-28

1. はじめに

バックエンドとフロントエンドを分離して開発するケースは一般的です。このガイドでは、Dockerを使ってGoで構築したバックエンドをRenderを使って本番環境にデプロイする方法を詳しく解説します。

なお、こちらは以下の記事の続きになります。

2. なぜRenderを選んだのか?

Renderは以下を同時に満たしているため、選定しました:

  • バックエンドに適したDocker対応の簡易性。
  • PostgreSQLのセットアップが簡単で無料枠がある。
  • 自動デプロイ機能が充実し、運用コストが低い。

3. 必要な準備

ソースコード構成

プロジェクトのディレクトリ構造は以下のようになっていることを前提とします:

├── backend
│   ├── Dockerfile
│   ├── main.go
│   ├── ...
└── frontend
    ├── ...

事前条件

  • Docker がインストールされている。
  • GitHub にリポジトリが作成済み。
  • Render のアカウントを作成済み。
  • PostgreSQL を使用する場合、docker-compose.yml で定義されていること。

もし、Render のアカウントを作成済みでない場合は簡単にできますので作成しましょう。

スクリーンショット 2024-12-25 8.18.31.png
こちらの「Get Started」をクリックし、

スクリーンショット 2024-12-25 8.18.42.png

「GitHub」を選択して進んでいくと、連携しアカウント作成することができます。

4. Renderのアカウント作成とプロジェクト作成

スクリーンショット 2024-12-25 8.20.23.png

  • Render にログインまたはサインアップ(Render公式サイト)。
  • ダッシュボードの「New +」ボタンをクリック。
  • 「Web Services」を選択。

スクリーンショット 2024-12-25 8.21.36.png

「Git Provider」から該当のリポジトリを選択します。

スクリーンショット 2024-12-25 8.23.02.png

そして、必要な項目を入力していきます。

Branch:main
Root Directory:backend

としています。

データベースの作成

スクリーンショット 2024-12-25 14.35.10.png

1. 新しいデータベースの作成:

Render ダッシュボードで、New > PostgreSQL を選択します。

2. データベースの設定:

データベースの名前やサイズを設定します(無料プランを選択可能)。
データベース接続情報(ホスト名、ユーザー名、パスワード、データベース名)が提供されます。

3. 接続情報を環境変数として設定:

バックエンドアプリで使うために、Render の Environment Variables セクションに以下を設定します:

Key Value
DATABASE_URL DBのInternal Database URL
GIN_MODE release

5. 本番デプロイ用にコード修正

先ほど設定したDATABASE_URLを使用します。
Render で設定した環境変数も os.Getenv("DATABASE_URL") で取得できます。Render はデプロイ時に設定された環境変数を自動的にアプリケーションに渡します。

// 環境変数から取得
dsn := os.Getenv("DATABASE_URL")
if dsn == "" {
    // 環境変数が設定されていない場合、個別の環境変数から取得
    dbHost := os.Getenv("DB_HOST")
    dbPort := os.Getenv("DB_PORT")
    dbUser := os.Getenv("DB_USER")
    dbName := os.Getenv("DB_NAME")
    dbPassword := os.Getenv("DB_PASSWORD")

    // 接続文字列を作成
    dsn = "host=" + dbHost + " port=" + dbPort + " user=" + dbUser + " dbname=" + dbName + " password=" + dbPassword + " sslmode=disable"
}
// PostgreSQLに接続
client, err := ent.Open("postgres", dsn)

もし、DB_HOSTなどもすべて設定した場合はDATABASE_URLを設定する必要はありません。

GIN_MODE 環境変数を使用して Gin のモードを設定します。
ローカル環境のみ.envファイルを読み込むようにしています。

main.go
// GIN_MODE 環境変数を設定
ginMode := os.Getenv("GIN_MODE")
if ginMode == "" {
    ginMode = "debug" // デフォルトは "debug"
	// .envファイルを読み込む
	err := godotenv.Load()
	if err != nil {
		log.Printf("Error loading .env file: %v", err)
	}
}
gin.SetMode(ginMode)

6. デプロイ

mainブランチにpushされると自動的にデプロイされます。

スクリーンショット 2024-12-25 21.28.19.png

のようになれば成功です。

7. 動作確認

デプロイ後、Render の Web サービス URL にアクセスして動作を確認します
https://your-backend-service.onrender.com

8. データベースの確認

テーブルが作成されたかを確認したい場合、ローカルで見る方法もあります。

1. PostgreSQL クライアントをインストール

Macの場合

brew install postgresql

2. psql コマンドを使用

Render の「External Database URL」を使い、次のコマンドを実行します。

psql <External Database URL>

3. 接続後の操作

データベースに接続できたら、次のコマンドでデータを確認できます:

-- テーブル一覧を表示
\dt

-- データベースから抜ける
\q

9. まとめ

この記事では、Dockerを使ってGoで構築したバックエンドをRenderにデプロイする方法を解説しました。Render は無料プランで小規模プロジェクトを簡単にホスティングできるため、特に個人や小規模チームの開発に最適です。ぜひこの手順を参考にデプロイを試してみてください!

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?