文档说明
看店通支持私有化部署到自有服务器,便于数据由企业自行保管。可将系统部署在云服务器或本地机房。本文说明部署环境要求、安装步骤及性能优化建议。
一、环境要求
- 操作系统:Linux(推荐 CentOS 7+、Ubuntu 18.04+)
- Web 服务:Nginx 或 Apache
- PHP:7.4+ 或 8.0+,需扩展:pdo、pdo_mysql、redis、json、mbstring、curl、openssl
- 数据库:MySQL 5.7+ 或 MariaDB 10.3+
- Redis:5.0+,用于缓存与队列
服务器配置建议:日订单量 1000 单以内用 2 核 4G 起步;1000 至 1 万单建议 4 核 8G,并把 MySQL 与 Redis 拆到独立实例;1 万单以上需要按下文第七节做读写分离与多实例部署。存储空间按商品图片与订单附件预估,至少预留 50GB,并对磁盘使用率设置 80% 告警——磁盘写满会直接导致数据库停止写入,是私有化部署里较常见的事故。
二、安装步骤
- 上传源码至服务器,建议使用
scp或rsync,不要用 FTP 明文传输。 - 配置
.env文件中的数据库连接、Redis 连接与应用密钥。文件权限设为 600,属主设为运行 Web 服务的用户,其他用户不可读。 - 配置 Nginx 虚拟主机,
root指向public目录而不是项目根目录,避免源码与配置文件被直接访问。 - 申请并部署 SSL 证书,配置 HTTP 到 HTTPS 的 301 跳转。微信小程序只接受 HTTPS 接口,这一步不能省。
- 通过浏览器访问执行安装向导,完成数据库初始化与管理员账号创建。
-
安装完成后立即删除或重命名安装目录,并确认
install.lock已生成。安装入口暴露在公网等同于把数据库交给别人。 - 配置 crontab 定时任务,处理订单超时关闭、数据统计、对账等调度逻辑。
- 配置队列进程并用 Supervisor 守护,确保进程异常退出后自动拉起。
三、Nginx 配置要点
需要配置伪静态,将不存在的路径统一转发到 index.php;开启 gzip 压缩(对 HTML、CSS、JS、JSON 生效,图片不用压);对静态资源设置长缓存头并配合文件名哈希做版本控制。
生产环境还要收紧三项限制:client_max_body_size 按实际需要设置(一般 20MB 足够,设得过大会给上传攻击留空间);fastcgi_read_timeout 设为 60 秒,避免慢请求堆积耗尽 PHP-FPM 进程池;隐藏
server_tokens,不向外暴露 Nginx 版本号。上传目录必须禁止执行 PHP,否则一个图片上传漏洞就能变成远程代码执行。
四、性能优化
- Redis 缓存:缓存商品详情、系统配置、会员等级等热点数据,并为每类数据设置合理的过期时间与缓存击穿保护。
- CDN 加速:图片、CSS、JS 全部走 CDN,源站只处理动态请求,这一项通常能把首屏时间降低一半以上。
-
数据库索引:对订单表的
created_at、updated_at、status、member_id建组合索引;索引不是越多越好,写入密集的表上每个多余索引都在拖慢下单。 - PHP OPcache:生产环境开启 OPcache 并关闭
validate_timestamps,发版时主动清理缓存。 - 慢查询日志:把阈值设为 1 秒,每周分析一次 Top 10 慢查询,这是投入产出比最高的优化手段。
做优化前请先定位瓶颈,不要凭感觉加机器。典型的判断方法是:CPU 长期高位说明是计算或序列化问题;IO 等待高说明是数据库或磁盘问题;两者都不高但响应慢,多半卡在外部接口调用上。
五、备份与监控
数据库每日全量备份加每小时增量备份,保留至少 7 天,并且异地存放一份。最关键的一点常被忽略:每月做一次恢复演练,把备份真实还原到一台测试机上跑通。没有验证过的备份不能算备份,很多团队是在真正需要恢复时才发现备份文件是空的。
监控至少覆盖五个维度:CPU、内存、磁盘使用率与 IO、网络流量、应用错误率。告警阈值建议设为磁盘 80%、内存 85%、错误率 1%、接口 P99 响应时间 2 秒。告警要能真正送达到值班人手机,只发到没人看的邮箱等于没有监控。
六、升级与回滚
升级前完整备份数据库与代码,并确认备份可恢复。升级流程建议是:先在测试环境跑一遍并记录耗时,再选择凌晨窗口执行,执行前挂出维护页面。数据库结构变更要与代码发布分离——先发布向下兼容的结构变更(只加字段不删字段),观察一天无异常后再发布使用新字段的代码,这样任一环节出问题都能单独回滚。
回滚预案必须在升级前就写好并演练过,内容包括:代码回退到哪个版本、数据库是否需要回滚以及如何回滚、回滚的决策人是谁、最晚什么时间点必须决定回滚。升级后按下单、支付、发货、退款四条核心链路各跑一单真实数据再撤掉维护页面。
七、高可用与扩容
高并发场景按这个顺序演进:先做 MySQL 主从复制与读写分离,把报表类查询引到从库;再把应用层拆成多实例挂到负载均衡后面,注意会话要外置到 Redis,否则用户会在实例之间掉登录态;Redis 配置哨兵或集群模式消除单点。
扩容时容易踩的坑是配置没有同步调整:数据库连接池大小、队列消费者数量、PHP-FPM 的
pm.max_children
都要按实例数重新计算,否则加了机器反而把数据库连接数打满。定时任务在多实例环境下必须加分布式锁,不然每台机器都会跑一遍,造成重复对账或重复发券。