こんにちは!
Go&PostgreSQLを思ったより簡単にデプロイできたので参考になれば幸いです
こんな方におすすめ
- より手軽にGoとPostgreSQLをデプロイしてDBから取得、保存等ができるようになりたい
この記事で扱わないこと
- Goの文法に関して
- 各種サイトやツールのインストール方法
今回使用するGoファイル
こちらの記事で実装したGoファイルを使います
リポジトリは下記になります
render.comのアカウント作成
下記サイトにアクセスします。
アカウント作成の流れは下記の記事が参考になると思います
デプロイ用のPostgreSQL作成
https://dashboard.render.com/ にアクセスしてNew +からPostgreSQLを選択します
Nameに一意の名前を記入してその他は記入しなくて大丈夫です。
動作を確認するだけならFreeで大丈夫です。左下のCreate Databaseをクリック
作成に成功するとconnectionsの箇所にDBの情報が記載されてます。
今回は赤枠の部分を使用します
デプロイ用のGo作成
New+からWeb Serviceを選択
上のBuild and deploy from a Git repositoryを選択
デプロイしたいリポジトリを選択します。
今回は今回使用するGoファイルで記述してあるリポジトリを使います
環境変数を設定したいのでAdd Environment Variableを選択
各種環境変数を設定。Key名はGoファイル(下記ファイル参考)から、valueは上記スクショから引用しました。
func main() {
host := os.Getenv("POSTGRES_HOSTNAME")
database := os.Getenv("POSTGRES_DB")
user := os.Getenv("POSTGRES_USER")
password := os.Getenv("POSTGRES_PASSWORD")
しばらくするとデプロイが成功すると思います
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を選択
ここに貼り付けるURLはExternal Database URLになります。
(PostgreSQLの情報は上記Dashboardタブから確認できます)
こんな感じで設定画面が開けると思うのでconnectをクリック
ちなみに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のエンドポイントを確認します
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"}]
以上になります。
Goのデプロイする時の幸いになれば幸いです。
最後まで読んでいただきありがとうございます!