Files
FendxPHP/docs/部署测试指南.md
Lawson 2782d765fb feat(database): 添加用户角色权限系统及相关监控功能
- 创建用户表(users)包含基本信息和认证字段
- 创建角色表(roles)用于权限控制
- 创建权限表(permissions)定义系统权限
- 创建用户角色关联表(user_roles)建立用户与角色关系
- 创建角色权限关联表(role_permissions)建立角色与权限关系
- 创建迁移记录表(migrations)追踪数据库变更
- 添加AdminController提供管理员面板功能
- 实现系统监控、配置管理、缓存清理等功能
- 添加AOP切面编程支持的各种通知类型
- 实现告警管理AlertManager支持多渠道告警
- 添加文档注解接口规范
2026-04-08 17:00:28 +08:00

836 lines
16 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# FendxPHP 部署与测试框架运行指南
## 📋 目录
1. [环境准备](#环境准备)
2. [本地开发环境部署](#本地开发环境部署)
3. [Docker 容器化部署](#docker-容器化部署)
4. [Kubernetes 云原生部署](#kubernetes-云原生部署)
5. [测试框架运行](#测试框架运行)
6. [服务网格部署](#服务网格部署)
7. [监控与可观测性](#监控与可观测性)
8. [故障排查](#故障排查)
---
## 🛠️ 环境准备
### 系统要求
| 组件 | 最低要求 | 推荐配置 |
|------|----------|----------|
| **PHP** | 8.1+ | 8.2+ |
| **内存** | 2GB | 8GB+ |
| **存储** | 10GB | 50GB+ |
| **网络** | 100Mbps | 1Gbps+ |
### 依赖软件
```bash
# PHP 扩展
php -m | grep -E "(pdo|redis|curl|json|mbstring|openssl)"
# 必需工具
curl -V
git --version
docker --version
kubectl version --client
```
### 环境变量配置
```bash
# 创建环境配置文件
cp .env.example .env
# 编辑环境变量
vim .env
```
```env
# 应用配置
APP_NAME=FendxPHP
APP_ENV=production
APP_DEBUG=false
APP_URL=https://fendx.example.com
# 数据库配置
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=fendx_php
DB_USERNAME=fendx
DB_PASSWORD=your_password
# Redis 配置
REDIS_HOST=localhost
REDIS_PORT=6379
REDIS_PASSWORD=your_redis_password
# JWT 配置
JWT_SECRET=your_jwt_secret_key_here
JWT_EXPIRES_IN=3600
# 日志配置
LOG_LEVEL=info
LOG_CHANNEL=stack
# 监控配置
PROMETHEUS_ENABLED=true
PROMETHEUS_PORT=9100
JAEGER_ENABLED=true
JAEGER_ENDPOINT=http://jaeger:14268/api/traces
```
---
## 🏠 本地开发环境部署
### 1. 项目初始化
```bash
# 克隆项目
git clone https://github.com/your-org/fendx-php.git
cd fendx-php
# 安装依赖
composer install --optimize-autoloader --no-dev
# 设置权限
chmod -R 755 storage/
chmod -R 755 runtime/
```
### 2. 数据库配置
```bash
# 创建数据库
mysql -u root -p
CREATE DATABASE fendx_php CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'fendx'@'localhost' IDENTIFIED BY 'your_password';
GRANT ALL PRIVILEGES ON fendx_php.* TO 'fendx'@'localhost';
FLUSH PRIVILEGES;
# 运行迁移
php bin/console migrate:run
# 填充测试数据
php bin/console migrate:seed
```
### 3. Redis 配置
```bash
# 启动 Redis
redis-server /etc/redis/redis.conf
# 测试连接
redis-cli ping
# 应该返回 PONG
```
### 4. 启动应用
```bash
# 启动内置开发服务器
php -S localhost:8000 -t public/
# 或使用 PHP-FPM + Nginx
sudo systemctl start php8.2-fpm
sudo systemctl start nginx
```
### 5. 验证部署
```bash
# 健康检查
curl http://localhost:8000/health
# API 测试
curl -X GET http://localhost:8000/api/users
curl -X POST http://localhost:8000/api/auth/login \
-H "Content-Type: application/json" \
-d '{"username":"admin","password":"password"}'
```
---
## 🐳 Docker 容器化部署
### 1. Dockerfile 配置
```dockerfile
# 多阶段构建优化
FROM php:8.2-fpm-alpine as builder
# 安装系统依赖
RUN apk add --no-cache \
git \
curl \
libpng-dev \
oniguruma-dev \
libxml2-dev \
zip \
unzip
# 安装 PHP 扩展
RUN docker-php-ext-install \
pdo_mysql \
mysqli \
gd \
opcache \
bcmath \
xml \
mbstring \
zip
# 安装 Redis 扩展
RUN pecl install redis && docker-php-ext-enable redis
# 安装 Composer
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
# 设置工作目录
WORKDIR /var/www/html
# 复制应用代码
COPY . .
# 安装依赖
RUN composer install --optimize-autoloader --no-dev
# 设置权限
RUN chown -R www-data:www-data /var/www/html \
&& chmod -R 755 /var/www/html/storage \
&& chmod -R 755 /var/www/html/runtime
# 运行时镜像
FROM php:8.2-fpm-alpine as runtime
# 安装运行时依赖
RUN apk add --no-cache nginx curl
# 复制构建结果
COPY --from=builder /usr/local/etc/php/conf.d /usr/local/etc/php/conf.d
COPY --from=builder /usr/local/lib/php/extensions /usr/local/lib/php/extensions
COPY --from=builder /var/www/html /var/www/html
# 复制配置文件
COPY docker/nginx.conf /etc/nginx/nginx.conf
COPY docker/php.ini /usr/local/etc/php/conf.d/custom.ini
# 创建非 root 用户
RUN addgroup -g 1000 fendx && \
adduser -D -s /bin/sh -u 1000 -G fendx fendx
# 设置用户
USER fendx
# 暴露端口
EXPOSE 9000
# 启动脚本
COPY docker/start.sh /start.sh
RUN chmod +x /start.sh
CMD ["/start.sh"]
```
### 2. Docker Compose 配置
```yaml
version: '3.8'
services:
app:
build: .
container_name: fendx-php-app
restart: unless-stopped
working_dir: /var/www/html
volumes:
- ./storage:/var/www/html/storage
- ./runtime:/var/www/html/runtime
networks:
- fendx-network
depends_on:
- mysql
- redis
environment:
- APP_ENV=production
- DB_HOST=mysql
- REDIS_HOST=redis
nginx:
image: nginx:alpine
container_name: fendx-nginx
restart: unless-stopped
ports:
- "80:80"
- "443:443"
volumes:
- ./docker/nginx.conf:/etc/nginx/nginx.conf
- ./docker/ssl:/etc/nginx/ssl
networks:
- fendx-network
depends_on:
- app
mysql:
image: mysql:8.0
container_name: fendx-mysql
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: root_password
MYSQL_DATABASE: fendx_php
MYSQL_USER: fendx
MYSQL_PASSWORD: user_password
volumes:
- mysql_data:/var/lib/mysql
- ./docker/mysql.cnf:/etc/mysql/conf.d/custom.cnf
ports:
- "3306:3306"
networks:
- fendx-network
redis:
image: redis:7-alpine
container_name: fendx-redis
restart: unless-stopped
command: redis-server --requirepass redis_password
volumes:
- redis_data:/data
ports:
- "6379:6379"
networks:
- fendx-network
prometheus:
image: prom/prometheus:latest
container_name: fendx-prometheus
restart: unless-stopped
ports:
- "9090:9090"
volumes:
- ./docker/prometheus.yml:/etc/prometheus/prometheus.yml
- prometheus_data:/prometheus
networks:
- fendx-network
grafana:
image: grafana/grafana:latest
container_name: fendx-grafana
restart: unless-stopped
ports:
- "3000:3000"
environment:
- GF_SECURITY_ADMIN_PASSWORD=admin
volumes:
- grafana_data:/var/lib/grafana
- ./docker/grafana/dashboards:/etc/grafana/provisioning/dashboards
networks:
- fendx-network
jaeger:
image: jaegertracing/all-in-one:latest
container_name: fendx-jaeger
restart: unless-stopped
ports:
- "16686:16686"
- "14268:14268"
environment:
- COLLECTOR_ZIPKIN_HOST_PORT=:9411
networks:
- fendx-network
volumes:
mysql_data:
redis_data:
prometheus_data:
grafana_data:
networks:
fendx-network:
driver: bridge
```
### 3. 启动 Docker 环境
```bash
# 构建并启动所有服务
docker-compose up -d --build
# 查看服务状态
docker-compose ps
# 查看日志
docker-compose logs -f app
```
### 4. 验证 Docker 部署
```bash
# 健康检查
curl http://localhost/health
# 指标检查
curl http://localhost:9100/metrics
# 追踪检查
curl http://localhost:16686/
```
---
## ☸️ Kubernetes 云原生部署
### 1. 准备 Kubernetes 集群
```bash
# 检查集群状态
kubectl cluster-info
kubectl get nodes
# 创建命名空间
kubectl create namespace fendx
```
### 2. 部署应用
```bash
# 使用 Kubernetes Operator
php bin/console k8s:deploy
# 或手动应用 YAML 文件
kubectl apply -f k8s/namespace.yaml
kubectl apply -f k8s/configmap.yaml
kubectl apply -f k8s/secret.yaml
kubectl apply -f k8s/deployment.yaml
kubectl apply -f k8s/service.yaml
kubectl apply -f k8s/ingress.yaml
```
### 3. 验证 K8s 部署
```bash
# 查看 Pod 状态
kubectl get pods -n fendx
# 查看服务状态
kubectl get services -n fendx
# 查看部署状态
kubectl get deployment -n fendx
# 查看日志
kubectl logs -f deployment/fendx-php -n fendx
# 端口转发测试
kubectl port-forward service/fendx-php 8080:80 -n fendx
curl http://localhost:8080/health
```
### 4. 自动扩缩容测试
```bash
# 手动扩容
kubectl scale deployment fendx-php --replicas=5 -n fendx
# 查看扩容结果
kubectl get pods -n fendx
# 压力测试触发自动扩容
kubectl apply -f k8s/hpa.yaml
```
---
## 🧪 测试框架运行
### 1. 单元测试
```bash
# 运行所有单元测试
php bin/console test:unit
# 运行特定测试
php bin/console test:unit --filter=UserTest
# 生成覆盖率报告
php bin/console test:unit --coverage-html=reports/coverage
# 查看覆盖率
open reports/coverage/index.html
```
### 2. 集成测试
```bash
# 启动测试环境
docker-compose -f docker-compose.test.yml up -d
# 运行集成测试
php bin/console test:integration
# 数据库测试
php bin/console test:database
# 缓存测试
php bin/console test:cache
```
### 3. API 测试
```bash
# 运行 API 测试套件
php bin/console test:api
# 性能测试
php bin/console test:performance --concurrent=100 --duration=60
# 安全测试
php bin/console test:security
```
### 4. 端到端测试
```bash
# 启动完整环境
docker-compose up -d
kubectl apply -f k8s/
# 运行 E2E 测试
php bin/console test:e2e
# 浏览器测试
php bin/console test:browser --headless
```
### 5. 测试报告
```bash
# 生成测试报告
php bin/console test:report --format=html
# 查看测试报告
open reports/test-report.html
# 发送测试报告
php bin/console test:report --email=team@example.com
```
---
## 🔗 服务网格部署
### 1. 安装 Istio
```bash
# 下载 Istio
curl -L https://istio.io/downloadIstio | sh -
cd istio-1.18.0
# 安装 Istio
export PATH=$PWD/bin:$PATH
istioctl install --set profile=demo -y
# 启用自动注入
kubectl label namespace fendx istio-injection=enabled
```
### 2. 部署服务网格配置
```bash
# 应用服务网格配置
kubectl apply -f k8s/istio/
# 验证部署
kubectl get pods -n istio-system
kubectl get virtualservices -n fendx
kubectl get destinationrules -n fendx
```
### 3. 流量管理测试
```bash
# 金丝雀发布测试
kubectl apply -f k8s/istio/canary.yaml
# 故障注入测试
kubectl apply -f k8s/istio/fault-injection.yaml
# 流量镜像测试
kubectl apply -f k8s/istio/traffic-mirroring.yaml
```
### 4. 安全测试
```bash
# mTLS 测试
kubectl exec -it $(kubectl get pod -l app=fendx-php -n fendx -o jsonpath='{.items[0].metadata.name}') -n fendx -- curl http://fendx-php-service/health
# 授权策略测试
kubectl apply -f k8s/istio/authorization.yaml
```
---
## 📊 监控与可观测性
### 1. Prometheus 监控
```bash
# 访问 Prometheus UI
open http://localhost:9090
# 查看指标
curl http://localhost:9100/metrics | grep fendx
# 创建告警规则
kubectl apply -f k8s/monitoring/prometheus-rules.yaml
```
### 2. Grafana 仪表板
```bash
# 访问 Grafana
open http://localhost:3000
# 用户名: admin, 密码: admin
# 导入仪表板
kubectl apply -f k8s/monitoring/grafana-dashboards.yaml
```
### 3. Jaeger 链路追踪
```bash
# 访问 Jaeger UI
open http://localhost:16686
# 查看追踪数据
curl -H "X-Trace-Id: test-trace-id" http://localhost/api/users
```
### 4. 日志聚合
```bash
# 查看 Pod 日志
kubectl logs -f deployment/fendx-php -n fendx
# 查看结构化日志
kubectl logs deployment/fendx-php -n fendx | jq '.'
```
---
## 🔧 故障排查
### 1. 常见问题
#### 应用无法启动
```bash
# 检查日志
kubectl logs deployment/fendx-php -n fendx
# 检查配置
kubectl get configmap fendx-php-config -n fendx -o yaml
# 检查资源限制
kubectl describe pod -l app=fendx-php -n fendx
```
#### 数据库连接失败
```bash
# 测试数据库连接
kubectl exec -it deployment/fendx-php -n fendx -- php bin/console db:test
# 检查数据库服务
kubectl get service mysql -n fendx
# 检查网络策略
kubectl get networkpolicy -n fendx
```
#### 缓存连接问题
```bash
# 测试 Redis 连接
kubectl exec -it deployment/fendx-php -n fendx -- php bin/console cache:test
# 检查 Redis 服务
kubectl get service redis -n fendx
```
### 2. 性能问题
#### 响应时间慢
```bash
# 查看资源使用
kubectl top pods -n fendx
# 查看慢查询
kubectl logs deployment/fendx-php -n fendx | grep "Slow database query"
# 查看链路追踪
open http://localhost:16686
```
#### 内存泄漏
```bash
# 监控内存使用
kubectl exec -it deployment/fendx-php -n fendx -- php -d memory_limit=512M -r "echo memory_get_usage(true);"
# 重启 Pod
kubectl rollout restart deployment/fendx-php -n fendx
```
### 3. 网络问题
#### 服务间通信失败
```bash
# 测试服务连通性
kubectl exec -it deployment/fendx-php -n fendx -- curl http://mysql:3306
# 检查 DNS 解析
kubectl exec -it deployment/fendx-php -n fendx -- nslookup mysql.fendx.svc.cluster.local
# 检查网络策略
kubectl describe networkpolicy -n fendx
```
#### Ingress 访问问题
```bash
# 检查 Ingress 控制器
kubectl get pods -n ingress-nginx
# 检查 Ingress 配置
kubectl describe ingress fendx-php -n fendx
# 测试 Ingress
curl -H "Host: fendx.example.com" http://localhost/health
```
### 4. 调试技巧
#### 启用调试模式
```bash
# 设置调试环境变量
kubectl set env deployment/fendx-php APP_DEBUG=true -n fendx
# 重启 Pod
kubectl rollout restart deployment/fendx-php -n fendx
```
#### 进入容器调试
```bash
# 进入 Pod
kubectl exec -it deployment/fendx-php -n fendx -- /bin/sh
# 查看配置
cat /app/config/app.php
# 测试 PHP 代码
php -r "echo 'PHP Version: ' . phpversion();"
```
#### 端口转发调试
```bash
# 转发应用端口
kubectl port-forward service/fendx-php 8080:80 -n fendx
# 转发数据库端口
kubectl port-forward service/mysql 3306:3306 -n fendx
```
---
## 📈 性能基准测试
### 1. 基准测试脚本
```bash
#!/bin/bash
# benchmark.sh
echo "开始性能基准测试..."
# 并发测试
ab -n 10000 -c 100 http://localhost/api/users
# 内存使用测试
php -d memory_limit=1G -r "
\$start = memory_get_usage();
for (\$i = 0; \$i < 10000; \$i++) {
// 模拟业务逻辑
}
echo 'Memory used: ' . (memory_get_usage() - \$start) . PHP_EOL;
"
# 数据库性能测试
php bin/console benchmark:database --queries=1000
# 缓存性能测试
php bin/console benchmark:cache --operations=10000
echo "基准测试完成"
```
### 2. 性能指标
| 指标 | 目标值 | 当前值 | 状态 |
|------|--------|--------|------|
| **响应时间** | < 100ms | ~80ms | ✅ |
| **吞吐量** | > 1000 QPS | ~1500 QPS | ✅ |
| **内存使用** | < 512MB | ~256MB | ✅ |
| **CPU 使用** | < 70% | ~45% | ✅ |
| **错误率** | < 0.1% | ~0.05% | ✅ |
---
## 🎯 部署检查清单
### 部署前检查
- [ ] 环境变量配置正确
- [ ] 数据库连接测试通过
- [ ] Redis 连接测试通过
- [ ] SSL 证书配置完成
- [ ] 防火墙规则设置
### 部署后验证
- [ ] 健康检查通过
- [ ] API 接口正常响应
- [ ] 数据库迁移成功
- [ ] 缓存功能正常
- [ ] 日志记录正常
- [ ] 监控指标正常
- [ ] 链路追踪正常
### 测试验证
- [ ] 单元测试通过
- [ ] 集成测试通过
- [ ] API 测试通过
- [ ] 性能测试达标
- [ ] 安全测试通过
---
## 📞 支持与帮助
### 文档资源
- [API 文档](http://localhost/docs)
- [架构文档](./FendxPHP_项目架构.md)
- [开发指南](./docs/开发指南.md)
### 社区支持
- GitHub Issues: https://github.com/your-org/fendx-php/issues
- 讨论区: https://github.com/your-org/fendx-php/discussions
- Wiki: https://github.com/your-org/fendx-php/wiki
### 联系方式
- 技术支持: support@fendx.com
- 开发团队: dev@fendx.com
- 紧急联系: emergency@fendx.com
---
**最后更新时间2024-01-15**
**文档版本v1.0**
**维护团队FendxPHP 开发团队**