0
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?

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

Posted at

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

こんな方におすすめ

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

この記事で扱わないこと

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

今回使用するGoファイル

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

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

render.comのアカウント作成

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

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

デプロイ用の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

main.go
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テーブルは下記部分で生成してます

migrations/users.go
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実行してみる。エンドポイントは下記参考

api/users.go
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のデプロイする時の幸いになれば幸いです。
最後まで読んでいただきありがとうございます!

0
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
0
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?