git clone から起動・社内公開までの手順をまとめたガイドです。完全オフライン(閉域網)での
運用を前提としています。コマンド例は Windows(cmd)を基本に記載し、必要に応じて
macOS / Linux 向けを併記します。
| 項目 | 必須 | 用途・備考 |
|---|---|---|
| Python 3.11 以上 | 必須 | バックエンド実行環境。python --version で確認 |
| Git | 必須 | リポジトリの取得 |
| Java 11 以上(JRE/JDK) | 任意 | PlantUML 図をサーバー描画する場合のみ。ポータブルJREでも可 |
plantuml.jar |
任意 | PlantUML 図を描画する場合のみ |
Mermaid 図はブラウザ内描画のため Java は不要です。Java と
plantuml.jarは PlantUML をサーバー側で描画したい場合のみ必要です。
閉域網で
pip installができない場合は、別環境でpip downloadしてホイール(wheel)を 持ち込み、オフラインインストールしてください(手順は「7. オフライン環境での依存導入」を参照)。
git clone https://github.com/tkwork-dev/LocalChat.git
cd LocalChatプロジェクト専用の仮想環境を作成すると、他のPython環境を汚さずに済みます。
Windows(cmd):
python -m venv .venv
.venv\Scripts\activatemacOS / Linux:
python3 -m venv .venv
source .venv/bin/activate
.venv/は.gitignore済みのため、コミットされることはありません。
python -m pip install --upgrade pip
python -m pip install -r requirements.txtインストールされる主なパッケージ:
fastapi/uvicorn… Webサーバー・WebSocketSQLAlchemy… DBアクセス(SQLite)python-multipart… ファイルアップロードpydantic… 入出力スキーマcryptography… TLS自己署名証明書の生成・自動更新(TLSを使わない場合は任意)
サンプルをコピーして .env を作成します。
Windows(cmd):
copy .env.example .envmacOS / Linux:
cp .env.example .env.env を開き、最低限 SECRET_KEY を推測困難な値へ変更してください。
ランダムな値は次のコマンドで生成できます。
python -c "import secrets; print(secrets.token_urlsafe(48))"出力された文字列を .env の SECRET_KEY に設定します。
SECRET_KEY=ここに生成した値を貼り付け
PORT=8777
.envは機密情報を含むため.gitignore済みです。絶対にコミットしないでください。
主な設定項目(詳細は .env.example のコメントを参照):
| 変数 | 既定値 | 説明 |
|---|---|---|
HOST |
0.0.0.0 |
待ち受けホスト。特定の社内IPに絞ることも可 |
PORT |
8000 |
待ち受けポート |
SECRET_KEY |
(要変更) | トークン署名用シークレット |
DATABASE_URL |
sqlite:///./data/localchat.db |
DB格納先 |
UPLOAD_DIR |
./data/uploads |
アップロード保存先 |
RESTRICT_TO_PRIVATE |
true |
社内LAN(プライベートIP)以外を拒否 |
SSL_CERTFILE / SSL_KEYFILE |
空 | TLS証明書パス(設定すると HTTPS/WSS で起動) |
PLANTUML_JAR |
空 | PlantUML描画用JARのパス(任意) |
JAVA_BIN |
java |
Java実行ファイルのパス(任意) |
data/(DB・アップロード)ディレクトリは起動時に自動作成されるため、手動作成は不要です。
python run.pyブラウザで以下を開きます(TLS未設定時は HTTP)。
http://localhost:8777
ポートは
.envのPORTに合わせてください(.env.exampleの既定は 8000、 同梱の.env例では 8777)。
初回利用者は画面の「新規登録」からアカウントを作成します。最初に作成した運用者が サーバー(ワークスペース)を作り、招待コードを発行してメンバーを招待します。
停止するときは実行中のターミナルで Ctrl + C を押します。
インターネット接続のある別端末で wheel を収集し、社内へ持ち込みます。
接続環境(収集側):
python -m pip download -r requirements.txt -d wheelswheels フォルダを USB 等で閉域網の端末へコピーし、オフラインでインストールします。
閉域網(導入側):
python -m pip install --no-index --find-links wheels -r requirements.txt社内LAN内でも通信を暗号化する場合に設定します。設定すると WebSocket も自動で
wss:// を使用します。
.env で TLS を有効化していれば、サーバー起動時に証明書を自動生成・自動更新します
(既定 TLS_AUTO_GENERATE=true)。.env に証明書パスを設定するだけで構いません。
SSL_CERTFILE=./certs/server.crt
SSL_KEYFILE=./certs/server.key手動で生成したい場合は次のスクリプトを使います(localhost / 127.0.0.1 に加え、
端末のホスト名・LAN内IPv4 を SAN へ自動登録します)。
python -m pip install cryptography
python scripts/gen_cert.py
certs/は秘密鍵を含むため.gitignore済みです。各環境で生成してください。 自己署名のため初回アクセス時にブラウザが警告を表示します。社内ではcerts/server.crtを 各端末の「信頼されたルート証明機関」に取り込むと警告が出なくなります。
社内CAが発行した PEM 形式の証明書・秘密鍵を certs/ に配置し、.env にパスを設定します。
正式な証明書は自動更新の対象外(上書きされません)です。
他のPCから接続できるよう、社内ネットワーク(Domain/Private プロファイル)でのみ ポートを許可します。Public(公衆網)では許可しません。
PowerShell を管理者として実行し、次を実行します(UACが自動で昇格します)。
powershell -ExecutionPolicy Bypass -File scripts\open_firewall.ps1 -Port 8777実行後、同じネットワークの同僚がアクセスできるURL(https://<このPCのIP>:8777)が
一覧表示されます。
既定で RESTRICT_TO_PRIVATE=true のため、社内LAN(プライベートIP)以外からの
アクセスはアプリ側でも拒否されます。許可ネットワークを限定する場合は CIDR を指定します。
RESTRICT_TO_PRIVATE=true
ALLOWED_CIDRS=192.168.10.0/24,10.20.0.0/16plantuml.jar と Java は容量が大きく .gitignore で除外されているため、各環境で配置します。
(Mermaid 図はブラウザ内描画のため、この設定は不要です。)
plantuml.jar(最新版は Java 11 以上が必要)をプロジェクト配下に配置(例:plantuml/)- ポータブルJRE(Eclipse Temurin / Amazon Corretto などの zip 版)を展開(例:
runtime/) .envにパスを設定
PLANTUML_JAR=./plantuml/plantuml-asl-1.2026.6.jar
JAVA_BIN=./runtime/jdk-17.0.19+10-jre/bin/java.exe未設定の場合、
plantumlコードブロックはソースコードのまま表示されます(エラーにはなりません)。
| 種類 | 既定パス | 変更方法 |
|---|---|---|
| データベース | ./data/localchat.db |
.env の DATABASE_URL |
| アップロードファイル | ./data/uploads/ |
.env の UPLOAD_DIR |
data/ は .gitignore 済みです。バックアップは data/ ディレクトリごと定期的に
社内NAS等へ退避してください(社内共有ストレージへ保存する場合は上記パスをマウント先に設定)。
| 症状 | 原因・対処 |
|---|---|
起動時に ModuleNotFoundError |
仮想環境の有効化忘れ、または pip install -r requirements.txt 未実行 |
| ブラウザで接続できない | PORT の不一致、またはファイアウォール未開放(手順9参照) |
| 他PCから接続できない | ファイアウォール開放、RESTRICT_TO_PRIVATE / ALLOWED_CIDRS 設定、TLS時はSAN(IP)を確認 |
| ブラウザのTLS警告 | 自己署名証明書のため。certs/server.crt を信頼済みルートに取り込むか、社内CAの証明書を使用 |
| PlantUMLが画像にならない | PLANTUML_JAR 未設定、または Java が古い(UnsupportedClassVersionError は Java 11+ が必要) |
| ログインできない(再起動後) | SECRET_KEY を変更すると既存トークンは無効化されます。再ログインしてください |
git clone https://github.com/tkwork-dev/LocalChat.git
cd LocalChat
python -m venv .venv
.venv\Scripts\activate
python -m pip install -r requirements.txt
copy .env.example .env
:: .env を開いて SECRET_KEY を変更してから↓
python run.pyブラウザで http://localhost:8777(.env の PORT に合わせる)を開いて「新規登録」へ。