Files
Cyrene/docs/分布式开发.md
T
2026-05-16 08:26:56 +08:00

4.3 KiB
Executable File
Raw Blame History

喵~ 当然可以!这是个很棒的方案!(兴奋地竖起尾巴) 通过 SSH 隧道将远程服务器的 Docker 服务映射到本地,这样你就能在 Termux 上愉快地使用这些服务啦!

🔧 配置步骤

1️⃣ 在服务器上部署 Docker

先把你的 docker-compose.dev.yml 上传到服务器并启动:

# 在服务器上
scp docker-compose.dev.yml user@your-server:~/
ssh user@your-server
docker compose -f docker-compose.dev.yml up -d

2️⃣ 创建 SSH 隧道脚本

在你的 Termux 本地,创建一个隧道脚本 tunnel.sh

#!/bin/bash

# SSH 隧道映射 - 开发基础设施
# 用法: bash tunnel.sh [start|stop|status]

SERVER="user@your-server.com"  # 改成你的服务器地址
PORTS=(
    "5432:5432"    # PostgreSQL
    "6379:6379"    # Redis
    "6333:6333"    # Qdrant (gRPC)
    "6334:6334"    # Qdrant (HTTP)
    "9000:9000"    # MinIO API
    "9001:9001"    # MinIO Console
    "4222:4222"    # NATS
    "8222:8222"    # NATS HTTP
)

case "$1" in
    start)
        echo "🔌 启动 SSH 隧道..."
        # 构建端口转发参数
        ARGS=""
        for port in "${PORTS[@]}"; do
            ARGS="$ARGS -L $port"
        done
        
        # 后台运行 SSH 隧道
        ssh -N $ARGS $SERVER &
        echo $! > .tunnel_pid
        echo "✅ 隧道已启动 (PID: $(cat .tunnel_pid))"
        ;;
    
    stop)
        if [ -f .tunnel_pid ]; then
            kill $(cat .tunnel_pid) 2>/dev/null
            rm .tunnel_pid
            echo "🛑 隧道已停止"
        else
            echo "❌ 没有运行中的隧道"
        fi
        ;;
    
    status)
        if [ -f .tunnel_pid ] && kill -0 $(cat .tunnel_pid) 2>/dev/null; then
            echo "✅ 隧道运行中 (PID: $(cat .tunnel_pid))"
        else
            echo "❌ 隧道未运行"
        fi
        ;;
    
    *)
        echo "用法: $0 [start|stop|status]"
        ;;
esac

3️⃣ 更专业的方案:使用 autossh 自动重连

# 安装 autossh
pkg install autossh

# 创建 autossh 隧道脚本
cat > auto-tunnel.sh << 'EOF'
#!/bin/bash

SERVER="user@your-server.com"

# 使用 autossh 自动重连
autossh -M 0 \
    -o "ServerAliveInterval=30" \
    -o "ServerAliveCountMax=3" \
    -o "ExitOnForwardFailure=yes" \
    -N \
    -L 5432:localhost:5432 \
    -L 6379:localhost:6379 \
    -L 6333:localhost:6333 \
    -L 6334:localhost:6334 \
    -L 9000:localhost:9000 \
    -L 9001:localhost:9001 \
    -L 4222:localhost:4222 \
    -L 8222:localhost:8222 \
    $SERVER
EOF

chmod +x auto-tunnel.sh

4️⃣ 配置 SSH 免密登录

为了更方便,设置 SSH 密钥:

# 生成密钥
ssh-keygen -t ed25519

# 复制到服务器
ssh-copy-id user@your-server.com

# 或者手动复制
cat ~/.ssh/id_ed25519.pub | ssh user@your-server.com "cat >> ~/.ssh/authorized_keys"

5️⃣ 高级用法:配合 tmux 持久运行

# 安装 tmux
pkg install tmux

# 在 tmux 会话中运行隧道
tmux new -s docker-tunnel
./auto-tunnel.sh
# Ctrl+B, D 分离会话

# 重新连接
tmux attach -t docker-tunnel

6️⃣ 一键启动脚本

创建一个完整的 start-dev.sh

#!/bin/bash

echo "🐱 Cyrene AI 开发环境启动脚本"

# 检查 SSH 连接
echo "🔍 检查服务器连接..."
ssh -o ConnectTimeout=5 user@your-server.com "echo '✅ 服务器连接正常'" || {
    echo "❌ 无法连接服务器"
    exit 1
}

# 检查 Docker 服务
echo "🔍 检查 Docker 服务..."
ssh user@your-server.com "docker compose -f docker-compose.dev.yml ps" || {
    echo "❌ Docker 服务未运行,正在启动..."
    ssh user@your-server.com "cd ~ && docker compose -f docker-compose.dev.yml up -d"
}

# 启动隧道
echo "🔌 启动 SSH 隧道..."
screen -dmS docker-tunnel ./auto-tunnel.sh

echo "✅ 环境就绪!"
echo "📊 服务列表:"
echo "  PostgreSQL: localhost:5432"
echo "  Redis:      localhost:6379"
echo "  Qdrant:     localhost:6333"
echo "  MinIO API:  localhost:9000"
echo "  MinIO Web:  localhost:9001"
echo "  NATS:       localhost:4222"

chmod +x start-dev.sh

🎯 使用方式

# 启动所有服务
./start-dev.sh

# 或者手动
./tunnel.sh start

这样就完美解决 Termux 权限问题了!而且服务器性能更好,还能随时随地从本地连接开发环境呢!(开心地转圈圈) 🌟🐱