# 安装常见问题

# 如何配置CDN规则

在腾讯云CDN添加域名的时候,请在『缓存配置』处增加以下两条规则:

  • 规则类型为『首页』,刷新时间为0天。优先级调整为第1条。
  • 规则类型为『文件夹』,内容设置为/api,刷新时间为0天。优先级调整为第2条。

# 小内存服务器上宝塔默认安装的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安装文档)

首先,在你的PHP安装目录下,查找 openssl.cnf 文件。

# 方法1

新建一个 系统 环境变量,变量名为 OPENSSL_CONF,变量值为上面找到的 openssl.cnf 文件的完整路径。之后退出你的控制面板程序(比如phpstudy)再重新打开,然后重启 php 服务。

# 方法2

  • PHP版本小于7.4,建立目录 c:\usr\local\ssl\ ,然后将上面找到的 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等。解决方案如下:

  • 下载 根证书文件,保存为 C:\cacert.pem
  • 修改php.ini,修改其中的以下两行内容,并去掉前面的;
curl.cainfo=c:\cacert.pem
openssl.cafile=c:\cacert.pem

# Web服务器其它推荐配置

除了安装文档中的配置,另外以下一些配置可进一步优化系统运行,请大家参考:

# 1. 启动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/html text/css application/x-javascript application/javascript application/vnd.api+json;
  gzip_disable "MSIE [1-6]\.";
  gzip_comp_level 2;

# 2. 正确获取客户的真实IP

在Discuz! Q中,因安全原因,只使用 $_SERVER['REMOTE_ADDR'] 这一种方式获取客户的IP地址。请正确配置你的服务器,以保证Discuz! Q可以正确获取到客户的IP地址。

  • 如果你是通过你的服务器上的公网IP地址直接对外提供服务,则无需额外配置

  • 如果你使用腾讯云的负载均衡器(CLB) + 腾讯云的云服务器(CVM)的配置,无论配置的是4层还是7层负载均衡,都无需额外配置

  • 如果你使用自建的负载均衡,或其它的负载均衡,则默认只能获取到负载均衡的IP,无法获取到用户的真实IP,请按此文档配置,获取用户的真实IP

# 3. 启用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

请注意,这样设置后,每次更新Discuz! Q,需要重启php-fpm,新的代码才能生效。

# 基于Laravel Valet运行Discuz! Q

假设本地的park目录是 ~/sites,通过composer或离线安装将 Discuz! Q安装到 ~/sites/discuz 目录之后,将此文件 下载并保存到 /sites/discuz 目录下,之后就可以直接访问: http://discuz.test

数据库需要另外安装。

# 更改域名方法

删除 storage/cache/data 目录中的内容与 storage/formatter 目录中的内容,注意不要将目录删除,只删除其中的内容。

# 原来http的站,改成https之后,还有部分资源使用原来的http链接

删除 storage/cache/data 目录中的内容与 storage/formatter 目录中的内容,注意不要将目录删除,只删除其中的内容。

# 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 就可以开始安装,并正常使用了。

注意

请一定要访问外部用户将要访问的协议( 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,可同样映射修改

# composer 下载太慢,无法完成安装

在此之前,对于内测版本,你还是需要按安装文档中的要求,完成试用申请,生成自己的SecretId和SecretKey。

如果你遇到composer下载太慢的问题,请将composer镜像设置为腾讯云的镜像。设置完成后,composer所有的下载,都会通过腾讯云镜像进行,可大大提高下载速度。

设置镜像的命令为:

composer config -g repos.packagist composer https://mirrors.cloud.tencent.com/composer/

设置完镜像后,请继续按安装文档中的步骤,重新进行 composer create-project 操作。如果composer提示 discuz目录已存在,请将discuz目录删除后再次执行命令。

# composer 安装过程中,提示404错误

由于composer的镜像机制,在使用镜像的过程中,有可能提示404错误,这是因为镜像站正在与源站正在同步,出现了数据不一致的情况。这时候你只要稍等一会,再重试刚才的命令即可。

重试 composer create-project 可能会到到提示目录已存在的错误,要将目标目录删除后再重试。

# 安装后,首屏无限加载

如果遇到这样的情况,请清空你的浏览器缓存再重试。如果你了解浏览器调试工具的话,也可以只清空LocalStorage之后再重试。

# 安装后图片不能显示(没使用对象存储)

请执行命令:

ln -s 安装目录/storage/app/public 安装目录/public/storage

比如站点安装目录是:/www/wwwroot/discuz.chat/discuz ,那么这条命令就是

ln -s /www/wwwroot/discuz.chat/discuz/storage/app/public /www/wwwroot/discuz.chat/discuz/public/storage

# 安装时提示函数禁用

运行composer的时候,composer有可能类似下面的提示

[Symfony\Component\Process\Exception\RuntimeException] The Process class relies on proc_open, which is not available on your PHP installation

或者

[ErrorException]
putenv() has been disabled for security reasons

这是因为你的php.ini文件中,禁用了这些函数,请按如下方法操作:

# 方法1:

运行 php --ini ,找到你的 php.ini 文件的位置,修改其中的 disable_functions 设置项,这里列出了所有被禁用的函数,将其中的函数删除即可。

# 方法2:

  1. 通过 php --ini,找到 php.ini 文件的位置
  2. 将其在原位置复制一份,命名为 php-cli.ini
  3. 再次运行 php --ini ,确认 php-cli.ini 生效
  4. 修改 php-cli.ini,将 disable_functions 做相应修改,或者完全注释掉

方法2不影响 php-fpm 运行的配置,相对安全性更高一些

最后更新: 8/24/2020, 11:27:31 AM