ponshu-room-lite/tools/synology/docker-compose-tailscale.yml

203 lines
4.8 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Tailscale Funnel 永続化 - Docker Compose設定
#
# 目的: Synology再起動時にTailscale Funnelを自動的に復活させる
# 方針: 完全セルフホスト(クラウド依存なし)
version: '3.8'
services:
tailscale:
image: tailscale/tailscale:latest
container_name: tailscale-funnel
hostname: posimai-synology
# 重要: Synology再起動時に自動起動
restart: unless-stopped
# ネットワークモード: ホストネットワークを使用Funnel動作に必須
network_mode: host
# 権限: NET_ADMINVPN/トンネル作成に必要)
cap_add:
- NET_ADMIN
- NET_RAW
# ボリューム: Tailscale状態を永続化
volumes:
- /volume1/docker/tailscale/state:/var/lib/tailscale
- /dev/net/tun:/dev/net/tun
# 環境変数
environment:
# Tailscale認証キー初回のみ必要、その後は状態ファイルで保持
- TS_AUTHKEY=${TS_AUTHKEY:-}
# ログレベル
- TS_DEBUG=false
# ホスト名
- TS_HOSTNAME=posimai-synology
# 起動時にFunnel自動有効化重要
- TS_FUNNEL_ENABLE=true
# ヘルスチェックFunnel稼働確認
healthcheck:
test: ["CMD", "tailscale", "status"]
interval: 60s
timeout: 10s
retries: 3
start_period: 30s
# コマンド: tailscaled起動 + Funnel有効化スクリプト実行
command: >
sh -c "
# tailscaledデーモン起動
tailscaled --state=/var/lib/tailscale/tailscaled.state &
# tailscaled起動待機
sleep 5
# 既存の認証状態確認
if ! tailscale status > /dev/null 2>&1; then
echo 'Tailscale未認証: 初回セットアップが必要'
if [ -n \"$$TS_AUTHKEY\" ]; then
tailscale up --authkey=$$TS_AUTHKEY --hostname=$$TS_HOSTNAME
else
echo 'TS_AUTHKEYが設定されていません。手動で認証してください。'
tailscale up --hostname=$$TS_HOSTNAME
fi
else
echo 'Tailscale既存状態で起動'
tailscale up --hostname=$$TS_HOSTNAME
fi
# Funnel自動有効化ポート8080, 3000, 5000を公開
echo 'Funnel有効化開始...'
tailscale funnel --bg 8080 # Posimai Brain API
tailscale funnel --bg 3000 # Gitea
tailscale funnel --bg 5000 # Posimai API (Flask)
echo 'Tailscale Funnel起動完了'
# フォアグラウンドで待機(コンテナを停止させない)
tail -f /dev/null
"
---
# 使用方法
## 初回セットアップ
### 1. Tailscale認証キー取得初回のみ
https://login.tailscale.com/admin/settings/keys
→ 「Generate auth key」で認証キーを取得
### 2. 環境変数ファイル作成
```bash
# /volume1/docker/tailscale/.env
TS_AUTHKEY=tskey-auth-xxxxxxxxxxxx
```
### 3. Dockerディレクトリ作成
```bash
ssh admin@192.168.x.x
sudo mkdir -p /volume1/docker/tailscale/state
```
### 4. Docker Compose起動
```bash
cd /volume1/docker/tailscale
sudo docker-compose -f docker-compose-tailscale.yml up -d
```
### 5. ログ確認
```bash
sudo docker logs -f tailscale-funnel
```
以下のように表示されればOK:
```
Tailscale既存状態で起動
Funnel有効化開始...
Funnel enabled for port 8080
Funnel enabled for port 3000
Funnel enabled for port 5000
Tailscale Funnel起動完了
```
---
## 動作確認
```bash
# Tailscale状態確認
sudo docker exec tailscale-funnel tailscale status
# Funnel状態確認
sudo docker exec tailscale-funnel tailscale funnel status
```
---
## トラブルシューティング
### Q1. コンテナが起動しない
```bash
# ログ確認
sudo docker logs tailscale-funnel
# 再起動
sudo docker restart tailscale-funnel
```
### Q2. Funnelが有効化されない
```bash
# 手動でFunnel有効化
sudo docker exec tailscale-funnel tailscale funnel --bg 8080
sudo docker exec tailscale-funnel tailscale funnel --bg 3000
sudo docker exec tailscale-funnel tailscale funnel --bg 5000
```
### Q3. Synology再起動後に自動起動しない
```bash
# restart policyを確認
sudo docker inspect tailscale-funnel | grep -A 2 RestartPolicy
# 以下のように表示されるべき:
# "RestartPolicy": {
# "Name": "unless-stopped"
# }
```
---
## メンテナンス
### コンテナ再起動
```bash
sudo docker restart tailscale-funnel
```
### コンテナ停止・削除
```bash
sudo docker-compose -f docker-compose-tailscale.yml down
```
### 状態ファイル削除(完全リセット)
```bash
sudo rm -rf /volume1/docker/tailscale/state/*
```
---
## 完全セルフホストの証明
- ✅ Cloudflare不使用
- ✅ ngrok不使用
- ✅ VPS不使用
- ✅ すべてSynology内で完結
- ✅ Tailscaleは認証のみトンネル自体はP2P
- ✅ 再起動時も自動復旧