🏌️‍♂️

Render.comを使ってGo&PostgreSQLを爆速でデプロイしてみた

2023/12/02に公開

こんにちは!
Go&PostgreSQLを思ったより簡単にデプロイできたので参考になれば幸いです

こんな方におすすめ

  • より手軽にGoとPostgreSQLをデプロイしてDBから取得、保存等ができるようになりたい

この記事で扱わないこと

  • Goの文法に関して
  • 各種サイトやツールのインストール方法

今回使用するGoファイル

こちらの記事で実装したGoファイルを使います

https://qiita.com/miumi/items/6a70d5b9a1a61cc39dc8

リポジトリは下記になります

https://github.com/mikaijun/go-postgre-onboarding/

render.comのアカウント作成

下記サイトにアクセスします。

https://render.com/

アカウント作成の流れは下記の記事が参考になると思います

https://zenn.dev/protoout/articles/54-howto-render-setup

デプロイ用のPostgreSQL作成

https://dashboard.render.com/ にアクセスしてNew +からPostgreSQLを選択します

スクリーンショット 2023-12-02 15.26.02.png

Nameに一意の名前を記入してその他は記入しなくて大丈夫です。
スクリーンショット 2023-12-02 15.27.15.png

動作を確認するだけならFreeで大丈夫です。左下のCreate Databaseをクリック
スクリーンショット 2023-12-02 15.27.23.png

作成に成功するとconnectionsの箇所にDBの情報が記載されてます。
今回は赤枠の部分を使用します

スクリーンショット 2023-12-02 15.34.44.png

デプロイ用のGo作成

New+からWeb Serviceを選択

スクリーンショット 2023-12-02 16.13.30.png

上のBuild and deploy from a Git repositoryを選択
スクリーンショット 2023-12-02 15.38.54.png

デプロイしたいリポジトリを選択します。
今回は今回使用するGoファイルで記述してあるリポジトリを使います

スクリーンショット 2023-12-02 15.39.16.png

環境変数を設定したいのでAdd Environment Variableを選択
スクリーンショット 2023-12-02 15.41.58.png

各種環境変数を設定。Key名はGoファイル(下記ファイル参考)から、valueは上記スクショから引用しました。
スクリーンショット 2023-12-02 15.44.16.png

func main() {
    host := os.Getenv("POSTGRES_HOSTNAME")
    database := os.Getenv("POSTGRES_DB")
    user := os.Getenv("POSTGRES_USER")
    password := os.Getenv("POSTGRES_PASSWORD")

一番下のCreate Web Serviceをクリック
スクリーンショット 2023-12-02 15.48.24.png

しばらくするとデプロイが成功すると思います

スクリーンショット 2023-12-02 15.54.47.png

Dec 2 03:54:21 PM  ==> Running './app'
Dec 2 03:54:21 PM  Server is running on port 8080...
Dec 2 03:54:29 PM  Your service is live 🎉

DBクライアントツールでデプロイしたPostgreSQLと接続する

今回は https://tableplus.com/ を使いたいと思います。
インストール・設定が完了したら右クリックでConnection URLを選択

スクリーンショット 2023-12-02 15.57.17.png

ここに貼り付けるURLはExternal Database URLになります。
(PostgreSQLの情報は上記Dashboardタブから確認できます)

スクリーンショット 2023-12-02 15.59.02.png

こんな感じで設定画面が開けると思うのでconnectをクリック

スクリーンショット 2023-12-02 16.01.45.png

接続するとusersテーブルを確認できました
スクリーンショット 2023-12-02 16.03.10.png

ちなみにusersテーブルは下記部分で生成してます

func UsersMigrate(db *sql.DB) {
	var count int
	err := db.QueryRow("SELECT COUNT(*) FROM information_schema.tables WHERE table_name = 'users'").Scan(&count)
	if err != nil {
		panic(err)
	}

API実行してみる

dashboadからWeb Serviceを選択してGoのエンドポイントを確認します

スクリーンショット 2023-12-02 16.04.01.png

API実行してみる。エンドポイントは下記参考

func Users(db *sql.DB) {
	http.HandleFunc("/users/get", func(w http.ResponseWriter, r *http.Request) {
		// 省略
	})

	http.HandleFunc("/users/create", func(w http.ResponseWriter, r *http.Request) {
        // 省略
    })
}
% curl -X GET https://go-test-e5bk.onrender.com/users/get
[{"Id":1,"Name":"Smith"},{"Id":2,"Name":"Johnson"},{"Id":3,"Name":"Brown"}]
% curl -X POST   -d '{ "name": "Bob" }' https://go-test-e5bk.onrender.com/users/create
{"Id":4,"Name":"Bob"}
mikaijun@MacBook-Pro ~ % curl -X GET https://go-test-e5bk.onrender.com/users/get                             
[{"Id":1,"Name":"Smith"},{"Id":2,"Name":"Johnson"},{"Id":3,"Name":"Brown"},{"Id":4,"Name":"Bob"}]

クライアントツールでも更新されてました
スクリーンショット 2023-12-02 16.08.57.png

以上になります。
Goのデプロイする時の幸いになれば幸いです。
最後まで読んでいただきありがとうございます!

Discussion