deployment.md 5.6 KB

部署指南

概述

本文档描述了 188-179 招聘系统的部署流程和配置。

部署架构

组件列表

组件 技术栈 端口 说明
Web服务器 Node.js + Hono 8080 管理后台后端
PostgreSQL 17 5432 数据库
Redis 7 6379 缓存和会话
MinIO latest 9000 对象存储

基础设施要求

最低配置:

  • CPU: 2核
  • 内存: 4GB
  • 磁盘: 20GB

推荐配置:

  • CPU: 4核
  • 内存: 8GB
  • 磁盘: 50GB

Docker部署

使用Docker Compose

# 构建镜像
docker-compose build

# 启动所有服务
docker-compose up -d

# 查看日志
docker-compose logs -f

# 停止服务
docker-compose down

Dockerfile示例

# Web服务Dockerfile
FROM node:20.19.2-alpine

WORKDIR /app

# 安装pnpm
RUN npm install -g pnpm@10.18.3

# 复制依赖文件
COPY package.json pnpm-lock.yaml ./
COPY pnpm-workspace.yaml ./

# 安装依赖
RUN pnpm install --frozen-lockfile

# 复制源码
COPY . .

# 构建共享包
RUN pnpm run build:mini-ui-packages

# 构建应用
RUN pnpm build

# 暴露端口
EXPOSE 8080

# 启动命令
CMD ["node", "web/server.js"]

docker-compose.yml示例

version: '3.8'

services:
  postgres:
    image: postgres:17
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: postgres
      POSTGRES_DB: postgres
    ports:
      - "5432:5432"
    volumes:
      - postgres_data:/var/lib/postgresql/data

  redis:
    image: redis:7-alpine
    ports:
      - "6379:6379"
    volumes:
      - redis_data:/data

  minio:
    image: minio/minio:latest
    command: server /data --console-address ":9001"
    environment:
      MINIO_ROOT_USER: minioadmin
      MINIO_ROOT_PASSWORD: minioadmin
    ports:
      - "9000:9000"
      - "9001:9001"
    volumes:
      - minio_data:/data

  web:
    build: .
    ports:
      - "8080:8080"
    depends_on:
      - postgres
      - redis
      - minio
    environment:
      DATABASE_URL: postgresql://postgres:postgres@postgres:5432/postgres
      REDIS_URL: redis://redis:6379
      MINIO_ENDPOINT: minio
      MINIO_PORT: 9000
      NODE_ENV: production

volumes:
  postgres_data:
  redis_data:
  minio_data:

生产环境部署

环境变量配置

创建生产环境的 .env.production:

# 数据库配置
DATABASE_URL=postgresql://user:password@production-db:5432/dbname

# Redis配置
REDIS_URL=redis://production-redis:6379

# JWT配置
JWT_SECRET=your-production-jwt-secret-min-32-chars

# MinIO配置
MINIO_ENDPOINT=production-minio
MINIO_PORT=9000
MINIO_ACCESS_KEY=your-access-key
MINIO_SECRET_KEY=your-secret-key
MINIO_BUCKET=d8dai
MINIO_USE_SSL=true

# 应用配置
NODE_ENV=production
PORT=8080
LOG_LEVEL=info

# CORS配置
CORS_ORIGIN=https://your-domain.com

构建生产版本

# 设置生产环境
export NODE_ENV=production

# 构建所有包
pnpm build

# 构建小程序UI包
pnpm run build:mini-ui-packages

启动生产服务

# 使用PM2管理进程
pm2 start web/server.js --name "d8d-web"

# 查看状态
pm2 status

# 查看日志
pm2 logs d8d-web

# 重启服务
pm2 restart d8d-web

数据库迁移

运行迁移

cd web
pnpm db:migrate

数据库备份

# 备份数据库
pnpm db:backup

# 恢复数据库
pnpm db:restore

监控和日志

应用日志

日志位置:

  • 应用日志: /var/log/d8d/app.log
  • 错误日志: /var/log/d8d/error.log

日志配置

// logger配置
import { logger } from '@d8d/shared-utils';

logger.setLevel(process.env.LOG_LEVEL || 'info');

监控指标

  • CPU使用率
  • 内存使用率
  • 响应时间
  • 错误率
  • 请求量

安全配置

HTTPS配置

server {
    listen 443 ssl http2;
    server_name your-domain.com;

    ssl_certificate /path/to/cert.pem;
    ssl_certificate_key /path/to/key.pem;

    location / {
        proxy_pass http://localhost:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

防火墙配置

# 只开放必要端口
ufw allow 80/tcp
ufw allow 443/tcp
ufw allow 22/tcp
ufw enable

CI/CD配置

GitHub Actions示例

name: Deploy

on:
  push:
    branches: [main]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3

      - name: Setup Node.js
        uses: actions/setup-node@v3
        with:
          node-version: '20.19.2'

      - name: Install pnpm
        run: npm install -g pnpm@10.18.3

      - name: Install dependencies
        run: pnpm install

      - name: Build
        run: pnpm build

      - name: Deploy to server
        run: |
          scp -r . user@server:/var/www/d8d
          ssh user@server "cd /var/www/d8d && pm2 restart all"

故障排查

服务无法启动

  1. 检查环境变量配置
  2. 检查数据库连接
  3. 检查端口占用
  4. 查看应用日志

数据库连接失败

  1. 确认数据库服务运行
  2. 检查连接字符串
  3. 验证网络连接
  4. 检查数据库用户权限

性能问题

  1. 检查系统资源使用
  2. 查看慢查询日志
  3. 检查缓存命中率
  4. 分析应用日志

回滚策略

数据库回滚

# 恢复到之前的备份
pnpm db:restore

应用回滚

# 使用PM2回滚到旧版本
pm2 revert d8d-web

# 或切换到之前的Git提交
git checkout <previous-commit>
pnpm build
pm2 restart d8d-web

相关文档


文档版本: 1.0 最后更新: 2026-01-07