Update PHP test app - 2026-01-21 13:37:13

This commit is contained in:
K3s Admin
2026-01-21 13:37:13 +00:00
parent 33f803c82f
commit b93f156e19
14 changed files with 1026 additions and 0 deletions

365
php-test/README.md Normal file
View File

@@ -0,0 +1,365 @@
# PHP MySQL 测试项目
这是一个基于 PHP 8 的简单数据库测试项目,包含表单提交功能和热更新支持。
## 📋 项目特性
- ✅ PHP 8 支持
- ✅ MySQL 数据库连接(使用 PDO
- ✅ 表单数据提交和验证
- ✅ 实时显示最近提交的数据
- ✅ 热更新功能(自动刷新页面)
- ✅ 响应式设计
- ✅ 安全的 SQL 预处理语句
- ✅ k3s 集群部署支持
- ✅ Docker 容器化
- ✅ GitOps 自动部署ArgoCD
- ✅ HTTPS 支持Let's Encrypt
- ✅ 私有镜像仓库集成
## 📁 项目结构
```
php-test/
├── config.php # 数据库配置文件
├── Database.php # 数据库连接类
├── index.php # 主页面(表单和数据展示)
├── submit.php # 表单提交处理
├── schema.sql # 数据库表结构
├── watch.php # 文件监控脚本(可选)
├── Dockerfile # Docker 镜像构建文件
├── deploy.sh # k3s 手动部署脚本
├── undeploy.sh # k3s 清理脚本
├── build-and-push.sh # 构建并推送镜像到私有仓库
├── gitops-deploy.sh # GitOps 自动部署脚本(推荐)
├── argocd-app.yaml # ArgoCD Application 配置
├── k8s/ # Kubernetes 配置文件
│ ├── mysql-deployment.yaml
│ ├── mysql-configmap.yaml
│ ├── php-deployment.yaml
│ ├── php-configmap.yaml
│ └── ingress.yaml # Ingress 配置HTTPS
└── README.md # 项目说明文档
```
## 🚀 快速开始
本项目支持三种部署方式:**GitOps 自动部署(推荐)**、**k3s 手动部署**和**本地开发环境**。
---
## 🎯 方式一GitOps 自动部署(推荐)
### 前置条件
- ✅ k3s 集群已部署
- ✅ ArgoCD 已安装https://argocd.u9.net3w.com
- ✅ 私有 Docker Registry 已部署https://registry.u9.net3w.com
- ✅ Gitea 已部署https://git.u9.net3w.com
- ✅ cert-manager + Let's Encrypt 已配置
### 步骤 1: 配置 Git 远程仓库
```bash
# 在 Gitea 创建仓库: k3s-configs
# 然后添加远程仓库
git remote add origin https://git.u9.net3w.com/fei/k3s-configs.git
# 首次推送
git push -u origin master
```
### 步骤 2: 一键 GitOps 部署
```bash
# 执行自动部署脚本(构建镜像 + 推送 + Git 提交 + ArgoCD 配置)
./gitops-deploy.sh
# 或指定镜像标签和提交信息
./gitops-deploy.sh v1.0.0 "Initial release"
```
**脚本会自动完成:**
1. 构建 Docker 镜像
2. 推送到私有仓库 `registry.u9.net3w.com`
3. 提交代码到 Git
4. 推送到远程仓库
5. 创建/更新 ArgoCD Application
### 步骤 3: 访问应用
部署完成后(约 3 分钟),通过以下地址访问:
```
https://php.u9.net3w.com
```
### 步骤 4: 日常开发流程
```bash
# 1. 修改代码
vim index.php
# 2. 重新部署(自动构建、推送、提交)
./gitops-deploy.sh v1.0.1 "Update UI"
# 3. ArgoCD 自动检测并部署3分钟内
```
### GitOps 管理命令
```bash
# 查看 ArgoCD 应用状态
kubectl get application php-test -n argocd
# 查看应用详情
kubectl describe application php-test -n argocd
# 手动触发同步
argocd app sync php-test
# 查看同步历史
argocd app history php-test
# 回滚到上一个版本
argocd app rollback php-test
# 查看 Pod 状态
kubectl get pods -n php-test
# 查看应用日志
kubectl logs -f deployment/php-app -n php-test
```
### ArgoCD 配置说明
- **自动同步**: 每 3 分钟检测一次 Git 仓库变化
- **自动修复**: 手动修改的资源会被自动恢复
- **自动清理**: Git 中删除的资源会自动从集群删除
- **命名空间**: 自动创建 `php-test` 命名空间
---
## 🐳 方式二k3s 手动部署
### 1. 环境要求
- k3s 集群
- Docker
- kubectl
### 2. 一键部署
使用提供的部署脚本,一键部署到 k3s 集群:
```bash
./deploy.sh
```
部署脚本会自动完成以下操作:
1. 构建 Docker 镜像
2. 导入镜像到 k3s
3. 创建命名空间 `php-test`
4. 部署 MySQL 数据库(包含持久化存储)
5. 部署 PHP 应用2个副本
6. 创建 NodePort Service端口 30080
### 3. 访问应用
部署完成后,通过以下地址访问:
```
http://localhost:30080
http://<节点IP>:30080
```
### 4. 管理命令
```bash
# 查看部署状态
kubectl get all -n php-test
# 查看 Pod 日志
kubectl logs -f deployment/php-app -n php-test
# 查看 MySQL 日志
kubectl logs -f deployment/mysql -n php-test
# 进入 PHP 容器
kubectl exec -it deployment/php-app -n php-test -- bash
# 清理部署
./undeploy.sh
```
### 5. 配置说明
- **MySQL 配置**: 在 `k8s/mysql-deployment.yaml` 中的 Secret 配置
- Root 密码: `rootpassword`
- 数据库名: `test_db`
- 用户名: `phpuser`
- 密码: `phppassword`
- **PHP 配置**: 在 `k8s/php-configmap.yaml` 中配置数据库连接
- **持久化存储**: MySQL 数据存储在 PVC 中,重启不会丢失数据
---
## 💻 方式二:本地开发环境
### 1. 环境要求
- PHP 8.0 或更高版本
- MySQL 5.7 或更高版本
- Web 服务器Apache/Nginx或 PHP 内置服务器
### 2. 数据库配置
#### 方法一:使用 SQL 文件创建数据库
```bash
mysql -u root -p < schema.sql
```
#### 方法二:手动创建
```sql
CREATE DATABASE IF NOT EXISTS test_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE test_db;
CREATE TABLE IF NOT EXISTS test_data (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(100) NOT NULL,
message TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
```
### 3. 修改数据库配置
编辑 `config.php` 文件,根据你的环境修改数据库连接信息:
```php
define('DB_HOST', 'localhost'); // 数据库主机
define('DB_NAME', 'test_db'); // 数据库名称
define('DB_USER', 'root'); // 数据库用户名
define('DB_PASS', ''); // 数据库密码
```
### 4. 启动项目
#### 使用 PHP 内置服务器(推荐用于开发)
```bash
cd /home/fei/k3s/php-test
php -S localhost:8000
```
然后在浏览器中访问:`http://localhost:8000`
#### 使用 Apache/Nginx
将项目目录配置为虚拟主机的根目录,然后通过配置的域名访问。
## 🔥 热更新功能
项目内置了两种热更新方式:
### 方式一:前端自动检测(已集成)
`index.php` 中已经集成了 JavaScript 热更新脚本,会每 2 秒检测一次文件变化并自动刷新页面。无需额外配置。
### 方式二:文件监控脚本(可选)
在另一个终端窗口运行文件监控脚本:
```bash
php watch.php
```
这个脚本会监控项目目录中的 PHP、HTML、CSS、JS 文件变化,并在控制台输出变化信息。
## 📝 使用说明
1. 访问 `index.php` 页面
2. 填写表单(姓名、邮箱为必填项)
3. 点击"提交数据"按钮
4. 页面会显示提交结果,并在下方展示最近 5 条提交的数据
5. 修改任何 PHP 文件后,页面会自动刷新(热更新)
## 🔒 安全特性
- 使用 PDO 预处理语句防止 SQL 注入
- 表单数据验证和过滤
- HTML 输出转义防止 XSS 攻击
- 邮箱格式验证
## 🛠️ 技术栈
- **后端**: PHP 8
- **数据库**: MySQL
- **前端**: HTML5, CSS3, JavaScript (原生)
- **数据库访问**: PDO (PHP Data Objects)
## 📊 数据库表结构
```sql
test_data
id (INT, PRIMARY KEY, AUTO_INCREMENT)
name (VARCHAR(100), NOT NULL)
email (VARCHAR(100), NOT NULL)
message (TEXT)
created_at (TIMESTAMP, DEFAULT CURRENT_TIMESTAMP)
```
## 🐛 故障排除
### k3s 部署相关
**Pod 无法启动**
- 检查镜像是否成功导入: `sudo k3s ctr images ls | grep php-test`
- 查看 Pod 事件: `kubectl describe pod <pod-name> -n php-test`
- 查看 Pod 日志: `kubectl logs <pod-name> -n php-test`
**无法访问应用**
- 确认 Service 已创建: `kubectl get svc -n php-test`
- 检查 NodePort 是否正确: `kubectl get svc php-app -n php-test`
- 检查防火墙是否开放 30080 端口
**MySQL 连接失败**
- 检查 MySQL Pod 是否就绪: `kubectl get pods -n php-test`
- 查看 MySQL 日志: `kubectl logs deployment/mysql -n php-test`
- 确认 ConfigMap 中的数据库配置正确
**镜像更新后未生效**
- 重新构建并导入镜像
- 删除旧的 Pod: `kubectl delete pod -l app=php-app -n php-test`
- Kubernetes 会自动创建新的 Pod
### 本地开发环境
**数据库连接失败**
- 检查 `config.php` 中的数据库配置是否正确
- 确认 MySQL 服务是否正在运行
- 检查数据库用户权限
**页面显示空白**
- 检查 PHP 错误日志
- 确认 PHP 版本是否为 8.0 或更高
- 检查文件权限
**热更新不工作**
- 确保浏览器支持 JavaScript
- 检查浏览器控制台是否有错误
- 尝试清除浏览器缓存
## 📄 许可证
MIT License
## 👨‍💻 开发者
Created with Claude Code