コンテンツにスキップ

サーバを立てる

Taylis のサーバは、Linux のサーバ 1 台に Docker Compose で立てます。Redis・Kafka・Kubernetes などは使いません。 数十人・数百万件のメッセージまでを、この構成のまま扱えるように作っています。

必要なもの

もの 内容
サーバ Linux(Debian 12 / 13 で確かめています)、2 vCPU / メモリ 4 GB 以上がおすすめ(2 GB ならスワップを足す)
ソフトウェア Docker Engine と compose プラグイン
ドメイン名 サーバを指す DNS の名前(例 chat.example.com)
ポート TCP 80 と 443(証明書の取得にも使います)。HTTP/3 を使うなら UDP 443
ディスク 添付ファイルの分(移行するなら数 GB)、バックアップの置き場所

プッシュ通知を使うなら、Apple Developer Program(iOS)と Firebase のプロジェクト(Android)も必要です (プッシュ通知)。

構成

flowchart TD
  U["利用者の<br>アプリ・ブラウザ"] -- "HTTPS" --> C
  subgraph host["Docker Compose"]
    C["caddy<br>TLS・ブラウザ版"] --> APP["app<br>FastAPI・WebSocket"]
    APP --> DB[("db<br>PostgreSQL + PGroonga")]
    APP --> OS[("objectstore<br>versitygw")]
    subgraph closed["外に出られないネットワーク"]
      CV["converter<br>Gotenberg"]
    end
    APP --> CV
  end
  APP -. "プッシュ" .-> P["APNs / FCM"]
サービス 役割
caddy TLS の終端(証明書は自動で取得)、/api/* をアプリへ、それ以外はブラウザ版を配信
app Taylis のサーバ本体(Python / FastAPI)。起動のときにデータベースの移行を自動で適用します
db PostgreSQL と、日本語・英語の全文検索の PGroonga
objectstore 添付ファイルの置き場所(versitygw。ふつうのディレクトリの上に S3 の API を載せます)
converter Office の文書を PDF にしてプレビューを作ります(外のネットワークには出られません)

データの置き場所は、PostgreSQL と versitygw のデータディレクトリの 2 か所だけ です。バックアップもこの 2 つを 取ります(バックアップと復元)。

進め方

  1. クイックスタート:サーバを起動して、最初の管理者を作ります。
  2. 必要に応じて:
  3. バックアップと復元 を毎日動かします。
  4. 更新と自動デプロイ:新しいバージョンへの更新、GitHub のタグからの自動デプロイ。
  5. Slack / Mattermost / Notion からの移行。
  6. うまくいかないときは 困ったとき。

このサイトには要点だけを書いています。手順と設定の全体は、リポジトリの infra/README.md と infra/.env.example にあります。

サーバの担当者はすべてのメッセージを読めます

サーバ・データベース・バックアップを扱える人は、非公開チャンネルや DM を含むすべてのメッセージを技術的には 読めます。誰がサーバを扱うかを決め、利用者に伝えてください(プライバシーとデータの扱い)。