1. はじめに
バックエンドとフロントエンドを分離して開発するケースは一般的です。このガイドでは、Dockerを使ってGoで構築したバックエンドをRenderを使って本番環境にデプロイする方法を詳しく解説します。
なお、こちらは以下の記事の続きになります。
2. なぜRenderを選んだのか?
Renderは以下を同時に満たしているため、選定しました:
- バックエンドに適したDocker対応の簡易性。
- PostgreSQLのセットアップが簡単で無料枠がある。
- 自動デプロイ機能が充実し、運用コストが低い。
3. 必要な準備
ソースコード構成
プロジェクトのディレクトリ構造は以下のようになっていることを前提とします:
├── backend
│ ├── Dockerfile
│ ├── main.go
│ ├── ...
└── frontend
├── ...
事前条件
- Docker がインストールされている。
- GitHub にリポジトリが作成済み。
- Render のアカウントを作成済み。
- PostgreSQL を使用する場合、
docker-compose.yml
で定義されていること。
もし、Render のアカウントを作成済みでない場合は簡単にできますので作成しましょう。
「GitHub」を選択して進んでいくと、連携しアカウント作成することができます。
4. Renderのアカウント作成とプロジェクト作成
- Render にログインまたはサインアップ(Render公式サイト)。
- ダッシュボードの「New +」ボタンをクリック。
- 「Web Services」を選択。
「Git Provider」から該当のリポジトリを選択します。
そして、必要な項目を入力していきます。
Branch:main
Root Directory:backend
としています。
データベースの作成
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
ファイルを読み込むようにしています。
// 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されると自動的にデプロイされます。
のようになれば成功です。
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 は無料プランで小規模プロジェクトを簡単にホスティングできるため、特に個人や小規模チームの開発に最適です。ぜひこの手順を参考にデプロイを試してみてください!