GodUploader with GraphQL
以下の環境で動作確認済です。
- Node.js v18.13.0
- yarn 1.22.19
- Python 3.10.1
- poetry version 1.1.12
- ImageMagick 6.9.7-4
- WebP
- Debian系なら
apt install webp
でWebPのコマンド群をインストールすればOKです
- Debian系なら
- MySQL 8.0.28
フロントエンドの開発のためにAPIサーバーを立ち上げるだけであれば、Dockerを使うのがおすすめです。
docker
docker-compose
コマンドが叩ける状態であれば、以下のコマンドでAPIサーバーを立ち上げることができます。
$ docker-compose up --build
以降のセクションに書いてあるコマンドは全て api
ディレクトリ以下で、Docker環境外で実行してください。
DBマイグレーションを作成する際や、Pythonの依存ライブラリを追加する際などは、docker-composeでMySQLコンテナを立ち上げたままDocker環境外で作業するのがおすすめです。
DB_URL
環境変数を設定して、MySQLコンテナにつなぎに行くようにすると作業しやすいかもしれません。
$ DB_URL=mysql+mysqlconnector://root@localhost:3306/goduploader
依存ライブラリの管理はpoetryで行っています。
$ poetry install
$ script/init_db.sh
$ poetry run python script/main.py
http://localhost:5000/api/ping にアクセスして {"ok":true}
というJSONが返ったらOKです。
tests
以下にテストがあります。
$ poetry run pytest
yarnを入れたら以下で動くはずです。
$ cd front
$ yarn install --frozen-lockfile
$ yarn start
http://localhost:3000/ にアクセスして閲覧できればOKです。
APIサーバーを立ち上げた状態で以下のコマンドを叩くと、GraphQLスキーマ (front/schema.graphql) を更新できます。
$ cd front
$ yarn codegen
GraphQLクエリ (graphql
で囲んでいる箇所) の内容を書き換えた場合、relay-compilerのコンパイルが必要になります。
$ cd front
$ yarn relay-compiler
$ yarn test
mainブランチに変更がマージされると、GitHub ActionsでDockerイメージがbuildされて、GitHub Container Registryにpushされます。イメージがpushされてちょっと待つとデプロイされます。
APIがデプロイされ、Podが作成されたら、godillustuploader-api-serverの適当なPod経由でマイグレーションスクリプトを実行してください。
$ kubectl get pods
# (godillustuploader-api-server- から始まるPodの名前をメモする)
$ kubectl exec (godillustuploader-api-serverのPod) -it -- /bin/sh /app/main.sh poetry run alembic upgrade head