chore: remove pm2 deployment docs and tooling

This commit is contained in:
icy
2025-11-06 17:47:40 +08:00
parent 517e173604
commit 579c73a81b
12 changed files with 52 additions and 1009 deletions

View File

@@ -13,7 +13,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Added
- Documentation system with multi-language support (EN/CN/RU/UK)
- Complete getting-started guides (Docker, PM2, Custom API)
- Complete getting-started guides (Docker, Custom API)
- Architecture documentation with system design details
- User guides with FAQ and troubleshooting
- Community documentation with bounty programs

View File

@@ -13,7 +13,7 @@ NOFX 项目的所有重要更改都将记录在此文件中。
### 新增
- 多语言文档系统(英文/中文/俄语/乌克兰语)
- 完整的快速开始指南Docker、PM2、自定义 API
- 完整的快速开始指南Docker、自定义 API
- 架构文档,包含系统设计细节
- 用户指南,包含 FAQ 和故障排除
- 社区文档,包含悬赏计划

View File

@@ -9,7 +9,6 @@ NOFX documentation has been reorganized into a structured `docs/` directory for
### Deployment Guides
- `DOCKER_DEPLOY.en.md``docs/getting-started/docker-deploy.en.md`
- `DOCKER_DEPLOY.md``docs/getting-started/docker-deploy.zh-CN.md`
- `PM2_DEPLOYMENT.md``docs/getting-started/pm2-deploy.md`
- `CUSTOM_API.md``docs/getting-started/custom-api.md`
### Community Docs
@@ -42,7 +41,6 @@ nofx/
├── README.uk.md
├── DOCKER_DEPLOY.md
├── DOCKER_DEPLOY.en.md
├── PM2_DEPLOYMENT.md
├── CUSTOM_API.md
├── HOW_TO_POST_BOUNTY.md
├── INTEGRATION_BOUNTY_HYPERLIQUID.md
@@ -101,7 +99,6 @@ Files GitHub needs to see:
1. **`getting-started/`** - Deployment and setup
- Docker deployment (EN/中文)
- PM2 deployment
- Custom API configuration
2. **`guides/`** - Usage guides and tutorials

View File

@@ -17,15 +17,12 @@ Welcome to the NOFX documentation! This page helps you find the right documentat
| [Getting Started Index (中文)](getting-started/README.zh-CN.md) | 所有部署选项 | All deployment options |
| [Docker Deployment (EN)](getting-started/docker-deploy.en.md) | Deploy with Docker (recommended) | Docker 部署(推荐) |
| [Docker Deployment (中文)](getting-started/docker-deploy.zh-CN.md) | Docker 部署指南(中文) | Docker deployment guide |
| [PM2 Deployment (EN)](getting-started/pm2-deploy.en.md) | Deploy with PM2 process manager | PM2 进程管理器部署 |
| [PM2 Deployment (中文)](getting-started/pm2-deploy.md) | PM2 部署指南(中文) | PM2 deployment guide |
| [Custom API (EN)](getting-started/custom-api.en.md) | Connect custom AI API providers | 连接自定义 AI API |
| [Custom API (中文)](getting-started/custom-api.md) | 连接自定义 AI API 提供商 | Custom AI provider guide |
**Quick Links:**
- 📖 See all options → [Getting Started](getting-started/README.md) / [快速开始](getting-started/README.zh-CN.md)
- 🐳 Want easiest setup? → [Docker (EN)](getting-started/docker-deploy.en.md) / [Docker (中文)](getting-started/docker-deploy.zh-CN.md)
- 🔧 Advanced user? → [PM2 (EN)](getting-started/pm2-deploy.en.md) / [PM2 (中文)](getting-started/pm2-deploy.md)
- 🤖 Custom AI model? → [Custom API (EN)](getting-started/custom-api.en.md) / [自定义 API](getting-started/custom-api.md)
---

View File

