# 常见问题
# 本页目录
- 如何配置CDN规则?
- 小内存服务器上宝塔默认安装的 MySQL 如何配置?
- Windows下提示 SSL 相关函数不可用如何解决?
- Windows下提示 CA 根证书库错误如何解决?
- Web 服务器其它推荐配置?
- 如何基于 Laravel Valet 运行 Discuz! Q ?
- 如何更改域名?
- 原来 http 的站,改成 https 之后,还有部分资源使用原来的 http 链接?
- Discuz! Q 如何数据备份?
- 容器的更多配置说明?
- 安装后,首屏无限加载如何解决?
- 安装后图片不能显示(没使用对象存储)怎么办?
- Discuz! Q 升级 v2.3.210202 版本后,进行红蓝主题切换时报错
Warning: shell_exec() has been disabled for security reasons in
如何解决?
# 如何配置CDN规则?
在腾讯云 CDN 添加域名的时候,请在【缓存配置】> 【节点缓存过期配置】处增加以下两条规则:
- 规则类型为【文件目录】,内容设置为
/apiv3
,缓存选项选择【不缓存】。 - 规则类型为【文件目录】,内容设置为
/api
,缓存选项选择【不缓存】。优先级调整为“最顶部”如下图所示:
TIP
若您使用 Discuz! Q 2.0 版本,无需设置 /apiv3
规则。
# 小内存服务器上宝塔默认安装的 MySQL 如何配置?
在小内存的服务器上(1G~2G),宝塔上的默认 MySQL 配置占用了过多内存,可进行如下一些配置以优化 MySQL 内存占用:
- 在 MySQL 设置的 【性能调整】中,将优化方案选择为【1-2GB】。
- 在 1GB 的服务器上,可以将【性能调整】页中的参数进一步调整:
innodb_buffer_pool_size
可调整为 128 或 64。innodb_log_buffer_size
可调整为 8。thread_cache_size
可调整为 32。max_connections
可调整为 32。
- 在 MySQL 设置的【配置修改】中,在
[mysqld]
处,下方加入一行performance_schema = off
语句。
# Windows下提示 SSL 相关函数不可用如何解决?
在 Windows 下,PHP的 SSL 相关函数有可能不可用,请按以下任一方法配置。(参考PHP的openssl安装文档 (opens new window))
首先,在您的 PHP 安装目录下,查找 openssl.cnf
文件。
**方法一:**新建一个 系统 环境变量,变量名为 OPENSSL_CONF
,变量值为上面找到的 openssl.cnf
文件的完整路径。之后退出您的控制面板程序(例如 phpstudy )再重新打开,然后重启 PHP 服务。
方法二:
- PHP 版本小于 7.4,建立目录
c:\usr\local\ssl\
,然后将 PHP 安装目录下找到的openssl.cnf
文件复制过去。 - PHP 版本为 7.4 及以上, 64位版本,建立目录
C:\Program Files\Common Files\SSL\
,将openssl.cnf
文件复制过去。 - PHP版本为 7.4 及以上, 32位版本,建立目录
C:\Program Files (x86)\Common Files\SSL\
,将openssl.cnf
文件复制过去。
# Windows下提示 CA 根证书库错误如何解决?
CA根证书错误会导致 PHP 无法验证SSL证书,从而无法正确调用腾讯云API、微信API 等。解决方案如下:
- 下载 根证书文件 (opens new window),保存为
C:\cacert.pem
- 修改
php.ini
,修改其中的以下两行内容,并去掉前面的;
符号。如下所示:
curl.cainfo=c:\cacert.pem
openssl.cafile=c:\cacert.pem
# Web 服务器其它推荐配置?
除了安装文档中的配置,您可以参考以下配置进一步优化系统运行:
启动 gzip 压缩
Discuz! Q 在运行中,浏览器会请求的文本类文档包含以下类型:text/html
, text/css
, application/vnd.api+json
, application/x-javascript
,建议在 Web 服务器中打开这些文档类型的 gzip 压缩,以减少下载的数据量。经测算,在 Nginx 中打开 gzip 压缩,并将压缩等级设置为 2 的时候,下载的平均数据量是打开压缩前的 1/3 左右。Nginx 中的配置参考如下:
gzip on;
gzip_min_length 1024;
gzip_types text/css application/x-javascript application/javascript application/vnd.api+json;
gzip_disable "MSIE [1-6]\.";
gzip_comp_level 2;
获取客户的真实IP
在 Discuz! Q 中,因安全原因,只使用 $_SERVER['REMOTE_ADDR']
这一种方式获取客户的 IP 地址。请正确配置您的服务器,以保证 Discuz! Q 可以正确获取到客户的 IP 地址。
- 如果您是通过您的服务器上的公网 IP 地址直接对外提供服务,则无需额外配置。
- 如果您使用腾讯云的负载均衡器(CLB) 与腾讯云的云服务器(CVM)的配置,无论配置的是 4 层还是 7 层负载均衡,都无需额外配置。
- 如果您使用自建的负载均衡,或其它的负载均衡,则默认只能获取到负载均衡的IP,无法获取到用户的真实IP,请按此文档 (opens new window)配置,获取用户的真实IP。
启用 opcache
在php.ini
中启用 opcache,可提高 PHP 代码的运行效率,参考配置如下
[opcache]
opcache.enable = 1
opcache.memory_consumption = 256
opcache.interned_strings_buffer = 8
opcache.max_accelerated_files = 10000
opcache.revalidate_freq = 240
opcache.fast_shutdown = 1
opcache.enable_cli = 0
opcache.file_cache = /tmp
opcache.error_log = log/opcache_error.log
WARNING
设置成功后,每次更新Discuz! Q,需要**重启 php-fpm **,新的代码才能生效。
# 如何基于 Laravel Valet 运行 Discuz! Q ?
假设本地的park
目录是 ~/sites
,通过 composer 或离线安装将 Discuz! Q
安装到 ~/sites/discuz
目录之后,将此文件 (opens new window) 下载并保存到 /sites/discuz
目录下,之后就可以直接访问: http://discuz.test
。
TIP
数据库需要另外安装。
# 如何更改域名?
您只需要删除 storage/cache/data
目录中的内容与 storage/formatter
目录中的内容即可。
WARNING
请不要将目录删除,只删除其中的内容。
# 原来 http 的站,改成 https 之后,还有部分资源使用原来的 http 链接?
您只需要删除 storage/cache/data
目录中的内容与 storage/formatter
目录中的内容即可。
WARNING
请不要将目录删除,只删除其中的内容。
# Discuz! Q 如何数据备份?
如需备份 Discuz! Q,请备份以下内容:
- 数据库。
- config 目录。
- storage 目录。
# 容器的更多配置说明?
如何将数据保存到容器外部本容器支持以下三个外部映射目录:
- 数据库文件,映射到
/var/lib/mysqldb/
。 - Discuz! Q的配置与存储目录,映射到
/var/lib/discuz/
。 - SSL证书文件,映射到
/etc/nginx/certs/
,其中要求存在两个文件discuz.crt
和discuz.key
。如果不使用SSL协议,请不要配置此目录,并且不映射 443 端口。
因此,如果如果您想长期使用容器来运行 Discuz! Q,建议在启动容器的时候加入这三个参数进行映射。
例如数据库文件,在本地(宿主机)上,想保存到 /data/mysql-data
,Discuz! Q的运行数据,保存到 /data/discuz
,SSL证书文件放在 /data/certs/discuz.crt
和 /data/certs/discuz.key
,同时不想对外开放 80 端口,那启动容器的命令就是:
docker run -d --restart=always \
-p 443:443 \
-v /data/discuz:/var/lib/discuz \
-v /data/mysql-data:/var/lib/mysqldb \
-v /data/certs:/etc/nginx/certs \
ccr.ccs.tencentyun.com/discuzq/dzq:latest
启动之后,访问 https://<域名>/install
就可以开始安装,并正常使用。
WARNING
请一定要访问外部用户将要访问的协议( http://
或 https://
) 加 域名 加 /install
进行安装,否则会导致自动获取的站点 URL 配置不正确,站点工作不正常。
基于容器的升级
只要将数据保存到了容器外部,容器就可以升级。在升级前,要将原容器先停止并删除(执行此命令时,一定要确保自己已经将数据保存到了容器外部)。
docker stop <容器 ID>
docker rm <容器 ID>
其中的<容器 ID>
,可以通过 docker ps
命令看到。 然后用以下命令下载最新版本镜像:
docker pull ccr.ccs.tencentyun.com/discuzq/dzq:latest
再使用上次启动相同的命令重新启动即可。
如果需要执行升级文档中要求的其它升级命令,请先登录容器
docker exec -it <容器 ID> /bin/bash
然后就可以执行升级文档中要求的相关的命令,例如:
cd /var/www/discuz
php disco migrate --force
基于容器的一些其它配置
- 如果您想对 mysql 进行管理,可选择以下两种方法之一:
- 登录进容器,用 mysql 命令进行管理
docker exec -it <容器id> /bin/bash
。 - 将 3306 端口暴露到外面,通过外部工具连上去进行管理。在启动时,加一个
-p 3306:3306
。
- 登录进容器,用 mysql 命令进行管理
- 如果您想通过外部的负载均衡进行 SSL 卸载,可开放容器的 80 端口,不开放 443 端口即可。
- Nginx 的配置文件,位于容器的
/etc/nginx/nginx.conf
下,如果需要修改,可通过-v
映射自己的配置文件,覆盖这个文件。- 例如您本地的配置文件为
/data/nginx.conf
,可以在上面的启动命令中,加入映射:-v /data/nginx.conf:/etc/nginx/nginx.conf
,即可覆盖系统原来内置的 Nginx 配置文件。
- 例如您本地的配置文件为
php-fpm
的配置文件,位于容器的/etc/php/7.2/fpm/pool.d/www.conf
,也可同样映射修改。- 控制 PHP 上传大小的文件,位于容器的
/etc/php/7.2/fpm/conf.d/30-upload-size.ini
, 当前设置为20M,可同样映射修改。
# 安装后,首屏无限加载如何解决?
如果遇到这样的情况,请清空您的浏览器缓存再重试。如果您了解浏览器调试工具,也可以只清空 LocalStorage
之后再进行重试。
# 安装后图片不能显示(没使用对象存储)怎么办?
请执行命令以下命令:
ln -s 安装目录/storage/app/public 安装目录/public/storage
例如站点安装目录是:/www/wwwroot/discuz.vip/discuz
,那么这条命令就是
ln -s /www/wwwroot/discuz.vip/discuz/storage/app/public /www/wwwroot/discuz.vip/discuz/public/storage
# Discuz! Q 升级 v2.3.210202 版本后,进行红蓝主题切换时报错 Warning: shell_exec() has been disabled for security reasons in
如何解决?
如果您遇到这样的情况,您可以删除您 Discuz! Q 站点所使用的 PHP 版本中的禁用函数 shell_exec
进行解决。如果您的 Discuz! Q 站点是基于宝塔面板安装,您可以参考以下步骤: 以下操作以宝塔面板 7.5.1、 PHP 7.3 版本为例:
- 登录您 Discuz! Q 站点的宝塔面板。
- 单击侧边栏【软件商店】,查找到您 Discuz! Q 站点所使用的 PHP 版本并单击【设置】。如下图所示:
- 在弹出的"php 管理"窗口中,单击【禁用函数】。
- 在禁用函数列表中,查找到
shell_exec
函并单击【删除】。如下图所示: - 重启 PHP 即可完成操作。
TIP
若删除禁用函数 shell_exec
后,依旧无法正常切换使用。您可以将 Discuz! Q 站点目录下 public_1
目录中的 skin.conf
文件复制并替换至 Discuz! Q 站点目录下的 public
目录,并重新进行尝试。
← 联系我们