Files

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 自动部署(推荐)

前置条件

步骤 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"

脚本会自动完成:

  1. 构建 Docker 镜像
  2. 推送到私有仓库 registry.u9.net3w.com
  3. 提交代码到 Git
  4. 推送到远程仓库
  5. 创建/更新 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

部署脚本会自动完成以下操作:

  1. 构建 Docker 镜像
  2. 导入镜像到 k3s
  3. 创建命名空间 php-test
  4. 部署 MySQL 数据库(包含持久化存储)
  5. 部署 PHP 应用2个副本
  6. 创建 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
  • 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 文件变化,并在控制台输出变化信息。

📝 使用说明

  1. 访问 index.php 页面
  2. 填写表单(姓名、邮箱为必填项)
  3. 点击"提交数据"按钮
  4. 页面会显示提交结果,并在下方展示最近 5 条提交的数据
  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