Skip to content

pepabo/todo-backend-golang-mc

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

47 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Todo-Backend API server written in Go for "LOLIPOP! Managed Cloud"

Todo-BackendのTODOアプリのスペックに対応したバックエンドAPIサーバです。

https://todobackend.com/client/index.html?https://todo-backend-golang-mc.lolipop.io/todos

ロリポップ!マネージドクラウドのGoプロジェクトに、たった2コマンドでデプロイ可能です。

事前準備

SSHの接続テスト

作成したGoプロジェクトのプロジェクト画面に表示されている SSHコマンド でログインできることを確認してください。

以下が表示されたらテストOKです。

Last login: Thu Nov 15 02:40:59 2018 from 10.1.12.1
  __  __  ____   _          _ _
 |  \/  |/ ___| | |    ___ | (_)_ __   ___  _ __
 | |\/| | |     | |   / _ \| | | '_ \ / _ \| '_ \
 | |  | | |___ _| |__| (_) | | | |_) | (_) | |_) |
 |_|  |_|\____(_)_____\___/|_|_| .__/ \___/| .__/
                               |_|         |_|

******* Welcome to Lolipop! Managed Cloud *******

Makefileの設定を変更

プロジェクト画面に表示されている各情報をもとにMakefileを修正します(make実行時に渡す形でも構いません)

マネージドクラウド Makefile
SSH/SFTP ホスト名 SSH_HOST ?= [ここに記載]
SSH/SFTP ポート SSH_PORT ?= [ここに記載]
SSH/SFTP ユーザー名 SSH_USER ?= [ここに記載]
データベース データベース名 DB_NAME ?= [ここに記載]
データベース ユーザー名 DB_USER ?= [ここに記載]
データベース パスワード DB_PASS ?= [ここに記載]
データベース データベースのホスト名 DB_HOST ?= [ここに記載]

デプロイ方法

  1. データベースの初期化
  2. バックエンドAPIサーバをデプロイ
  3. 起動コマンドの設定(マネージドクラウドのダッシュボード)

で完了します。

1. データベースの初期化

$ make initdb

2. デプロイ

$ make deploy

3. 起動コマンドを設定

起動コマンドを /var/app/current/server に設定します

img

プロジェクトURLにアクセスして画面が表示されれば成功です。

動作確認方法

フロントサイド(Todo-Backend)と繋いで表示してみましょう

https://todobackend.com/client/index.html?[プロジェクトURL]/todos にアクセスして動作を確認できます。

(ex. https://todobackend.com/client/index.html?https://todo-backend-golang-mc.lolipop.io/todos )

あるいは、https://todobackend.com/client/[プロジェクトURL]/todos を入力しても良いです

直接cURLでリクエストしてみよう

コマンドラインから

$ export PROJECT_DOMAIN="プロジェクトURL"

一覧を表示

$ curl https://$PROJECT_DOMAIN/todos
[{"title":"マネージドクラウドに登録する","completed":false,"order":1,"url":"https://polished-miyakonojo-8226.lolipop.io/todos/1"},{"title":"マネージドクラウドでGoアプリケーションをデプロイする","completed":false,"order":2,"url":"https://polished-miyakonojo-8226.lolipop.io/todos/2"}]

作成

$ curl -X POST -d '{"title":"curlから登録してみる","completed":false, "order":3}}' https://$PROJECT_DOMAIN/todos
{"title":"curlから登録してみる","completed":false,"order":3,"url":"https://polished-miyakonojo-8226.lolipop.io/todos/3"}

更新

$ curl -X PATCH -d '{"completed":true}' https://$PROJECT_DOMAIN/todos/3
{"title":"curlから登録してみる","completed":true,"order":3,"url":"https://polished-miyakonojo-8226.lolipop.io/todos/3"}

削除

$ curl -X DELETE https://$PROJECT_DOMAIN/todos/3
$ curl https://$PROJECT_DOMAIN/todos
[{"title":"マネージドクラウドに登録する","completed":false,"order":1,"url":"https://polished-miyakonojo-8226.lolipop.io/todos/1"},{"title":"マネージドクラウドでGoアプリケーションをデプロイする","completed":false,"order":2,"url":"https://polished-miyakonojo-8226.lolipop.io/todos/2"}]

ローカルでの開発環境の用意

Dockerがあれば、ローカルでの開発環境を簡単に用意できます

まず、テンポラリなMySQLサーバを起動します。起動と同時にデータベースとテーブルが作成されます。

$ make dev-start

APIサーバをビルドして起動します

$ make server

開発が終了したらMySQLサーバを消します

$ make dev-stop

開発時に便利なコマンド

ビルド方法

$ make build

マネージドクラウドに保存されているログの確認

マネージドクラウドはWebコンテナのSTDOUTとSTDERRを/var/log/container/*/haconiwa.out /var/log/container/*/haconiwa.err に保存しています。

以下のコマンドでそれぞれのログを時系列にローカルのSTDOUTに表示します

$ make logs-out
$ make logs-err

各ディレクトリ/ファイルの一口解説

  • initdb.sql
    • データベースのスキーマ定義と、初期のデータ
  • Makefile
    • ビルドやデプロイの手続きをまとめたMakefile. 使い方は上記READMEを参照のこと
  • main.go
    • プログラムの開始地点(main() 関数)と、サーバ起動・ルーティングなどの主な処理。
  • todo.go
    • todosテーブルのビジネスロジックを記述したコード (所謂モデルというものです)
  • go.mod
    • vgoというパッケージ管理ツールの生成するファイル. (ruyにおけるGemfile、npmにおけるpackage.jsonみたいなもの)
  • go.sum
    • こちらもvgoが生成するファイル
  • templates/
    • html/template パッケージで利用するテンプレートファイル
  • assets/
    • cssや画像ファイルなど. ファイル配信のサンプルで利用
  • docs/
    • Windowsの方向けの設定方法です!

利用している主なパッケージ

  • go-chi
    • シンプルなルーティング機能を提供してくれるパッケージ
  • sqlx
    • Goの標準sqlパッケージを拡張するパッケージ
    • Selectの結果をStructにマッピングしてくれる機能など
  • godotenv
    • .envファイルから環境変数を読み出す機能を持つパッケージ
    • データベース名、パスワードをアプリケーションに渡すために利用

References