Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
169 changes: 169 additions & 0 deletions docs/deploy-commands.sh
Original file line number Diff line number Diff line change
@@ -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