10 changed files with 8 additions and 508 deletions
@ -1,23 +0,0 @@ |
|||||
# 使用官方的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"] |
|
||||
@ -1,28 +0,0 @@ |
|||||
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 |
|
||||
@ -1,104 +0,0 @@ |
|||||
# .env文件配置说明 |
|
||||
|
|
||||
## 1. 微信小程序配置 |
|
||||
|
|
||||
### WECHAT_APPID |
|
||||
- **含义**:微信小程序的唯一标识 |
|
||||
- **获取方式**:登录微信公众平台 -> 开发管理 -> 开发设置 -> 开发者ID(AppID) |
|
||||
- **当前值**:`wx3da6ea0adf91cf0d`(已配置,无需修改) |
|
||||
|
|
||||
### WECHAT_APPSECRET |
|
||||
- **含义**:微信小程序的应用密钥,用于接口调用 |
|
||||
- **获取方式**:登录微信公众平台 -> 开发管理 -> 开发设置 -> 开发者密码(AppSecret)(需要管理员扫码获取) |
|
||||
- **当前值**:`78fd81bce5a2968a8e7c607ae68c4c0b`(已配置,无需修改) |
|
||||
|
|
||||
### WECHAT_TOKEN |
|
||||
- **含义**:用于微信服务器验证的随机字符串,确保安全性 |
|
||||
- **设置方式**:可以自定义一个复杂的随机字符串(建议包含大小写字母、数字和特殊字符) |
|
||||
- **示例**:`abcdefghijklmnopqrstuvwxyz1234567890!@#$%^&*` |
|
||||
- **当前值**:`your-random-token`(需要修改) |
|
||||
|
|
||||
## 2. MySQL数据库配置 |
|
||||
|
|
||||
### DB_HOST |
|
||||
- **含义**:MySQL数据库服务器的IP地址或域名 |
|
||||
- **设置方式**: |
|
||||
- 如果数据库和应用部署在同一台服务器,使用`localhost`或`127.0.0.1` |
|
||||
- 如果使用Docker Compose部署,使用服务名称(如`mysql`) |
|
||||
- 如果是远程数据库,使用数据库服务器的IP地址 |
|
||||
- **当前值**:`1.95.162.61`(已配置,无需修改) |
|
||||
|
|
||||
### DB_PORT |
|
||||
- **含义**:MySQL数据库服务的端口号 |
|
||||
- **默认值**:MySQL默认端口为`3306` |
|
||||
- **当前值**:`3306`(已配置,无需修改) |
|
||||
|
|
||||
### DB_DATABASE |
|
||||
- **含义**:要使用的数据库名称 |
|
||||
- **设置方式**:确保该数据库已在MySQL中创建 |
|
||||
- **当前值**:`wechat_app`(已配置,无需修改) |
|
||||
|
|
||||
### DB_USER |
|
||||
- **含义**:MySQL数据库的用户名 |
|
||||
- **设置方式**:使用具有该数据库访问权限的用户名 |
|
||||
- **当前值**:`root`(已配置,无需修改) |
|
||||
|
|
||||
### DB_PASSWORD |
|
||||
- **含义**:MySQL数据库用户的密码 |
|
||||
- **设置方式**: |
|
||||
- 如果用户有密码,填写实际密码 |
|
||||
- 如果没有密码,保留为空字符串(`DB_PASSWORD=""`) |
|
||||
- **当前值**:`schl@2025`(已配置,无需修改) |
|
||||
|
|
||||
## 3. 服务器配置 |
|
||||
|
|
||||
### PORT |
|
||||
- **含义**:Node.js服务器监听的端口号 |
|
||||
- **设置方式**:选择一个未被占用的端口(建议使用1024以上的端口) |
|
||||
- **当前值**:`3003`(已配置,无需修改) |
|
||||
|
|
||||
### LOG_LEVEL |
|
||||
- **含义**:日志记录的级别 |
|
||||
- **可选值**:`debug`, `info`, `warn`, `error` |
|
||||
- **建议**:开发环境使用`debug`,生产环境使用`info`或`warn` |
|
||||
- **当前值**:`debug`(已配置,建议生产环境修改为`info`) |
|
||||
|
|
||||
### NODE_ENV |
|
||||
- **含义**:Node.js运行环境 |
|
||||
- **可选值**:`development`(开发环境), `production`(生产环境) |
|
||||
- **当前值**:`production`(已配置,无需修改) |
|
||||
|
|
||||
### ENABLE_DETAILED_LOGGING |
|
||||
- **含义**:是否启用详细日志记录(用于问题排查) |
|
||||
- **可选值**:`true`, `false` |
|
||||
- **建议**:开发环境使用`true`,生产环境使用`false`以提高性能 |
|
||||
- **当前值**:`true`(已配置,建议生产环境修改为`false`) |
|
||||
|
|
||||
## 配置注意事项 |
|
||||
|
|
||||
1. **不要泄露敏感信息**:.env文件包含AppSecret、数据库密码等敏感信息,不要将其提交到代码仓库 |
|
||||
|
|
||||
2. **备份配置**:定期备份配置文件,以防丢失 |
|
||||
|
|
||||
3. **Docker部署时的特殊配置**: |
|
||||
- 如果使用Docker Compose部署,将`DB_HOST`改为`mysql`(与docker-compose.yml中的服务名称一致) |
|
||||
- 确保数据库端口在Docker Compose中正确映射 |
|
||||
|
|
||||
4. **环境一致性**:确保开发环境和生产环境的配置保持一致(除了敏感信息和环境特定配置) |
|
||||
|
|
||||
5. **配置验证**:配置完成后,启动服务前可以先测试数据库连接是否正常 |
|
||||
|
|
||||
## 修改示例 |
|
||||
|
|
||||
如果要修改配置,直接编辑.env文件即可: |
|
||||
|
|
||||
```bash |
|
||||
# 修改微信token |
|
||||
WECHAT_TOKEN=my-new-secure-token-2025 |
|
||||
|
|
||||
# 修改日志级别为info |
|
||||
LOG_LEVEL=info |
|
||||
|
|
||||
# 关闭详细日志 |
|
||||
ENABLE_DETAILED_LOGGING=false |
|
||||
``` |
|
||||
@ -1,94 +0,0 @@ |
|||||
# 微信小程序后端服务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 |
|
||||
``` |
|
||||
@ -1,23 +0,0 @@ |
|||||
# 使用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"] |
|
||||
@ -1,33 +0,0 @@ |
|||||
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: |
|
||||
@ -1,154 +0,0 @@ |
|||||
-- 确保 users 表包含立即入驻功能所需的所有字段 |
|
||||
-- 此脚本用于修复或添加入驻流程可能需要的数据库字段 |
|
||||
|
|
||||
USE wechat_app; |
|
||||
|
|
||||
-- 检查并添加缺失的字段(如果不存在) |
|
||||
|
|
||||
-- 1. 入驻相关字段 |
|
||||
-- 检查 collaborationid 字段(合作商身份) |
|
||||
IF NOT EXISTS ( |
|
||||
SELECT * FROM information_schema.COLUMNS |
|
||||
WHERE TABLE_SCHEMA = 'wechat_app' |
|
||||
AND TABLE_NAME = 'users' |
|
||||
AND COLUMN_NAME = 'collaborationid' |
|
||||
) THEN |
|
||||
ALTER TABLE users ADD COLUMN collaborationid TEXT COMMENT '合作商身份' AFTER demand; |
|
||||
END IF; |
|
||||
|
|
||||
-- 检查 cooperation 字段(合作模式) |
|
||||
IF NOT EXISTS ( |
|
||||
SELECT * FROM information_schema.COLUMNS |
|
||||
WHERE TABLE_SCHEMA = 'wechat_app' |
|
||||
AND TABLE_NAME = 'users' |
|
||||
AND COLUMN_NAME = 'cooperation' |
|
||||
) THEN |
|
||||
ALTER TABLE users ADD COLUMN cooperation VARCHAR(255) COMMENT '合作模式' AFTER collaborationid; |
|
||||
END IF; |
|
||||
|
|
||||
-- 检查 businesslicenseurl 字段(营业执照) |
|
||||
IF NOT EXISTS ( |
|
||||
SELECT * FROM information_schema.COLUMNS |
|
||||
WHERE TABLE_SCHEMA = 'wechat_app' |
|
||||
AND TABLE_NAME = 'users' |
|
||||
AND COLUMN_NAME = 'businesslicenseurl' |
|
||||
) THEN |
|
||||
ALTER TABLE users ADD COLUMN businesslicenseurl TEXT COMMENT '营业执照URL' AFTER cooperation; |
|
||||
END IF; |
|
||||
|
|
||||
-- 检查 proofurl 字段(证明材料) |
|
||||
IF NOT EXISTS ( |
|
||||
SELECT * FROM information_schema.COLUMNS |
|
||||
WHERE TABLE_SCHEMA = 'wechat_app' |
|
||||
AND TABLE_NAME = 'users' |
|
||||
AND COLUMN_NAME = 'proofurl' |
|
||||
) THEN |
|
||||
ALTER TABLE users ADD COLUMN proofurl TEXT COMMENT '证明材料URL' AFTER businesslicenseurl; |
|
||||
END IF; |
|
||||
|
|
||||
-- 检查 brandurl 字段(品牌授权链) |
|
||||
IF NOT EXISTS ( |
|
||||
SELECT * FROM information_schema.COLUMNS |
|
||||
WHERE TABLE_SCHEMA = 'wechat_app' |
|
||||
AND TABLE_NAME = 'users' |
|
||||
AND COLUMN_NAME = 'brandurl' |
|
||||
) THEN |
|
||||
ALTER TABLE users ADD COLUMN brandurl TEXT COMMENT '品牌授权链文件URL' AFTER proofurl; |
|
||||
END IF; |
|
||||
|
|
||||
-- 检查 partnerstatus 字段(合作商状态) |
|
||||
IF NOT EXISTS ( |
|
||||
SELECT * FROM information_schema.COLUMNS |
|
||||
WHERE TABLE_SCHEMA = 'wechat_app' |
|
||||
AND TABLE_NAME = 'users' |
|
||||
AND COLUMN_NAME = 'partnerstatus' |
|
||||
) THEN |
|
||||
ALTER TABLE users ADD COLUMN partnerstatus VARCHAR(255) COMMENT '合作商状态' AFTER brandurl; |
|
||||
END IF; |
|
||||
|
|
||||
-- 2. 详细地址相关字段 |
|
||||
-- 检查 detailedaddress 字段 |
|
||||
IF NOT EXISTS ( |
|
||||
SELECT * FROM information_schema.COLUMNS |
|
||||
WHERE TABLE_SCHEMA = 'wechat_app' |
|
||||
AND TABLE_NAME = 'users' |
|
||||
AND COLUMN_NAME = 'detailedaddress' |
|
||||
) THEN |
|
||||
ALTER TABLE users ADD COLUMN detailedaddress VARCHAR(255) COMMENT '详细地址' AFTER district; |
|
||||
END IF; |
|
||||
|
|
||||
-- 3. 其他可能需要的字段 |
|
||||
-- 检查 reasonforfailure 字段(审核失败原因) |
|
||||
IF NOT EXISTS ( |
|
||||
SELECT * FROM information_schema.COLUMNS |
|
||||
WHERE TABLE_SCHEMA = 'wechat_app' |
|
||||
AND TABLE_NAME = 'users' |
|
||||
AND COLUMN_NAME = 'reasonforfailure' |
|
||||
) THEN |
|
||||
ALTER TABLE users ADD COLUMN reasonforfailure TEXT COMMENT '审核失败原因' AFTER partnerstatus; |
|
||||
END IF; |
|
||||
|
|
||||
-- 检查 idcardstatus 字段(身份证认证状态) |
|
||||
IF NOT EXISTS ( |
|
||||
SELECT * FROM information_schema.COLUMNS |
|
||||
WHERE TABLE_SCHEMA = 'wechat_app' |
|
||||
AND TABLE_NAME = 'users' |
|
||||
AND COLUMN_NAME = 'idcardstatus' |
|
||||
) THEN |
|
||||
ALTER TABLE users ADD COLUMN idcardstatus INT NULL COMMENT '身份证认证状态(0:待审核,1:审核通过,2:审核失败)' AFTER reasonforfailure; |
|
||||
END IF; |
|
||||
|
|
||||
-- 检查 audit_time 字段(审核时间) |
|
||||
IF NOT EXISTS ( |
|
||||
SELECT * FROM information_schema.COLUMNS |
|
||||
WHERE TABLE_SCHEMA = 'wechat_app' |
|
||||
AND TABLE_NAME = 'users' |
|
||||
AND COLUMN_NAME = 'audit_time' |
|
||||
) THEN |
|
||||
ALTER TABLE users ADD COLUMN audit_time DATETIME COMMENT '审核时间' AFTER reasonforfailure; |
|
||||
END IF; |
|
||||
|
|
||||
-- 4. 修改字段属性以允许空值(如果需要) |
|
||||
-- 修改 collaborationid 允许为空(入驻流程中可能未选择) |
|
||||
ALTER TABLE users MODIFY COLUMN collaborationid TEXT NULL COMMENT '合作商身份'; |
|
||||
|
|
||||
-- 修改 cooperation 允许为空 |
|
||||
ALTER TABLE users MODIFY COLUMN cooperation VARCHAR(255) NULL COMMENT '合作模式'; |
|
||||
|
|
||||
-- 修改 province/city/district 允许为空(地址选择可能不完整) |
|
||||
ALTER TABLE users MODIFY COLUMN province VARCHAR(50) NULL COMMENT '省份'; |
|
||||
ALTER TABLE users MODIFY COLUMN city VARCHAR(50) NULL COMMENT '城市'; |
|
||||
ALTER TABLE users MODIFY COLUMN district VARCHAR(255) NULL COMMENT '区域'; |
|
||||
|
|
||||
-- 5. 添加索引以提高查询性能 |
|
||||
-- 为 openid 添加唯一索引(如果尚未存在) |
|
||||
IF NOT EXISTS ( |
|
||||
SELECT * FROM information_schema.STATISTICS |
|
||||
WHERE TABLE_SCHEMA = 'wechat_app' |
|
||||
AND TABLE_NAME = 'users' |
|
||||
AND INDEX_NAME = 'idx_openid' |
|
||||
) THEN |
|
||||
CREATE INDEX idx_openid ON users(openid); |
|
||||
END IF; |
|
||||
|
|
||||
-- 为 partnerstatus 添加索引(用于查询审核状态) |
|
||||
IF NOT EXISTS ( |
|
||||
SELECT * FROM information_schema.STATISTICS |
|
||||
WHERE TABLE_SCHEMA = 'wechat_app' |
|
||||
AND TABLE_NAME = 'users' |
|
||||
AND INDEX_NAME = 'idx_partnerstatus' |
|
||||
) THEN |
|
||||
CREATE INDEX idx_partnerstatus ON users(partnerstatus); |
|
||||
END IF; |
|
||||
|
|
||||
-- 为 userId 添加索引(如果尚未存在唯一索引) |
|
||||
IF NOT EXISTS ( |
|
||||
SELECT * FROM information_schema.STATISTICS |
|
||||
WHERE TABLE_SCHEMA = 'wechat_app' |
|
||||
AND TABLE_NAME = 'users' |
|
||||
AND INDEX_NAME = 'idx_userId' |
|
||||
) THEN |
|
||||
CREATE INDEX idx_userId ON users(userId); |
|
||||
END IF; |
|
||||
|
|
||||
SELECT '数据库表结构修复完成!' AS status; |
|
||||
@ -1,47 +0,0 @@ |
|||||
// 测试创建动态API
|
|
||||
const http = require('http'); |
|
||||
|
|
||||
// 测试数据
|
|
||||
const testData = { |
|
||||
content: '测试发布帖子', |
|
||||
images: ['https://example.com/image1.jpg', 'https://example.com/image2.jpg'], |
|
||||
topic: '今天你吃蛋了么?' |
|
||||
}; |
|
||||
|
|
||||
// 发送POST请求到主服务器
|
|
||||
const options = { |
|
||||
hostname: 'localhost', |
|
||||
port: 3003, |
|
||||
path: '/api/eggbar/posts', |
|
||||
method: 'POST', |
|
||||
headers: { |
|
||||
'Content-Type': 'application/json', |
|
||||
'Content-Length': Buffer.byteLength(JSON.stringify(testData)) |
|
||||
} |
|
||||
}; |
|
||||
|
|
||||
const req = http.request(options, (res) => { |
|
||||
console.log(`状态码: ${res.statusCode}`); |
|
||||
console.log(`响应头: ${JSON.stringify(res.headers)}`); |
|
||||
|
|
||||
let data = ''; |
|
||||
res.on('data', (chunk) => { |
|
||||
data += chunk; |
|
||||
}); |
|
||||
|
|
||||
res.on('end', () => { |
|
||||
console.log('响应体:', data); |
|
||||
console.log('测试完成'); |
|
||||
}); |
|
||||
}); |
|
||||
|
|
||||
req.on('error', (e) => { |
|
||||
console.error(`请求错误: ${e.message}`); |
|
||||
}); |
|
||||
|
|
||||
// 发送请求体
|
|
||||
req.write(JSON.stringify(testData)); |
|
||||
req.end(); |
|
||||
|
|
||||
console.log('正在发送测试请求到 http://localhost:3003/api/eggbar/posts...'); |
|
||||
console.log('测试数据:', testData); |
|
||||
Loading…
Reference in new issue