@@ -24,32 +24,11 @@ Choose the method that best fits your needs:
**Quick Start:**
```bash
cp config.json.example config.json
./start.sh start --build
./scripts/start.sh start --build
```
---
### 🔧 PM2 Deployment
**Best for:** Advanced users, development, custom setups
- **English:** [pm2-deploy.en.md](pm2-deploy.en.md)
- **中文:** [pm2-deploy.md](pm2-deploy.md)
**Pros:**
- ✅ Direct process control
- ✅ Better for development
- ✅ Lower resource usage
- ✅ More flexible
**Quick Start:**
```bash
go build -o nofx
cd web && npm install && npm run build
pm2 start ecosystem.config.js
```
---
## 🤖 AI Configuration
@@ -77,7 +56,6 @@ Before starting, ensure you have:
- ✅ Go 1.21+
- ✅ Node.js 18+
- ✅ TA-Lib library
- ✅ PM2 (optional)
---

View File

@@ -22,32 +22,11 @@
**快速开始:**
```bash
cp config.json.example config.json
./start.sh start --build
./scripts/start.sh start --build
```
---
### 🔧 PM2 部署
**适合:** 进阶用户、开发环境、自定义设置
- **中文文档:** [pm2-deploy.md](pm2-deploy.md)
- **English:** [pm2-deploy.en.md](pm2-deploy.en.md)
**优势:**
- ✅ 直接进程控制
- ✅ 更适合开发
- ✅ 资源占用更低
- ✅ 更灵活
**快速开始:**
```bash
go build -o nofx
cd web && npm install && npm run build
pm2 start ecosystem.config.js
```
---
## 🤖 AI 配置
@@ -75,7 +54,6 @@ pm2 start ecosystem.config.js
- ✅ Go 1.21+
- ✅ Node.js 18+
- ✅ TA-Lib 库
- ✅ PM2可选
---

View File

