☰
LNMP环境搭建与Discuz论坛部署实操指南
2026/10/22 18:01:11 网站建设 项目流程

把一个新论坛从零跑起来,说难不难,说容易也有一堆坑。我最近把一台刚刚做好系统初始化的Linux服务器完整走了一遍 LNMP环境 + Discuz论坛源程序 的部署,期间踩了好几个以前没认真记录过的细节,正好整理成一篇可以直接照着操作的笔记。这篇内容适合三类人:刚买服务器准备正式建站的站长,原来用Apache维护老站点想切到Nginx的同学,以及需要在团队内部快速搭一个社区讨论空间的开发人员。如果你已经会基本的Linux操作,跟着走基本不会卡壳;如果完全零基础,也可以边查边跑,因为我不仅写了步骤,也把每个关键选择背后的原因讲清楚。

下面我按自己最常用的一套流程来写,不同Linux发行版的软件包名不太一样,但整体思路是通用的。我的习惯是先把环境里每个组件职责讲明白,再装软件、放源码、跑安装向导,最后做性能和安全收尾;这样一旦后面出问题,你能快速判断是Nginx、PHP还是数据库的锅,而不是对着屏幕发呆。

1. 动手前先想清楚:LNMP怎么和Discuz搭起来

1.1 LNMP里每个角色到底在干什么

LNMP不是某个软件,而是四个组件的合称:Linux操作系统、Nginx Web服务器、MySQL或MariaDB数据库、PHP解释器。很多人把这四个东西直接当成一个“安装包”来看待,其实它们各自承担完全不同的工作。Linux是底座,负责进程、权限、网络、文件系统这些基础能力;Nginx是前台接待,所有浏览器的HTTP请求都会先到它这里;MySQL是仓库,论坛的帖子、用户、版块、设置最终都存成一张张表;PHP则是后厨,真正把Discuz源码跑起来的是它。

我用一个相对生活化的比喻来解释。我们打开一个论坛页面,浏览器向Nginx发起请求。如果请求的是图片、CSS、JS这类静态文件,Nginx自己就能直接找出来返回给浏览器,效率很高,这也是它比很多老牌Web服务器更擅长处理高并发的地方。如果请求是动态的,比如要生成首页最新帖子、处理用户登录,Nginx就会把请求转交给PHP-FPM——它是PHP的一种高效进程管理器。PHP收到请求后,需要读取或写入数据,于是再去访问MySQL;数据库把结果返回给PHP,PHP拼装成完整的HTML页面,再交给Nginx回传给浏览器。

理解这个链路最大的价值是排查问题时能快速定位:页面白屏,多半在PHP;静态资源打不开,多半在Nginx或路径权限;数据丢失或报错,多半在数据库。Discuz作为一套成熟的论坛源程序,它的安装包就是大量PHP文件加上一套数据库结构,部署的本质就是把这四层环境准备好,再把源码放进去建好数据库而已。

1.2 为什么选LNMP而不是LAMP

以前建站最常见的是LAMP,也就是Linux、Apache、MySQL、PHP。LNMP把Apache换成了Nginx,看起来只换了一个组件,实际区别很大。Apache历史悠久、配置灵活,支持很多动态模块加载方式,但它在面对大量并发连接时,默认会为每个连接占用不少进程或线程,内存压力会随访问量快速上升。Nginx则使用异步事件驱动模型,用较少的进程就能同时维持大量连接,对一台内存不算宽裕的普通服务器来说更友好。

Discuz论坛有一个很明显的流量特征:大量用户同时浏览帖子、刷新列表,这些请求里有相当大比例是读取静态内容,或者需要快速返回页面。Nginx处理静态文件和反向代理的能力很强,放在PHP前面就像一道高效的闸口,很多请求在到达PHP之前就被处理掉了,能够给后端省下不少资源。再加上Discuz官方很早就对Nginx做了适配,伪静态规则、rewrite规则都有成熟方案,网上资料也丰富,不会存在“用Nginx跑不了Discuz”的问题。

