feat(deploy): 添加一键部署和更新脚本
添加交互式安装脚本 install.js 和一键更新脚本 update.js 更新部署文档和 README 以支持新功能 优化数据库初始化流程和系统设置默认值
This commit is contained in:
+311
-88
@@ -1,6 +1,39 @@
|
||||
# IDC设备管理系统 - 安装部署指南
|
||||
|
||||
## 快速开始
|
||||
## 快速开始(推荐)
|
||||
|
||||
### 一键部署脚本(交互式)
|
||||
|
||||
我们提供了交互式安装脚本,自动完成环境检测、依赖安装、数据库初始化和服务启动。
|
||||
|
||||
```bash
|
||||
# 方式一:使用 npm
|
||||
npm run deploy
|
||||
|
||||
# 方式二:直接运行
|
||||
node install.js
|
||||
```
|
||||
|
||||
**脚本功能:**
|
||||
- ✅ 自动检测 Node.js、npm、PM2、Nginx
|
||||
- ✅ Linux 系统支持自动安装 Node.js(交互式)
|
||||
- ✅ 交互式配置数据库(SQLite/MySQL)
|
||||
- ✅ 交互式选择前端部署方式(Nginx/PM2 serve)
|
||||
- ✅ 自动安装项目依赖
|
||||
- ✅ 自动初始化数据库
|
||||
- ✅ 自动构建前端项目
|
||||
- ✅ 使用 PM2 启动和管理服务
|
||||
|
||||
**Linux 自动安装 Node.js:**
|
||||
- 支持 Ubuntu、Debian、CentOS、RHEL、Fedora、Arch
|
||||
- 自动检测发行版并使用对应安装方式
|
||||
- 无需手动下载,一键完成
|
||||
|
||||
---
|
||||
|
||||
## 传统手动部署
|
||||
|
||||
如需手动部署,请参考以下步骤:
|
||||
|
||||
### 1. 克隆项目
|
||||
|
||||
@@ -43,11 +76,83 @@ cd frontend && npm run dev
|
||||
|
||||
| 项目 | 要求 |
|
||||
|------|------|
|
||||
| Node.js | ≥14.0.0 |
|
||||
| npm | ≥6.0.0 |
|
||||
| Node.js | ≥14.0.0(推荐 20.x LTS) |
|
||||
| npm | ≥6.0.0(随 Node.js 安装) |
|
||||
| 操作系统 | Windows 10/11、macOS、Linux |
|
||||
| 内存 | 开发:4GB+ / 生产:8GB+ |
|
||||
|
||||
### Node.js 安装
|
||||
|
||||
#### Linux(自动安装)
|
||||
运行 `node install.js`,选择自动安装即可。
|
||||
|
||||
#### Linux(手动安装)
|
||||
|
||||
**Ubuntu/Debian:**
|
||||
```bash
|
||||
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
|
||||
sudo apt-get install -y nodejs
|
||||
```
|
||||
|
||||
**CentOS/RHEL/Fedora:**
|
||||
```bash
|
||||
curl -fsSL https://rpm.nodesource.com/setup_20.x | sudo bash -
|
||||
sudo yum install -y nodejs
|
||||
```
|
||||
|
||||
**Arch Linux:**
|
||||
```bash
|
||||
sudo pacman -S nodejs npm
|
||||
```
|
||||
|
||||
**使用 nvm(推荐开发者):**
|
||||
```bash
|
||||
# 安装 nvm
|
||||
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash
|
||||
|
||||
# 安装 Node.js 20
|
||||
nvm install 20
|
||||
nvm use 20
|
||||
```
|
||||
|
||||
#### Windows
|
||||
|
||||
**方式一:官方安装包(推荐)**
|
||||
1. 访问: https://nodejs.org/
|
||||
2. 下载 LTS 版本(推荐 v20.x)
|
||||
3. 运行安装包,按向导完成安装
|
||||
|
||||
**方式二:nvm-windows(推荐开发者)**
|
||||
1. 下载安装 nvm-windows: https://github.com/coreybutler/nvm-windows/releases
|
||||
2. 执行: `nvm install 20`
|
||||
3. 执行: `nvm use 20`
|
||||
|
||||
**方式三:Winget(Windows 10/11)**
|
||||
```powershell
|
||||
winget install OpenJS.NodeJS.LTS
|
||||
```
|
||||
|
||||
#### macOS
|
||||
|
||||
**方式一:Homebrew(推荐)**
|
||||
```bash
|
||||
brew install node@
|
||||
```
|
||||
|
||||
**方式二:官方安装包**
|
||||
1. 访问: https://nodejs.org/
|
||||
2. 下载 macOS 安装包并安装
|
||||
|
||||
**方式三:nvm(推荐开发者)**
|
||||
```bash
|
||||
# 安装 nvm
|
||||
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash
|
||||
|
||||
# 安装 Node.js 20
|
||||
nvm install 20
|
||||
nvm use 20
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 开发环境部署
|
||||
@@ -111,9 +216,22 @@ proxy: {
|
||||
|
||||
## 生产环境部署
|
||||
|
||||
### 后端部署
|
||||
### 方式一:一键部署脚本(推荐)
|
||||
|
||||
#### 1. 配置环境变量
|
||||
```bash
|
||||
npm run deploy
|
||||
```
|
||||
|
||||
按提示选择:
|
||||
- 数据库类型:SQLite 或 MySQL
|
||||
- 前端部署方式:Nginx(推荐)或 PM2 serve
|
||||
- 是否自动安装 Nginx(Windows)
|
||||
|
||||
### 方式二:手动部署
|
||||
|
||||
#### 后端部署
|
||||
|
||||
##### 1. 配置环境变量
|
||||
|
||||
```bash
|
||||
cd backend
|
||||
@@ -132,13 +250,13 @@ MYSQL_PASSWORD=secure_password
|
||||
MYSQL_DATABASE=idc_management
|
||||
```
|
||||
|
||||
#### 2. 安装生产依赖
|
||||
##### 2. 安装生产依赖
|
||||
|
||||
```bash
|
||||
npm install
|
||||
```
|
||||
|
||||
#### 3. 配置数据库
|
||||
##### 3. 配置数据库
|
||||
|
||||
```sql
|
||||
CREATE DATABASE idc_management CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
@@ -147,7 +265,13 @@ GRANT ALL PRIVILEGES ON idc_management.* TO 'idc_user'@'localhost';
|
||||
FLUSH PRIVILEGES;
|
||||
```
|
||||
|
||||
#### 4. 使用PM2管理进程
|
||||
##### 4. 初始化数据库
|
||||
|
||||
```bash
|
||||
node scripts/init-database.js
|
||||
```
|
||||
|
||||
##### 5. 使用PM2管理进程
|
||||
|
||||
```bash
|
||||
npm install -g pm2
|
||||
@@ -156,9 +280,9 @@ pm2 startup
|
||||
pm2 save
|
||||
```
|
||||
|
||||
### 前端部署
|
||||
#### 前端部署
|
||||
|
||||
#### 1. 构建生产版本
|
||||
##### 1. 构建生产版本
|
||||
|
||||
```bash
|
||||
cd frontend
|
||||
@@ -166,14 +290,21 @@ npm install
|
||||
npm run build
|
||||
```
|
||||
|
||||
#### 2. 部署静态文件
|
||||
##### 2. 部署静态文件
|
||||
|
||||
**Nginx 方式:**
|
||||
```bash
|
||||
sudo cp -r dist/* /var/www/idc-frontend/
|
||||
sudo chown -R www-data:www-data /var/www/idc-frontend
|
||||
sudo chmod -R 755 /var/www/idc-frontend
|
||||
```
|
||||
|
||||
**PM2 serve 方式:**
|
||||
```bash
|
||||
npm install -g serve
|
||||
pm2 start serve --name "idc-frontend" -- -s dist -l 3000
|
||||
```
|
||||
|
||||
### Nginx配置
|
||||
|
||||
#### 1. 创建配置文件
|
||||
@@ -192,6 +323,18 @@ server {
|
||||
root /var/www/idc-frontend;
|
||||
index index.html;
|
||||
|
||||
# Gzip压缩
|
||||
gzip on;
|
||||
gzip_vary on;
|
||||
gzip_min_length 1024;
|
||||
gzip_types text/plain text/css text/xml text/javascript application/javascript application/xml+rss application/json;
|
||||
|
||||
# 静态资源缓存
|
||||
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {
|
||||
expires 1y;
|
||||
add_header Cache-Control "public, immutable";
|
||||
}
|
||||
|
||||
location / {
|
||||
try_files $uri $uri/ /index.html;
|
||||
}
|
||||
@@ -202,6 +345,17 @@ server {
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_connect_timeout 60s;
|
||||
proxy_send_timeout 60s;
|
||||
proxy_read_timeout 60s;
|
||||
}
|
||||
|
||||
location /uploads {
|
||||
proxy_pass http://127.0.0.1:8000;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
client_max_body_size 50M;
|
||||
}
|
||||
}
|
||||
```
|
||||
@@ -223,6 +377,39 @@ sudo certbot --nginx -d your-domain.com
|
||||
|
||||
---
|
||||
|
||||
## 服务管理
|
||||
|
||||
### PM2 管理命令
|
||||
|
||||
```bash
|
||||
pm2 status # 查看服务状态
|
||||
pm2 logs idc-backend # 查看后端日志
|
||||
pm2 logs idc-frontend # 查看前端日志(PM2方式)
|
||||
pm2 restart idc-backend # 重启后端服务
|
||||
pm2 stop idc-backend # 停止后端服务
|
||||
pm2 delete idc-backend # 删除后端服务
|
||||
pm2 save # 保存当前进程列表
|
||||
pm2 startup # 配置开机自启
|
||||
```
|
||||
|
||||
### Nginx 管理命令
|
||||
|
||||
**Linux:**
|
||||
```bash
|
||||
sudo nginx -t # 测试配置
|
||||
sudo systemctl restart nginx # 重启服务
|
||||
sudo systemctl status nginx # 查看状态
|
||||
```
|
||||
|
||||
**Windows:**
|
||||
```cmd
|
||||
nginx -t # 测试配置
|
||||
nginx -s reload # 重载配置
|
||||
nginx -s stop # 停止Nginx
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 数据库配置
|
||||
|
||||
### SQLite(开发环境)
|
||||
@@ -285,6 +472,86 @@ crontab -e
|
||||
|
||||
---
|
||||
|
||||
## 更新升级
|
||||
|
||||
### 方式一:一键更新脚本(推荐)
|
||||
|
||||
```bash
|
||||
npm run update
|
||||
```
|
||||
|
||||
功能:自动备份 → 拉取代码 → 更新依赖 → 重建前端 → 重启服务
|
||||
|
||||
### 方式二:手动更新
|
||||
|
||||
#### 1. 备份数据
|
||||
|
||||
```bash
|
||||
mysqldump -u idc_user -p idc_management > backup.sql
|
||||
```
|
||||
|
||||
#### 2. 拉取最新代码
|
||||
|
||||
**从GitHub拉取**:
|
||||
```bash
|
||||
git pull origin master
|
||||
```
|
||||
|
||||
**从Gitee拉取**:
|
||||
```bash
|
||||
git pull origin master
|
||||
```
|
||||
|
||||
#### 3. 更新依赖
|
||||
|
||||
```bash
|
||||
cd backend && npm install
|
||||
cd ../frontend && npm install && npm run build
|
||||
```
|
||||
|
||||
#### 4. 重启服务
|
||||
|
||||
```bash
|
||||
pm2 restart idc-backend
|
||||
sudo systemctl restart nginx
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 监控维护
|
||||
|
||||
### 查看日志
|
||||
|
||||
```bash
|
||||
pm2 logs idc-backend
|
||||
tail -f /var/log/nginx/idc_assest-error.log
|
||||
```
|
||||
|
||||
### 健康检查
|
||||
|
||||
```bash
|
||||
curl http://localhost:8000/health
|
||||
```
|
||||
|
||||
### 性能优化
|
||||
|
||||
**PM2配置**(`deploy/ecosystem.config.js`):
|
||||
```javascript
|
||||
module.exports = {
|
||||
apps: [{
|
||||
name: 'idc-backend',
|
||||
script: './server.js',
|
||||
cwd: './backend',
|
||||
instances: 1,
|
||||
exec_mode: 'fork',
|
||||
max_memory_restart: '1G',
|
||||
autorestart: true
|
||||
}]
|
||||
};
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 常见问题
|
||||
|
||||
### 端口冲突
|
||||
@@ -316,90 +583,46 @@ npm install
|
||||
- 验证连接参数
|
||||
- 确认数据库已创建
|
||||
|
||||
### PM2命令
|
||||
### 部署脚本问题
|
||||
|
||||
```bash
|
||||
pm2 status # 查看状态
|
||||
pm2 logs idc-backend # 查看日志
|
||||
pm2 restart idc-backend # 重启服务
|
||||
pm2 stop idc-backend # 停止服务
|
||||
pm2 delete idc-backend # 删除服务
|
||||
```
|
||||
**Linux 自动安装 Node.js 失败:**
|
||||
- 检查 sudo 权限
|
||||
- 检查网络连接
|
||||
- 尝试手动安装后重新运行脚本
|
||||
|
||||
### Nginx命令
|
||||
|
||||
```bash
|
||||
sudo nginx -t # 测试配置
|
||||
sudo systemctl restart nginx # 重启服务
|
||||
sudo systemctl status nginx # 查看状态
|
||||
```
|
||||
**Nginx 未安装(选择 Nginx 部署时):**
|
||||
- Windows:脚本会询问是否自动下载安装
|
||||
- Linux/macOS:脚本会显示安装命令,需手动安装
|
||||
|
||||
---
|
||||
|
||||
## 更新升级
|
||||
## 项目结构
|
||||
|
||||
### 1. 备份数据
|
||||
|
||||
```bash
|
||||
mysqldump -u idc_user -p idc_management > backup.sql
|
||||
```
|
||||
|
||||
### 2. 拉取最新代码
|
||||
|
||||
**从GitHub拉取**:
|
||||
```bash
|
||||
git pull origin master
|
||||
```
|
||||
|
||||
**从Gitee拉取**:
|
||||
```bash
|
||||
git pull origin master
|
||||
```
|
||||
|
||||
### 3. 更新依赖
|
||||
|
||||
```bash
|
||||
cd backend && npm install
|
||||
cd ../frontend && npm install && npm run build
|
||||
```
|
||||
|
||||
### 4. 重启服务
|
||||
|
||||
```bash
|
||||
pm2 restart idc-backend
|
||||
sudo systemctl restart nginx
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 监控维护
|
||||
|
||||
### 查看日志
|
||||
|
||||
```bash
|
||||
pm2 logs idc-backend
|
||||
tail -f /var/log/nginx/idc_assest-error.log
|
||||
```
|
||||
|
||||
### 健康检查
|
||||
|
||||
```bash
|
||||
curl http://localhost:8000/health
|
||||
```
|
||||
|
||||
### 性能优化
|
||||
|
||||
**PM2配置**(`ecosystem.config.js`):
|
||||
```javascript
|
||||
module.exports = {
|
||||
apps: [{
|
||||
name: 'idc-backend',
|
||||
script: 'server.js',
|
||||
instances: 'max',
|
||||
exec_mode: 'cluster',
|
||||
max_memory_restart: '1G'
|
||||
}]
|
||||
};
|
||||
idc_assest/
|
||||
├── backend/ # 后端服务
|
||||
│ ├── middleware/ # 中间件
|
||||
│ ├── models/ # 数据模型
|
||||
│ ├── routes/ # API路由
|
||||
│ ├── scripts/ # 数据库脚本
|
||||
│ ├── uploads/ # 文件上传目录
|
||||
│ ├── server.js # 服务入口
|
||||
│ └── package.json
|
||||
├── frontend/ # 前端应用
|
||||
│ ├── src/
|
||||
│ │ ├── api/ # API接口
|
||||
│ │ ├── components/ # 组件
|
||||
│ │ ├── pages/ # 页面
|
||||
│ │ └── utils/ # 工具函数
|
||||
│ ├── dist/ # 构建输出
|
||||
│ └── package.json
|
||||
├── deploy/ # 部署配置
|
||||
│ ├── ecosystem.config.js # PM2配置
|
||||
│ └── nginx-idc.conf # Nginx配置
|
||||
├── install.js # 交互式安装脚本 ⭐
|
||||
├── update.js # 一键更新脚本 ⭐
|
||||
├── package.json
|
||||
└── DEPLOYMENT.md # 本文件
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
Reference in New Issue
Block a user