Files
FendxPHP/docs/部署测试指南.md

836 lines
16 KiB
Markdown
Raw Normal View History

# 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 开发团队**