9 changed files with 552 additions and 0 deletions
@ -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 |
|||
@ -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"] |
|||
@ -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)实现自动化部署 |
|||
@ -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" |
|||
@ -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 |
|||
@ -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 |
|||
``` |
|||
@ -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"] |
|||
@ -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: |
|||
@ -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…
Reference in new issue