From 579c73a81bb1ef31c90641978bf44a124796a21b Mon Sep 17 00:00:00 2001 From: icy Date: Thu, 6 Nov 2025 17:47:40 +0800 Subject: [PATCH] chore: remove pm2 deployment docs and tooling --- CHANGELOG.md | 2 +- CHANGELOG.zh-CN.md | 2 +- docs/MIGRATION_GUIDE.md | 3 - docs/README.md | 3 - docs/getting-started/README.md | 24 +- docs/getting-started/README.zh-CN.md | 24 +- docs/getting-started/pm2-deploy.en.md | 303 -------------------------- docs/getting-started/pm2-deploy.md | 303 -------------------------- docs/guides/TROUBLESHOOTING.md | 49 ++--- docs/guides/TROUBLESHOOTING.zh-CN.md | 49 ++--- pm2.config.js | 41 ---- pm2.sh | 258 ---------------------- 12 files changed, 52 insertions(+), 1009 deletions(-) delete mode 100644 docs/getting-started/pm2-deploy.en.md delete mode 100644 docs/getting-started/pm2-deploy.md delete mode 100644 pm2.config.js delete mode 100755 pm2.sh diff --git a/CHANGELOG.md b/CHANGELOG.md index f520303d..063b7b4b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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 diff --git a/CHANGELOG.zh-CN.md b/CHANGELOG.zh-CN.md index 0bfdab3d..92c7840c 100644 --- a/CHANGELOG.zh-CN.md +++ b/CHANGELOG.zh-CN.md @@ -13,7 +13,7 @@ NOFX 项目的所有重要更改都将记录在此文件中。 ### 新增 - 多语言文档系统(英文/中文/俄语/乌克兰语) -- 完整的快速开始指南(Docker、PM2、自定义 API) +- 完整的快速开始指南(Docker、自定义 API) - 架构文档,包含系统设计细节 - 用户指南,包含 FAQ 和故障排除 - 社区文档,包含悬赏计划 diff --git a/docs/MIGRATION_GUIDE.md b/docs/MIGRATION_GUIDE.md index 1f4dad42..46bf6b48 100644 --- a/docs/MIGRATION_GUIDE.md +++ b/docs/MIGRATION_GUIDE.md @@ -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 diff --git a/docs/README.md b/docs/README.md index 72ea76b2..10fbe917 100644 --- a/docs/README.md +++ b/docs/README.md @@ -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) --- diff --git a/docs/getting-started/README.md b/docs/getting-started/README.md index 9e1740f7..0b5d4f02 100644 --- a/docs/getting-started/README.md +++ b/docs/getting-started/README.md @@ -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) --- diff --git a/docs/getting-started/README.zh-CN.md b/docs/getting-started/README.zh-CN.md index 836619f6..2e333e5c 100644 --- a/docs/getting-started/README.zh-CN.md +++ b/docs/getting-started/README.zh-CN.md @@ -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(可选) --- diff --git a/docs/getting-started/pm2-deploy.en.md b/docs/getting-started/pm2-deploy.en.md deleted file mode 100644 index 428bef88..00000000 --- a/docs/getting-started/pm2-deploy.en.md +++ /dev/null @@ -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 diff --git a/docs/getting-started/pm2-deploy.md b/docs/getting-started/pm2-deploy.md deleted file mode 100644 index 3668a29e..00000000 --- a/docs/getting-started/pm2-deploy.md +++ /dev/null @@ -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 diff --git a/docs/guides/TROUBLESHOOTING.md b/docs/guides/TROUBLESHOOTING.md index e2ccf179..0094ca6a 100644 --- a/docs/guides/TROUBLESHOOTING.md +++ b/docs/guides/TROUBLESHOOTING.md @@ -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 diff --git a/docs/guides/TROUBLESHOOTING.zh-CN.md b/docs/guides/TROUBLESHOOTING.zh-CN.md index b070c8a0..ca140d96 100644 --- a/docs/guides/TROUBLESHOOTING.zh-CN.md +++ b/docs/guides/TROUBLESHOOTING.zh-CN.md @@ -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 diff --git a/pm2.config.js b/pm2.config.js deleted file mode 100644 index 2f166388..00000000 --- a/pm2.config.js +++ /dev/null @@ -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 - } - ] -}; diff --git a/pm2.sh b/pm2.sh deleted file mode 100755 index b55c8412..00000000 --- a/pm2.sh +++ /dev/null @@ -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