# 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_ADMIN(VPN/トンネル作成に必要) 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) - ✅ 再起動時も自動復旧