@@ -1,303 +0,0 @@
# NoFX Trading Bot - PM2 Deployment Guide
Complete guide for local development and production deployment using PM2.
## 🚀 Quick Start
### 1. Install PM2
```bash
npm install -g pm2
```
### 2. One-Command Launch
```bash
./pm2.sh start
```
That's it! Frontend and backend will start automatically.
---
## 📋 All Commands
### Service Management
```bash
# Start services
./pm2.sh start
# Stop services
./pm2.sh stop
# Restart services
./pm2.sh restart
# View status
./pm2.sh status
# Delete services
./pm2.sh delete
```
### Log Viewing
```bash
# View all logs (live)
./pm2.sh logs
# Backend logs only
./pm2.sh logs backend
# Frontend logs only
./pm2.sh logs frontend
```
### Build & Compile
```bash
# Compile backend
./pm2.sh build
# Recompile backend and restart
./pm2.sh rebuild
```
### Monitoring
```bash
# Open PM2 monitoring dashboard (real-time CPU/Memory)
./pm2.sh monitor
```
---
## 📊 Access URLs
After successful startup:
- **Frontend Web Interface**: http://localhost:3000
- **Backend API**: http://localhost:8080
- **Health Check**: http://localhost:8080/api/health
---
## 🔧 Configuration Files
### pm2.config.js
PM2 configuration file, defines frontend and backend startup parameters:
```javascript
const path = require('path');
module.exports = {
apps: [
{
name: 'nofx-backend',
script: './nofx', // Go binary
cwd: __dirname, // Dynamically get current directory
autorestart: true,
max_memory_restart: '500M'
},
{
name: 'nofx-frontend',
script: 'npm',
args: 'run dev', // Vite dev server
cwd: path.join(__dirname, 'web'), // Dynamically join path
autorestart: true,
max_memory_restart: '300M'
}
]
};
```
**After modifying configuration, restart is required:**
```bash
./pm2.sh restart
```
---
## 📝 Log File Locations
- **Backend Logs**: `./logs/backend-error.log` and `./logs/backend-out.log`
- **Frontend Logs**: `./web/logs/frontend-error.log` and `./web/logs/frontend-out.log`
---
## 🔄 Startup on Boot
Set PM2 to start on boot:
```bash
# 1. Start services
./pm2.sh start
# 2. Save current process list
pm2 save
# 3. Generate startup script
pm2 startup
# 4. Follow the instructions to execute command (requires sudo)
```
**Disable startup on boot:**
```bash
pm2 unstartup
```
---
## 🛠️ Common Operations
### Restart After Code Changes
**Backend changes:**
```bash
./pm2.sh rebuild # Auto compile and restart
```
**Frontend changes:**
```bash
./pm2.sh restart # Vite will auto hot-reload, no restart needed
```
### View Real-time Resource Usage
```bash
./pm2.sh monitor
```
### View Detailed Information
```bash
pm2 info nofx-backend # Backend details
pm2 info nofx-frontend # Frontend details
```
### Clear Logs
```bash
pm2 flush
```
---
## 🐛 Troubleshooting
### Service Startup Failed
```bash
# 1. View detailed errors
./pm2.sh logs
# 2. Check port usage
lsof -i :8080 # Backend port
lsof -i :3000 # Frontend port
# 3. Manual compile test
go build -o nofx
./nofx
```
### Backend Won't Start
```bash
# ~~Check if config.json exists~~
# ~~ls -l config.json~~
# Check if database file exists
ls -l trading.db
# Check permissions
chmod +x nofx
# Run manually to see errors
./nofx
```
### Frontend Not Accessible
```bash
# Check node_modules
cd web && npm install
# Manual start test
npm run dev
```
---
## 🎯 Production Environment Recommendations
### 1. Use Production Mode
Modify `pm2.config.js`:
```javascript
{
name: 'nofx-frontend',
script: 'npm',
args: 'run preview', // Change to preview (requires npm run build first)
env: {
NODE_ENV: 'production'
}
}
```
### 2. Increase Instances (Load Balancing)
```javascript
{
name: 'nofx-backend',
script: './nofx',
instances: 2, // Start 2 instances
exec_mode: 'cluster'
}
```
### 3. Auto Restart Strategy
```javascript
{
autorestart: true,
max_restarts: 10,
min_uptime: '10s',
max_memory_restart: '500M'
}
```
---
## 📦 Comparison with Docker Deployment
| Feature | PM2 Deployment | Docker Deployment |
|---------|---------------|-------------------|
| Startup Speed | ⚡ Fast | 🐌 Slower |
| Resource Usage | 💚 Low | 🟡 Medium |
| Isolation | 🟡 Medium | 💚 High |
| Use Case | Dev/Single-machine | Production/Cluster |
| Configuration Complexity | 💚 Simple | 🟡 Medium |
**Recommendations:**
- **Development Environment**: Use `./pm2.sh`
- **Production Environment**: Use `./start.sh` (Docker)
---
## 🆘 Getting Help
```bash
./pm2.sh help
```
Or check PM2 official documentation: https://pm2.keymetrics.io/
---
## 📄 License
MIT

View File

