个人博客 / 作品集 / 相册 / 简历 / 联系方式 一体化小程序
架构:WordPress 后台 + 2 个 WordPress 插件 + 微信小程序前端,小程序预览:https://mp.weixin.qq.com/s/jlKUyh_KQMDMO_XtsRt4Gg
chenliyun/
├── wordpress-probe.php # WP 环境探针(上传到 WP 根目录用于诊断)
├── miniprogram/ # 微信小程序前端(原生,非 uni-app)
│ ├── app.js / app.json / app.wxss
│ ├── project.config.json # 微信开发者工具项目配置
│ ├── sitemap.json
│ ├── theme.json # 深色模式主题
│ ├── pages/ # 11 个页面
│ │ ├── home/ # 首页(轮播+卡片+工具栏+公告)
│ │ ├── blog/ # 笔记列表
│ │ ├── blog-detail/ # 笔记详情
│ │ ├── portfolio/ # 作品列表
│ │ ├── portfolio-detail/ # 作品详情
│ │ ├── diary/ # 日记列表
│ │ ├── diary-detail/ # 日记详情
│ │ ├── gallery/ # 相册瀑布流
│ │ ├── about/ # 关于(简历)
│ │ ├── contact/ # 联系
│ │ └── webview/ # 通用 webview
│ ├── components/ # 2 个组件
│ │ ├── nav-bar/ # 自定义导航栏
│ │ └── empty-state/ # 空状态
│ ├── custom-tab-bar/ # 自定义 tabBar(4 个 tab)
│ ├── images/ # 静态图片(tabBar 图标、tab icon 等)
│ └── utils/
│ ├── config.js # 全局配置(域名 / API Key / 环境切换)
│ ├── api.js # REST API 封装层(680 行)
│ └── util.js
├── wp-plugin-api/ # 【插件 1】小程序 API 插件
│ └── chenliyun-api.php # 提供 /wp-json/cl/v1/* 16 个端点
└── wp-plugin-admin-v5/ # 【插件 2】后台管理面板插件
└── chenliyun-admin.php # 后台管理界面(文章/相册/作品/简历/首页)
| 项 | 值 |
|---|---|
| 小程序 AppID | wxf7166b58e9a89778(在 project.config.json) |
| 生产 API 域名 | https://api.xxx.cn |
| REST 前缀 | /wp-json/cl/v1 |
| API 鉴权 | X-CL-Key: <32 位 Key>(写接口) |
| GET 限流 | 60 次/分钟/IP |
| 写限流 | 30 次/分钟/IP |
| 插件版本 | API v1.3.1 / Admin v5.5.1 |
| 数据库 | MySQL 5.7+(utf8mb4) |
| PHP 版本 | 7.4+(推荐 8.0+) |
| 角色 | 配置 |
|---|---|
| 生产服务器 | 1 vCPU / 1 GB RAM / 20 GB SSD(个人项目足够) |
| 操作系统 | CentOS 7+ / Ubuntu 20.04+ / Debian 11+ / 宝塔 Linux |
| 域名 | 1 个(需 ICP 备案 + HTTPS 证书) |
Nginx 1.20+ 或 Apache 2.4+
PHP 7.4+(推荐 8.0+)
MySQL 5.7+ 或 MariaDB 10.3+
HTTPS 证书(Let's Encrypt 免费 / 阿里云 / 腾讯云)
| 扩展 | 必需 | 用途 |
|---|---|---|
pdo_mysql |
✓ | WordPress 数据库连接 |
mysqli |
✓ | WordPress 数据库连接 |
mbstring |
✓ | 字符串处理 |
openssl |
✓ | HTTPS、密码加密 |
curl |
✓ | 远程请求 |
json |
✓ | REST API 序列化 |
gd 或 imagick |
✓ | 图片缩略图(媒体上传) |
zip |
✓ | 插件/主题更新 |
xml |
✓ | WordPress 核心 |
fileinfo |
✓ | 文件类型检测 |
exif |
- | 照片 EXIF 信息(相册推荐) |
upload_max_filesize = 20M
post_max_size = 20M
memory_limit = 256M
max_execution_time = 60
max_input_vars = 3000
date.timezone = Asia/Shanghaiserver {
listen 443 ssl http2;
server_name api.lren.cn;
root /var/www/wordpress;
index index.php;
ssl_certificate /etc/nginx/ssl/lren.cn.pem;
ssl_certificate_key /etc/nginx/ssl/lren.cn.key;
# 允许上传大文件
client_max_body_size 20M;
# 静态资源直接由 Nginx 服务
location ~* \.(jpg|jpeg|png|gif|ico|css|js|svg|woff|woff2|ttf)$ {
expires 30d;
access_log off;
add_header Cache-Control "public, max-age=2592000";
}
# WordPress 伪静态(固定链接)
location / {
try_files $uri $uri/ /index.php?$args;
}
# PHP 处理
location ~ \.php$ {
fastcgi_pass unix:/run/php/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# 禁止访问敏感文件
location ~ /\.(ht|git) { deny all; }
}微信小程序必须 HTTPS,
api.lren.cn域名需在小程序后台配置「request 合法域名」和「uploadFile 合法域名」。
- 宝塔面板 → 软件商店 → 安装 Nginx 1.22、PHP 8.0、MySQL 5.7
- PHP → 设置 → 安装扩展:
pdo_mysql、mysqli、mbstring、openssl、curl、fileinfo、exif、zip - 网站 → 添加站点:
- 域名:
api.xxx.cn - 根目录:
/www/wwwroot/api.xxx.cn - PHP 版本:8.0
- 数据库:新建一个(记下数据库名/用户名/密码)
- 域名:
- SSL → Let's Encrypt → 签发证书 → 强制 HTTPS
- 浏览器访问
https://api.xxx.cn,按向导安装 WordPress- 数据库信息:填上一步的
- 站点标题:陈李云的小程序
- 管理员账号:admin / <强密码>
⚠️ 不要勾选「对搜索引擎可见性」
# CentOS 7 示例
yum install -y nginx php php-fpm php-mysqlnd php-mbstring php-gd php-curl php-xml php-zip
systemctl enable nginx php-fpm mysqld
# 创建数据库
mysql -uroot -e "CREATE DATABASE wp_chenliyun DEFAULT CHARSET utf8mb4;"
mysql -uroot -e "CREATE USER 'wpuser'@'localhost' IDENTIFIED BY 'your_strong_pass';"
mysql -uroot -e "GRANT ALL ON wp_chenliyun.* TO 'wpuser'@'localhost';"
# 下载 WordPress
cd /var/www
wget https://wordpress.org/latest.tar.gz
tar -xzf latest.tar.gz
mv wordpress api.lren.cn
chown -R nginx:nginx api.lren.cn
# 浏览器访问完成 wp-config.php进入 WP 后台 → https://api.xxx.cn/wp-admin/
设置 → 固定链接 → 自定义结构:/%postname%/ → 保存
不设置会导致 REST API 路由失效
设置 → 常规:
- 时区:
上海 - 日期格式:
Y-m-d - 时间格式:
H:i
设置 → 媒体:
- 自动裁剪:不勾(避免大文件多份)
- 缩略图尺寸:宽 600、高 0、中等大小宽 1080
// wp-config.php 添加
define('WPCOM_SITE_ID', '');- 把
wp-plugin-api/整个目录上传到wp-content/plugins/,重命名为chenliyun-api - WP 后台 → 插件 → 启用「小程序 API」
- 激活时会自动:
- 创建 9 张自定义表(
cl_photo_categories等) - 生成 32 位 API Key 并显示在顶部黄色提示框
- 创建 9 张自定义表(
- 复制 API Key → 后续填到小程序
config.js - 启用 REST API 路由到
/wp-json/cl/v1/*
- 把
wp-plugin-admin-v5/整个目录上传到wp-content/plugins/chenliyun-admin/ - WP 后台 → 插件 → 启用「陈李云小程序控制面板」
- 激活后左侧菜单出现「小程序管理」入口
- 进入后初始化数据:
- 分类管理:自动同步 WordPress 原生分类到自定义表
- 首页配置:填入轮播、卡片、公告、工具栏
- 简历管理:填入个人简介、经历、技能分组
- 如提示「缺少自定义表」→ WP 后台 → 插件 → 停用「小程序 API」→ 重新启用
# 上传探针文件
scp wordpress-probe.php root@api.lren.cn:/var/www/api.lren.cn/
# 访问探针
curl "https://api.xxx.cn/wordpress-probe.php?token=chenliyun2026" | head -100探针会返回 JSON:服务器环境、WP 版本、数据库表、插件列表、REST 端点、自定义表是否齐全。
⚠️ 正式上线后删除wordpress-probe.php(暴露 token 风险)
微信开发者工具 → Stable 版
- 开发者工具 → 导入项目
- 目录:选择本仓库
miniprogram/ - AppID:填 你自己的 AppID(如
wx1234567890abcdef) - 项目名称:你的小程序名称
⚠️ 如果只是本地测试原项目,用wxf7166b58e9a89778;如果要发布自己的小程序,必须用你自己申请的 AppID
此文件包含所有可配置项,只需改这一个文件:
// ===== 小程序基本信息 =====
const APP_NAME = '你的小程序名称' // 小程序名称
const AUTHOR_NAME = '你的姓名' // 作者姓名
const AUTHOR_TITLE = '你的职位' // 职位头衔
const AUTHOR_TAG = '你的个性签名' // 个性签名
const AUTHOR_LOCATION = '你的城市' // 所在地
const DEFAULT_AVATAR = '/images/avatar.jpg' // 默认头像(放 miniprogram/images/ 下)
// ===== 联系方式(显示在简历页)=====
const AUTHOR_EMAIL = 'your@email.com'
const AUTHOR_PHONE = ''
const AUTHOR_WECHAT = ''
const AUTHOR_HOMETOWN = ''
// ===== 公众号配置 =====
const MP_NAME = '你的公众号名称' // 公众号名称
const MP_TEXT = '欢迎关注公众号' // 首页公众号提示文字
// ===== API 配置 =====
const API_KEY = '你的32位APIKey' // ← 从 WP 后台复制
const PROD_API_HOST = 'https://你的域名' // ← 你的 WordPress 域名
const PROD_IMG_HOST = 'https://你的域名' // ← 通常与 API 域名相同其他配置项(如
THEME_COLOR、TOOL_ICONS)详见config.js注释
将 miniprogram/images/ 下的图片替换为你自己的:
| 图片 | 用途 | 建议尺寸 |
|---|---|---|
vajra-bg.jpg |
默认头像、Hero 背景 | 1080×1920 px |
tab-home.png / tab-home-active.png |
首页 Tab 图标 | 81×81 px |
tab-blog.png / tab-blog-active.png |
笔记 Tab 图标 | 81×81 px |
tab-portfolio.png / tab-portfolio-active.png |
作品 Tab 图标 | 81×81 px |
tab-gallery.png / tab-gallery-active.png |
相册 Tab 图标 | 81×81 px |
doc.png / kefu.png / about.png / attention.png / share.png |
工具栏图标 | 108×108 px |
- 微信公众平台 → 开发 → 开发管理 → 开发设置
- 服务器域名 → request 合法域名:
https://api.xxx.cn - 服务器域名 → uploadFile 合法域名:
https://api.xxx.cn - 服务器域名 → downloadFile 合法域名:
https://api.xxx.cn
不填会报
request:fail url not in domain list
微信开发者工具 → 详情 → 本地设置:
- ☑️ 不校验合法域名
- ☑️ 不校验 TLS 版本
- 微信开发者工具 → 点击「上传」→ 版本号
1.0.0→ 上传 - 微信公众平台 → 版本管理 → 提交审核
- 类目建议选:工具 → 效率
- 审核通过后点击「发布」
如果你想让别人用自己的 AppID 发布这套小程序,只需 5 步:
- 微信公众平台 → 注册小程序
- 选择类目(建议:工具 → 效率 / 教育 → 校园助手)
- 记下 AppID(如
wx1234567890abcdef)
打开 miniprogram/utils/config.js,修改以下配置项:
const APP_NAME = '你的小程序名称'
const AUTHOR_NAME = '你的姓名'
const AUTHOR_TITLE = '你的职位'
const AUTHOR_TAG = '你的个性签名'
const AUTHOR_LOCATION = '你的城市'
const DEFAULT_AVATAR = '/images/avatar.jpg'
const AUTHOR_EMAIL = 'chenliyun@88.com'
const MP_NAME = '你的公众号名称'
const MP_TEXT = '欢迎关注公众号'
const API_KEY = '你的32位APIKey'
const PROD_API_HOST = 'https://你的域名'将 miniprogram/images/ 下的所有图片替换为自己的:
- 头像 / Tab 图标 / 工具栏图标
- 建议用 tinypng.com 压缩后再替换
{
"appid": "wx你的AppID", // ← 改成你的 AppID
...
}- 微信公众平台 → 开发 → 开发管理 → 服务器域名 → 填你的域名
- 微信开发者工具 → 上传 → 版本号
1.0.0 - 微信公众平台 → 版本管理 → 提交审核
所有端点前缀:https://api.xxx.cn/wp-json/cl/v1
| 端点 | 方法 | 鉴权 | 用途 |
|---|---|---|---|
/mp/home |
GET | - | 首页所有数据(轮播+卡片+工具栏+公告+简历概览) |
/mp/articles |
GET | - | 笔记列表(支持 ?category=&page=&per_page=) |
/mp/articles/{id} |
GET | - | 笔记详情 |
/mp/article-categories |
GET | - | 笔记分类(带排序/可见性) |
/mp/photo-categories |
GET | - | 相册分类(带排序/可见性) |
/mp/photos |
GET | - | 相册照片(支持 ?category_id=&per_page=&page=) |
/mp/portfolio-categories |
GET | - | 作品分类(带排序/可见性) |
/mp/resume |
GET | - | 简历完整数据(基础信息+经历+技能) |
/mp/articles/{id}/comments |
GET | - | 笔记评论列表 |
/mp/articles/{id}/like |
POST | 🔑 | 点赞(写接口,需 X-CL-Key) |
/mp/articles/{id}/comments |
POST | 🔑 | 提交评论(写接口) |
🔑 = 写接口必须带 X-CL-Key header
响应统一格式:
{ "code": 0, "msg": "ok", "data": {...} }code: 0 成功,非 0 失败(msg 含原因)
插件激活时自动创建以下表({prefix} = WP 表前缀,默认 wp_):
| 表名 | 用途 |
|---|---|
{prefix}cl_photo_categories |
相册分类(wp_term_id, color, sort_order, visible, slug) |
{prefix}cl_photos |
相册照片(wp_attachment_id, category_id, location, sort_order, taken_at) |
{prefix}cl_portfolio_categories |
作品分类(字段同上) |
{prefix}cl_portfolio |
作品(post_id, cover, summary, content, gallery) |
{prefix}cl_resume |
简历(基础信息+experiences+skills,存 JSON) |
{prefix}cl_home_config |
首页配置(key-value 存储:banner / cards / tools / announcement) |
{prefix}cl_settings |
全局设置(站点名、备案号、联系方式) |
{prefix}cl_diaries |
日记 |
{prefix}cl_comments |
笔记评论 |
{prefix}cl_article_categories |
笔记分类扩展(颜色、排序、可见性) |
表结构管理:
- 升级:插件
cl_api_upgrade_check自动dbDelta()增量补字段 - 备份:
mysqldump -uwpuser -p wp_chenliyun | gzip > backup_$(date +%F).sql.gz - 恢复:
gunzip < backup.sql.gz | mysql -uwpuser -p wp_chenliyun
| 日志 | 路径 |
|---|---|
| Nginx 访问日志 | /var/log/nginx/access.log |
| Nginx 错误日志 | /var/log/nginx/error.log |
| PHP-FPM 错误日志 | /var/log/php-fpm/error.log |
| WordPress 调试日志 | wp-content/debug.log(需 WP_DEBUG_LOG = true) |
| 插件探针日志 | 临时上传 wordpress-probe.php |
// wp-config.php
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false); // 不在前台显示# 每日自动备份 crontab
0 3 * * * mysqldump -uwpuser -p'pass' wp_chenliyun | gzip > /backup/db_$(date +\%F).sql.gz
0 4 * * * tar -czf /backup/wpfiles_$(date +\%F).tar.gz /var/www/api.lren.cn/wp-content/uploads# 1. 改完本地代码后
# 2. 上传插件
scp -r wp-plugin-api/chenliyun-api.php root@api.lren.cn:/var/www/api.lren.cn/wp-content/plugins/chenliyun-api/
scp -r wp-plugin-admin-v5/chenliyun-admin.php root@api.lren.cn:/var/www/api.lren.cn/wp-content/plugins/chenliyun-admin/
# 3. 微信开发者工具点「上传」→ 公众平台提交审核| 症状 | 排查 |
|---|---|
| 小程序空白 | 微信开发者工具 Network 看请求 → 看 https://api.xxx.cn 是否 200 |
报 url not in domain list |
微信公众平台 → 开发设置 → 配置合法域名 |
报 403 API Key 无效 |
小程序 config.js 的 API_KEY 与 WP 后台生成的对不上 |
报 429 请求过于频繁 |
默认 60 次/分钟,超出需等待;可在 cl_api.php 调 CL_API_RATE_LIMIT_DEFAULT |
报 Error: timeout |
检查域名是否可访问、是否 HTTPS、是否勾选「不校验合法域名」 |
| 后台菜单不显示 | 确认是管理员身份登录;插件未启用 → 重新启用 |
| 自定义表不存在 | WP 后台 → 插件 → 停用「小程序 API」→ 重新启用 |
| 固定链接 404 | 设置 → 固定链接 → /%postname%/;Nginx 配置需含 try_files $uri $uri/ /index.php?$args; |
| 媒体无法上传 | 检查 wp-content/uploads 目录权限 chown -R nginx:nginx uploads |
| 探针返回 404 | 探针文件未上传或未在 WP 根目录 |
- WordPress 6.x(核心)
- PHP 7.4+(OOP,hook 系统)
- MySQL 5.7+(自定义表 + 原生 wp_posts / wp_terms)
- WordPress REST API(自定义 namespace
cl/v1)
- 微信小程序原生(非 uni-app / Taro)
- 基础库 3.16.1
- ES6+(async/await、箭头函数、解构)
- 自定义组件(nav-bar、empty-state)
- 自定义 tabBar
- 深色模式(
theme.json)
- 主色:
#2563EB(蓝色) - 背景:
#F8FAFC(浅灰) - 卡片圆角:10px
- 间距节奏:4/8/12/16/24dp
| 日期 | 改动 |
|---|---|
| 2026-07-04 ~ 07-05 | 后台分类过滤、相册分类修复、显示/隐藏、技能分组、API 端点重写 |
| 2026-07-05 14:00 | 后台技能分组 UI 重构(嵌套结构、组内多技能) |
| 2026-07-05 | 插件 header 信息统一(Plugin URI: jpgbit,Author URI: lren.cn) |
- 主页:https://www.lren.cn
- 邮箱:chenliyun@88.com
- 公众号:运维记
- GitHub:https://github.com/jpgbit
用别人的 AppID 发布时,只需改以下内容:
| 文件 | 修改项 |
|---|---|
miniprogram/utils/config.js |
所有配置项(APP_NAME / AUTHOR_NAME / API_KEY / PROD_API_HOST 等) |
miniprogram/project.config.json |
"appid": "wx你的AppID" |
miniprogram/images/ |
替换所有图片(头像、Tab 图标、工具栏图标) |
- 在你的服务器安装 WordPress + 2 个插件
- 从 WP 后台复制 API Key 填入
config.js - 微信公众平台配置你的域名
- 微信开发者工具导入项目(用你的 AppID)
- 上传代码 → 版本号 1.0.0
- 微信公众平台提交审核
部署完成后,删除 wordpress-probe.php 以免暴露 token。