Browse Source

添加Docker部署配置

pull/2/head
SwTt29 2 months ago
parent
commit
da0f19d102
  1. 23
      .env.example
  2. 23
      Dockerfile
  3. 254
      MULTI_PROJECT_DEPLOYMENT.md
  4. 48
      deploy.sh
  5. 30
      docker-compose.yml
  6. 94
      server-example/DOCKER_DEPLOYMENT.md
  7. 23
      server-example/Dockerfile
  8. 33
      server-example/docker-compose.yml
  9. 24
      update.sh

23
.env.example

@ -0,0 +1,23 @@
# 数据库配置
DB_HOST=mysql
DB_PORT=3306
DB_NAME=mini_program
DB_USER=mini_program_user
DB_PASSWORD=your_user_password
# 服务器配置
PORT=3000
NODE_ENV=production
# OSS配置
OSS_REGION=your-oss-region
OSS_ACCESS_KEY_ID=your-oss-access-key
OSS_ACCESS_KEY_SECRET=your-oss-secret-key
OSS_BUCKET=your-oss-bucket
# 微信小程序配置
WECHAT_APPID=your-wechat-appid
WECHAT_SECRET=your-wechat-secret
# JWT配置
JWT_SECRET=your-jwt-secret

23
Dockerfile

@ -0,0 +1,23 @@
# 使用官方的Node.js 18镜像作为基础镜像
FROM node:18-alpine
# 设置工作目录
WORKDIR /app
# 复制package.json和package-lock.json到工作目录
COPY server-example/package*.json ./
# 安装依赖
RUN npm install --production
# 复制整个项目到工作目录
COPY . .
# 设置环境变量
ENV NODE_ENV=production
# 暴露应用端口
EXPOSE 3000
# 运行应用
CMD ["npm", "start"]

254
MULTI_PROJECT_DEPLOYMENT.md

