187 lines
4.0 KiB
Markdown
187 lines
4.0 KiB
Markdown
# jsite.sh - 前端自动化部署脚本
|
||
|
||
## 概述
|
||
|
||
`jsite.sh` 是一个用于自动化部署和管理前端网站的bash脚本。它支持多种操作模式,包括部署、启动、停止、重启等。
|
||
|
||
## 主要功能
|
||
|
||
- 自动创建和管理jingrow用户
|
||
- 安装和配置Node.js、npm、PM2
|
||
- 自动化部署前端项目
|
||
- 集成Traefik反向代理
|
||
- 支持多种操作模式
|
||
|
||
## 使用方法
|
||
|
||
### 基本语法
|
||
|
||
```bash
|
||
./jsite.sh --mode <模式> --site-name <网站名称>
|
||
```
|
||
|
||
### 支持的模式
|
||
|
||
| 模式 | 描述 | 示例 |
|
||
|------|------|------|
|
||
| `deploy` | 完整部署网站 | `--mode deploy --site-name myproject` |
|
||
| `create` | 创建新网站 | `--mode create --site-name myproject` |
|
||
| `delete` | 删除网站 | `--mode delete --site-name myproject` |
|
||
| `build` | 构建网站 | `--mode build --site-name myproject` |
|
||
| `start` | 启动网站 | `--mode start --site-name myproject` |
|
||
| `stop` | 停止网站 | `--mode stop --site-name myproject` |
|
||
| `restart` | 重启网站 | `--mode restart --site-name myproject` |
|
||
| `status` | 查看网站状态 | `--mode status --site-name myproject` |
|
||
| `list` | 列出所有网站 | `--mode list` |
|
||
| `logs` | 查看网站日志 | `--mode logs --site-name myproject` |
|
||
|
||
### 常用命令示例
|
||
|
||
```bash
|
||
# 部署新网站
|
||
./jsite.sh --mode deploy --site-name jingrow
|
||
|
||
# 启动网站
|
||
./jsite.sh --mode start --site-name jingrow
|
||
|
||
# 重启网站
|
||
./jsite.sh --mode restart --site-name jingrow
|
||
|
||
# 查看网站状态
|
||
./jsite.sh --mode status --site-name jingrow
|
||
|
||
# 查看所有网站
|
||
./jsite.sh --mode list
|
||
```
|
||
|
||
## 故障排除
|
||
|
||
### 常见错误及解决方案
|
||
|
||
#### 1. PM2进程未找到错误
|
||
|
||
**错误信息:**
|
||
```
|
||
[PM2][ERROR] Process or Namespace jingrow not found
|
||
```
|
||
|
||
**原因:** 网站尚未部署或PM2进程未正确启动
|
||
|
||
**解决方案:**
|
||
1. 首先检查网站是否存在:
|
||
```bash
|
||
./jsite.sh --mode status --site-name jingrow
|
||
```
|
||
|
||
2. 如果网站不存在,先部署:
|
||
```bash
|
||
./jsite.sh --mode deploy --site-name jingrow
|
||
```
|
||
|
||
3. 如果网站存在但未运行,启动网站:
|
||
```bash
|
||
./jsite.sh --mode start --site-name jingrow
|
||
```
|
||
|
||
#### 2. 权限错误
|
||
|
||
**解决方案:**
|
||
```bash
|
||
# 确保脚本有执行权限
|
||
chmod +x jsite.sh
|
||
|
||
# 以root用户运行
|
||
sudo ./jsite.sh --mode start --site-name jingrow
|
||
```
|
||
|
||
#### 3. 端口冲突
|
||
|
||
**解决方案:**
|
||
```bash
|
||
# 检查端口占用
|
||
netstat -tlnp | grep :3001
|
||
|
||
# 停止占用端口的进程
|
||
sudo kill -9 <进程ID>
|
||
```
|
||
|
||
### 手动检查和修复
|
||
|
||
#### 检查PM2状态
|
||
```bash
|
||
# 切换到jingrow用户
|
||
su - jingrow
|
||
|
||
# 加载nvm环境
|
||
export NVM_DIR="$HOME/.nvm"
|
||
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"
|
||
|
||
# 查看PM2进程列表
|
||
pm2 list
|
||
|
||
# 查看PM2日志
|
||
pm2 logs
|
||
```
|
||
|
||
#### 手动启动PM2进程
|
||
```bash
|
||
# 切换到jingrow用户
|
||
su - jingrow
|
||
|
||
# 加载nvm环境
|
||
export NVM_DIR="$HOME/.nvm"
|
||
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"
|
||
|
||
# 启动进程
|
||
pm2 start jingrow
|
||
|
||
# 或者重新加载配置
|
||
pm2 reload jingrow
|
||
```
|
||
|
||
## 配置说明
|
||
|
||
### 环境变量
|
||
|
||
脚本支持以下环境变量配置:
|
||
|
||
- `SITE_NAME`: 网站名称(默认:jingrow)
|
||
- `GIT_REPO`: Git仓库地址
|
||
- `NODE_VERSION`: Node.js版本(默认:22)
|
||
- `START_PORT`: 起始端口(默认:3001)
|
||
- `SITE_URL`: 网站域名
|
||
- `BACKEND_SERVER_URL`: 后端服务器地址
|
||
|
||
### 目录结构
|
||
|
||
```
|
||
/home/jingrow/
|
||
├── jsite/ # 网站项目目录
|
||
├── .nvm/ # Node版本管理器
|
||
├── traefik-docker/ # Traefik配置
|
||
└── ...
|
||
```
|
||
|
||
## 注意事项
|
||
|
||
1. 脚本需要以root权限运行
|
||
2. 确保服务器有足够的磁盘空间和内存
|
||
3. 确保网络连接正常,能够访问Git仓库
|
||
4. 建议在生产环境使用前先在测试环境验证
|
||
|
||
## 更新日志
|
||
|
||
### v1.1.0
|
||
- 修复了start_site和restart_site函数的无限递归问题
|
||
- 改进了错误处理和日志输出
|
||
- 优化了PM2进程管理逻辑
|
||
|
||
## 技术支持
|
||
|
||
如果遇到问题,请检查:
|
||
1. 脚本执行日志
|
||
2. PM2进程状态
|
||
3. 系统资源使用情况
|
||
4. 网络连接状态
|
||
|