- Server-side: Golang (Gorilla Web Toolkit, SQLX)
- Client-side: React (TypeScript, Next.js, Redux Toolkit, Material UI, React Hook Form)
- Database: Postgres
- Others:
- Docker-based local development environment
- API definition in the format of OpenAPI 3.0
- API client libraries and Server stubs are generated by the OpenAPI Generator
- Client: typescript-axios
- Server: go-server
- User authentication by the OpenID Connect
Application Server (Go), Web Server (NGINX), Reverse Proxy Server (NGINX), DB はそれぞれ Docker コンテナで用意している。同一ネットワークで実行するため docker-compose
で起動させる。
- GolangのAPIサーバーは
golang
ディレクトリから以下で起動go run main.go
- Reactアプリケーションは
react
ディレクトリから以下で起動npm run dev
-
事前準備(この手順を踏まないとコンテナが起動しない)
mkcert
によって localhost 用のlocalhost.pem
とlocalhost-key.pem
を作成する。 [参考]
brew install mkcert // 未インストールの場合のみ mkcert --install mkcert localhost
- 作成した
pem
ファイルlocalhost.pem
,localhost-key.pem
を./nginx
下に置く。これで NGINX のリバースプロキシサーバーhttps://localhost
にhttps
接続できるようになる。(クライアントサーバーhttp://localhost:3000
はexpress
で用意しており、こちらはhttps
接続できないので注意。またその影響で CORS 制限があり、API も利用できないようになっている。)
-
開発環境を起動する際は
root
で以下を実行docker-compose build docker-compose up -d
- 立ち上がったら https://localhost にアクセスする
- 起動状況を確認するために Docker Desktop があると便利
- サーバー・クライアントともに保存で再ビルドされ、コンテナを立ち上げなおさずともホットリロードで反映される
- 立ち上がったら https://localhost にアクセスする
-
開発環境を終了する際は以下を実行
docker-compose down
.env.example
を参考に.env
ファイルを用意する。Postgres の情報と OpenID Connect の情報、どちらとも正しい情報に書き換える必要がある。OpenID Connect については Google アカウントによる認証を想定している。詳しくはauth_api.go
を参照。- 現在の API の設計上、OpenID による認証を有効にするとき、Google の認証情報設定でリダイレクトURLのパスは
api/auth/callback
にする必要がある。 - 以下を実行する。
デプロイ用コンテナでは Go のビルド、Next.js の静的ファイル出力が行われる。
docker-compose -f docker-compose.prod.yml up -d