我个人的经验是,如果站点只是几十个人用,Apache也不会差到哪里去;但如果你希望把同样的配置留给未来两三年,或者服务器内存只有1GB、2GB,LNMP会稳得多。另外Nginx配置文件的写法对新手来说也算清晰,用server块和location块来表达域名和路径规则,比Apache那一堆复杂指令更容易理解。所以新部署的论坛,我推荐直接走LNMP。

1.3 版本怎么选才不给自己挖坑

很多新手一上来就装最新版本,结果装完一路报错,问题不一定出在操作上,而是版本之间的兼容性。Discuz对PHP、MySQL版本有明确要求,不能拿一套特别老的经验套在特别新的软件上。

我目前推荐的组合是:Nginx 1.24以上、PHP 7.4或8.0以上、MySQL 5.7以上或MariaDB 10.6以上、Discuz X3.5。如果你还留在Discuz X3.4或更老版本的论坛,PHP最好控制在7.4以内,因为老版本代码对PHP 8的适配不完整,容易出现在登录、发帖时莫名报错的情况。新装站点则直接选X3.5,它已经支持PHP 8,代码和数据结构都做了不少更新。

数据库方面,优先考虑MariaDB也不必纠结。MariaDB和MySQL在Discuz场景下基本可以无感替换,包管理器的软件源里就有,安装简单,内存占用也不高。字符集统一用utf8mb4,原因是帖子内容可能包含各类符号甚至emoji,utf8mb4才能完整存下,老教程里常见的utf8会丢失部分字符。

我把版本选型整理成下面这个表,可以直接抄作业:

组件推荐版本简单理由
LinuxDebian 12 / Ubuntu 22.04+稳定,软件包新,教程通用
Nginx1.24+配置成熟,并发处理稳定
PHP7.4 或 8.2Discuz X3.5 支持良好,推荐8.2
MySQL/MariaDBMariaDB 10.11 或 MySQL 8.0兼容性好,utf8mb4完整支持
DiscuzX3.5新站首选,长期维护更新

版本确定后,建议写进部署笔记里,不要一边装一边临时换版本,否则后面排查问题时连“基准环境”都说不清楚。

2. 从裸系统到LNMP:环境搭建与配置

2.1 用系统包管理器安装LNMP四件套

装LNMP有很多种方式,常见的有三种:编译安装、一键脚本、系统包管理器。编译安装可以精确控制参数和版本,但耗时长,新手容易卡在依赖和报错上;一键脚本看似省事,但很多脚本来自第三方,包含什么谁也无法保证,我不建议直接在生产服务器上用不明脚本。我最推荐的是用系统自带包管理器,也就是apt或dnf/yum。它装的是发行版维护过的版本,依赖自动解决,卸载和升级也方便,对一个论坛来说性能已经足够。

以Debian系的命令为例,先更新软件源,再一次性装齐组件:

sudo apt update sudo apt upgrade -y sudo apt install -y nginx mariadb-server php-fpm php-mysqlnd php-curl php-gd php-mbstring php-xml php-zip php-redis php-intl

我特意在包列表里加上了几个Discuz常用扩展。php-mysqlnd是连接数据库的驱动,php-mbstring用于处理多字节字符处理,php-gd用于生成验证码和图片缩略图,php-xml和php-zip是安装和后台功能经常需要的。如果你用的是CentOS、RHEL这类使用dnf/yum的系统,核心包名几乎一致:

sudo dnf install -y nginx mariadb-server php-fpm php-mysqlnd php-curl php-gd php-mbstring php-xml php-zip php-intl

装完之后先别急着配置,先把服务启动并设置开机自启:

sudo systemctl enable --now nginx mariadb php-fpm sudo systemctl status nginx mariadb php-fpm

这一步如果看到某个服务显示failed,多半是端口被占用、配置文件语法错误,或者包没装全。先用sudo systemctl status 服务名查看具体错误再继续,不要跳过检查直接往下走。

