mirror of
https://devops.lemonos.cn/lawson/FendxPHP.git
synced 2026-06-15 15:02:49 +08:00
836 lines
16 KiB
Markdown
836 lines
16 KiB
Markdown
|
|
# 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 开发团队**
|