JeeSite云计算:云原生应用部署
引言:企业级应用部署的云原生革命
还在为传统部署方式的复杂性而头疼吗?面对微服务架构、容器化部署、持续集成等现代化需求,传统部署方式显得力不从心。JeeSite作为企业级快速开发解决方案,提供了完整的云原生部署支持,让您的应用轻松拥抱云计算时代。
通过本文,您将掌握:
- JeeSite云原生架构的核心设计理念
- 基于Docker的容器化部署方案
- Kubernetes集群部署最佳实践
- 持续集成与持续部署(CI/CD)流水线搭建
- 生产环境监控与运维策略
JeeSite云原生架构解析
微内核设计理念
JeeSite采用微内核架构,天然支持云原生部署模式:
模块化部署优势
| 特性 | 传统部署 | 云原生部署 |
|---|---|---|
| 扩展性 | 垂直扩展 | 水平扩展 |
| 部署粒度 | 单体应用 | 微服务模块 |
| 资源利用率 | 低 | 高 |
| 故障隔离 | 差 | 优秀 |
| 更新部署 | 停机更新 | 滚动更新 |
Docker容器化部署实战
构建优化Docker镜像
JeeSite基于Vite和Turborepo构建,支持高效的Docker镜像构建:
# 多阶段构建Dockerfile示例
FROM node:20-alpine AS builder
# 设置工作目录
WORKDIR /app
# 复制package.json和锁文件
COPY package.json pnpm-lock.yaml ./
COPY packages/core/package.json packages/core/
COPY packages/web/package.json packages/web/
# 安装依赖
RUN npm install -g pnpm@8
RUN pnpm install --frozen-lockfile
# 复制源代码
COPY . .
# 构建生产版本
RUN pnpm build
# 生产阶段
FROM nginx:alpine
# 复制构建产物
COPY --from=builder /app/web/dist /usr/share/nginx/html
# 复制nginx配置
COPY nginx.conf /etc/nginx/conf.d/default.conf
# 暴露端口
EXPOSE 80
# 启动nginx
CMD ["nginx", "-g", "daemon off;"]
环境变量配置管理
JeeSite支持灵活的环境变量配置,适应不同部署环境:
// 环境变量配置示例
export interface ViteEnv {
VITE_PORT: number;
VITE_PUBLIC_PATH: string;
VITE_PROXY: [string, string, boolean][];
VITE_GLOB_API_URL: string;
VITE_GLOB_API_URL_PREFIX: string;
}
// 环境变量解析函数
export function wrapperEnv(envConf: Recordable): ViteEnv {
const ret: any = {};
for (const envName of Object.keys(envConf)) {
let realName = envConf[envName].replace(/\\n/g, '\n');
realName = realName === 'true' ? true : realName === 'false' ? false : realName;
if (envName === 'VITE_PORT') {
realName = Number(realName);
}
if (envName === 'VITE_PROXY' && realName) {
try {
realName = JSON.parse(realName.replace(/'/g, '"'));
} catch (error) {
realName = '';
}
}
ret[envName] = realName;
}
return ret;
}
Kubernetes集群部署方案
Deployment资源配置
apiVersion: apps/v1
kind: Deployment
metadata:
name: jeesite-web
labels:
app: jeesite-web
spec:
replicas: 3
selector:
matchLabels:
app: jeesite-web
template:
metadata:
labels:
app: jeesite-web
spec:
containers:
- name: jeesite-web
image: registry.example.com/jeesite-web:v1.0.0
ports:
- containerPort: 80
env:
- name: VITE_GLOB_API_URL
value: "https://api.example.com"
- name: VITE_PROXY
value: '[["/js","http://backend-service:8080/js",false]]'
resources:
requests:
memory: "256Mi"
cpu: "250m"
limits:
memory: "512Mi"
cpu: "500m"
livenessProbe:
httpGet:
path: /health
port: 80
initialDelaySeconds: 30
periodSeconds: 10
readinessProbe:
httpGet:
path: /health
port: 80
initialDelaySeconds: 5
periodSeconds: 5
Service和Ingress配置
apiVersion: v1
kind: Service
metadata:
name: jeesite-web-service
spec:
selector:
app: jeesite-web
ports:
- port: 80
targetPort: 80
type: ClusterIP
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: jeesite-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
nginx.ingress.kubernetes.io/ssl-redirect: "true"
spec:
tls:
- hosts:
- jeesite.example.com
secretName: tls-secret
rules:
- host: jeesite.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: jeesite-web-service
port:
number: 80
CI/CD持续集成部署流水线
GitHub Actions自动化部署
name: JeeSite CI/CD Pipeline
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: '20'
cache: 'pnpm'
- name: Install pnpm
run: npm install -g pnpm@8
- name: Install dependencies
run: pnpm install
- name: Run type check
run: pnpm type:check
- name: Run lint
run: pnpm lint:all
build:
needs: test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: '20'
cache: 'pnpm'
- name: Install pnpm
run: npm install -g pnpm@8
- name: Install dependencies
run: pnpm install
- name: Build application
run: pnpm build
- name: Build Docker image
run: |
docker build -t jeesite-web:latest .
- name: Push到容器仓库
run: |
echo "${{ secrets.DOCKER_PASSWORD }}" | docker login -u "${{ secrets.DOCKER_USERNAME }}" --password-stdin
docker tag jeesite-web:latest ${{ secrets.DOCKER_USERNAME }}/jeesite-web:latest
docker push ${{ secrets.DOCKER_USERNAME }}/jeesite-web:latest
deploy:
needs: build
runs-on: ubuntu-latest
if: github.ref == 'refs/heads/main'
steps:
- name: Deploy to Kubernetes
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.K8S_MASTER_HOST }}
username: ${{ secrets.K8S_USERNAME }}
key: ${{ secrets.K8S_SSH_KEY }}
script: |
kubectl set image deployment/jeesite-web jeesite-web=${{ secrets.DOCKER_USERNAME }}/jeesite-web:latest
kubectl rollout status deployment/jeesite-web
监控与运维最佳实践
健康检查配置
JeeSite内置健康检查端点,支持Kubernetes探针:
// 健康检查路由配置
router.get('/health', (req, res) => {
res.status(200).json({
status: 'UP',
timestamp: new Date().toISOString(),
uptime: process.uptime(),
memory: process.memoryUsage(),
version: process.env.npm_package_version
});
});
// 就绪检查端点
router.get('/ready', async (req, res) => {
try {
// 检查数据库连接
await checkDatabaseConnection();
// 检查缓存连接
await checkCacheConnection();
res.status(200).json({ status: 'READY' });
} catch (error) {
res.status(503).json({
status: 'NOT_READY',
error: error.message
});
}
});
性能监控指标
| 监控指标 | 监控工具 | 告警阈值 | 处理策略 |
|---|---|---|---|
| 内存使用率 | Prometheus | >80% | 自动扩容 |
| CPU使用率 | Grafana | >70% | 优化代码 |
| 响应时间 | ELK Stack | >500ms | 性能调优 |
| 错误率 | Sentry | >1% | 立即排查 |
| 请求量 | Kibana | 突增200% | 流量控制 |
安全部署考量
网络安全策略
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: jeesite-network-policy
spec:
podSelector:
matchLabels:
app: jeesite-web
policyTypes:
- Ingress
- Egress
ingress:
- from:
- namespaceSelector:
matchLabels:
name: ingress-nginx
ports:
- protocol: TCP
port: 80
egress:
- to:
- namespaceSelector:
matchLabels:
name: backend-services
ports:
- protocol: TCP
port: 8080
密钥管理方案
# 使用Kubernetes Secrets管理敏感信息
kubectl create secret generic jeesite-secrets \
--from-literal=db-password=your-db-password \
--from-literal=api-key=your-api-key \
--from-literal=jwt-secret=your-jwt-secret
# 在Deployment中引用Secrets
env:
- name: DATABASE_PASSWORD
valueFrom:
secretKeyRef:
name: jeesite-secrets
key: db-password
总结与展望
JeeSite的云原生部署方案为企业级应用提供了完整的现代化部署体验。通过Docker容器化、Kubernetes编排、CI/CD自动化流水线,实现了:
- 高可用性:多副本部署,自动故障转移
- 弹性伸缩:根据负载自动扩缩容
- 快速部署:分钟级完成全流程部署
- 易于维护:统一的配置管理和监控体系
- 成本优化:资源利用率最大化
未来,JeeSite将继续深化云原生支持,包括服务网格集成、无服务器架构适配、AI运维等方向,为企业数字化转型提供更强大的技术支撑。
立即开始您的云原生之旅,让JeeSite助力您的业务在云端腾飞!
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



