docs: add complete deployment commands with pre-configured env
Step-by-step deployment commands for Vultr VPS (12vCPU/24GB Singapore) with unified docker-compose for both MiroFish and BettaFish services. https://claude.ai/code/session_01UEvR5S7e6rWEWbg7VUExBX
This commit is contained in:
parent
61bca04f50
commit
c1ad988461
|
|
@ -0,0 +1,169 @@
|
||||||
|
#!/bin/bash
|
||||||
|
#=============================================================================
|
||||||
|
# MiroFish + BettaFish 完整部署指令
|
||||||
|
# 伺服器: 139.180.189.56 (Vultr Singapore, 12vCPU / 24GB RAM)
|
||||||
|
#
|
||||||
|
# 使用方式:
|
||||||
|
# ssh root@139.180.189.56
|
||||||
|
# 然後複製下面的指令分段執行
|
||||||
|
#=============================================================================
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------
|
||||||
|
# Part 1: 系統準備 (複製整段執行)
|
||||||
|
#-----------------------------------------------------------------------------
|
||||||
|
apt-get update -qq && \
|
||||||
|
apt-get install -y -qq git curl wget unzip > /dev/null 2>&1 && \
|
||||||
|
echo "✓ 系統更新完成"
|
||||||
|
|
||||||
|
# 安裝 Docker
|
||||||
|
if ! command -v docker &> /dev/null; then
|
||||||
|
curl -fsSL https://get.docker.com | sh > /dev/null 2>&1
|
||||||
|
systemctl enable docker && systemctl start docker
|
||||||
|
fi
|
||||||
|
echo "✓ Docker: $(docker --version)"
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------
|
||||||
|
# Part 2: Clone 專案 (複製整段執行)
|
||||||
|
#-----------------------------------------------------------------------------
|
||||||
|
git clone https://github.com/666ghj/MiroFish.git /opt/mirofish
|
||||||
|
git clone https://github.com/virus11456/BettaFish.git /opt/bettafish
|
||||||
|
echo "✓ 兩個專案已 clone"
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------
|
||||||
|
# Part 3: 建立 MiroFish .env (複製整段執行)
|
||||||
|
#-----------------------------------------------------------------------------
|
||||||
|
cat > /opt/mirofish/.env << 'EOF'
|
||||||
|
LLM_API_KEY=sk-ebc1d137772040cabc536dd17d2bf7b6
|
||||||
|
LLM_BASE_URL=https://dashscope.aliyuncs.com/compatible-mode/v1
|
||||||
|
LLM_MODEL_NAME=qwen-plus
|
||||||
|
ZEP_API_KEY=z_1dWlkIjoiNmYxYjRlY2UtNTA4Yy00YmU5LThmMDktNDRjNGQxYjAyN2FkIn0.FVCYTUmdtwvZK4bLAR0Q_oN488JjeAVxL-GuK0F_fwv2eCDQwpoHAL_DHLHiDROxI5oVqJ90Hnwo9sXHlaXgMQ
|
||||||
|
EOF
|
||||||
|
echo "✓ MiroFish .env 已建立"
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------
|
||||||
|
# Part 4: 建立 BettaFish .env (複製整段執行)
|
||||||
|
#-----------------------------------------------------------------------------
|
||||||
|
if [ -f /opt/bettafish/.env.example ]; then
|
||||||
|
cp /opt/bettafish/.env.example /opt/bettafish/.env
|
||||||
|
fi
|
||||||
|
# 追加/覆寫關鍵配置
|
||||||
|
cat >> /opt/bettafish/.env << 'EOF'
|
||||||
|
|
||||||
|
# === 手動追加的配置 ===
|
||||||
|
QUERY_API_KEY=sk-6fdfebecdea74a4a8d8fa6aeb0a94d2e
|
||||||
|
QUERY_BASE_URL=https://api.deepseek.com
|
||||||
|
QUERY_MODEL_NAME=deepseek-chat
|
||||||
|
|
||||||
|
INSIGHT_API_KEY=sk-6fdfebecdea74a4a8d8fa6aeb0a94d2e
|
||||||
|
INSIGHT_BASE_URL=https://api.deepseek.com
|
||||||
|
INSIGHT_MODEL_NAME=deepseek-chat
|
||||||
|
|
||||||
|
REPORT_API_KEY=sk-ebc1d137772040cabc536dd17d2bf7b6
|
||||||
|
REPORT_BASE_URL=https://dashscope.aliyuncs.com/compatible-mode/v1
|
||||||
|
REPORT_MODEL_NAME=qwen-plus
|
||||||
|
|
||||||
|
TAVILY_API_KEY=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
|
||||||
|
EOF
|
||||||
|
echo "✓ BettaFish .env 已建立"
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------
|
||||||
|
# Part 5: 建立統一 docker-compose.yml (複製整段執行)
|
||||||
|
#-----------------------------------------------------------------------------
|
||||||
|
cat > /opt/docker-compose.yml << 'DCEOF'
|
||||||
|
services:
|
||||||
|
# MiroFish — AI 預測引擎
|
||||||
|
# 前端: http://139.180.189.56:3000
|
||||||
|
# 後端 API: http://139.180.189.56:5001
|
||||||
|
mirofish:
|
||||||
|
image: ghcr.io/666ghj/mirofish:latest
|
||||||
|
container_name: mirofish
|
||||||
|
env_file:
|
||||||
|
- /opt/mirofish/.env
|
||||||
|
ports:
|
||||||
|
- "3000:3000"
|
||||||
|
- "5001:5001"
|
||||||
|
restart: unless-stopped
|
||||||
|
volumes:
|
||||||
|
- /opt/mirofish/backend/uploads:/app/backend/uploads
|
||||||
|
|
||||||
|
# BettaFish — 輿情監控系統
|
||||||
|
# 前端: http://139.180.189.56:5000
|
||||||
|
bettafish-db:
|
||||||
|
image: postgres:15-alpine
|
||||||
|
container_name: bettafish-db
|
||||||
|
environment:
|
||||||
|
POSTGRES_USER: bettafish
|
||||||
|
POSTGRES_PASSWORD: bettafish
|
||||||
|
POSTGRES_DB: bettafish
|
||||||
|
volumes:
|
||||||
|
- bettafish_pgdata:/var/lib/postgresql/data
|
||||||
|
restart: unless-stopped
|
||||||
|
|
||||||
|
bettafish:
|
||||||
|
build:
|
||||||
|
context: /opt/bettafish
|
||||||
|
dockerfile: Dockerfile
|
||||||
|
container_name: bettafish
|
||||||
|
env_file:
|
||||||
|
- /opt/bettafish/.env
|
||||||
|
ports:
|
||||||
|
- "5000:5000"
|
||||||
|
depends_on:
|
||||||
|
- bettafish-db
|
||||||
|
restart: unless-stopped
|
||||||
|
volumes:
|
||||||
|
- /opt/bettafish/final_reports:/app/final_reports
|
||||||
|
- /opt/bettafish/logs:/app/logs
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
bettafish_pgdata:
|
||||||
|
DCEOF
|
||||||
|
echo "✓ docker-compose.yml 已建立"
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------
|
||||||
|
# Part 6: 啟動服務 (複製整段執行)
|
||||||
|
#-----------------------------------------------------------------------------
|
||||||
|
cd /opt
|
||||||
|
|
||||||
|
# 先啟動 MiroFish(直接拉映像,最快)
|
||||||
|
docker compose up -d mirofish
|
||||||
|
echo "✓ MiroFish 啟動中..."
|
||||||
|
|
||||||
|
# 再啟動 BettaFish(需要 build,較慢)
|
||||||
|
docker compose up -d --build bettafish-db bettafish
|
||||||
|
echo "✓ BettaFish 啟動中..."
|
||||||
|
|
||||||
|
# 查看狀態
|
||||||
|
docker compose ps
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------
|
||||||
|
# Part 7: 防火牆 (複製整段執行)
|
||||||
|
#-----------------------------------------------------------------------------
|
||||||
|
if command -v ufw &> /dev/null; then
|
||||||
|
ufw allow 22/tcp > /dev/null 2>&1
|
||||||
|
ufw allow 3000/tcp > /dev/null 2>&1
|
||||||
|
ufw allow 5000/tcp > /dev/null 2>&1
|
||||||
|
ufw allow 5001/tcp > /dev/null 2>&1
|
||||||
|
ufw --force enable > /dev/null 2>&1
|
||||||
|
echo "✓ 防火牆已開放端口"
|
||||||
|
fi
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------
|
||||||
|
# 完成!
|
||||||
|
#-----------------------------------------------------------------------------
|
||||||
|
echo ""
|
||||||
|
echo "============================================"
|
||||||
|
echo " 部署完成!"
|
||||||
|
echo "============================================"
|
||||||
|
echo ""
|
||||||
|
echo " MiroFish: http://139.180.189.56:3000"
|
||||||
|
echo " BettaFish: http://139.180.189.56:5000"
|
||||||
|
echo ""
|
||||||
|
echo " 常用命令:"
|
||||||
|
echo " 查看日誌: cd /opt && docker compose logs -f"
|
||||||
|
echo " 查看狀態: cd /opt && docker compose ps"
|
||||||
|
echo " 重啟: cd /opt && docker compose restart"
|
||||||
|
echo " 停止: cd /opt && docker compose down"
|
||||||
|
echo ""
|
||||||
|
echo " ⚠ 請立即更改 root 密碼: passwd"
|
||||||
|
echo "============================================"
|
||||||
Loading…
Reference in New Issue