ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

腾讯云CVM部署Discuz全流程:从环境配置到安全交付

腾讯云CVM部署Discuz全流程:从环境配置到安全交付 长期和腾讯云渠道打交道的人应该都有体会客户问得最多的不是“云服务器贵不贵”而是“我买完服务器之后到底怎么把我的网站跑起来”。尤其是 Discuz 这类经典的社区建站程序看似简单真正从零到一在腾讯云 CVM 上部署一套能稳定对外服务的论坛中间涉及服务器选型、环境配置、伪静态规则、数据库调优、备案接入等一系列环节。这篇文章我就用渠道商落地交付的角度把在腾讯云 CVM 上搭建 Discuz 的完整流程捋一遍目标只有一个看完之后你不仅能自己搭还能在客户面前把每一步的原理讲清楚。这套流程适合谁如果你是刚接触云服务器的站长、渠道商的技术交付人员、或者在帮客户做社区类网站外包开发的开发者这篇内容可以直接当作操作手册来用。文章里不会只丢命令还会解释每一步为什么要这么做遇到报错该怎么查以及我实际交付过程中踩过的坑。腾讯云 CVM 本身只是提供了一台空白的 Linux 机器Discuz 的搭建难点从来不在“安装”本身而在环境搭配、权限设计、数据安全和后续维护这些恰恰是渠道商体现服务价值的地方。1. 渠道商搭建 Discuz 前要想清楚的事1.1 为什么渠道商必须掌握这套搭建流程很多渠道商习惯把服务器买卖当成一次性交易客户付款后给一台机器的 IP 和密码就算交付完事。但在真实业务里服务器的采购只是开始客户在拿到机器后的第一周内一定会问“怎么把我的网站传上去”“怎么绑定域名”“为什么访问不了”。如果一个渠道商连客户最常用的 Discuz 都搭不起来后续的续费、升级、转介绍基本都会断掉。从业务角度看Discuz 是中国互联网社区领域存量极大的建站程序从早期的论坛热潮到现在各类垂直社区、校内社群、企业内部交流平台大量站点仍然跑在 Discuz 上。腾讯云 CVM 作为基础计算资源配合 Discuz 这类开源程序是渠道商最常遇到的技术组合。掌握了这套搭建流程等于掌握了社区类网站交付的通用能力以后不管客户想换成 WordPress 还是其他程序底层的环境和部署逻辑都是相通的。还有一个容易被忽视的点渠道商往往要同时维护多台服务器、多个客户站点。如果每次部署都靠手工敲命令效率太低。我建议第一次完整走一遍手动部署流程理解每一个环节的依赖关系之后再考虑用镜像或者脚本去加速这样即使自动化工具出问题你也能快速定位故障而不是对着报错一脸懵。1.2 搭建方案选型镜像市场还是手动部署腾讯云 CVM 的镜像市场里其实有现成的 Discuz 镜像安装后基本开箱即用。很多渠道商会选择直接用镜像这在单台交付、客户要求快速上线的场景下确实是最高效的方式。但我个人对镜像的态度是“可用但必须留后手”原因是镜像市场里的环境版本往往不是最新的而且镜像里的配置未必符合你客户的业务需求。举个例子镜像自带的 PHP 版本可能偏低Discuz 新版本和部分插件对 PHP 版本有要求镜像里的 MySQL 字符集如果没设置成 utf8mb4后续用户发帖时遇到生僻字或 emoji 表情就会直接报错。更重要的是镜像里的安全配置不一定完善很多镜像为了方便把 root 密码预设成固定值被扫到就是灾难。手动部署的优势在于每一个环节都掌握在自己手里系统用什么版本、PHP 用哪个版本、数据库字符集是什么、目录权限怎么分配全部可控。虽然第一次部署会花一到两小时但这部分时间成本在后续维护中会加倍赚回来。这篇文章以手动部署为主覆盖从零到上线的全流程镜像方案我会在最后一节补充对比。1.3 交付场景拆解不同客户需求下的部署策略同样是搭建 Discuz客户类型不同部署策略完全不同。我这里把实际遇到过的客户需求分成三类方便你接到需求时先做判断再动手。第一类是个人站长或小团体社区流量不大对成本敏感。这类客户通常只要一台最低配的 CVM 就够部署时优先考虑轻量化和自动化环境能简则简把预算集中在服务器资源本身。第二类是企业内部社区或行业垂直论坛对数据安全要求较高。这类客户往往需要独立的数据库账号、定期备份策略、甚至需要配置 FTP 上传权限隔离。搭建时要特别注意目录权限设计和资料备份机制。第三类是流量预期较高的外部社区需要考虑并发和扩展。这类客户一开始就要规划好架构比如数据库和应用分离、配置 CDN 加速静态资源、PHP 开启 opcache 缓存。前期多花一点时间做规划比后期流量上来再重构要省太多事。明确客户类型之后部署的参数和步骤其实会有些微差异文章后面的操作部分我会指出哪些地方需要针对不同场景做调整。2. CVM 实例选配与初始化配置2.1 选配逻辑CPU、内存、带宽和硬盘怎么权衡腾讯云 CVM 的配置选型在渠道交付中经常被忽略很多渠道商直接按客户预算推荐最便宜的套餐后面出现性能瓶颈又来回扯皮。Discuz 是典型的 PHP MySQL 架构它对 CPU 和内存的要求有一定的规律我给你一个可以直接套用的参考区间。单机跑 Discuz 的场景下配置的瓶颈通常不在 CPU 而在数据库连接和 PHP 进程的内存占用。纯静态页面和少量动态请求1 核 1G 就能跑如果预期在线人数在几百人左右建议至少 2 核 4G要是社区比较活跃、有大量图片和附件上传4 核 8G 会更稳妥。带宽方面Discuz 的页面正文内容占比不大但附件和图片访问非常吃带宽1Mbps 峰值带宽勉强够个人站点用面向公众服务的建议选按流量计费模式避免固定带宽跑满后出现站点打开卡死的问题。硬盘方面现在的 CVM 都默认搭配云硬盘系统盘建议选高性能型数据盘按数据量预留。Discuz 的附件目录占用空间增长极快一张图片几百 KB一万张就是几个 GB所以数据盘容量最好在购买时就预留充足后续扩容云硬盘虽然不影响数据但要在控制台操作也会产生短暂 IO 抖动。2.2 登录方式选择密码登录还是密钥登录拿到 CVM 之后第一个决定就是怎么登进服务器。腾讯云控制台默认支持密码登录和密钥登录两种方式我的建议是直接用密钥登录尤其对于要管理多台机器的渠道商来说密钥登录是必须习惯的方式。关键技术点在于密钥对的使用流程先在腾讯云控制台的“密钥对”功能里创建或导入密钥选择 PEM 格式的私钥文件然后在创建 CVM 实例时指定绑定这个密钥。实例创建完成后通过 SSH 客户端用私钥认证登录命令类似ssh -i 私钥文件路径 root服务器IP。Windows 环境下可以用 PuTTY 配合 PuTTYgen 把 PEM 格式的私钥转换成 PPK 格式再导入 Pageant 进行认证这套流程在处理多台服务器时特别方便。有两点要特别提醒第一私钥文件权限不能过于宽松Linux 下私钥权限建议 600否则 SSH 会因权限问题拒绝加载第二密钥登录配置好后建议在/etc/ssh/sshd_config里把PasswordAuthentication设为no彻底关闭密码登录通道防止暴力破解。改完记得重启 sshd 服务再测试新登录窗口避免把自己锁在门外。2.3 安全组规则配置哪些端口该开哪些不该开安全组是腾讯云提供的第一层网络防护相当于服务器外面的防火墙。很多新手在安装 Discuz 后打不开页面排查半天发现是安全组没有放行 80 端口这是最常见的低级坑。在 CVM 控制台选择对应实例的安全组入站规则里至少需要放行以下几个端口。SSH 端口 22 必须放行但是为了安全考虑建议把来源 IP 限定为公司固定出口 IP 或者你自己常用网络的 IP不要用 0.0.0.0/0 对全网开放。Web 服务方面HTTP 的 80 端口和 HTTPS 的 443 端口要对外开放来源设为 0.0.0.0/0 即可因为网页访问者可能是任何 IP。数据库端口 3306 在单机部署场景下不要对外开放Discuz 应用和数据库在同一台机器时通过内网地址通信就足够了对外开放只会增加被扫描和攻击的风险。有个容易被忽略的配置项是 ping 使用的 ICMP 协议有些安全组默认不放行 ICMP导致你再怎么 ping 也 ping 不通但网站却正常访问这时候就是安全组问题。另外如果你需要在服务器上部署 HTTPS443 端口一定要提前放行不然后面配置证书时怎么测都不通。3. 部署环境搭建操作系统安装与 LNMP 环境配置3.1 操作系统选择和初始基础设置腾讯云 CVM 支持多种操作系统镜像搭建 Discuz 我优先推荐 CentOS 7.9 或 Rocky Linux 9这两者都是 RHEL 系软件源丰富、社区资料多遇到问题随便一搜就有答案。如果你更熟悉 Debian/Ubuntu 系也可以用 Ubuntu Server 22.04 LTS命令有差异但原理一致。我这里以 CentOS 系为例子讲解Ubuntu 用户可以直接通过 apt 包管理器替换对应的 yum 命令。系统登录后的第一件事我习惯先做三件基础设置更新系统软件包、同步系统时间、配置主机名。更新软件包的命令是yum update -y这一步可能要几分钟时间同步使用 chrony 服务Discuz 的帖子发表时间、在线时长统计都依赖服务器时间准确性主机名设置方便你在多台服务器之间区分用hostnamectl set-hostname 你想要的名称执行即可。还有一个必须养成的习惯用adduser创建一个普通运维账号并把这个账号加入 wheel 组。日常操作不要用 root 直接登录只有在需要执行特权命令时才通过 sudo 临时切换。Discuz 的安装和运行有一大堆文件权限操作用 root 跑虽然省事但一旦站点被入侵攻击者拿到的就是整个服务器的最高权限用普通用户运行可以减少损失面。3.2 Nginx、MySQL、PHP 的安装顺序和版本选择LNMP 环境的安装顺序有讲究我推荐的顺序是 Nginx - MySQL - PHP因为 PHP 的编译参数和模块依赖需要知道 Nginx 的安装路径而 MySQL 相对独立放在中间不会影响其他软件。用 yum 直接安装的软件版本通常较旧比如 CentOS 7 默认源的 PHP 只到 5.4这完全没法跑新版 Discuz。建议先安装 EPEL 和 Remi 源再用yum install -y php80-php-fpm php80-php-mysqlnd这样的方式安装指定 PHP 版本。版本选择方面Discuz X3.5 官方推荐 PHP 7.4 或 8.0MySQL 5.7 或 8.0Nginx 用 1.20 以上版本都可以。PHP 版本不可以过高或过低太低不支持 Discuz 的语法特性太高部分老插件会出现兼容性问题。如果你要跑的是老版本 Discuz比如 X3.4PHP 7.4 是稳妥选择。MySQL 安装好之后第一件事是执行安全初始化脚本设置 root 密码、删除匿名用户、禁止 root 远程登录。Discuz 安装时需要一个应用层数据库账号建议单独创建比如create database discuz default charset utf8mb4;和grant all privileges on discuz.* to discuz_userlocalhost identified by 复杂密码;不要直接用 root 账号连接数据库这样即使 Discuz 被注入数据库的影响面也被限制在一个库内。3.3 PHP-FPM 与 Nginx 的配置联动环境装完只是第一步真正决定 Discuz 是否能正常运行的是 PHP-FPM 和 Nginx 能否正确配合。PHP-FPM 负责解析 PHP 脚本Nginx 负责处理静态文件和转发动态请求两者之间通过 Unix Socket 或 TCP 端口通信。Nginx 的站点配置文件里最关键的是location块和fastcgi_pass参数。Discuz 的伪静态规则依赖于 Nginx 对 URL 的重写如果你的配置里缺少 Discuz 官方的 rewrite 规则访问板块页或帖子详情页时就会全部 404。下面是我常用的 Discuz 伪静态 Nginx 配置片段直接放进 server 块里就能用location / { if (!-e $request_filename) { rewrite ^([^\.]*?)/topic-(.)\.html$ $1/portal.php?modtopictopic$2 last; rewrite ^([^\.]*?)/article-([0-9])-([0-9])\.html$ $1/portal.php?modarticlearticleid$2page$3 last; rewrite ^([^\.]*?)/forum-(\w)-([0-9])\.html$ $1/forum.php?modforumfid$2page$3 last; rewrite ^([^\.]*?)/thread-([0-9])-([0-9])-([0-9])\.html$ $1/forum.php?modviewthreadtid$2extrapage%3D$4page$3 last; rewrite ^([^\.]*?)/group-([0-9])-([0-9])\.html$ $1/forum.php?modgroupfid$2page$3 last; rewrite ^([^\.]*?)/space-(username|uid)-(.)\.html$ $1/home.php?modspace$2$3 last; rewrite ^([^\.]*?)/blog-([0-9])-([0-9])\.html$ $1/home.php?modspaceuid$2doblogid$3 last; } }PHP 上传文件的限制也要同步调整。Discuz 允许用户上传附件php.ini里的upload_max_filesize和post_max_size默认只有 2M 和 8M如果客户社区要上传图片这两个值必须改大比如upload_max_filesize 50M、post_max_size 55M。同时还要检查memory_limit推荐设置为 128M 以上否则遇到大文件处理或批量操作时 PHP 进程会直接报内存不足的错。3.4 换用宝塔面板是否可行这里必须提到一个实际交付中绕不开的工具宝塔面板。它提供可视化的操作界面安装 LNMP 环境只在面板上点几下就行大大降低了部署门槛确实方便。我见过不少渠道商交付时直接用宝塔面板这也是可以接受的做法尤其是客户后续需要自己管理网站的情况下面板能减少很多支持成本。但用宝塔面板需要注意几个点第一面板本身也是一个暴露在外网的服务默认端口 8888 容易被扫描装完要把默认端口改成不常见的高位端口并设置安全入口路径第二面板安装的 PHP 版本可能不止一个一个站点绑定一个 PHP 版本要注意每个版本的配置文件是独立的改错文件等于白改第三宝塔自带的防火墙规则有时会和腾讯云安全组产生混淆明明面板里放行了端口但安全组没放行网站照样打不开。我个人的建议是如果你自己第一次搭建 Discuz先用命令行纯手工方式走一遍理解配置之间如何配合如果你是给客户批量交付、追求效率上宝塔没问题但一定要把安全加固做到位。两种方式没有高下之分关键看你的交付场景和后续维护能力。4. Discuz 部署全流程解析4.1 源码下载与目录结构规划Discuz 官方提供完整安装包在官方网站下载最新版本的 UTF-8 编码安装包注意不要下载 GBK 版本UTF-8 更通用兼容性更好。下载完成后在服务器上解压解压后的目录里有一个upload文件夹这个文件夹里的内容才是需要放到 Web 根目录的真正的站点文件。目录规划是很多人容易忽略的步骤。我的习惯是把 Discuz 的文件放在/data/wwwroot/discuz而不是默认的/var/www/html好处是数据目录和系统目录分离以后重装系统或者磁盘扩容时站点文件不容易丢。通过 Nginx 配置里的root指令把这个目录指定为站点根目录后访问http://服务器IP就能看到安装向导页面。文件权限的设置同样关键。Discuz 安装向导会要求部分目录可写比如config、data、uc_client、uc_server目录。网上很多教程直接让你chmod -R 777这是我在交付中最反对的权限配置。正确做法是把站点文件 owner 设置为运行 PHP-FPM 的用户例如 nginx 用户或 www 用户然后用chown -R www:www /data/wwwroot/discuz和chmod -R 755设置权限仅对确实需要写入的目录设置为 775 或 777。这样即使某个 PHP 文件被注入木马攻击者也无法篡改其他目录的文件。4.2 Web 安装向导的完整步骤与参数填写在浏览器里访问站点地址会进入 Discuz 的安装引导界面。整个安装过程不长但每一步的参数会影响后续使用我逐项拆解一下。第一步是阅读并同意协议接着检查目录权限如果之前权限设置正确这里会全部显示可写。第二步是选择安装方式全新安装或升级安装首次部署选“全新安装”即可。第三步最关键需要填写数据库信息数据库服务器地址填localhost或127.0.0.1数据库名和用户名对应前面在 MySQL 里创建的discuz库和discuz_user账号数据库密码填对应密码数据表前缀保持默认的pre_即可。第四步是填写管理员账号信息也就是站点创始人账号这里设置的邮箱一定要真实可用后续找回密码和接收系统通知都会用这个邮箱。管理员密码要足够复杂建议字母大小写、数字、符号至少包含三类因为 Discuz 后台一旦被攻破整个站点的用户数据、帖子内容全部赤裸。安装过程会显示进度条大约需要一两分钟安装完成后会提示删除install/index.php文件或自动跳转页面。这一步千万别懒不删除安装文件的话任何人都能再次访问安装向导、重置站点数据这是 Discuz 最常见的安全隐患之一。4.3 后台基础配置站点信息、注册策略和验证码安装完成后进入后台首先要设置的是全局信息。站点名称、站点 URL、网站备案信息等都要填写正确特别是站点 URL如果填错会导致所有静态资源加载失败、页面错乱慎重检查这一项。后台在“全局 - 站点信息”里可以随时修改但改完记得刷新浏览器缓存否则看到的可能还是旧页面。注册策略属于开通即用的功能但要结合客户场景来配。面向公开社区的站点建议开启“邮件验证”和“人工审核”双重机制注册用户必须先激活邮箱才能发帖新用户发帖的前几条进入审核队列管理员在后台审核通过后才会公开展示。这样可以有效拦截大量垃圾注册和广告帖。个人小论坛不想太繁琐的话至少要开启验证码推荐用系统自带的“旋转验证”或“点击验证”纯文本验证码在现代 OCR 工具面前基本形同虚设。搜索功能在 Discuz 里默认使用数据库模糊搜索当帖子数据达到几十万条时搜索速度会明显下降。如果客户预期帖子量较大建议在后台开启“全文搜索”并配置 Xunsearch 或其他搜索引擎服务这部分我在最后一个部分会展开讲。4.4 UCenter 的作用与管理Discuz 的架构里有一个独立的组件叫 UCenter它负责统一管理用户的登录、注册、头像、短消息等基础服务。很多新手忽略 UCenter 的重要性但它的配置直接关系到站点能不能正常登录。安装 Discuz 时系统会自动安装并配置 UCenter在config/config_global.php和config/config_ucenter.php里有对应的密钥和通信地址配置。如果这些配置文件里的密钥和 UCenter 后台的实际密钥不一致用户登录时会出现“通信失败”或反复跳转的问题。遇到登录异常时第一反应不是删缓存而是检查 UCenter 通信状态。UCenter 后台位于http://域名/uc_server用管理员账号登录后可以看到“应用管理”列表。如果显示通信失败大概率是应用的主 URL 填写有误或密钥不一致修正后再点击“测试连接”看到成功提示才算真正配置完成。记住一个原则UCenter 通信失败是 Discuz 登录和用户相关问题的最常见根因。5. 域名绑定、备案与文件上传5.1 域名解析与腾讯云备案要求站点跑起来之后下一步就是把域名绑定上去。在腾讯云控制台的“域名解析 DNSPod”里添加解析记录主机记录填www记录类型选 A 记录记录值填 CVM 的公网 IPTTL 默认 600 秒即可。如果你希望裸域名也能访问再添加一条主机记录为的 A 记录指向同一个 IP。域名解析之后是不是马上就能用域名访问不一定关键看你的服务器所在地域。腾讯云 CVM 在大陆地域的实例在提供 Web 服务前必须完成 ICP 备案否则使用 80 和 443 端口提供服务时会被拦截。备案流程在腾讯云控制台“备案”模块里提交需要准备主体信息、身份证件、核验照片等材料整个周期一般在 5 到 20 个工作日。渠道商在交付时一定要提前询问客户是否已经备案别等站点搭好才想起来白白等两周。这里也顺便提一下如果你的客户选择的是腾讯云的香港地域或其他境外地域 CVM无需备案即可直接绑定域名提供访问但访问延迟会比大陆地域高一些。面向大陆用户为主的社区站点建议老老实实走备案流程访问速度和稳定性更有保障。5.2 HTTPS 证书申请与强制跳转配置现代浏览器对 HTTP 站点的标记越来越不友好Chrome 和 Firefox 都会显示“不安全”的提示如果你的客户想做正规社区HTTPS 是标配。腾讯云提供免费的 SSL 证书申请在控制台搜索“SSL 证书”选择免费证书申请后下载对应 Nginx 格式的证书文件包含 cer 格式的公钥和 key 格式的私钥。Nginx 配置 HTTPS 的主要改动包括三处第一listen 443 ssl;开启 SSL 监听第二指定ssl_certificate和ssl_certificate_key两个指令指向证书文件路径第三添加一个额外的 server 块专门处理 80 端口请求用return 301 https://$host$request_uri;把所有 HTTP 请求强制跳转到 HTTPS。改完配置后用nginx -t检查语法再systemctl reload nginx生效。Discuz 后台也要做配套调整在“全局 - 站点信息”里把站点 URL 从http://改成https://否则页面里生成的链接全是 HTTP 开头的会导致混合内容警告或登录回调失败。如果已经上线运行过一段时间才发现还需要在数据库里批量替换站点 URL 字段具体 SQL 语句要小心操作建议先备份数据库再执行。5.3 大文件上传失败与配置调整Discuz 社区常见的上传附件包括图片、压缩包、视频等文件大了经常出现“上传成功但页面不显示”或直接提示“上传失败”的情况。这种问题通常是 PHP 上传参数没有同步调整导致的很多教程只改了upload_max_filesize但忽略了post_max_size结果超过 post 最大值整个请求被丢弃表现就是附件怎么传都失败。我这里给出一个完整的参数参考组合需要同步修改php.ini并重启 PHP-FPM 才能生效参数名推荐值作用file_uploadsOn允许文件上传upload_max_filesize100M单个文件大小上限post_max_size105MPOST 请求总大小需大于 upload_max_filesizemax_file_uploads20单次最多上传文件数memory_limit256MPHP 脚本内存上限处理大文件时的重要保障上传参数确认无误后Nginx 层的限制也不能忽略。Nginx 的client_max_body_size默认只有 1M超过这个大小直接返回 413 错误。在站点配置的 server 块或 location 块里加上client_max_body_size 100m;再重载 Nginx 配置大文件上传才能完全打通。这个排障思路同样适用于上面提到的 php.ini 参数组合。5.4 静态资源托管与 CDN 加速思路Discuz 站点里大量图片、CSS、JS 文件都是静态资源如果你的服务器带宽有限这些静态文件会占用大量流量。腾讯云的静态网站托管和对象存储 COS 可以有效分担这部分压力但要注意Discuz 是动态程序不能整体托管在静态网站托管服务上只能把附件目录或静态资源目录分离出去。最常用的方案是把 Discuz 的附件目录data/attachment迁移到对象存储 COS通过 COS 的静态网站访问功能对外提供附件 URL这样附件流量完全不经过 CVM节省带宽成本。具体实现方法是在腾讯云控制台开通 COS创建存储桶并设置为公有读私有写然后上传附件目录里的文件同时在 Discuz 后台的“全局 - 上传设置 - 远程附件”功能里配置 FTP 或 URL 方式指向 COS。这套方案上手需要一定配置时间如果你只是个人小站点前期不配置问题也不大直接把站点挂上 CDN用腾讯云 CDN 加速整个域名静态资源同样能从边缘节点缓存分发效果更直接。在腾讯云 CDN 控制台添加加速域名源站类型选择“自有源站”填写 CVM 的 IP之后把域名的解析记录指向 CDN 分配的 CNAME就完成接入。CDN 回源配置时注意 HTTPS 证书也要同步上传否则 HTTPS 回源会失败。6. 常见问题与排查技巧实录6.1 页面打不开与 502 错误排查思路整个搭建流程中遇到最多的问题就是页面打不开或者显示 502 Bad Gateway。502 的本质是 Nginx 无法从 PHP-FPM 获取有效响应也就是说 PHP 进程没有正常运行或者它们之间的通信链路断了。排查时先看 PHP-FPM 状态用systemctl status php-fpm查看服务状态如果是 exited直接重启并查看错误日志日志路径一般在/var/log/php-fpm/。另一个常见的 502 原因是 PHP-FPM 监听地址和 Nginx 转发地址不匹配。如果 PHP-FPM 配置为监听127.0.0.1:9000但 Nginx 的fastcgi_pass里配置的是 Unix socket 路径双方就对不上。统一改成同一种方式就能解决我个人更推荐使用 Unix socket例如/run/php-fpm/www.sock因为本地 socket 通信比 TCP 端口更高效、更不易受网络影响。改完两端的配置后记得重启两个服务再测试。还有一类很隐蔽的 502 是 PHP-FPM 进程数不够在高并发或出现死循环脚本时php-fpm 的子进程全部被占满新的请求无法处理Nginx 就会返回 502。查看pm.max_children参数结合服务器内存大小调整每个 PHP 进程大约占用 30 到 50M 内存服务器总内存除以单进程占用就能估算出大约可以开多少子进程留出系统余量即可。6.2 Discuz 搜索功能缓慢与索引优化社区帖子量增长之后数据库的 LIKE 查询会变得越来越慢。Discuz 默认搜索走的是 SQL 的LIKE %关键字%无法利用普通索引数据量上万之后搜索响应就会明显变慢。这个问题在热词里也出现了“社区动力 discuz!搜索”说明是社区运营里的一个实际痛点和痛点。最省事的方案是开启 Discuz 后台的搜索优化使用 SQL 的全文索引模式但 MySQL 的全文索引对中文分词支持不理想效果有限。更可靠的方案是部署第三方搜索引擎Discuz 官方的 Xunsearch 就是专门配合 Discuz 的全文检索服务配置好之后能大幅提升搜索速度和准确度但部署过程复杂一些需要守护进程常驻服务器。给渠道商的建议是在客户社区上线初期就评估帖子量预期如果预期不大先用默认搜索也能扛如果预期长期活跃建议直接上 Xunsearch避免后面数据量大了再迁移的阵痛。在系统层面可以先把 MySQL 的innodb_buffer_pool_size调大一些并确保帖子相关表使用了 InnoDB 引擎这个参数通常占服务器内存的 50% 到 70%设置合理后数据库整体性能会有明显改观。6.3 数据备份与恢复的实操记录渠道商交付 Discuz 时一定要把自动备份机制做进去我在交付检查清单里永远把数据库备份排在第一位。Discuz 后台自带数据备份功能路径是“后台 - 站长 - 数据库 - 备份”可以生成 SQL 文件并在后台下载但这种方式需要人工操作不适合无人值守。更可靠的方案是在系统层面配置自动备份。数据库方面用 mysqldump 每晚执行一次命令类似mysqldump -u用户名 -p密码 discuz /backup/discuz_$(date %Y%m%d).sql配合 crontab 定时任务定时执行。文件方面把/data/wwwroot/discuz目录打包备份重点包含data/attachment附件目录打包命令用tar -czf加时间戳命名即可。备份策略有几个细节要提醒备份文件一定不要放在服务器本地磁盘上一旦磁盘故障或机器被入侵备份和数据一起丢失的情况我见过太多次。建议备份文件通过脚本上传到腾讯云 COS或者至少复制到另一台机器。另外恢复前要详细测试备份文件能否正常导入不要等出事了才发现备份文件是坏的这个测试的时间成本一定要花。6.4 腾讯云账号注销与站点迁移的注意事项热词里出现了“腾讯云账号注销”这在渠道商的业务场景里往往对应着客户不再续费、需要把数据取走的流程。如果客户真的要走作为技术交付方你需要做的是把站点完整迁走而不是注销账号了事。迁移时要注意数据库要导出完整的 SQL 文件附件目录要完整打包配置文件里的站点 URL 和密钥要在新环境重新配置否则迁移后可能出现登录异常、图片打不开等一系列问题。Discuz 站点迁移到新服务器的常规步骤是在新服务器上搭好同样的 LNMP 环境上传站点文件和附件导入 SQL 数据库然后修改config/config_global.php里的数据库连接信息修改config/config_ucenter.php里的 UCenter 通信地址和密钥。全部改完后访问后台如果 UCenter 通信状态是正常的那这次迁移基本算成功。旧服务器可以在确认新站点稳定运行后再做下线操作不要当天就急着销毁旧机器。如果客户只是换一台腾讯云 CVM可以在控制台直接使用“镜像”功能把现有服务器的系统盘制作成自定义镜像再通过镜像创建新实例数据和环境会原样复制操作门槛低很多。但这种迁移方式要求新机器的系统和配置尽可能一致否则部分依赖硬件的配置可能失效。6.5 部署完成后我强烈建议做的自检清单每次我做完一套 Discuz 交付都会按固定清单逐项检查避免遗漏细节造成返工。整理成文字分享给你直接照做即可。安全方面检查是否已删除 install 目录确认 SSH 是否关闭了密码登录确认数据库端口没有公网监听改掉数据库 root 密码和管理员初始密码确认站点文件权限不是 777。功能方面注册一个新账号并完成一次发帖流程验证 UCenter 通信和邮件发送功能上传一张图片测试附件功能访问一个带伪静态的板块页面测试 rewrite 规则是否生效手机浏览器访问一下确认移动端显示正常。性能方面用浏览器开发者工具看首页加载时间重点检查图片是否未经压缩、JS/CSS 是否未合并如果加载时间超过 2 秒就要排查瓶颈了。这些检查项不需要全部自动化但至少每个交付节点手工过一遍经验告诉我检查清单走完一般能覆盖 80% 以上的上线后问题。最后再分享一个我个人的习惯每次搭建完成后我会把部署过程中的所有关键配置、密码、备注信息整理成一份交付文档发给客户的时候抹掉敏感信息自己保留完整版。Discuz 这类系统后续维护频率并不低过几个月再回来处理问题时这份文档能帮你快速回忆起当时的环境细节省掉大量重新排查的时间。这大概也是渠道商做技术服务最值得留存的资产。
返回列表