@ -0,0 +1,254 @@
# 多项目统一部署方案
## 目录结构设计
在云服务器上创建以下目录结构:
```
/projects/
├── project1/
│ ├── source/ # 项目源代码
│ ├── logs/ # 项目日志
│ ├── docker/ # Docker相关文件
│ └── docker-compose.yml
├── project2/
│ ├── source/
│ ├── logs/
│ ├── docker/
│ └── docker-compose.yml
├── project3/
│ ├── source/
│ ├── logs/
│ ├── docker/
│ └── docker-compose.yml
├── project4/
│ ├── source/
│ ├── logs/
│ ├── docker/
│ └── docker-compose.yml
└── scripts/ # 统一管理脚本
├── deploy-all.sh # 一键部署所有项目
├── update-all.sh # 一键更新所有项目
├── restart-all.sh # 一键重启所有项目
└── status-all.sh # 查看所有项目状态
```
## 部署脚本
### 1. 创建目录结构脚本
```bash
#!/bin/bash
# create-project-structure.sh
echo "创建多项目统一部署目录结构..."
# 创建主目录
mkdir -p /projects/{project1,project2,project3,project4}/{source,logs,docker}
mkdir -p /projects/scripts
echo "目录结构创建完成!"
echo "目录结构:"
find /projects -type d | sort
```
### 2. 统一部署脚本
```bash
#!/bin/bash
# /projects/scripts/deploy-all.sh
echo "开始部署所有项目..."
# 项目列表
projects=("project1" "project2" "project3" "project4")
for project in "${projects[@]}"; do
echo "\n=== 部署 $project ==="
cd /projects/$project
# 拉取最新代码
echo "拉取最新代码..."
cd source
git pull origin BOSS
cd ..
# 构建并启动容器
echo "构建并启动容器..."
docker-compose down
docker-compose up -d --build
echo "$project 部署完成!"
done
echo "\n所有项目部署完成!"
```
### 3. 统一更新脚本
```bash
#!/bin/bash
# /projects/scripts/update-all.sh
echo "开始更新所有项目..."
# 项目列表
projects=("project1" "project2" "project3" "project4")
for project in "${projects[@]}"; do
echo "\n=== 更新 $project ==="
cd /projects/$project
# 拉取最新代码
echo "拉取最新代码..."
cd source
git pull origin BOSS
cd ..
# 重新构建并启动容器
echo "重新构建并启动容器..."
docker-compose down
docker-compose up -d --build
echo "$project 更新完成!"
done
echo "\n所有项目更新完成!"
```
### 4. 统一状态查看脚本
```bash
#!/bin/bash
# /projects/scripts/status-all.sh
echo "查看所有项目状态..."
# 项目列表
projects=("project1" "project2" "project3" "project4")
for project in "${projects[@]}"; do
echo "\n=== $project 状态 ==="
cd /projects/$project
docker-compose ps
echo "\n$project 日志(最近10行):"
docker-compose logs --tail=10
done
echo "\n所有项目状态查看完成!"
```
### 5. 统一重启脚本
```bash
#!/bin/bash
# /projects/scripts/restart-all.sh
echo "开始重启所有项目..."
# 项目列表
projects=("project1" "project2" "project3" "project4")
for project in "${projects[@]}"; do
echo "\n=== 重启 $project ==="
cd /projects/$project
docker-compose restart
echo "$project 重启完成!"
done
echo "\n所有项目重启完成!"
```
## 项目配置示例
### 以当前项目为例,创建docker-compose.yml
```yaml
# /projects/project1/docker-compose.yml
version: '3.8'
services:
app:
build: ./source/server-example
container_name: project1-server
restart: always
ports:
- "3000:3000"
environment:
- NODE_ENV=production
volumes:
- ./logs:/app/logs
- ./source/server-example/uploads:/app/uploads
depends_on:
- db
db:
image: mysql:8.0
container_name: project1-db
restart: always
ports:
- "3306:3306"
environment:
- MYSQL_ROOT_PASSWORD=rootpassword
- MYSQL_DATABASE=wechat_miniprogram
- MYSQL_USER=wechat_user
- MYSQL_PASSWORD=wechat_password
volumes:
- db_data:/var/lib/mysql
volumes:
db_data:
```
## 使用说明
1. **创建目录结构**
```bash
chmod +x create-project-structure.sh
./create-project-structure.sh
```
2. **部署项目**
- 将每个项目的源代码克隆到对应的`/projects/{projectN}/source/`目录
- 为每个项目创建docker-compose.yml文件
- 执行统一部署脚本:
```bash
chmod +x /projects/scripts/*.sh
/projects/scripts/deploy-all.sh
```
3. **管理项目**
- 更新所有项目:`/projects/scripts/update-all.sh`
- 查看所有项目状态:`/projects/scripts/status-all.sh`
- 重启所有项目:`/projects/scripts/restart-all.sh`
## 运维最佳实践
1. **日志管理**
- 所有项目的日志统一存储在`/projects/{projectN}/logs/`目录
- 可以使用ELK等工具进行统一日志收集和分析
2. **备份策略**
- 定期备份数据库:
```bash
docker exec -t project1-db mysqldump -u wechat_user -p wechat_miniprogram > /projects/backups/project1_db_$(date +%Y%m%d_%H%M%S).sql
```
- 定期备份源代码和配置文件
3. **监控告警**
- 使用Prometheus和Grafana监控容器和应用状态
- 设置告警规则,及时发现问题
4. **安全措施**
- 定期更新容器镜像和依赖
- 配置防火墙,只开放必要的端口
- 定期检查系统安全漏洞
## 注意事项
1. 确保每个项目使用不同的端口,避免端口冲突
2. 为每个项目的数据库设置强密码
3. 定期清理无用的容器和镜像:`docker system prune -f`
4. 监控磁盘空间使用情况,及时清理日志文件
5. 考虑使用CI/CD工具(如Jenkins、GitLab CI)实现自动化部署

48
deploy.sh

@ -0,0 +1,48 @@
#!/bin/bash
# 部署脚本 - 微信小程序后端服务
echo "开始部署微信小程序后端服务..."
# 检查是否安装了Docker
echo "检查Docker是否安装..."
if ! command -v docker &> /dev/null; then
echo "错误: Docker未安装,请先安装Docker"
exit 1
fi
# 检查是否安装了Docker Compose
echo "检查Docker Compose是否安装..."
if ! command -v docker-compose &> /dev/null; then
echo "错误: Docker Compose未安装,请先安装Docker Compose"
exit 1
fi
# 创建项目目录
echo "创建项目目录..."
mkdir -p /opt/project_app/logs /opt/project_app/uploads /opt/project_app/mysql-data
# 克隆代码仓库
echo "克隆代码仓库..."
git clone http://8.137.125.67:4000/Swt29/Project_app.git /opt/project_app
cd /opt/project_app
# 创建.env文件(如果不存在)
echo "配置环境变量..."
if [ ! -f .env ]; then
cp .env.example .env
echo "请编辑.env文件配置数据库和其他参数"
# 这里可以添加自动配置脚本
fi
# 构建Docker镜像
echo "构建Docker镜像..."
docker-compose build
# 启动服务
echo "启动服务..."
docker-compose up -d
echo "部署完成!服务已启动并在后台运行。"
echo "使用以下命令查看服务状态:docker-compose ps"
echo "使用以下命令查看日志:docker-compose logs -f"