@@ -1,303 +0,0 @@
# NoFX Trading Bot - PM2 部署指南
使用 PM2 进行本地开发和生产部署的完整指南。
## 🚀 快速开始
### 1. 安装 PM2
```bash
npm install -g pm2
```
### 2. 一键启动
```bash
./pm2.sh start
```
就这么简单!前后端将自动启动。
---
## 📋 所有命令
### 服务管理
```bash
# 启动服务
./pm2.sh start
# 停止服务
./pm2.sh stop
# 重启服务
./pm2.sh restart
# 查看状态
./pm2.sh status
# 删除服务
./pm2.sh delete
```
### 日志查看
```bash
# 查看所有日志(实时)
./pm2.sh logs
# 只看后端日志
./pm2.sh logs backend
# 只看前端日志
./pm2.sh logs frontend
```
### 构建与编译
```bash
# 编译后端
./pm2.sh build
# 重新编译后端并重启
./pm2.sh rebuild
```
### 监控
```bash
# 打开 PM2 监控面板实时CPU/内存)
./pm2.sh monitor
```
---
## 📊 访问地址
启动成功后:
- **前端 Web 界面**: http://localhost:3000
- **后端 API**: http://localhost:8080
- **健康检查**: http://localhost:8080/api/health
---
## 🔧 配置文件
### pm2.config.js
PM2 配置文件,定义了前后端的启动参数:
```javascript
const path = require('path');
module.exports = {
apps: [
{
name: 'nofx-backend',
script: './nofx', // Go 二进制文件
cwd: __dirname, // 动态获取当前目录
autorestart: true,
max_memory_restart: '500M'
},
{
name: 'nofx-frontend',
script: 'npm',
args: 'run dev', // Vite 开发服务器
cwd: path.join(__dirname, 'web'), // 动态拼接路径
autorestart: true,
max_memory_restart: '300M'
}
]
};
```
**修改配置后需要重启:**
```bash
./pm2.sh restart
```
---
## 📝 日志文件位置
- **后端日志**: `./logs/backend-error.log``./logs/backend-out.log`
- **前端日志**: `./web/logs/frontend-error.log``./web/logs/frontend-out.log`
---
## 🔄 开机自启动
设置 PM2 开机自启动:
```bash
# 1. 启动服务
./pm2.sh start
# 2. 保存当前进程列表
pm2 save
# 3. 生成启动脚本
pm2 startup
# 4. 按照提示执行命令(需要 sudo
```
**取消开机自启动:**
```bash
pm2 unstartup
```
---
## 🛠️ 常见操作
### 修改代码后重启
**后端修改:**
```bash
./pm2.sh rebuild # 自动编译并重启
```
**前端修改:**
```bash
./pm2.sh restart # Vite 会自动热重载,无需重启
```
### 查看实时资源占用
```bash
./pm2.sh monitor
```
### 查看详细信息
```bash
pm2 info nofx-backend # 后端详情
pm2 info nofx-frontend # 前端详情
```
### 清空日志
```bash
pm2 flush
```
---
## 🐛 故障排查
### 服务启动失败
```bash
# 1. 查看详细错误
./pm2.sh logs
# 2. 检查端口占用
lsof -i :8080 # 后端端口
lsof -i :3000 # 前端端口
# 3. 手动编译测试
go build -o nofx
./nofx
```
### 后端无法启动
```bash
# ~~检查 config.json 是否存在~~
# ~~ls -l config.json~~
# 检查数据库文件是否存在
ls -l trading.db
# 检查权限
chmod +x nofx
# 手动运行看报错
./nofx
```
### 前端无法访问
```bash
# 检查 node_modules
cd web && npm install
# 手动启动测试
npm run dev
```
---
## 🎯 生产环境建议
### 1. 使用生产模式
修改 `pm2.config.js`
```javascript
{
name: 'nofx-frontend',
script: 'npm',
args: 'run preview', // 改为 preview需先 npm run build
env: {
NODE_ENV: 'production'
}
}
```
### 2. 增加实例数(负载均衡)
```javascript
{
name: 'nofx-backend',
script: './nofx',
instances: 2, // 启动 2 个实例
exec_mode: 'cluster'
}
```
### 3. 自动重启策略
```javascript
{
autorestart: true,
max_restarts: 10,
min_uptime: '10s',
max_memory_restart: '500M'
}
```
---
## 📦 与 Docker 部署的对比
| 特性 | PM2 部署 | Docker 部署 |
|------|---------|------------|
| 启动速度 | ⚡ 快 | 🐌 较慢 |
| 资源占用 | 💚 低 | 🟡 中等 |
| 隔离性 | 🟡 中等 | 💚 高 |
| 适用场景 | 开发/单机 | 生产/集群 |
| 配置复杂度 | 💚 简单 | 🟡 中等 |
**建议:**
- **开发环境**: 使用 `./pm2.sh`
- **生产环境**: 使用 `./start.sh` (Docker)
---
## 🆘 获取帮助
```bash
./pm2.sh help
```
或查看 PM2 官方文档https://pm2.keymetrics.io/
---
## 📄 License
MIT

View File

