Skip to content

Qrコードで誰でも参加できるチャットサービス

License

Notifications You must be signed in to change notification settings

Aburaya5123/QrChat

Repository files navigation

概要

Djangoで開発したWEBチャットアプリ。
誰でも匿名で参加できるチャットサービス。
https://www.qrchat.aburaya5123.com/

ログイン画面でアカウントを新規作成するとチャットルームを開くことができ、同時にチャットルームのオーナーとなる。
ルーム作成時に一意なURLとQRコードが発行され、これらを知る者のみチャットに参加可能となる。
オーナーと違い参加者はアカウント作成を行う必要はなく、ニックネームだけを設定すれば匿名で参加できる。
なので、不特定多数が集まる場で匿名で意見交換を行うツールとしての利用を想定している。

構成

フレームワーク: Django
データベース: MySQL (CloudSQL)
キャッシュ: Redis (Memorystore)
ストレージ: Cloud Storage
タスク実行: Celery
コンテナ実行: Kubernetes (docker compose)
Iac: Terraform

リモート実行 (GCPにデプロイ)

手順

  1. 事前準備としてGCPにプロジェクトを作成し、課金の請求先を設定する。
    ※以下のapiを有効化する https://cloud.google.com/service-usage/docs/reference/rest?hl=ja
  2. /deployment-settings.tfvars にプロジェクトIDやリージョンを含めた情報を入力。
  3. /dev-env 配下で作成したコンテナに入る。(Cloud shellで実行する場合は不要、たぶん)
  4. ./run-remote.shを実行。
  5. デプロイ完了まで20分程度。
  6. kubectl get ingress コマンドで表示される 'managed-cert-ingress' のaddressを自身のドメインのaレコードに設定。
  7. kubectl describe managedcertificate managed-certのStatusがActiveかつ、dnsの設定が完了していればHTTPSでアクセス可能となる。
  8. 追記 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 で読み取り専用にする。

PORT

django :8000
flower(Celeryのモニター) :5555




About

Qrコードで誰でも参加できるチャットサービス

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published