203 lines
4.8 KiB
YAML
203 lines
4.8 KiB
YAML
|
|
# 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)
|
|||
|
|
- ✅ 再起動時も自動復旧
|