You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
295 lines
6.5 KiB
295 lines
6.5 KiB
|
4 weeks ago
|
# 应用部署文档
|
||
|
|
|
||
|
|
## 1. 环境要求
|
||
|
|
|
||
|
|
### 服务器要求
|
||
|
|
- 操作系统:Linux(推荐 Ubuntu 18.04+ 或 CentOS 7+)
|
||
|
|
- 内存:至少 2GB RAM
|
||
|
|
- 存储空间:至少 10GB 可用空间
|
||
|
|
- 网络:可访问 Gitea 仓库(http://8.137.125.67:4000)和互联网
|
||
|
|
|
||
|
|
### 软件依赖
|
||
|
|
- Docker:用于容器化部署
|
||
|
|
- Git:用于代码拉取
|
||
|
|
|
||
|
|
## 2. 部署前准备
|
||
|
|
|
||
|
|
### 2.1 安装 Docker
|
||
|
|
|
||
|
|
#### Ubuntu/Debian
|
||
|
|
```bash
|
||
|
|
# 更新系统包
|
||
|
|
apt-get update
|
||
|
|
|
||
|
|
# 安装 Docker
|
||
|
|
curl -fsSL https://get.docker.com | sh
|
||
|
|
|
||
|
|
# 启动 Docker 服务
|
||
|
|
systemctl start docker
|
||
|
|
|
||
|
|
# 设置 Docker 开机自启
|
||
|
|
systemctl enable docker
|
||
|
|
```
|
||
|
|
|
||
|
|
#### CentOS/RHEL
|
||
|
|
```bash
|
||
|
|
# 更新系统包
|
||
|
|
yum update
|
||
|
|
|
||
|
|
# 安装 Docker
|
||
|
|
yum install -y docker
|
||
|
|
|
||
|
|
# 启动 Docker 服务
|
||
|
|
systemctl start docker
|
||
|
|
|
||
|
|
# 设置 Docker 开机自启
|
||
|
|
systemctl enable docker
|
||
|
|
```
|
||
|
|
|
||
|
|
### 2.2 配置防火墙和安全组
|
||
|
|
|
||
|
|
#### 2.2.1 系统防火墙设置
|
||
|
|
|
||
|
|
确保服务器开放以下端口:
|
||
|
|
- 3000:应用访问端口
|
||
|
|
- 4000:Gitea 仓库访问端口(仅在需要访问仓库时)
|
||
|
|
|
||
|
|
##### Ubuntu/Debian (ufw)
|
||
|
|
```bash
|
||
|
|
# 允许 3000 端口
|
||
|
|
ufw allow 3000/tcp
|
||
|
|
|
||
|
|
# 允许 4000 端口(如果需要)
|
||
|
|
ufw allow 4000/tcp
|
||
|
|
|
||
|
|
# 启用防火墙
|
||
|
|
ufw enable
|
||
|
|
|
||
|
|
# 查看防火墙规则
|
||
|
|
ufw status verbose
|
||
|
|
```
|
||
|
|
|
||
|
|
##### CentOS/RHEL (firewalld)
|
||
|
|
```bash
|
||
|
|
# 允许 3000 端口
|
||
|
|
firewall-cmd --zone=public --add-port=3000/tcp --permanent
|
||
|
|
|
||
|
|
# 允许 4000 端口(如果需要)
|
||
|
|
firewall-cmd --zone=public --add-port=4000/tcp --permanent
|
||
|
|
|
||
|
|
# 重新加载防火墙
|
||
|
|
firewall-cmd --reload
|
||
|
|
|
||
|
|
# 查看防火墙规则
|
||
|
|
firewall-cmd --list-ports --zone=public
|
||
|
|
```
|
||
|
|
|
||
|
|
#### 2.2.2 云服务商安全组设置
|
||
|
|
|
||
|
|
如果您使用的是云服务器(如阿里云、腾讯云、华为云等),还需要在云服务商控制台配置安全组规则:
|
||
|
|
|
||
|
|
1. 登录云服务器控制台
|
||
|
|
2. 找到对应服务器的安全组配置
|
||
|
|
3. 添加入站规则:
|
||
|
|
- 端口范围:3000/3000
|
||
|
|
- 协议:TCP
|
||
|
|
- 授权对象:0.0.0.0/0(允许所有IP访问,或根据需要设置特定IP)
|
||
|
|
- 描述:应用访问端口
|
||
|
|
|
||
|
|
### 2.3 配置 Git 凭证(可选)
|
||
|
|
|
||
|
|
如果 Gitea 仓库需要认证,可以配置 Git 凭证缓存:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# 设置凭证缓存时间(1小时)
|
||
|
|
git config --global credential.helper cache
|
||
|
|
|
||
|
|
# 设置凭证永久保存
|
||
|
|
git config --global credential.helper store
|
||
|
|
|
||
|
|
# 首次拉取时会要求输入用户名和密码,之后会自动保存
|
||
|
|
```
|
||
|
|
## 3. 部署步骤
|
||
|
|
|
||
|
|
### 3.1 下载部署脚本
|
||
|
|
|
||
|
|
将 `deploy.sh` 脚本上传到服务器的任意目录,例如 `/root` 目录。
|
||
|
|
|
||
|
|
### 3.2 设置执行权限
|
||
|
|
|
||
|
|
```bash
|
||
|
|
chmod +x deploy.sh
|
||
|
|
```
|
||
|
|
|
||
|
|
### 3.3 运行部署脚本
|
||
|
|
|
||
|
|
```bash
|
||
|
|
./deploy.sh
|
||
|
|
```
|
||
|
|
|
||
|
|
### 3.4 部署过程说明
|
||
|
|
|
||
|
|
脚本将执行以下步骤:
|
||
|
|
1. **检查应用目录**:如果不存在则克隆仓库,存在则拉取最新代码
|
||
|
|
2. **切换分支**:确保使用正确的 `Ly` 分支
|
||
|
|
3. **拉取代码**:从 Gitea 仓库拉取最新代码
|
||
|
|
4. **停止旧容器**:停止并删除旧的 Docker 容器
|
||
|
|
5. **检查端口**:确保 3000 端口未被占用
|
||
|
|
6. **构建镜像**:重新构建 Docker 镜像
|
||
|
|
7. **启动容器**:启动新的 Docker 容器
|
||
|
|
8. **清理镜像**:清理无用的 Docker 镜像
|
||
|
|
|
||
|
|
## 4. 验证部署
|
||
|
|
|
||
|
|
### 4.1 检查容器状态
|
||
|
|
|
||
|
|
```bash
|
||
|
|
docker ps | grep reject-app
|
||
|
|
```
|
||
|
|
|
||
|
|
正常输出示例:
|
||
|
|
```
|
||
|
|
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
|
||
|
|
abcdef123456 reject-app "node Reject.js" 1 minute ago Up 1 minute 0.0.0.0:3000->3000/tcp reject-app
|
||
|
|
```
|
||
|
|
|
||
|
|
### 4.2 检查端口映射
|
||
|
|
|
||
|
|
```bash
|
||
|
|
docker port reject-app
|
||
|
|
```
|
||
|
|
|
||
|
|
正常输出示例:
|
||
|
|
```
|
||
|
|
3000/tcp -> 0.0.0.0:3000
|
||
|
|
```
|
||
|
|
|
||
|
|
### 4.3 访问应用
|
||
|
|
|
||
|
|
在浏览器中访问:http://8.137.125.67:3000
|
||
|
|
|
||
|
|
## 5. 常见问题解决
|
||
|
|
|
||
|
|
### 5.1 拒绝连接错误
|
||
|
|
|
||
|
|
**错误现象**:访问 http://8.137.125.67:3000 时显示"拒绝连接"
|
||
|
|
|
||
|
|
**可能原因及解决方法**:
|
||
|
|
|
||
|
|
1. **防火墙未开放端口**
|
||
|
|
- 检查防火墙规则是否允许 3000 端口
|
||
|
|
- 按照 2.2 节重新配置防火墙
|
||
|
|
|
||
|
|
2. **容器未正常启动**
|
||
|
|
- 检查容器状态:`docker ps -a | grep reject-app`
|
||
|
|
- 查看容器日志:`docker logs reject-app`
|
||
|
|
|
||
|
|
3. **端口被占用**
|
||
|
|
- 检查 3000 端口占用情况:`lsof -i :3000` 或 `netstat -tulpn | grep :3000`
|
||
|
|
- 停止占用端口的进程或容器
|
||
|
|
|
||
|
|
### 5.2 数据库连接错误
|
||
|
|
|
||
|
|
**错误现象**:应用启动后显示数据库连接失败
|
||
|
|
|
||
|
|
**可能原因及解决方法**:
|
||
|
|
|
||
|
|
1. **数据库配置错误**
|
||
|
|
- 检查 `Reject.js` 中的数据库连接配置
|
||
|
|
- 确保数据库地址、用户名、密码正确
|
||
|
|
|
||
|
|
2. **数据库服务器未运行**
|
||
|
|
- 检查数据库服务器状态
|
||
|
|
- 确保数据库服务器允许远程连接
|
||
|
|
|
||
|
|
### 5.3 代码拉取失败
|
||
|
|
|
||
|
|
**错误现象**:脚本执行时显示"代码拉取失败"
|
||
|
|
|
||
|
|
**可能原因及解决方法**:
|
||
|
|
|
||
|
|
1. **Gitea 仓库不可访问**
|
||
|
|
- 检查 Gitea 服务器状态:`curl -I http://8.137.125.67:4000`
|
||
|
|
- 确保服务器可以访问 Gitea 仓库
|
||
|
|
|
||
|
|
2. **分支名称错误**
|
||
|
|
- 检查 `deploy.sh` 中的 `BRANCH` 变量是否正确
|
||
|
|
- 确保仓库中存在指定的分支
|
||
|
|
|
||
|
|
## 6. 应用维护
|
||
|
|
|
||
|
|
### 6.1 查看应用日志
|
||
|
|
|
||
|
|
```bash
|
||
|
|
docker logs reject-app
|
||
|
|
# 实时查看日志
|
||
|
|
docker logs -f reject-app
|
||
|
|
```
|
||
|
|
|
||
|
|
### 6.2 重启应用
|
||
|
|
|
||
|
|
```bash
|
||
|
|
docker restart reject-app
|
||
|
|
```
|
||
|
|
|
||
|
|
### 6.3 更新应用
|
||
|
|
|
||
|
|
再次运行部署脚本即可更新应用:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
./deploy.sh
|
||
|
|
```
|
||
|
|
|
||
|
|
### 6.4 停止应用
|
||
|
|
|
||
|
|
```bash
|
||
|
|
docker stop reject-app
|
||
|
|
```
|
||
|
|
|
||
|
|
### 6.5 删除应用
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# 停止并删除容器
|
||
|
|
docker stop reject-app
|
||
|
|
docker rm reject-app
|
||
|
|
|
||
|
|
# 删除镜像
|
||
|
|
docker rmi reject-app
|
||
|
|
|
||
|
|
# 删除应用目录
|
||
|
|
rm -rf /app
|
||
|
|
```
|
||
|
|
|
||
|
|
## 7. 脚本说明
|
||
|
|
|
||
|
|
### 7.1 配置参数
|
||
|
|
|
||
|
|
脚本中的主要配置参数:
|
||
|
|
|
||
|
|
- `REPO_URL`:Gitea 仓库地址
|
||
|
|
- `APP_DIR`:应用部署目录
|
||
|
|
- `BRANCH`:使用的代码分支
|
||
|
|
|
||
|
|
### 7.2 脚本功能
|
||
|
|
|
||
|
|
- **自动代码拉取**:从 Gitea 仓库拉取最新代码
|
||
|
|
- **容器管理**:自动停止旧容器并启动新容器
|
||
|
|
- **端口管理**:自动检查并清理占用 3000 端口的进程
|
||
|
|
- **错误检查**:提供详细的错误信息和处理建议
|
||
|
|
- **日志记录**:记录部署过程中的关键步骤
|
||
|
|
|
||
|
|
## 8. 注意事项
|
||
|
|
|
||
|
|
1. **第一次部署**:脚本会自动克隆仓库并启动应用
|
||
|
|
2. **后续部署**:脚本会自动拉取最新代码并重启应用
|
||
|
|
3. **分支切换**:如需切换分支,请修改 `deploy.sh` 中的 `BRANCH` 变量
|
||
|
|
4. **数据持久化**:应用数据通过 Docker 卷映射到 `/app` 目录,确保该目录安全
|
||
|
|
5. **定期备份**:建议定期备份 `/app` 目录和数据库
|
||
|
|
|
||
|
|
## 9. 联系方式
|
||
|
|
|
||
|
|
如有部署问题,请联系:
|
||
|
|
- 技术支持:[技术支持邮箱]
|
||
|
|
- 管理员:[管理员联系方式]
|
||
|
|
|