从开发到生产的完整部署指南,确保您的应用在生产环境中稳定、安全且高性能运行
使用GitHub Actions的部署流水线配置:
name: Production Deployment
on:
push:
branches: [ main ]
jobs:
build-and-test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up Node.js
uses: actions/setup-node@v3
with:
node-version: 18.x
- run: npm ci
- run: npm run build
- run: npm test
deploy-to-staging:
needs: build-and-test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Deploy to Staging
uses: azure/webapps-deploy@v2
with:
app-name: 'my-app-staging'
slot-name: 'staging'
package: .
deploy-to-production:
needs: deploy-to-staging
if: success()
runs-on: ubuntu-latest
steps:
- name: Approve Production Deployment
uses: trstringer/manual-approval@v1
with:
secret: ${{ secrets.PRODUCTION_APPROVAL_TOKEN }}
- name: Deploy to Production
uses: azure/webapps-deploy@v2
with:
app-name: 'my-app-production'
slot-name: 'production'
package: .
优化生产环境的Dockerfile示例:
# 第一阶段:构建应用
FROM node:18-alpine as builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
# 第二阶段:生产环境
FROM node:18-alpine
WORKDIR /app
# 安装生产依赖
COPY package*.json ./
RUN npm ci --only=production
# 从构建阶段复制构建结果
COPY --from=builder /app/dist ./dist
# 设置非root用户
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
USER appuser
# 健康检查
HEALTHCHECK --interval=30s --timeout=5s \
CMD curl -f http://localhost:3000/health || exit 1
# 暴露端口
EXPOSE 3000
# 启动应用
CMD ["node", "dist/main.js"]