はじめに
Raspberry Pi を使って LibreChat(ChatGPT互換UI) を社内向けに安全に運用したい、というケースは増えています。
本記事では、以下をすべて満たす構成を 実際に動作確認できた手順 としてまとめます。
- Raspberry Pi 上で LibreChat を Docker で動かす
- Nginx による HTTPS(自己署名証明書)
- Microsoft Entra ID(OpenID Connect)によるSSOログイン
- localhost へのリダイレクト問題を回避
- 社内LAN前提の安定構成
構成概要
[ Browser ]
↓ HTTPS(自己署名SSL)
[ Nginx(Raspberry Pi / Host)]
↓ HTTP
[ LibreChat(Docker :3080)]
前提条件
- Raspberry Pi OS(64bit 推奨)
- 固定IP(例:
192.168.1.5) - 社内DNS または hosts で名前解決
librechat-server → 192.168.1.5
アクセスURL:
[https://librechat-server](https://librechat-server)
`
Dockerのインストール
curl -fsSL https://get.docker.com | sh
`
確認:
docker --version
docker compose version
Dockge(Docker Compose 管理UI)
sudo mkdir -p /opt/stacks /opt/dockge
cd /opt/dockge
sudo wget https://raw.githubusercontent.com/louislam/dockge/master/compose.yaml
sudo docker compose up -d
アクセス:
LibreChat のインストール
cd /opt/stacks
sudo git clone https://github.com/danny-avila/LibreChat
cd LibreChat
LibreChat の設定(Entra ID SSO 専用)
.env 作成
cp .env.example .env
nano .env
# ========================
# Login / Registration
# ========================
ALLOW_EMAIL_LOGIN=false
ALLOW_REGISTRATION=false
ALLOW_SOCIAL_LOGIN=true
ALLOW_SOCIAL_REGISTRATION=true
# ========================
# OpenID (Microsoft Entra ID)
# ========================
OPENID_CLIENT_ID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
OPENID_CLIENT_SECRET=xxxxxxxxxxxxxxxxxxxx
OPENID_ISSUER=https://login.microsoftonline.com/<TENANT_ID>/v2.0
OPENID_SCOPE="openid profile email"
OPENID_CALLBACK_URL=/oauth/openid/callback
OPENID_SESSION_SECRET=<十分に長いランダム文字列>
OPENID_USERNAME_CLAIM=preferred_username
OPENID_NAME_CLAIM=name
OPENID_BUTTON_LABEL=Sign in with Microsoft
# ========================
# External URL (重要)
# ========================
DOMAIN_CLIENT=https://librechat-server
DOMAIN_SERVER=https://librechat-server
※ OPENID_IMAGE_URL は設定しない
※ DOMAIN_CLIENT / DOMAIN_SERVER が無いと localhost:3080 に飛ぶ
ポート公開制御
cp docker-compose.override.yml.example docker-compose.override.yml
nano docker-compose.override.yml
services:
librechat:
ports:
- "127.0.0.1:3080:3080"
sudo docker compose down
sudo docker compose up -d
Nginx のインストール
sudo apt update
sudo apt install -y nginx
自己署名SSL証明書(SAN必須)
sudo mkdir -p /etc/nginx/ssl
sudo nano /etc/nginx/ssl/librechat.cnf
[req]
prompt = no
default_bits = 2048
default_md = sha256
distinguished_name = dn
x509_extensions = v3_req
[dn]
C=JP O=Internal CN=librechat-server
[v3_req]
subjectAltName = @alt_names basicConstraints = CA:FALSE keyUsage = digitalSignature, keyEncipherment extendedKeyUsage = serverAuth
[alt_names]
DNS.1 = librechat-server IP.1 = 192.168.1.5
cd /etc/nginx/ssl
sudo openssl req -x509 -nodes -days 3650 \
-newkey rsa:2048 \
-keyout librechat.key \
-out librechat.crt \
-config librechat.cnf \
-extensions v3_req
Nginx リバースプロキシ設定
sudo nano /etc/nginx/sites-available/librechat
server {
listen 443 ssl;
server_name librechat-server;
ssl_certificate /etc/nginx/ssl/librechat.crt;
ssl_certificate_key /etc/nginx/ssl/librechat.key;
ssl_protocols TLSv1.2 TLSv1.3;
location / {
proxy_pass http://127.0.0.1:3080;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
sudo ln -s /etc/nginx/sites-available/librechat /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
クライアント側(Windows)の証明書信頼
/etc/nginx/ssl/librechat.crtをコピー- 証明書のインストール
- 信頼されたルート証明機関
- ブラウザ再起動
Microsoft Entra ID 側の設定
アプリ登録
- 種類:Web
- 名前:
LibreChat (librechat-server) - アカウントの種類:この組織ディレクトリのみ
Redirect URI
クライアントシークレット
- Certificates & secrets → New client secret
- 表示された Value を
.envに設定
動作確認
- https://librechat-server にアクセス
- 🔒 表示
- Sign in with Microsoft が表示
- localhost に遷移しない
よくあるハマりどころ
| 症状 | 原因 |
|---|---|
| localhost:3080 に飛ぶ | DOMAIN_CLIENT 未設定 |
| SSL警告 | SANなし / 証明書未信頼 |
| ボタンが出ない | ALLOW_SOCIAL_LOGIN=false |
| 画像が壊れる | OPENID_IMAGE_URL=false |
まとめ
Raspberry Pi + LibreChat は、
Docker + Nginx + Entra ID を組み合わせることで、
社内向けの安全なAIチャット基盤として十分実用になります。
- LibreChat 本体は HTTP のままでOK
- HTTPSは Nginx 側で終端
- Entra ID SSO には HTTPS が必須
DOMAIN_CLIENT / DOMAIN_SERVERが最重要ポイント

