
Discuz! 所需配置 | Discuz! 推荐 | |
不限制 | 类Unix | |
>= 8.0 | 8.1 - 8.5 | |
>= MySQL 5.7/MariaDB 10.2 | MySQL 8.0 |
dnf -y upgrade①关闭防火墙
systemctl disable firewalld --nowsystemctl status firewalldsystemctl is-enabled firewalld
②关闭selinux
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/configgrep "SELINUX=disabled" /etc/selinux/configsetenforce 0 # 不用重启,临时关闭
4、安装Nginx
使用官方YUM源安装(最新稳定版)
vim /etc/yum.repos.d/nginx.repo
# 添加以下代码并保存
[nginx-stable]name=nginx stable repobaseurl=https://nginx.org/packages/centos/$releasever/$basearch/gpgcheck=1enabled=1gpgkey=https://nginx.org/keys/nginx_signing.keymodule_hotfixes=true
dnf -y install nginx # 安装nginx启动服务,设置开机启动
systemctl start nginxsystemctl enable nginxsystemctl status nginx # 查看服务状态systemctl is-enabled nginx # 查看是否设置开机启动
查看版本
nginx -v5、安装MySQL 8.0.43
安装官方YUM源
dnf -y install https://dev.mysql.com/get/mysql84-community-release-el9-3.noarch.rpm查看已启用的MySQL YUM仓库
dnf repolist enabled | grep "mysql.*-community.*"查看MySQL仓库
dnf repolist all | grep mysql禁用LTS 8.4子仓库,启用MySQL8.0子仓库
dnf config-manager --disable mysql-8.4-lts-communitydnf config-manager --disable mysql-tools-8.4-lts-communitydnf config-manager --enable mysql80-communitydnf config-manager --enable mysql-tools-community
安装MySQL
dnf -y install mysql-community-server启动MySQL服务
systemctl start mysqldsystemctl status mysqldsystemctl is-enabled mysqld
使用默认密码登录并修改密码
P=`awk '/temporary password/ {print $NF}' /var/log/mysqld.log`mysql -uroot -p$Pmysql> alter user 'root'@'localhost' identified by 'Mysql#8043';
创建Discuz! X5.0数据库
mysql> CREATE DATABASE discuzdb CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;创建用户并授权
mysql> CREATE USER 'discuzuser'@'localhost' IDENTIFIED BY 'Mysql#8043';mysql> GRANT ALL PRIVILEGES ON discuzdb.* TO 'discuzuser'@'localhost';mysql> flush privileges;mysql> exit;
性能优化
vim /etc/my.cnf
# 在[mysqld]项下添加以下参数
innodb_buffer_pool_size = 512M # 默认128M,InnoDB缓冲池大小,4G以上内存建议为系统内存的40~60%innodb_log_file_size = 128M # 默认48M,重做日志文件大小max_connections = 300 # 默认151,最大连接数
PS:还有很多参数需要大内存才有优化的必要,我这里系统内存才1.9G没法搞,并发量高的网站可以自行去研究设置。
重启MySQL服务生效
systemctl restart mysqld6、安装Redis
使用官方YUM源安装(最新稳定版)
vim /etc/yum.repos.d/redis.repo
# 添加以下代码并保存
[Redis]name=Redisbaseurl=http://packages.redis.io/rpm/rockylinux9enabled=1gpgcheck=1
导入密钥并安装
curl -fsSL https://packages.redis.io/gpg > /tmp/redis.keyrpm --import /tmp/redis.keyyum -y install redis
启动服务并设置开机启动
systemctl start redissystemctl enable redissystemctl status redissystemctl is-enabled redis
7、安装PHP及扩展
查看所有可安装的php扩展
dnf list | grep php# 如果要安装php8.0及相关扩展使用以下命令(系统源)
dnf -y install php php-fpm php-mysqlnd php-cli php-gd php-xml php-mbstring php-json php-curl php-zip php-intl php-common php-opcache php-bcmath php-pear php-devel php-redis# 如果要安装php7.4~8.5及相关扩展使用以下命令(三方源)
安装epel和Remi仓库
dnf -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpmdnf -y install https://rpms.remirepo.net/enterprise/remi-release-9.rpm
查看可用的php模块
dnf module list php重置并启用子仓库
dnf -y module reset phpdnf -y module enable php:remi-8.5 # 如果安装8.5执行此命令dnf -y module enable php:remi-7.4 # 如果安装7.4执行此命令
安装php及相关扩展
dnf -y install php php-fpm php-mysqlnd php-cli php-gd php-xml php-mbstring php-json php-curl php-zip php-intl php-common php-opcache php-bcmath php-pear php-devel php-redis查看已安装的php软件包
rpm -qa | grep php查看已安装的扩展
php -mphp -v # 查看版本
启动PHP-FPM服务并设置开机自启
systemctl start php-fpmsystemctl enable php-fpm
如果Discuz! X5.0使用ImageMagick处理图片需要执行以下命令(软件依赖epel仓库,php-imagick扩展依赖remi仓库对应版本模块)
dnf -y install ImageMagick ImageMagick-libs ImageMagick-devel
dnf -y install php-imagick
8、配置php-fpm
vim /etc/php-fpm.d/www.conf
# 找到并修改以下代码
; 运行用户和组改为nginxuser = nginxgroup = nginx; 监听socketlisten = /run/php-fpm/www.socklisten.owner = nginxlisten.group = nginxlisten.mode = 0660
9、配置PHP
vim /etc/php.ini
# 找到并修改以下代码
memory_limit = 256Mupload_max_filesize = 50Mpost_max_size = 100Mmax_execution_time = 180max_input_time = 180disable_functions = exec,system,passthru,shell_exec,popen,pclose,proc_open,proc_get_status,proc_terminate,proc_close,pcntl_fork,pcntl_exec,pcntl_wait,pcntl_waitpid,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,dl,assert,create_function,chroot,chgrp,chown,link,symlink,readlink,show_source,highlight_file,parse_ini_file,posix_ctermid,posix_getcwd,posix_getegid,posix_geteuid,posix_getgid,posix_getgrgid,posix_getgrnam,posix_getgroups,posix_getlogin,posix_getpgid,posix_getpgrp,posix_getpid,posix_getppid,posix_getpwuid,posix_setegid,posix_seteuid,posix_setgid,posix_setpgid,posix_setsid,posix_setuid,posix_times,posix_ttyname,posix_uname,posix_kill,posix_mkfifo
重启服务生效
systemctl reload php-fpm10、配置nginx以使用php-fpm
先备份nginx默认配置文件
cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bakmv /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.bak
vim /etc/nginx/nginx.conf
# 然后对照以下条目进行修改
user nginx;worker_processes auto;#worker_rlimit_nofile 65535;error_log /var/log/nginx/error.log notice;pid /run/nginx.pid;events {worker_connections 1024;use epoll;multi_accept on;}http {include /etc/nginx/mime.types;default_type application/octet-stream;log_format main '$remote_addr - $remote_user [$time_local] "$request" ''$status$body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';access_log /var/log/nginx/access.log main;sendfile on;#tcp_nopush on;#tcp_nodelay on;keepalive_timeout 65;#keepalive_requests 1000;client_max_body_size 50M;server_tokens off;gzip on;gzip_vary on; # 发送Vary: Accept-Encoding头gzip_min_length 1k; # 仅压缩大于1k的文件gzip_buffers 4 16k; # 压缩缓冲区大小(32 4k/16 8k),并发连接数*(number*size)gzip_http_version 1.1; # 支持的HTTP版本gzip_comp_level 6; # 压缩级别(1-9,越高压缩率越高,消耗CPU越多)gzip_disable "MSIE [1-6]\."; # 表示ie6及以下不启用gzipgzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript image/svg+xml application/x-javascript text/mathml application/xhtml+xml application/atom+xml; # 需压缩的文件类型include /etc/nginx/conf.d/*.conf;}
创建用Discuz的nginx配置文件
vim /etc/nginx/conf.d/discuz.conf
server {listen 80;listen [::]:80;server_name _; # 允许所有IP访问,修改为域名或IProot /usr/share/nginx/html;index index.php index.html index.htm;# 日志配置access_log /var/log/nginx/discuz-access.log;error_log /var/log/nginx/discuz-error.log;# php 处理location ~ \.php$ {fastcgi_pass unix:/run/php-fpm/www.sock;fastcgi_index index.php;fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;include fastcgi_params;# 优化参数#fastcgi_connect_timeout 300;#fastcgi_send_timeout 300;#fastcgi_read_timeout 300;#fastcgi_buffer_size 64k;#fastcgi_buffers 4 64k;#fastcgi_busy_buffers_size 128k;#fastcgi_temp_file_write_size 256k;}# 禁止访问隐藏文件 (如 .htaccess)location ~ /\.ht {deny all;}# 禁止目录遍历location ~ \.\./ {deny all;return 403;}# Discuz!伪静态规则location / {try_files $uri $uri/ /index.php?$args;# Rewrite 规则rewrite ^([^\.]*)/topic-(.+)\.html$ $1/portal.php?mod=topic&topic=$2 last;rewrite ^([^\.]*)/article-([0-9]+)-([0-9]+)\.html$ $1/portal.php?mod=view&aid=$2&page=$3 last;rewrite ^([^\.]*)/forum-(\w+)-([0-9]+)\.html$ $1/forum.php?mod=forumdisplay&fid=$2&page=$3 last;rewrite ^([^\.]*)/thread-([0-9]+)-([0-9]+)-([0-9]+)\.html$ $1/forum.php?mod=viewthread&tid=$2&extra=page%3D$4&page=$3 last;rewrite ^([^\.]*)/group-([0-9]+)-([0-9]+)\.html$ $1/forum.php?mod=group&fid=$2&page=$3 last;rewrite ^([^\.]*)/space-(username|uid)-(.+)\.html$ $1/home.php?mod=space&$2=$3 last;rewrite ^([^\.]*)/blog-([0-9]+)-([0-9]+)\.html$ $1/home.php?mod=space&uid=$2&do=blog&id=$3 last;rewrite ^([^\.]*)/archiver/(fid|tid)-([0-9]+)\.html$ $1/archiver/index.php?action=$2&value=$3 last;if (!-e $request_filename) {return 404;}}# 静态文件缓存location ~* \.(jpg|jpeg|png|bmp|gif|ico|webp|avif|css|js|woff|woff2|ttf|otf|eot|svg|swf|flv|mp4|mov|mp3)$ {expires 30d;add_header Cache-Control "public, max-age=2592000, immutable";}# 安全头add_header X-Frame-Options "SAMEORIGIN" always;add_header X-Content-Type-Options "nosniff" always;add_header X-XSS-Protection "1; mode=block" always;}# 拒绝所有其它域名和IP访问server {listen 80 default_server;listen [::]:80 default_server;server_name _; # 匹配所有未指定的域名return 403; # 返回禁止访问状态码# return 301 http://www.ideation.com.cn$request_uri; # 或者重定向到域名}
测试nginx配置文件是否有错误
nginx -t重启服务生效
systemctl restart nginx11、验证PHP是否正常运行
# 创建测试文件
echo "<?php phpinfo(); ?>" > /usr/share/nginx/html/info.php浏览器访问http://服务器IP/info.php,若显示PHP信息页,则安装成功。
12、上传Discuz! X5.0程序
# 进入站点目录
cd /usr/share/nginx/html/# 上传前将目录中文件删除或建立old文件夹将其移至其中
rm -rf *或者mkdir oldmv !(old) old
# 上传程序并解压
将Discuz_X5.0_20260410.zip上传至/usr/share/nginx/html/
unzip Discuz_X5.0_20260410.zip# 将文件移至站点跟目录
mv upload/* ./13、设置站点目录权限
chown -R nginx:nginx /usr/share/nginx/html14、安装Discuz! X5.0
浏览器打开你的ip或域名跟着提示操作就OK


15、安装phpMyAdmin(可选项)
# 安装前需要设置如下几个目录权限(重点session目录权限)
ll /var/lib/phpdrwxrwx---. 2 root apache 6 11月 18 14:24 opcachedrwxr-xr-x. 2 root root 146 4月 23 12:30 peclxmldrwxrwx---. 2 root apache 6 11月 18 14:24 sessiondrwxrwx---. 2 root apache 6 11月 18 14:24 wsdlcache将apache改为nginxchown -R root:nginx /var/lib/php/sessionchown -R root:nginx /var/lib/php/opcachechown -R root:nginx /var/lib/php/wsdlcache
# 安装phpMyAdmin
dnf -y install epel-releasednf -y install phpmyadminln -s /usr/share/phpMyAdmin /usr/share/nginx/html/phpmyadmin
PS:创建的软链接建议改个名称,不然容易被别人猜到,影响安全性。
# 浏览器打开
http://xxxxx/phpmyadmin
16、Discuz! X5.0启用Redis
vim /usr/share/nginx/html/config/config_global.php
# 找到并修改如下代码
$_config['memory']['redis']['server'] = '127.0.0.1';$_config['memory']['redis']['port'] = 6379;
17、优化
可优化的项主要是Nginx、MySQL、PHP的内存和各种缓存参数设置,这些都需要物理大内存支持。不同的内存配置不同的参数值,所以有需求的自行研究吧!!!
PS:以上安装配置都是实际环境操作,全程无坑点。能保证小站点安全稳定的运行,中大站点得CPU和内存支持以及相关的Nginx、MySQL、PHP的内存和各种缓存参数设置优化。