# 常见问题

# 本页目录

# 如何配置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 等。解决方案如下:

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,请备份以下内容:

  1. 数据库。
  2. config 目录。
  3. storage 目录。

# 容器的更多配置说明?

如何将数据保存到容器外部本容器支持以下三个外部映射目录:

  • 数据库文件,映射到 /var/lib/mysqldb/
  • Discuz! Q的配置与存储目录,映射到 /var/lib/discuz/
  • SSL证书文件,映射到 /etc/nginx/certs/,其中要求存在两个文件 discuz.crtdiscuz.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
  • 如果您想通过外部的负载均衡进行 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 版本为例:

  1. 登录您 Discuz! Q 站点的宝塔面板。
  2. 单击侧边栏【软件商店】,查找到您 Discuz! Q 站点所使用的 PHP 版本并单击【设置】。如下图所示:
  3. 在弹出的"php 管理"窗口中,单击【禁用函数】。
  4. 在禁用函数列表中,查找到 shell_exec 函并单击【删除】。如下图所示:
  5. 重启 PHP 即可完成操作。

TIP

若删除禁用函数 shell_exec 后,依旧无法正常切换使用。您可以将 Discuz! Q 站点目录下 public_1 目录中的 skin.conf文件复制并替换至 Discuz! Q 站点目录下的 public 目录,并重新进行尝试。