全栈手账 订阅 RSS

用 AI 从 0 开发 PHP7.4 + UniApp + MySQL5.7 项目指南

以 PHP 7.4 + UniApp + MySQL 5.7 为技术栈(目标每分钟约 100 次访问),覆盖需求、架构、数据库设计、前后端开发到部署上线全流程,并标注每环节如何用 AI 提效。

读了 42 分钟 更新于 8 月 5 日

一、项目定位与技术选型

1.1 项目基本盘

项目维度 信息
后端语言 PHP 7.4
前端框架 UniApp(Vue 2 语法,一套代码多端运行)
数据库 MySQL 5.7
Web 服务器 Nginx + PHP-FPM
目标终端 微信小程序 / H5 / App(UniApp 编译)
预计访问量 每分钟约 100 次(约 1.7 QPS)
缓存 Redis 6.x(可选但推荐)

1.2 为什么选这套技术栈

决策点 选择 理由
后端用 PHP 7.4 PHP 7.4 性能比 5.x 提升约 2 倍,类型声明更完善,生态成熟,部署简单
前端用 UniApp UniApp 一套代码出小程序 + H5 + App,降低开发和维护成本
数据库用 MySQL 5.7 MySQL 5.7 JSON 字段支持、生成列、性能优化,足够应对当前量级
加 Redis Redis 缓存热点数据、Session 共享、限流,应对未来增长

1.3 访问量评估

文本
每分钟 100 次访问 ≈ 每秒 1.7 QPS这个量级的特点:- 单机完全扛得住,不需要分布式架构- 瓶颈通常在数据库查询和外部 API 调用,而非 Web 服务器- 重点优化:索引、缓存、连接池,而非横向扩展- 预留 10 倍余量 → 目标支撑 1000 QPS(为增长留空间)

1.4 AI 在项目中的角色定位

误区 正确认知
AI 全自动写完整个项目 AI 是结对开发的助手,逐模块迭代
一次描述所有需求 拆成小任务,每个任务聚焦一个功能
AI 代码直接上线 每行代码需人工审查,尤其是安全逻辑
AI 能记住所有细节 核心约定用文档固化,每次喂给 AI

二、项目架构设计

2.1 整体架构

code
┌─────────────────────────────────────────────────────┐│                    客户端层                          ││  ┌──────────┐  ┌──────────┐  ┌──────────┐          ││  │ 微信小程序 │  │   H5     │  │   App    │          ││  └─────┬────┘  └────┬─────┘  └────┬─────┘          ││        │            │             │                  ││        └────────────┼─────────────┘                  ││                     ▼                                ││              UniApp 统一前端                         │└─────────────────────┬───────────────────────────────┘                      │ HTTPS                      ▼┌─────────────────────────────────────────────────────┐│                   Nginx (80/443)                    ││            反向代理 + 静态资源 + 负载均衡             │└─────────────────────┬───────────────────────────────┘                      │                      ▼┌─────────────────────────────────────────────────────┐│              PHP-FPM (PHP 7.4)                      ││         ┌─────────────────────────┐                 ││         │    业务逻辑层(MVC)     │                 ││         │  Controller → Service → Model            ││         └─────────────────────────┘                 │└──────┬──────────────┬───────────────────────────────┘       │              │       ▼              ▼┌──────────┐   ┌──────────────┐│  Redis   │   │  MySQL 5.7   ││  缓存层   │   │  数据持久层   │└──────────┘   └──────────────┘

2.2 后端目录结构

文本
project/├── app/                     # 应用核心│   ├── controller/          # 控制器│   │   ├── api/             # API 接口│   │   └── admin/           # 后台接口│   ├── service/             # 业务逻辑层│   ├── model/               # 数据模型层│   ├── middleware/          # 中间件(鉴权、限流、日志)│   └── common/              # 公共函数├── config/                  # 配置文件│   ├── database.php│   ├── redis.php│   └── app.php├── route/                   # 路由定义├── runtime/                 # 运行时日志/缓存├── public/                  # Web 根目录│   └── index.php            # 入口文件├── docs/                    # 项目文档(给 AI 看的上下文)│   ├── api.md               # API 文档│   ├── database.md          # 数据库设计文档│   └── convention.md        # 项目开发规范└── vendor/                  # Composer 依赖

2.3 UniApp 前端目录结构

