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 远程仓库
# 在 Gitea 创建仓库: k3s-configs
# 然后添加远程仓库
git remote add origin https://git.u9.net3w.com/fei/k3s-configs.git
# 首次推送
git push -u origin master
步骤 2: 一键 GitOps 部署
# 执行自动部署脚本(构建镜像 + 推送 + Git 提交 + ArgoCD 配置)
./gitops-deploy.sh
# 或指定镜像标签和提交信息
./gitops-deploy.sh v1.0.0 "Initial release"
脚本会自动完成:
- 构建 Docker 镜像
- 推送到私有仓库
registry.u9.net3w.com - 提交代码到 Git
- 推送到远程仓库
- 创建/更新 ArgoCD Application
步骤 3: 访问应用
部署完成后(约 3 分钟),通过以下地址访问:
https://php.u9.net3w.com
步骤 4: 日常开发流程
# 1. 修改代码
vim index.php
# 2. 重新部署(自动构建、推送、提交)
./gitops-deploy.sh v1.0.1 "Update UI"
# 3. ArgoCD 自动检测并部署(3分钟内)
GitOps 管理命令
# 查看 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 集群:
./deploy.sh
部署脚本会自动完成以下操作:
- 构建 Docker 镜像
- 导入镜像到 k3s
- 创建命名空间
php-test - 部署 MySQL 数据库(包含持久化存储)
- 部署 PHP 应用(2个副本)
- 创建 NodePort Service(端口 30080)
3. 访问应用
部署完成后,通过以下地址访问:
http://localhost:30080
http://<节点IP>:30080
4. 管理命令
# 查看部署状态
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
- Root 密码:
-
PHP 配置: 在
k8s/php-configmap.yaml中配置数据库连接 -
持久化存储: MySQL 数据存储在 PVC 中,重启不会丢失数据
💻 方式二:本地开发环境
1. 环境要求
- PHP 8.0 或更高版本
- MySQL 5.7 或更高版本
- Web 服务器(Apache/Nginx)或 PHP 内置服务器
2. 数据库配置
方法一:使用 SQL 文件创建数据库
mysql -u root -p < schema.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 文件,根据你的环境修改数据库连接信息:
define('DB_HOST', 'localhost'); // 数据库主机
define('DB_NAME', 'test_db'); // 数据库名称
define('DB_USER', 'root'); // 数据库用户名
define('DB_PASS', ''); // 数据库密码
4. 启动项目
使用 PHP 内置服务器(推荐用于开发)
cd /home/fei/k3s/php-test
php -S localhost:8000
然后在浏览器中访问:http://localhost:8000
使用 Apache/Nginx
将项目目录配置为虚拟主机的根目录,然后通过配置的域名访问。
🔥 热更新功能
项目内置了两种热更新方式:
方式一:前端自动检测(已集成)
index.php 中已经集成了 JavaScript 热更新脚本,会每 2 秒检测一次文件变化并自动刷新页面。无需额外配置。
方式二:文件监控脚本(可选)
在另一个终端窗口运行文件监控脚本:
php watch.php
这个脚本会监控项目目录中的 PHP、HTML、CSS、JS 文件变化,并在控制台输出变化信息。
📝 使用说明
- 访问
index.php页面 - 填写表单(姓名、邮箱为必填项)
- 点击"提交数据"按钮
- 页面会显示提交结果,并在下方展示最近 5 条提交的数据
- 修改任何 PHP 文件后,页面会自动刷新(热更新)
🔒 安全特性
- 使用 PDO 预处理语句防止 SQL 注入
- 表单数据验证和过滤
- HTML 输出转义防止 XSS 攻击
- 邮箱格式验证
🛠️ 技术栈
- 后端: PHP 8
- 数据库: MySQL
- 前端: HTML5, CSS3, JavaScript (原生)
- 数据库访问: PDO (PHP Data Objects)
📊 数据库表结构
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