# 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 -n php-test` - 查看 Pod 日志: `kubectl logs -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