文本
uniapp-project/├── pages/                   # 页面│   ├── index/               # 首页│   ├── user/                # 用户中心│   ├── order/               # 订单│   └── login/               # 登录├── components/              # 公共组件├── api/                     # 接口请求封装│   ├── request.js           # 请求拦截器│   └── modules/             # 按模块拆分├── store/                   # Vuex 状态管理├── utils/                   # 工具函数├── static/                  # 静态资源├── pages.json               # 页面路由配置├── manifest.json            # 应用配置└── App.vue                  # 根组件

三、环境搭建

3.1 开发环境

工具 说明
phpStudy / Laragon Windows 本地集成环境(PHP + Nginx + MySQL)
PhpStorm PHP 后端 IDE
HBuilderX UniApp 官方 IDE(必装)
Navicat MySQL 可视化管理
Redis Desktop Manager Redis 可视化管理
Postman / Apifox API 调试

3.2 PHP 7.4 环境配置要点

ini
; php.ini 关键配置memory_limit = 256Mmax_execution_time = 30upload_max_filesize = 20Mpost_max_size = 20M; OPcache(生产环境必开)opcache.enable=1opcache.memory_consumption=128opcache.max_accelerated_files=10000opcache.revalidate_freq=60

3.3 MySQL 5.7 关键配置

ini
# my.cnf 关键配置[mysqld]# 字符集character-set-server = utf8mb4collation-server = utf8mb4_unicode_ci# 连接数(100 QPS 量级足够)max_connections = 200max_user_connections = 150# InnoDB 配置innodb_buffer_pool_size = 512M    # 服务器内存的 50-70%innodb_log_file_size = 128Minnodb_flush_log_at_trx_commit = 2  # 性能与安全平衡# 慢查询日志slow_query_log = 1slow_query_log_file = /var/log/mysql/slow.loglong_query_time = 1

3.4 Nginx 配置

