安装常见问题
#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:
- 通过
php --ini
,找到php.ini
文件的位置 - 将其在原位置复制一份,命名为
php-cli.ini
- 再次运行
php --ini
,确认php-cli.ini
生效 - 修改
php-cli.ini
,将disable_functions
做相应修改,或者完全注释掉
方法2不影响 php-fpm
运行的配置,相对安全性更高一些
#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/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
。
数据库需要另外安装。
#更改域名方法
- 修改配置文件 config.php ,将其中的域名改为新域名
- 删除
storage/cache/data
目录中的内容与storage/formatter
目录中的内容,注意不要将目录删除,只删除其中的内容。
#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 \
registry.discuz.chat/tencent/dzq:latest
启动之后,访问 https://<域名>/install
就可以开始安装,并正常使用了。
注意
请一定要访问外部用户将要访问的协议( http://
或 https://
) 加 域名 加 /install
进行安装,否则会导致自动获取的站点URL配置不正确,站点工作不正常。
#基于容器的升级
只要将数据保存到了容器外部,容器就可以升级。在升级前,要将原容器先停止并删除(执行此命令时,一定要确保自己已经将数据保存到了容器外部)
docker stop <容器 ID>
docker rm <容器 ID>
其中的<容器 ID>
,可以通过 docker ps
命令看到。
然后用以下命令下载最新版本镜像
docker pull registry.discuz.chat/tencent/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,可同样映射修改