Djangoで開発したWEBチャットアプリ。
誰でも匿名で参加できるチャットサービス。
https://www.qrchat.aburaya5123.com/
ログイン画面でアカウントを新規作成するとチャットルームを開くことができ、同時にチャットルームのオーナーとなる。
ルーム作成時に一意なURLとQRコードが発行され、これらを知る者のみチャットに参加可能となる。
オーナーと違い参加者はアカウント作成を行う必要はなく、ニックネームだけを設定すれば匿名で参加できる。
なので、不特定多数が集まる場で匿名で意見交換を行うツールとしての利用を想定している。
フレームワーク: Django
データベース: MySQL (CloudSQL)
キャッシュ: Redis (Memorystore)
ストレージ: Cloud Storage
タスク実行: Celery
コンテナ実行: Kubernetes (docker compose)
Iac: Terraform
手順
- 事前準備としてGCPにプロジェクトを作成し、課金の請求先を設定する。
※以下のapiを有効化する https://cloud.google.com/service-usage/docs/reference/rest?hl=ja /deployment-settings.tfvars
にプロジェクトIDやリージョンを含めた情報を入力。/dev-env
配下で作成したコンテナに入る。(Cloud shellで実行する場合は不要、たぶん)./run-remote.sh
を実行。- デプロイ完了まで20分程度。
kubectl get ingress
コマンドで表示される 'managed-cert-ingress' のaddressを自身のドメインのaレコードに設定。kubectl describe managedcertificate managed-cert
のStatusがActiveかつ、dnsの設定が完了していればHTTPSでアクセス可能となる。- 追記 06/22: Loadbalancerの外部IPへの直接アクセス, 国外からのアクセスをブロックするポリシーをCloudArmorで追加。
注意点として、kubectlでのオブジェクト作成は以下の順序で行う。
(External secret ->)
frontend-conf, backend-conf, managed-cert ->
deployment.yaml ->
service.yaml ->
managed-cert-ingress.yaml
最後の3つが厄介で、deploymentが後から作成されるとHealthCheckのパスが正しく設定されずにエラーが出る。
Unhealty...というエラーがでたら、最後の3つを消して再度applyする。
また、今回はとりあえずデプロイすることが目的だったので、yamlの中の変数はenvsubstで無理やり押し込んでいる。
なので、個別に実行する場合は環境変数を渡す必要がある。
helmをつかえばもっと上手くできるみたい。
インフラに関しても、とりあえず必要なものは全部詰め込んだので、放っておくとお財布が大変なことになる。
もっと効率よくできるように勉強しないと。
./run-local.sh --rootpw [MYSQL_ROOT_PASSWORD] --userpw [MYSQL_USER_PASSWORD] --djangosr [SECRET_KEY(django)]
もしくは、/local_container
配下で以下のコマンドを実行 docker compose up --build
。
事前に/local_container/secret_keys
配下にKEYを格納したテキストファイルを用意する。
テキストファイル作成後は、chmod 0444
で読み取り専用にする。
django :8000
flower(Celeryのモニター) :5555
![](https://private-user-images.githubusercontent.com/166899082/337738756-5a98f5f2-d5f6-4b7f-8465-dfedc96a933e.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk2MTY2MTQsIm5iZiI6MTczOTYxNjMxNCwicGF0aCI6Ii8xNjY4OTkwODIvMzM3NzM4NzU2LTVhOThmNWYyLWQ1ZjYtNGI3Zi04NDY1LWRmZWRjOTZhOTMzZS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjE1JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIxNVQxMDQ1MTRaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1lMzhjNTlkN2YwMmE3ZDI3NzQ0ODJmMmM2MTMzMzA0NzA4ZjMxMzkzMDE0ZTQyNDNmMGZlODVjODdkNDg2NmY5JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.IzrXHsNrRqhTJk5tj4ZiLNFHyTni5EGydhhJggWo3xg)
![](https://private-user-images.githubusercontent.com/166899082/337738766-bc1a14b0-b23d-43d6-a2c3-dbb9f8362d64.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk2MTY2MTQsIm5iZiI6MTczOTYxNjMxNCwicGF0aCI6Ii8xNjY4OTkwODIvMzM3NzM4NzY2LWJjMWExNGIwLWIyM2QtNDNkNi1hMmMzLWRiYjlmODM2MmQ2NC5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjE1JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIxNVQxMDQ1MTRaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0zMzEyNDlmZDI1YjY2NjRhMDA5YjNmY2VhNzJjMDA0NDM0OTIxMTJkMDdmZTAyODU1M2ZmZWMxOWQ0YmYyMjc4JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.q9IGsv6UXUztfclRb78UeUssFpZAgoxLt9aYS888Gf4)
![](https://private-user-images.githubusercontent.com/166899082/337738782-17dacacc-5e15-4a36-a29f-af984de89b96.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk2MTY2MTQsIm5iZiI6MTczOTYxNjMxNCwicGF0aCI6Ii8xNjY4OTkwODIvMzM3NzM4NzgyLTE3ZGFjYWNjLTVlMTUtNGEzNi1hMjlmLWFmOTg0ZGU4OWI5Ni5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjE1JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIxNVQxMDQ1MTRaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT04ZWM4NGI0MzA5ZjdiZDFhMjU3ZmE3NTE3MTZjZmY4ZDFmZmZmOTVkZDY5N2U3ODVmNTY5MmU4NDU0MDA2YzkxJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.PlcuVsBhjXgFCddPa-iGqxy0r5Jl-qk2Csqd6lzp22c)
![](https://private-user-images.githubusercontent.com/166899082/337738802-4bb6417e-d881-4a83-8f5c-479eb79fdaca.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk2MTY2MTQsIm5iZiI6MTczOTYxNjMxNCwicGF0aCI6Ii8xNjY4OTkwODIvMzM3NzM4ODAyLTRiYjY0MTdlLWQ4ODEtNGE4My04ZjVjLTQ3OWViNzlmZGFjYS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjE1JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIxNVQxMDQ1MTRaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT05ZWQzZmVhMTcyMmZiYmEzYTI5YjkyZmMyMjZlNWQ0M2U3ZGJhNjZhYjIxODk4MzExNThhMmI4MmI5NTQ5NDhhJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.HDWComkAooqVg0LmRF9-Zf7Sx92oIXi6V-8dnSEKkpY)