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

203 lines
4.8 KiB
YAML
Raw Permalink Normal View History

# 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
- ✅ 再起動時も自動復旧