nginx
server {    listen 80;    server_name api.example.com;    root /var/www/project/public;    location / {        if (!-e $request_filename) {            rewrite ^(.*)$ /index.php?s=/$1 last;            break;        }    }    location ~ \.php$ {        fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;        fastcgi_index index.php;        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;        include fastcgi_params;    }    # 静态资源缓存    location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {        expires 30d;        add_header Cache-Control "public, no-transform";    }}

3.5 用 AI 生成环境配置

提示词示例:

文本
我需要在 CentOS 7 上部署 PHP 7.4 + Nginx + MySQL 5.7 + Redis 的环境。请帮我生成:1. 一键安装的 shell 脚本2. 各软件的配置文件(针对每分钟 100 次访问的小型项目优化)3. 防火墙规则(只开放 80、443、22 端口)注意:MySQL 密码请用变量占位符,不要硬编码。

四、数据库设计

4.1 设计原则

  • 所有表用 InnoDB 引擎、utf8mb4 字符集
  • 每张表必须有自增主键 id
  • 时间字段统一用 create_time / update_time(int 类型存时间戳)
  • 软删除用 delete_time 字段(null 表示未删除)
  • 金额字段用 decimal(10,2),不用 float
  • 状态字段用 tinyint,并在注释中标明各值含义

4.2 核心表设计示例

sql
-- 用户表CREATE TABLE `user` (  `id` int unsigned NOT NULL AUTO_INCREMENT,  `openid` varchar(64) DEFAULT NULL COMMENT '微信openid',  `phone` varchar(20) DEFAULT NULL COMMENT '手机号',  `nickname` varchar(50) DEFAULT NULL COMMENT '昵称',  `avatar` varchar(255) DEFAULT NULL COMMENT '头像',  `status` tinyint NOT NULL DEFAULT '1' COMMENT '1正常 0禁用',  `create_time` int NOT NULL COMMENT '创建时间',  `update_time` int NOT NULL COMMENT '更新时间',  `delete_time` int DEFAULT NULL COMMENT '删除时间',  PRIMARY KEY (`id`),  UNIQUE KEY `uk_openid` (`openid`),  KEY `idx_phone` (`phone`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表';-- 商品/内容表(根据项目调整)CREATE TABLE `product` (  `id` int unsigned NOT NULL AUTO_INCREMENT,  `title` varchar(100) NOT NULL COMMENT '标题',  `description` text COMMENT '描述',  `price` decimal(10,2) NOT NULL COMMENT '价格',  `stock` int NOT NULL DEFAULT '0' COMMENT '库存',  `cover_image` varchar(255) DEFAULT NULL COMMENT '封面图',  `images` json DEFAULT NULL COMMENT '图片组',  `status` tinyint NOT NULL DEFAULT '1' COMMENT '1上架 0下架',  `sort` int NOT NULL DEFAULT '0' COMMENT '排序',  `create_time` int NOT NULL,  `update_time` int NOT NULL,  `delete_time` int DEFAULT NULL,  PRIMARY KEY (`id`),  KEY `idx_status_sort` (`status`, `sort`),  KEY `idx_create_time` (`create_time`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品表';-- 订单表CREATE TABLE `order` (  `id` int unsigned NOT NULL AUTO_INCREMENT,  `order_no` varchar(32) NOT NULL COMMENT '订单号',  `user_id` int NOT NULL COMMENT '用户ID',  `product_id` int NOT NULL COMMENT '商品ID',  `amount` decimal(10,2) NOT NULL COMMENT '订单金额',  `status` tinyint NOT NULL DEFAULT '0' COMMENT '0待支付 1已支付 2已发货 3已完成 4已取消',  `pay_time` int DEFAULT NULL COMMENT '支付时间',  `create_time` int NOT NULL,  `update_time` int NOT NULL,  `delete_time` int DEFAULT NULL,  PRIMARY KEY (`id`),  UNIQUE KEY `uk_order_no` (`order_no`),  KEY `idx_user_id` (`user_id`),  KEY `idx_status` (`status`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订单表';

4.3 索引设计要点

场景 索引策略
列表查询 WHERE status=1 ORDER BY sort, create_time → 联合索引 (status, sort, create_time)
用户维度查询 WHERE user_id=? ORDER BY create_time DESC → 索引 (user_id, create_time)
搜索功能 短关键词用 LIKE 前缀匹配 + 索引;长文搜索考虑全文索引或 Elasticsearch
避免索引失效 不在索引列做运算、函数操作,不用 !=、NOT LIKE

4.4 用 AI 辅助数据库设计

提示词示例:

文本
我要开发一个 [项目类型] 系统,技术栈 PHP 7.4 + MySQL 5.7。核心功能包括:[功能1]、[功能2]、[功能3]。请帮我:1. 设计完整的数据库表结构(包括字段、类型、索引、注释)2. 标注表与表之间的关联关系3. 给出建表 SQL(MySQL 5.7 语法,InnoDB 引擎,utf8mb4)4. 说明每个索引的设计理由约束:- 预计数据量:用户 10 万,订单 100 万- 查询场景:列表分页、用户维度查询、关键词搜索

五、后端 API 开发

5.1 API 设计规范

文本
基础路径:/api/v1/RESTful 风格:GET    /api/v1/products          # 商品列表GET    /api/v1/products/:id      # 商品详情POST   /api/v1/orders            # 创建订单GET    /api/v1/orders            # 订单列表PUT    /api/v1/orders/:id/cancel # 取消订单POST   /api/v1/users/login       # 登录

5.2 统一响应格式

php
<?php// 成功{    "code": 0,    "msg": "success",    "data": {        "id": 1,        "title": "商品名称"    }}// 失败{    "code": 1001,    "msg": "参数错误",    "data": null}// 分页{    "code": 0,    "msg": "success",    "data": {        "list": [...],        "total": 100,        "page": 1,        "page_size": 20    }}

5.3 分层架构代码示例

php
<?php// Controller 层 - 只做参数接收和响应输出class OrderController{    public function create()    {        $data = [            'user_id'    => $this->getUserId(),            'product_id' => (int)input('post.product_id'),            'quantity'   => (int)input('post.quantity', 1),        ];        try {            $orderService = new OrderService();            $orderNo = $orderService->createOrder($data);            return json(['code' => 0, 'msg' => '下单成功', 'data' => ['order_no' => $orderNo]]);        } catch (BusinessException $e) {            return json(['code' => $e->getCode(), 'msg' => $e->getMessage(), 'data' => null]);        }    }}// Service 层 - 核心业务逻辑class OrderService{    public function createOrder(array $data): string    {        // 1. 校验商品        $product = (new ProductModel())->findById($data['product_id']);        if (!$product || $product['status'] != 1) {            throw new BusinessException(2001, '商品不存在或已下架');        }        // 2. 检查库存(用 Redis 防超卖)        $redis = Redis::getInstance();        $stockKey = "product:stock:{$data['product_id']}";        $remain = $redis->hIncrBy($stockKey, 'stock', -$data['quantity']);        if ($remain < 0) {            $redis->hIncrBy($stockKey, 'stock', $data['quantity']); // 回滚            throw new BusinessException(2002, '库存不足');        }        // 3. 创建订单(数据库事务)        Db::startTrans();        try {            $orderNo = generateOrderNo();            $orderData = [                'order_no'   => $orderNo,                'user_id'    => $data['user_id'],                'product_id' => $data['product_id'],                'amount'     => bcmul($product['price'], $data['quantity'], 2),                'status'     => 0,                'create_time'=> time(),                'update_time'=> time(),            ];            Db::table('order')->insert($orderData);            // 扣减数据库库存            Db::table('product')                ->where('id', $data['product_id'])                ->where('stock', '>=', $data['quantity'])                ->dec('stock', $data['quantity'])                ->update();            Db::commit();            return $orderNo;        } catch (\Exception $e) {            Db::rollback();            $redis->hIncrBy($stockKey, 'stock', $data['quantity']); // 回滚 Redis            throw new BusinessException(2003, '下单失败,请重试');        }    }}// Model 层 - 数据访问class ProductModel{    public function findById(int $id): ?array    {        // 先查 Redis 缓存        $cacheKey = "product:detail:{$id}";        $redis = Redis::getInstance();        $cached = $redis->get($cacheKey);        if ($cached) {            return json_decode($cached, true);        }        // 查数据库        $data = Db::table('product')            ->where('id', $id)            ->where('delete_time', null)            ->find();        if ($data) {            $redis->setex($cacheKey, 3600, json_encode($data));        }        return $data;    }}

5.4 用 AI 生成后端代码

提示词示例:

文本
我在开发一个 PHP 7.4 后端项目,不使用框架,自定义 MVC 路由。现在需要实现 [功能名称,如:用户注册登录] 功能。已有约定:- 数据库表结构:[粘贴表结构]- 响应格式:{"code":0,"msg":"","data":{}}- 密码加密:password_hash() / password_verify()- Token 用 JWT请生成:1. Controller 层代码(参数校验 + 调用 Service)2. Service 层代码(业务逻辑)3. Model 层代码(数据库操作)4. 路由配置注意:- 参数校验必须严格- SQL 必须用预处理防注入- 密码不能明文存储- 敏感字段不在响应中返回

六、UniApp 前端开发

6.1 请求封装

javascript
// api/request.jsconst BASE_URL = 'https://api.example.com/api/v1'export function request(options) {  return new Promise((resolve, reject) => {    const token = uni.getStorageSync('token')    uni.request({      url: BASE_URL + options.url,      method: options.method || 'GET',      data: options.data || {},      header: {        'Content-Type': 'application/json',        'Authorization': token ? `Bearer ${token}` : ''      },      success: (res) => {        if (res.data.code === 0) {          resolve(res.data.data)        } else if (res.data.code === 4001) {          // token 失效,跳转登录          uni.removeStorageSync('token')          uni.navigateTo({ url: '/pages/login/login' })          reject(res.data)        } else {          uni.showToast({ title: res.data.msg, icon: 'none' })          reject(res.data)        }      },      fail: (err) => {        uni.showToast({ title: '网络异常', icon: 'none' })        reject(err)      }    })  })}

6.2 按模块封装 API

javascript
// api/modules/product.jsimport { request } from '../request.js'// 商品列表export function getProductList(params) {  return request({    url: '/products',    method: 'GET',    data: params  })}// 商品详情export function getProductDetail(id) {  return request({    url: `/products/${id}`,    method: 'GET'  })}

6.3 页面开发示例

vue
<!-- pages/index/index.vue --><template>  <view class="container">    <!-- 搜索栏 -->    <view class="search-bar">      <input v-model="keyword" placeholder="搜索商品" @confirm="onSearch" />    </view>    <!-- 商品列表 -->    <view class="product-list">      <view        v-for="item in list"        :key="item.id"        class="product-item"        @tap="goDetail(item.id)"      >        <image :src="item.cover_image" mode="aspectFill" class="cover" />        <view class="info">          <text class="title">{{ item.title }}</text>          <text class="price">¥{{ item.price }}</text>        </view>      </view>    </view>    <!-- 加载状态 -->    <view class="loading" v-if="loading">加载中...</view>    <view class="no-more" v-if="!hasMore && list.length > 0">没有更多了</view>  </view></template><script>import { getProductList } from '@/api/modules/product.js'export default {  data() {    return {      keyword: '',      list: [],      page: 1,      pageSize: 20,      hasMore: true,      loading: false    }  },  onLoad() {    this.loadList()  },  onReachBottom() {    // 触底加载更多    if (this.hasMore && !this.loading) {      this.loadList()    }  },  methods: {    async loadList() {      if (this.loading) return      this.loading = true      try {        const data = await getProductList({          keyword: this.keyword,          page: this.page,          page_size: this.pageSize        })        this.list = this.page === 1 ? data.list : [...this.list, ...data.list]        this.hasMore = data.list.length >= this.pageSize        if (this.hasMore) this.page++      } finally {        this.loading = false      }    },    onSearch() {      this.page = 1      this.list = []      this.hasMore = true      this.loadList()    },    goDetail(id) {      uni.navigateTo({ url: `/pages/detail/detail?id=${id}` })    }  }}</script>

6.4 用 AI 生成前端代码

提示词示例:

文本
我在用 UniApp(Vue 2 语法)开发一个 [页面名称] 页面。请帮我生成完整代码,包括 template、script、style 三部分。页面需求:1. [功能描述,如:展示商品列表,支持下拉刷新和触底加载更多]2. [交互描述,如:点击跳转详情页]技术约定:- API 请求用已封装的 request 方法- 样式用 rpx 单位- 列表用 v-for 渲染- 图片用 <image> 标签,mode="aspectFill"接口返回格式:{  "list": [{ "id": 1, "title": "xx", "price": "99.00", "cover_image": "url" }],  "total": 100,  "page": 1,  "page_size": 20}

七、性能优化(每分钟 100 次访问量级)

7.1 优化策略总览

文本
当前量级(1.7 QPS)的优化重点:┌──────────────────────────────────────────────┐│  1. 数据库索引优化        ← 最高优先级        ││  2. Redis 缓存热点数据    ← 立竿见影          ││  3. 接口分页 + 按需返回    ← 减少传输量        ││  4. OPcache 开启          ← PHP 性能翻倍      ││  5. 静态资源 CDN          ← 减轻服务器压力    │└──────────────────────────────────────────────┘不需要做的(过度设计):✗ 微服务化✗ 分库分表✗ 消息队列✗ 多机负载均衡(单机足够)

7.2 数据库优化

sql
-- 1. 慢查询排查-- 开启慢查询日志,long_query_time = 1s-- 用 EXPLAIN 分析慢查询执行计划-- 2. 列表查询优化(避免深分页)-- ❌ 慢:深分页会扫描大量行SELECT * FROM product ORDER BY id LIMIT 100000, 20;-- ✅ 快:用游标分页(记住上一页最后一条 id)SELECT * FROM product WHERE id > 100000 ORDER BY id LIMIT 20;-- 3. 避免 SELECT *,只查需要的字段-- ❌ 慢SELECT * FROM product WHERE status = 1;-- ✅ 快SELECT id, title, price, cover_image FROM product WHERE status = 1;

7.3 Redis 缓存策略

php
<?php// 缓存策略模式// 1. 详情页缓存(Cache-Aside)function getProductDetail($id) {    $cacheKey = "product:detail:{$id}";    $data = $redis->get($cacheKey);    if ($data) return json_decode($data, true);    $data = Db::table('product')->where('id', $id)->find();    if ($data) {        $redis->setex($cacheKey, 3600, json_encode($data)); // 缓存1小时    }    return $data;}// 2. 列表缓存(带页码)function getProductList($page, $pageSize) {    $cacheKey = "product:list:{$page}:{$pageSize}";    $data = $redis->get($cacheKey);    if ($data) return json_decode($data, true);    $data = Db::table('product')        ->where('status', 1)        ->order('sort', 'desc')        ->page($page, $pageSize)        ->select();    $redis->setex($cacheKey, 300, json_encode($data)); // 缓存5分钟    return $data;}// 3. 缓存更新(写入时清除)function updateProduct($id, $data) {    Db::table('product')->where('id', $id)->update($data);    $redis->del("product:detail:{$id}");           // 清详情缓存    $redis->del("product:list:*");                   // 清列表缓存(用 keys 扫描或维护 key 集合)}

7.4 接口优化

优化点 做法 效果
分页 每页 20 条,用游标分页避免深分页 减少 DB 扫描
字段精简 列表接口只返回必要字段 减少传输和内存
批量接口 多个简单查询合并为一个接口 减少请求次数
图片懒加载 UniApp 用 lazy-load 属性 减少首屏加载时间
Gzip 压缩 Nginx 开启 gzip on 减少传输体积

7.5 Nginx 性能配置

nginx
# gzip 压缩gzip on;gzip_min_length 1k;gzip_comp_level 6;gzip_types text/plain application/json application/javascript text/css;# 客户端缓存location ~* \.(js|css|png|jpg|jpeg|gif|svg|ico)$ {    expires 30d;    add_header Cache-Control "public, immutable";}# PHP-FPM 调优(每分钟 100 次访问)# php-fpm.confpm = dynamicpm.max_children = 20       # 每个进程约 30MB,20 个 = 600MBpm.start_servers = 5pm.min_spare_servers = 2pm.max_spare_servers = 8

八、安全设计

8.1 安全清单

安全项 措施
SQL 注入 全部用预处理语句(PDO / 查询构造器)
XSS 输出时转义 htmlspecialchars(),前端用 v-text 而非 v-html
CSRF Token 校验 + SameSite Cookie
越权访问 每个接口校验当前用户是否有权操作该资源
文件上传 校验 MIME 类型 + 重命名 + 存储到非 Web 目录
接口防刷 Redis 限流(如每用户每分钟最多 60 次请求)
敏感数据 密码 password_hash(),手机号脱敏显示,配置文件不提交 Git
HTTPS 全站 HTTPS,Let's Encrypt 免费证书

8.2 接口限流示例

php
<?php// 基于 Redis 的滑动窗口限流function rateLimit($userId, $maxRequests = 60, $window = 60) {    $redis = Redis::getInstance();    $key = "rate_limit:{$userId}";    // 当前时间戳(毫秒)    $now = microtime(true) * 1000;    $windowStart = $now - $window * 1000;    // 移除窗口外的记录    $redis->zRemRangeByScore($key, 0, $windowStart);    // 当前窗口内请求数    $count = $redis->zCard($key);    if ($count >= $maxRequests) {        throw new BusinessException(4290, '请求过于频繁,请稍后再试');    }    // 记录本次请求    $redis->zAdd($key, $now, $now . '_' . uniqid());    $redis->expire($key, $window);}

九、部署上线

9.1 服务器配置建议

配置项 最低配置 推荐配置
CPU 2 核 4 核
内存 4 GB 8 GB
磁盘 50 GB SSD 100 GB SSD
带宽 5 Mbps 10 Mbps
系统 CentOS 7 / Ubuntu 20.04 Ubuntu 22.04

9.2 部署流程

文本
1. 服务器初始化   ├── 创建非 root 用户   ├── 配置 SSH 密钥登录   ├── 关闭密码登录   └── 配置防火墙(ufw / firewalld)2. 安装运行环境   ├── PHP 7.4 + FPM + OPcache   ├── Nginx   ├── MySQL 5.7   ├── Redis 6   └── Composer3. 部署代码   ├── Git clone 代码到 /var/www/project   ├── composer install --no-dev   ├── 导入数据库 SQL   ├── 配置 .env(数据库密码、Redis 密码、JWT 密钥)   └── 设置目录权限(runtime 目录可写)4. 配置 Nginx   ├── 配置站点   ├── 配置 HTTPS(Let's Encrypt)   └── 配置反向代理 PHP-FPM5. 部署 UniApp   ├── HBuilderX 编译各端   ├── 小程序:上传到微信开发者工具 → 提交审核   ├── H5:编译后上传到 Nginx 静态目录   └── App:打包 apk/ipa 上架

9.3 用 AI 生成部署脚本

提示词示例:

文本
请帮我生成一个 CentOS 7 的一键部署 Shell 脚本,需要:1. 安装 PHP 7.4 + Nginx + MySQL 5.7 + Redis 62. 创建项目目录 /var/www/project3. 配置 PHP-FPM(pm.max_children=20)4. 配置 MySQL(root 密码用变量,创建项目数据库和用户)5. 配置 Nginx 站点(域名用变量,反向代理 PHP-FPM)6. 开启防火墙 80/443/22 端口要求:- 脚本可重复执行不出错(幂等)- 敏感信息用环境变量传入- 每步输出日志

十、AI 开发全流程提示词速查

10.1 需求阶段

文本
你是一位资深产品经理。我想用 PHP 7.4 + UniApp + MySQL 5.7 开发一个 [项目类型]。目标用户:[描述]核心功能:[列举]请输出:1. 用户角色和需求清单2. MVP 功能优先级表(P0/P1/P2)3. 数据库表设计(含字段、索引)4. API 接口清单

10.2 数据库阶段

文本
基于以下需求,设计 MySQL 5.7 数据库:[粘贴需求]要求:- InnoDB 引擎,utf8mb4 字符集- 预计数据量:[描述]- 给出建表 SQL + 索引设计理由- 考虑未来扩展(预留字段或 JSON 字段)

10.3 后端开发阶段

文本
用 PHP 7.4 实现 [功能名称] 接口。已有表结构:[粘贴]已有公共函数:[说明]要求:- Controller / Service / Model 三层分离- 参数校验、权限校验、错误处理- 用预处理防 SQL 注入- 生成完整可运行代码 + 注释

10.4 前端开发阶段

文本
用 UniApp(Vue 2)实现 [页面名称] 页面。接口返回:[粘贴格式]UI 参考:[描述或截图]要求:- template + script + style 完整代码- 支持下拉刷新、触底加载- 响应式布局,rpx 单位- 空状态、加载状态处理

10.5 调试排错阶段

文本
我遇到以下问题:现象:[描述]相关代码:[粘贴]报错信息:[粘贴]环境:PHP 7.4 + MySQL 5.7 + UniApp请分析:1. 可能的原因(按可能性排序)2. 每个原因的排查方法3. 修复代码

10.6 优化阶段

文本
我的项目当前每分钟约 100 次访问,想为未来 10 倍增长做准备。当前架构:PHP 7.4 + MySQL 5.7 + Redis + Nginx慢查询日志:[粘贴]瓶颈分析:[描述]请给出:1. 优化优先级排序(ROI 从高到低)2. 每项优化的具体方案和代码3. 优化前后的性能对比预估

十一、项目开发节奏建议

11.1 MVP 开发周期(参考)

阶段 周期 核心任务 AI 辅助
需求 + 设计 1 周 需求文档、数据库设计、API 设计 AI 生成设计文档
环境搭建 2 天 开发/测试环境、Git 仓库 AI 生成部署脚本
后端核心 API 1-2 周 用户、商品、订单核心接口 AI 生成 CRUD 代码
前端核心页面 1-2 周 首页、列表、详情、订单、登录 AI 生成页面代码
联调 + 修 Bug 1 周 前后端联调、边界测试 AI 辅助排错
上线部署 2 天 服务器部署、域名、HTTPS AI 生成运维脚本

11.2 每日 AI 协作流程

文本
 morning:规划   ├── 回顾昨天的进度   ├── 确定今天要做的 3 个任务   └── 把任务拆成 AI 能理解的粒度 working:执行   ├── 每个任务先写提示词,让 AI 生成代码   ├── 审查 AI 代码:逻辑、安全、边界   ├── 本地测试通过后提交 Git   └── 记录 AI 表现不好的地方,优化提示词 evening:总结   ├── 更新项目文档(给 AI 用的上下文)   ├── 记录踩坑日志   └── 规划明天任务

十二、常见踩坑与解决方案

坑 现象 解决方案
UniApp 跨端样式不兼容 小程序正常,H5 错位 用条件编译 #ifdef + rpx 单位
PHP 时区错误 时间差 8 小时 date_default_timezone_set('PRC')
MySQL emoji 存储失败 写入报错 确认表和连接都是 utf8mb4
微信支付回调失败 收不到回调 Nginx 配置 HTTPS,回调地址不带端口号
Redis 连接耗尽 接口超时 用连接池或及时 close(),调大 maxclients
UniApp 包体积超限 小程序上传失败 分包加载,图片压缩,移除无用依赖
AI 生成的代码有硬编码 安全隐患 审查时全局搜索密码、密钥、API Key
AI 用了 PHP 8 语法 运行报错 提示词明确指定 PHP 7.4,检查 match、命名参数等

本文档覆盖 PHP 7.4 + UniApp + MySQL 5.7 技术栈的 AI 辅助开发全流程,适用于每分钟约 100 次访问量级的项目。核心原则:AI 提速、人工把关、文档固话、小步迭代。

前端、后端、部署、客服都是我一个人。写这里的东西都是真踩过的坑,不是抄来的教程。