@@ -403,22 +403,24 @@ docker compose up -d
#### ❌ Trader Configuration Not Saving
**Check:**
1. **Permissions:**
1. **PostgreSQL container health**
```bash
ls -l config.db trading.db
# Should be writable by current user
docker compose ps postgres
docker compose exec postgres pg_isready -U nofx -d nofx
```
2. **Disk Space:**
2. **Inspect data directly**
```bash
./scripts/view_pg_data.sh # quick overview
docker compose exec postgres \
psql -U nofx -d nofx -c "SELECT COUNT(*) FROM traders;"
```
3. **Disk space**
```bash
df -h # Ensure disk not full
```
3. **Database Integrity:**
```bash
sqlite3 config.db "PRAGMA integrity_check;"
```
---
## 📊 How to Capture Logs
@@ -437,15 +439,9 @@ docker compose logs -f backend
docker compose logs backend --tail=500 > backend_logs.txt
```
**Manual/PM2:**
**Manual binary:**
```bash
# Terminal where you ran ./nofx shows logs
# PM2:
pm2 logs nofx --lines 100
# Save to file
pm2 logs nofx --lines 500 > backend_logs.txt
# If running without Docker, the terminal running ./nofx prints logs
```
---
@@ -532,13 +528,16 @@ docker compose restart frontend
```bash
# Check traders in database
sqlite3 config.db "SELECT id, name, ai_model_id, exchange_id, is_running FROM traders;"
docker compose exec postgres \
psql -U nofx -d nofx -c "SELECT id, name, ai_model_id, exchange_id, is_running FROM traders;"
# Check AI models
sqlite3 config.db "SELECT id, name, model_type, enabled FROM ai_models;"
docker compose exec postgres \
psql -U nofx -d nofx -c "SELECT id, name, provider, enabled FROM ai_models;"
# Check system config
sqlite3 config.db "SELECT key, value FROM system_config;"
docker compose exec postgres \
psql -U nofx -d nofx -c "SELECT key, value FROM system_config;"
```
---
@@ -572,12 +571,12 @@ If you've tried all the above and still have problems:
# Stop everything
docker compose down
# Backup databases (just in case)
cp config.db config.db.backup
cp trading.db trading.db.backup
# Optional: back up PostgreSQL data
docker compose exec postgres \
pg_dump -U nofx -d nofx > backup_nofx.sql
# Remove databases (fresh start)
rm config.db trading.db
# Remove all persisted volumes (fresh start)
docker compose down -v
# Restart
docker compose up -d --build

View File

@@ -403,22 +403,24 @@ docker compose up -d
#### ❌ 交易员配置无法保存
**检查:**
1. **权限:**
1. **PostgreSQL 容器状态**
```bash
ls -l config.db trading.db
# 应该对当前用户可写
docker compose ps postgres
docker compose exec postgres pg_isready -U nofx -d nofx
```
2. **磁盘空间:**
2. **直接检查数据库数据**
```bash
./scripts/view_pg_data.sh # 快速总览
docker compose exec postgres \
psql -U nofx -d nofx -c "SELECT COUNT(*) FROM traders;"
```
3. **磁盘空间**
```bash
df -h # 确保磁盘未满
```
3. **数据库完整性:**
```bash
sqlite3 config.db "PRAGMA integrity_check;"
```
---
## 📊 如何捕获日志
@@ -437,15 +439,9 @@ docker compose logs -f backend
docker compose logs backend --tail=500 > backend_logs.txt
```
**手动/PM2:**
**手动运行:**
```bash
# 运行 ./nofx 的终端会显示日志
# PM2:
pm2 logs nofx --lines 100
# 保存到文件
pm2 logs nofx --lines 500 > backend_logs.txt
# 如果不是通过 Docker而是手动运行 ./nofx可直接在终端查看日志
```
---
@@ -532,13 +528,16 @@ docker compose restart frontend
```bash
# 检查数据库中的交易员
sqlite3 config.db "SELECT id, name, ai_model_id, exchange_id, is_running FROM traders;"
docker compose exec postgres \
psql -U nofx -d nofx -c "SELECT id, name, ai_model_id, exchange_id, is_running FROM traders;"
# 检查 AI 模型
sqlite3 config.db "SELECT id, name, model_type, enabled FROM ai_models;"
docker compose exec postgres \
psql -U nofx -d nofx -c "SELECT id, name, provider, enabled FROM ai_models;"
# 检查系统配置
sqlite3 config.db "SELECT key, value FROM system_config;"
docker compose exec postgres \
psql -U nofx -d nofx -c "SELECT key, value FROM system_config;"
```
---
@@ -572,12 +571,12 @@ sqlite3 config.db "SELECT key, value FROM system_config;"
# 停止所有服务
docker compose down
# 备份数据库(以防万一)
cp config.db config.db.backup
cp trading.db trading.db.backup
# 可选:备份 PostgreSQL 数据
docker compose exec postgres \
pg_dump -U nofx -d nofx > backup_nofx.sql
# 删除数据库(全新开始)
rm config.db trading.db
# 删除所有持久化卷(全新开始)
docker compose down -v
# 重启
docker compose up -d --build