2.2 配置Nginx正确调用PHP-FPM

Nginx默认的配置只能处理静态页面和默认欢迎页,要让PHP文件真正执行,必须把请求转发给PHP-FPM。配置文件的位置因发行版而异,Debian系一般在/etc/nginx/sites-available/default,CentOS系一般在/etc/nginx/conf.d/default.conf。我用Debian系路径举例,CentOS系把下面内容放进conf.d即可。

打开站点配置文件,通常只需要一个server块就能定义网站根目录、监听端口和PHP解析规则:

server { listen 80; listen [::]:80; server_name _; root /var/www/discuz; index index.php index.html; client_max_body_size 50m; location / { # 这里后面放Discuz官方伪静态规则,先留空也可以 } location ~ \.php$ { try_files $uri =404; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_pass unix:/run/php/php8.2-fpm.sock; } location ~ /\.(?!well-known).* { deny all; } }

这段配置里有几个关键点。root指向后续放Discuz源码的目录,必须和解压源码的位置一致;index index.php index.html表示访问域名根目录时优先找index.php;client_max_body_size 50m是给后来的附件上传铺路,Nginx默认限制请求体只有1MB,不调大的话传图片都容易返回413;location ~ \.php$这段是让所有以.php结尾的请求经过PHP-FPM处理,try_files $uri =404可以避免把不存在的PHP路径直接交给后端,降低一部分解析风险。

关于fastcgi_pass,我用了Unix socket方式,路径是/run/php/php8.2-fpm.sock,你装的是PHP 8.2就用这个,如果装的是8.1或8.3,把数字替换成对应版本。socket方式比127.0.0.1:9000少一层TCP转发,性能和安全性都略好。如果你是CentOS系,PHP-FPM默认监听9000端口,可以改成:

fastcgi_pass 127.0.0.1:9000;

保存后先检查语法再重载:

sudo nginx -t sudo systemctl reload nginx

nginx -t这个命令值得养成习惯,任何Nginx配置改动都先跑一遍,避免语法错误导致整个站点挂了。

2.3 创建站点目录并验证PHP解析

站点目录我建议单独建,不要复用Nginx默认的html目录,这样每个站点的文件边界清晰。先创建目录并设置属主。

sudo mkdir -p /var/www/discuz sudo chown -R www-data:www-data /var/www/discuz

Debian和Ubuntu的Nginx和PHP-FPM默认都使用www-data用户,CentOS系列可能是nginx或apache,具体可以用ps aux | grep php-fpm查看运行用户,然后让站点目录属主和它保持一致。这一步非常重要,后面Discuz要写配置、上传附件,权限问题的根源基本都在这里。

然后写一个最简单的PHP测试文件:

echo '<?php phpinfo();' | sudo tee /var/www/discuz/info.php

浏览器访问http://你的服务器IP/info.php,如果能看到PHP版本、配置参数信息,说明Nginx已经能正确调用PHP。看到这个页面后,第一时间把测试文件删掉:

sudo rm /var/www/discuz/info.php

原因很简单,phpinfo页面会暴露PHP版本、扩展、文件路径、环境变量等信息,在正式站点上留着纯属给探测者提供情报。

3. 把Discuz源程序放进去并跑通安装向导

3.1 下载、解压与目录权限的合理安排

Discuz源程序通常以压缩包形式发布,解压后你会看到upload、readme、utility等目录。不要直接拿upload文件夹本身当作网站根目录,而是要把upload里面的所有内容复制到/var/www/discuz下。很多新手第一次部署,访问域名后看到的是一个目录列表或者找不到文件,就是因为把文件放到了upload/upload这样的二级路径里。

下载时有一点要特别提醒,尽量去项目官方渠道或自己信得过的镜像站获取压缩包,不要用网上随便找的“整合包”,尤其是号称带了一堆插件的版本。论坛源码直接暴露在公网,代码不可信等于把站点钥匙给别人。

把源码放到站点目录后,权限方案不要太粗暴。早期教程动不动就chmod 777,这在公网环境很危险,论坛里有大量文件写入场景,目录所有人都能写,等于把服务器大门敞开。正确做法是把目录属主改成PHP-FPM运行用户,然后普通权限即可:

sudo chown -R www-data:www-data /var/www/discuz sudo find /var/www/discuz -type d -exec chmod 755 {} \; sudo find /var/www/discuz -type f -exec chmod 644 {} \; sudo chmod -R 775 /var/www/discuz/config /var/www/discuz/data /var/www/discuz/uc_server/data

最后一条命令里,config和data是Discuz安装时需要写入配置和缓存数据的目录,单独给到组可写权限就够了。如果安装向导还提示其他目录不可写,再针对对应目录调整,而不是整个站点一把梭改成777。

3.2 给论坛准备一个干净的数据库账号

Discuz安装前需要先建好数据库,这一步可以在命令行里完成,也可以靠后面安装向导自动创建。我建议提前手动建,原因是要顺手把数据库账号权限控制住。进入数据库:

sudo mysql

然后执行:

CREATE DATABASE discuz DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; CREATE USER 'discuz'@'localhost' IDENTIFIED BY '这里换成你的强密码'; GRANT ALL PRIVILEGES ON discuz.* TO 'discuz'@'localhost'; FLUSH PRIVILEGES; EXIT;

字符集选utf8mb4已经说过了,是为了兼容完整中文和特殊字符。账号名不建议直接用 root,给论坛一个独立账号,既方便排查问题,也能避免站点出问题时数据库最高权限被滥用。GRANT ALL PRIVILEGES ON discuz.*表示只给这个账号操作discuz这一个库的权限,不会影响到服务器上的其他数据库,这就是最小权限原则。

如果你是MySQL 8且PHP-FPM扩展较旧,可能在安装向导里会遇到认证方式导致连不上数据库,解决办法是在MySQL里执行下面这条语句,单独把这位用户的认证方式改成老式兼容模式:

ALTER USER 'discuz'@'localhost' IDENTIFIED WITH mysql_native_password BY '这里换成你的强密码';

MariaDB一般不需要这一步,所以不用刻意提前执行,等遇到问题再处理即可。

3.3 在浏览器里完成安装向导

环境就绪后,访问http://你的服务器IP/install/,Discuz会进入网页安装向导。向导会先做一轮环境检查,包括PHP版本、扩展支持、目录可写权限。如果有红色提示项,通常就是之前目录权限没设置对,根据页面提示把对应目录的属主或权限补上即可。

接下来填写数据库信息,数据库名、用户名、密码填刚才创建的,数据库服务器地址本地填localhost或127.0.0.1都可以。注意如果填localhost,PHP默认走Unix socket连接;如果填127.0.0.1,走TCP连接。有些情况下数据库服务改了监听配置,用localhost反而连接不上,那就换另一个试。安装向导最后会让你设置管理员账号和密码,务必设置一个足够强的密码,后台权限比普通用户高,不能敷衍。

安装完成后,页面一般会提示删除或重命名install目录。这件事别拖延,直接执行:

sudo mv /var/www/discuz/install /var/www/discuz/install_backup_$(date +%F)

或者干脆删掉。不处理的话,别人可以再次访问安装向导,存在重新覆盖安装或者被恶意利用的风险。

3.4 后台三件套:伪静态、缓存与入口改名

安装完的Discuz站点已经能正常访问和发帖了,但还远没到能上线或者长期稳定运行的状态。进入后台后我建议先做三件事。

第一件事是开启伪静态。Discuz默认链接是forum.php?mod=viewthread&tid=1这类带问号的动态地址,伪静态可以把它们改写成更短、更好看的路径,对搜索引擎和用户阅读都更友好。在后台找到“全局 -> SEO设置 -> URL静态化”,勾选你希望开启的项目,保存。同时要去Nginx配置文件里把对应的rewrite规则放进去。Discuz源包的doc或utility目录里通常会带不同服务器的伪静态规则文件,Nginx直接选用nginx版本即可。常见规则可以简化成下面这样,只要能匹配论坛、帖子、用户空间几个核心地址就够用:

location / { if (!-e $request_filename) { rewrite ^([^_]*?)/forum-([0-9]+)-([0-9]+)\.html$ /forum.php?mod=forumdisplay&fid=$2&page=$3 last; rewrite ^([^_]*?)/thread-([0-9]+)-([0-9]+)-([0-9]+)\.html$ /forum.php?mod=viewthread&tid=$2&extra=page%3D$4&page=$3 last; rewrite ^([^_]*?)/space-(username|uid)-(.+)\.html$ /home.php?mod=space&$2=$3 last; } }

配置里已经有一段location /,把rewrite内容填进去,执行nginx -t然后systemctl reload nginx。伪静态生效后,最好用私密窗口测试几个页面,不要直接在后台刷新,容易因为浏览器缓存误判。

第二件事是确认PHP缓存开启。PHP进程每次执行脚本都需要重新加载和编译代码,开启opcache可以把编译结果放在内存里,页面对比明显加快。PHP安装后默认可能没有打开或者参数保守,在php.ini里找到opcache相关配置,调整成类似下面这样:

opcache.enable=1 opcache.memory_consumption=128 opcache.max_accelerated_files=10000 opcache.validate_timestamps=0

validate_timestamps=0意味着不再每次请求都检查文件是否更新,生产环境可以提高性能,但改源码后需要手动重启PHP-FPM才能生效。开发测试环境不建议开这一项,否则改代码没变化会让人一头雾水。

第三件事是把后台入口改得不那么显眼。Discuz默认后台入口是/admin.php,任何人一猜就知道。简单粗暴的做法就是改成不容易猜到的文件名:

sudo mv /var/www/discuz/admin.php /var/www/discuz/forum_private_manage.php

改完之后切记把新文件名记到自己的笔记里,别过两天自己也想不起来了。后台登录尽量用管理员账号,不要日常挂着后台权限浏览前台,这一点后面还会提到。

4. 部署中常见故障速查与排查实录

4.1 白屏和500错误:先学会看日志再动手

LNMP环境出现白屏或500错误,第一个动作不是猜原因,也不是反复刷新浏览器,而是去看日志。这是我觉得整个建站过程里最重要的一条经验。日志位置一般比较固定:

sudo tail -f /var/log/nginx/error.log sudo tail -f /var/log/php8.2-fpm.log sudo tail -f /var/log/mysql/error.log

PHP版本不同,fpm的日志文件名可能不同,用ls /var/log/扫一眼最稳。看到具体报错后,大多数问题都是下面几类:目录文件不存在或没有权限、PHP扩展缺失、fpm没启动、配置文件路径不对。

有一次我遇到站点首页白屏,但是info.php能正常访问,说明Nginx和PHP基础解析没问题。打开fpm日志发现提示某个PHP文件无法写入缓存目录,最后定位到是data目录属主不对,执行一次chown www-data:www-data /var/www/discuz -R就解决了。所以白屏不一定都是代码问题,环境权限比重装代码概率大得多。

如果日志里没有报错,那就要检查Nginx是否把PHP请求正确转发,可以先直接访问一个明确存在的PHP脚本,比如/forum.php,如果能打开但首页打不开,问题就在根目录或rewrite规则;如果直接返回404,多半是try_files或fastcgi_param SCRIPT_FILENAME配置有误。

4.2 数据库连接失败:账号、端口与认证插件

安装向导里最常见的一关就是数据库连接失败,后台页面也可能出现“数据库连接错误”之类的提示。排查顺序我建议这样走。

首先确认数据库服务在运行:

sudo systemctl status mariadb

如果服务正常,再用命令行测试一下账号密码是否能连上:

mysql -u discuz -p -h 127.0.0.1 discuz

能连上说明数据库本身没问题,问题在PHP连接参数或认证插件。前面提到的MySQL 8认证插件是常见坑,遇到连不上就执行那条ALTER USER ... IDENTIFIED WITH mysql_native_password改兼容模式。如果是CentOS系服务器开了SELinux,还要检查SELinux是否阻止了PHP进程访问数据库,可以先用setenforce 0临时放开测试,如果确实能通,再调整对应布尔值。长期关掉SELinux不推荐,尤其在公网生产环境。

还有一个容易忽略的点:Discuz安装时填的数据库地址,如果选localhost,它可能通过Unix socket连接,但socket路径和PHP-FPM配置的路径不一致就会失败;如果选127.0.0.1,则走TCP,需要确认MySQL监听端口不是被防火墙挡掉了。服务器上有防火墙的话,先放行80端口和443,不要因为内部调试把22端口一起开放给所有人。

4.3 伪静态不生效:先分清规则问题还是配置问题

伪静态配置完成后,如果访问帖子地址仍是动态链接,或者打开新地址返回404,要分两头查。先看后台伪静态开关是否已开启,再看Nginx配置里的rewrite规则是否真的被加载。

判断规则是否生效,最简单的办法是不用伪静态地址直接访问动态地址,比如/forum.php?mod=viewthread&tid=1。如果动态地址能打开,伪静态地址404,说明规则没配对;如果动态地址也打不开,说明问题不在静态化,而是PHP或数据库本身。另外要确认rewrite写在server块里而不是location块外面错误嵌套,nginx -t能查语法但查不出逻辑位置问题。

还有一个不是问题的问题:客户端浏览器缓存会让新地址看起来像旧的;或者你在后台刷新,页面显示的还是以前的动态链接。遇到这种情况,换一个无痕窗口访问即可。

4.4 附件上传失败与上传大小限制

传图片、附件失败是Discuz站点很常见的体验问题,通常有三个原因。第一个是Nginx的client_max_body_size太小,默认只有1MB,超过这个大小会直接返回413错误;第二个是PHP的upload_max_filesize和post_max_size限制,默认也只有2MB左右;第三个是data/attachment目录不可写。

给出一组适合一般论坛的配置:

client_max_body_size 100m;
upload_max_filesize = 100M post_max_size = 100M max_execution_time = 300 max_input_time = 300 memory_limit = 256M

改完PHP配置记得重启PHP-FPM,改完Nginx配置记得nginx -t和 reload。目录权限检查框架还是那一条:确认data目录属主和PHP-FPM运行用户一致。如果你用并发上传,还可能需要关心PHP-FPM是否配置了合适的上传临时目录,默认在/tmp,空间太小也会失败。

我把这条线的常见故障和快速处理整理成一张表,方便收藏备查:

故障现象可能原因优先排查动作
页面白屏/500PHP-FPM未启动、配置语法错看fpm和nginx error日志
首页打不开,php文件能开根目录路径/伪静态规则检查nginx root和rewrite
数据库连接失败密码错、认证插件、SELinux命令行mysql -u测试
伪静态404规则未加载/后台未开启动态地址对比测试
上传413Nginx请求体限制调client_max_body_size
上传后提示目录不可写data目录属主错误chown到php-fpm运行用户

5. 上线前的性能调整和基础安全加固

5.1 根据内存算PHP-FPM进程数

论坛上线后,第一个性能调整不是换服务器,而是把PHP-FPM进程数调到和内存匹配。PHP-FPM默认配置通常偏保守或偏激进,直接照着别人的配置抄不一定适合你的内存。

先看服务器内存总量:

free -h

然后估算一个PHP-FPM单进程平均占用,通常取40MB到80MB之间,Discuz这类应用因为加载的类库较多,按60MB估算比较稳。减去系统自身和MySQL占用的内存后,用剩余内存除以单进程估算值,就能得到一个相对合理的max_children。

举个例子,一台2GB内存服务器,系统加MySQL约占用800MB,剩余1200MB,除以60MB估算得到20,那么max_children可以设成20。对应到配置就是:

pm = dynamic pm.max_children = 20 pm.start_servers = 5 pm.min_spare_servers = 5 pm.max_spare_servers = 20

不要为了追求看起来高并发而把max_children设成100,把内存耗尽之后所有请求都会卡在swap交换上,站点会变得比低进程数时更慢。设好之后观察几天,用free -h、ps aux | grep php-fpm看实际占用,再微调。

5.2 打开缓存和数据库慢查询日志

PHP侧缓存之前已经配置了opcache,这里再补充一个可选优化:如果服务器内存宽裕,并且已经装了Redis扩展,可以在Discuz后台开启Redis缓存,把论坛的session和热门数据放到内存里。但要注意,开了缓存后如果Redis服务没启动,页面会直接连不上缓存,表现为白屏或报错。所以要么不开,开了就要把Redis服务纳入日常监控。

数据库层面的优化也可以从慢查询日志开始,找到是哪些SQL拖慢了页面。MariaDB和MySQL都可以临时开启慢查询日志:

SET GLOBAL slow_query_log = 'ON'; SET GLOBAL long_query_time = 2;

查询结束后可以通过日志看哪类SQL经常超过2秒。Discuz这类成熟系统,绝大多数慢SQL都来自特殊插件的非标准查询,或者索引缺失。普通站长不一定要手动分析执行计划,但至少要知道“页面卡了”不等于服务器不好,可能只是某一条数据库查询需要优化,日志里能找到线索。

5.3 后台改名、定期备份、开启HTTPS

前面已经提到后台入口改名,这一步建议上线前做掉。除此之外,还要把备份机制建立起来,这不是上线后“有空再做”的事,而是第一天就该有的习惯。

备份至少要覆盖两部分:数据库和站点文件。数据库用mysqldump导出,站点文件用tar打包。把下面两条命令放进cron定时任务里,每天自动执行一次就很稳:

sudo mysqldump -u discuz -p'数据库密码' discuz > /backup/discuz_$(date +%F).sql sudo tar czf /backup/discuz_files_$(date +%F).tar.gz /var/www/discuz

cron写好后,至少自己手动执行一遍,确认生成的文件不是0字节。备份文件和站点在同一台服务器上并不是最安全的,硬盘坏了备份也跟着没了;有条件就定期把备份转移到另一台存储设备或离线的位置。密码不要写在命令行里留在shell历史里,更安全的做法是写进带权限的配置文件,或者用mysqldump的--defaults-extra-file参数指定备份账号文件。

HTTPS同样是上线前的必选项,尤其论坛有账号密码、有用户私信,不用HTTPS的话这些内容在网络上都是明文传输。向你的证书服务商申请一张免费SSL证书,拿到证书链和私钥文件后,Nginx配置加一个443端口server块即可:

server { listen 443 ssl; server_name yourdomain.com; ssl_certificate /path/to/fullchain.pem; ssl_certificate_key /path/to/private.key; root /var/www/discuz; index index.php index.html; # 其他location与80端口配置保持一致 }

再把原来的80端口请求重定向到HTTPS,保证用户访问http://时自动跳转到安全连接。证书有有效期,记得设置提醒,比如每三个月检查一次;也可以配置自动续期,但这不是必须依赖某个具体商家的功能,自己理解续期记录的位置更踏实。

最后分享一点我个人实际部署中的体会。LNMP加Discuz这套组合,真正把人绊住的往往不是某个高深技术,而是权限、版本、伪静态规则这三件小事。第一次搭的时候,建议先在测试机上完整跑一遍,把所有报错和对应的解决方法记下来,再上生产就会从容很多。万一遇到奇怪现象,先看日志,不要反复改配置碰运气;日志会告诉你故障在哪一层。希望这篇从头到尾的记录能帮你少走点弯路,把论坛稳定跑起来。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询