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