View File

@@ -1,41 +0,0 @@
const path = require('path');
module.exports = {
apps: [
{
name: 'nofx-backend',
script: './nofx',
cwd: __dirname, // 使用当前目录(配置文件所在目录)
interpreter: 'none', // 不使用解释器,直接执行二进制文件
instances: 1,
autorestart: true,
watch: false,
max_memory_restart: '500M',
env: {
NODE_ENV: 'production'
},
error_file: './logs/backend-error.log',
out_file: './logs/backend-out.log',
log_date_format: 'YYYY-MM-DD HH:mm:ss Z',
merge_logs: true
},
{
name: 'nofx-frontend',
script: 'npm',
args: 'run dev',
cwd: path.join(__dirname, 'web'), // 动态拼接 web 目录
instances: 1,
autorestart: true,
watch: false,
max_memory_restart: '300M',
env: {
NODE_ENV: 'development',
PORT: 3000
},
error_file: './logs/frontend-error.log',
out_file: './logs/frontend-out.log',
log_date_format: 'YYYY-MM-DD HH:mm:ss Z',
merge_logs: true
}
]
};

258
pm2.sh
View File

@@ -1,258 +0,0 @@
#!/bin/bash
# NoFX Trading Bot - PM2 管理脚本
# 用法: ./pm2.sh [start|stop|restart|status|logs|build]
set -e
# 自动获取脚本所在目录(支持符号链接)
PROJECT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
cd "$PROJECT_ROOT"
# 颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
PURPLE='\033[0;35m'
CYAN='\033[0;36m'
NC='\033[0m' # No Color
# 函数:打印带颜色的消息
print_info() {
echo -e "${BLUE} $1${NC}"
}
print_success() {
echo -e "${GREEN}$1${NC}"
}
print_warning() {
echo -e "${YELLOW}⚠️ $1${NC}"
}
print_error() {
echo -e "${RED}$1${NC}"
}
print_header() {
echo -e "${PURPLE}═══════════════════════════════════════${NC}"
echo -e "${PURPLE} 🤖 NoFX Trading Bot - PM2 Manager${NC}"
echo -e "${PURPLE}═══════════════════════════════════════${NC}"
echo ""
}
# 函数:检查 PM2 是否安装
check_pm2() {
if ! command -v pm2 &> /dev/null; then
print_error "PM2 未安装,请先安装: npm install -g pm2"
exit 1
fi
}
# 函数:确保日志目录存在
ensure_log_dirs() {
mkdir -p "$PROJECT_ROOT/logs"
mkdir -p "$PROJECT_ROOT/web/logs"
print_info "日志目录已创建"
}
# 函数:编译后端
build_backend() {
print_info "正在编译后端..."
go build -o nofx
if [ $? -eq 0 ]; then
print_success "后端编译完成"
else
print_error "后端编译失败"
exit 1
fi
}
# 函数:构建前端(生产环境)
build_frontend() {
print_info "正在构建前端..."
cd web
npm run build
if [ $? -eq 0 ]; then
print_success "前端构建完成"
cd ..
else
print_error "前端构建失败"
exit 1
fi
}
# 函数:启动服务
start_services() {
print_header
ensure_log_dirs
# 检查后端二进制文件是否存在
if [ ! -f "./nofx" ]; then
print_warning "后端二进制文件不存在,开始编译..."
build_backend
fi
print_info "正在启动服务..."
pm2 start pm2.config.js
sleep 2
pm2 status
echo ""
print_success "服务启动完成!"
echo ""
echo -e "${CYAN}📊 访问地址:${NC}"
echo -e " ${GREEN}前端:${NC} http://localhost:3000"
echo -e " ${GREEN}后端 API:${NC} http://localhost:8080"
echo ""
echo -e "${CYAN}📝 查看日志:${NC}"
echo -e " ${GREEN}实时日志:${NC} ./pm2.sh logs"
echo -e " ${GREEN}后端日志:${NC} ./pm2.sh logs backend"
echo -e " ${GREEN}前端日志:${NC} ./pm2.sh logs frontend"
echo ""
}
# 函数:停止服务
stop_services() {
print_header
print_info "正在停止服务..."
pm2 stop pm2.config.js
print_success "服务已停止"
}
# 函数:重启服务
restart_services() {
print_header
print_info "正在重启服务..."
pm2 restart pm2.config.js
sleep 2
pm2 status
print_success "服务已重启"
}
# 函数:删除服务
delete_services() {
print_header
print_warning "正在删除 PM2 服务..."
pm2 delete pm2.config.js || true
print_success "PM2 服务已删除"
}
# 函数:查看状态
show_status() {
print_header
pm2 status
echo ""
print_info "详细信息:"
pm2 info nofx-backend
echo ""
pm2 info nofx-frontend
}
# 函数:查看日志
show_logs() {
if [ -z "$2" ]; then
# 显示所有日志
pm2 logs
elif [ "$2" = "backend" ]; then
pm2 logs nofx-backend
elif [ "$2" = "frontend" ]; then
pm2 logs nofx-frontend
else
print_error "未知的日志类型: $2"
print_info "用法: ./pm2.sh logs [backend|frontend]"
exit 1
fi
}
# 函数:监控
show_monitor() {
print_header
print_info "启动 PM2 监控面板..."
pm2 monit
}
# 函数:重新编译并重启
rebuild_and_restart() {
print_header
print_info "正在重新编译后端..."
build_backend
print_info "正在重启后端服务..."
pm2 restart nofx-backend
sleep 2
pm2 status
print_success "后端已重新编译并重启"
}
# 函数:显示帮助
show_help() {
print_header
echo -e "${CYAN}使用方法:${NC}"
echo " ./pm2.sh [command]"
echo ""
echo -e "${CYAN}可用命令:${NC}"
echo -e " ${GREEN}start${NC} - 启动前后端服务"
echo -e " ${GREEN}stop${NC} - 停止所有服务"
echo -e " ${GREEN}restart${NC} - 重启所有服务"
echo -e " ${GREEN}status${NC} - 查看服务状态"
echo -e " ${GREEN}logs${NC} - 查看所有日志 (Ctrl+C 退出)"
echo -e " ${GREEN}logs backend${NC} - 查看后端日志"
echo -e " ${GREEN}logs frontend${NC} - 查看前端日志"
echo -e " ${GREEN}monitor${NC} - 打开 PM2 监控面板"
echo -e " ${GREEN}build${NC} - 编译后端"
echo -e " ${GREEN}rebuild${NC} - 重新编译后端并重启"
echo -e " ${GREEN}delete${NC} - 删除 PM2 服务"
echo -e " ${GREEN}help${NC} - 显示此帮助信息"
echo ""
echo -e "${CYAN}示例:${NC}"
echo " ./pm2.sh start # 启动服务"
echo " ./pm2.sh logs backend # 查看后端日志"
echo " ./pm2.sh rebuild # 重新编译后端并重启"
echo ""
}
# 主逻辑
check_pm2
case "${1:-help}" in
start)
start_services
;;
stop)
stop_services
;;
restart)
restart_services
;;
status)
show_status
;;
logs)
show_logs "$@"
;;
monitor|mon)
show_monitor
;;
build)
build_backend
;;
rebuild)
rebuild_and_restart
;;
delete|remove)
delete_services
;;
help|--help|-h)
show_help
;;
*)
print_error "未知命令: $1"
echo ""
show_help
exit 1
;;
esac