30
docker-compose.yml

@ -0,0 +1,30 @@
version: '3.8'
services:
app:
build: .
container_name: mini-program-server
restart: always
ports:
- "3000:3000"
volumes:
- /opt/project_app/logs:/app/server-example/logs
- /opt/project_app/uploads:/app/server-example/uploads
environment:
- NODE_ENV=production
depends_on:
- mysql
mysql:
image: mysql:8.0
container_name: mini-program-mysql
restart: always
ports:
- "3306:3306"
volumes:
- /opt/project_app/mysql-data:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=your_root_password
- MYSQL_DATABASE=mini_program
- MYSQL_USER=mini_program_user
- MYSQL_PASSWORD=your_user_password

94
server-example/DOCKER_DEPLOYMENT.md

@ -0,0 +1,94 @@
# 微信小程序后端服务Docker部署指南
## 环境准备
- 安装Docker和Docker Compose
- 确保云服务器端口3000和3306对外开放
## 部署步骤
### 1. 克隆仓库
```bash
git clone http://8.137.125.67:4000/Swt29/Project_app.git
cd Project_app/server-example
```
### 2. 配置环境变量
复制并编辑.env文件:
```bash
cp .env.example.mysql .env
# 编辑.env文件,配置数据库连接等信息
```
### 3. 构建和启动容器
```bash
docker-compose up -d
```
### 4. 查看容器状态
```bash
docker-compose ps
```
### 5. 查看日志
```bash
docker-compose logs -f
```
## 代码更新和部署
### 1. 拉取最新代码
```bash
git pull origin BOSS
```
### 2. 重新构建和启动容器
```bash
docker-compose down
docker-compose up -d --build
```
## 数据库管理
### 进入数据库容器
```bash
docker exec -it wechat-miniprogram-db mysql -u wechat_user -p
```
### 备份数据库
```bash
docker exec -t wechat-miniprogram-db mysqldump -u wechat_user -p wechat_miniprogram > backup.sql
```
## 常见问题
### 端口冲突
如果端口3000或3306已被占用,可以修改docker-compose.yml文件中的端口映射:
```yaml
ports:
- "8080:3000" # 将宿主机8080端口映射到容器3000端口
```
### 数据库连接失败
检查.env文件中的数据库配置是否与docker-compose.yml中的配置一致。
### 容器启动失败
查看日志以获取详细错误信息:
```bash
docker-compose logs -f app
```

23
server-example/Dockerfile

@ -0,0 +1,23 @@
# 使用Node.js官方镜像作为基础镜像
FROM node:18-alpine
# 设置工作目录
WORKDIR /app
# 复制package.json和package-lock.json
COPY package*.json ./
# 安装依赖
RUN npm install --production
# 复制应用代码
COPY . .
# 设置环境变量
ENV NODE_ENV=production
# 暴露端口
EXPOSE 3000
# 启动命令
CMD ["npm", "start"]

33
server-example/docker-compose.yml

@ -0,0 +1,33 @@
version: '3.8'
services:
app:
build: .
container_name: wechat-miniprogram-server
restart: always
ports:
- "3000:3000"
environment:
- NODE_ENV=production
volumes:
- ./logs:/app/logs
- ./uploads:/app/uploads
depends_on:
- db
db:
image: mysql:8.0
container_name: wechat-miniprogram-db
restart: always
ports:
- "3306:3306"
environment:
- MYSQL_ROOT_PASSWORD=rootpassword
- MYSQL_DATABASE=wechat_miniprogram
- MYSQL_USER=wechat_user
- MYSQL_PASSWORD=wechat_password
volumes:
- db_data:/var/lib/mysql
volumes:
db_data:

24
update.sh

@ -0,0 +1,24 @@
#!/bin/bash
# 更新脚本 - 微信小程序后端服务
echo "开始更新微信小程序后端服务..."
# 进入项目目录
cd /opt/project_app
# 拉取最新代码
echo "拉取最新代码..."
git pull origin BOSS
# 构建新的Docker镜像
echo "构建新的Docker镜像..."
docker-compose build --no-cache
# 重启服务
echo "重启服务..."
docker-compose up -d
echo "更新完成!服务已重新启动。"
echo "使用以下命令查看服务状态:docker-compose ps"
echo "使用以下命令查看日志:docker-compose logs -f"
Loading…
Cancel
Save