文章目录[隐藏]
0.测试版升级方案
下载最新代码
1 |
composer create-project qcloud/discuz dz-temp --prefer-dist --repository=https://cloud.discuz.chat --no-install |
这个命令会将最新版本的Discuz! Q代码下载到当前目录的 dz-temp 目录中
更新原安装目录
将 dz-temp 下的所有文件,覆盖到原安装目录下。比如原来的安装目录是 /wwwroot/discuz,那么运行命令
1 |
cp -r ./dz-temp/* /wwwroot/discuz/ |
1.安装后,首屏无限加载,一直出现loading加载动画
解决方法:
清空你的浏览器缓存或者打开浏览器的开发者模式-Application-Storage-Local Storage,右击Clear,然后刷新浏览器即可。
2.安装时提示函数禁用
运行composer的时候,composer有可能类似下面的提示
1 |
[Symfony\Component\Process\Exception\RuntimeException] The Process class relies on proc_open, which is not available on your PHP installation |
或者
1 2 |
[ErrorException] putenv() has been disabled for security reasons |
这是因为你的php.ini文件中,禁用了这些函数,请按如下方法操作:
解决方法:
方法1:
方法2:
将其在原位置复制一份,命名为 php-cli.ini
再次运行 php --ini ,确认 php-cli.ini 生效
修改 php-cli.ini,将 disable_functions 做相应修改,或者完全注释掉
方法2不影响 php-fpm 运行的配置,相对安全性更高一些
3.上传头像不显示或不能上传文件
解决方法:创建软连接
ln -s /www/wwwroot/www/storage/app/public/ /www/wwwroot/www/public/storage
按需更改不要直接照搬复制粘贴。
4.composer下载太慢,无法完成安装
解决方法:
将composer镜像设置为阿里云的镜像。设置完成后,composer所有的下载,都会通过腾讯云镜像进行,可大大提高下载速度。
设置镜像的命令为:
1 |
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ |
或者腾讯云:
1 |
composer config -g repos.packagist composer https://mirrors.cloud.tencent.com/composer/ |
5.后台微信登陆无法配置
解决方法:
关闭后再开启,虽然刷新后还是空白,没有数据,但是数据库里已经有了,就可以用了,下一步等待官方修复。
可以进入settings表查看offiaccount值,如果有数据就说明已经写入数据表。
6.宝塔配置文件整合版
整合了原宝塔的配置文件和Discuz!Q的配置文件,懒人专用,按需更改不要直接照搬复制粘贴。
点击下载
7.升级方法
下载最新代码
composer create-project qcloud/discuz dz-temp --prefer-dist --repository=https://cloud.discuz.chat --no-install
这个命令会将最新版本的Discuz! Q代码下载到当前目录的 dz-temp 目录中
更新原安装目录
将 dz-temp 下的所有文件,覆盖到原安装目录下。比如原来的安装目录是 /wwwroot/discuz,那么运行命令
cp -r ./dz-temp/* /wwwroot/discuz/
更新composer依赖
进入原安装目录,运行 composer update
8.安装composr
(运行下 composer -v查看是否有,如果正常就跳过这一步)
1 2 3 |
curl -sS https://getcomposer.org/installer | php 或者 php -r "readfile('https://getcomposer.org/installer');" | php |
9.如何实现官方的v.xxx.com这样的视频地址
需要在腾讯云视频里配置绑定域名
按这个文档添加域名:
https://cloud.tencent.com/document/product/266/33371#.E6.B7.BB.E5.8A.A0.E5.9F.9F.E5.90.8D
再按这个文档设置成主域名:
https://cloud.tencent.com/document/product/266/33373
可以按这个文档添加ssl证书:
https://cloud.tencent.com/document/product/266/33372
10.启动gzip压缩
Discuz! Q在运行中,浏览器会请求的文本类文档包含以下类型:text/html, text/css, application/vnd.api+json, application/x-javascript,建议在Web服务器中打开这些文档类型的gzip压缩,以减少下载的数据量。经测算,在nginx中打开gzip压缩,并将压缩等级设置为2的时候,下载的平均数据量是打开压缩前的 1/3 左右。nginx中的配置参考如下:
1 2 3 4 5 |
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; |
11.正确获取客户的真实IP
在Discuz! Q中,因安全原因,只使用 $_SERVER['REMOTE_ADDR'] 这一种方式获取客户的IP地址。请正确配置你的服务器,以保证Discuz! Q可以正确获取到客户的IP地址。
如果你是通过你的服务器上的公网IP地址直接对外提供服务,则无需额外配置
如果你使用腾讯云的负载均衡器(CLB) + 腾讯云的云服务器(CVM)的配置,无论配置的是4层还是7层负载均衡,都无需额外配置
如果你使用自建的负载均衡,或其它的负载均衡,则默认只能获取到负载均衡的IP,无法获取到用户的真实IP,请按此文档配置,获取用户的真实IP
12.启用opcache
在php.ini中启用opcache,可提高php代码的运行效率,参考配置如下
1 2 3 4 5 6 7 8 9 10 |
[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,新的代码才能生效。
13.基于Docker容器运行Discuz! Q
首先确保你已经按上面的内测要求完成了内测申请,并准备好了 SecretId 和 SecretKey。同时你的服务器安装好了 docker-ce 运行环境,如果还没有下载,腾讯云提供了镜像。
接下来,请运行以下命令,并在用户名处输入 SecretId,密码处输入 SecretKey,并确认命令返回登录成功
1 |
docker login registry.discuz.chat |
下一步可以直接启动Discuz! Q
1 |
docker run -d -p 80:80 -p 443:443 registry.discuz.chat/tencent/dzq:latest |
docker会自动下载并运行最新版本的Discuz! Q。此容器基于 Ubuntu 18.04,其中安装了 Nginx 1.14, PHP 7.2, MySQL 5.7 和所有的相关依赖,并且已经完成了Web服务器配置和计划任务配置,可直接进入安装界面进行初始化。数据库 root 用户的密码已被设置为 root。
以上命令用于快速启动并测试Discuz! Q,数据库和站点数据都将保存在容器内部,容器被删除将会造成数据丢失。
如果您想基于容器长期运行Discuz! Q,建议将数据库和站点数据保存于容器外部,请参考容器的更多配置说明进行配置。
14.如何将数据保存到容器外部
本容器支持以下三个外部映射目录:
数据库文件,映射到 /var/lib/mysqldb/
Discuz! Q的配置与存储目录,映射到 /var/lib/discuz/
SSL证书文件,映射到 /etc/nginx/certs/,其中要求存在两个文件 discuz.crt 和 discuz.key。如果不使用SSL协议,可不配置此目录。
因此,如果你想长期使用容器来运行Discuz! Q,建议在启动容器的时候加入这三个参数进行映射。
比如数据库文件,在本地(宿主机)上,想保存到 /data/mysql-data,Discuz! Q的运行数据,保存到 /data/discuz,SSL证书文件放在 /data/certs/discuz.crt 和 /data/certs/discuz.key,同时不想对外开放80端口,那启动容器的命令就是:
1 2 3 4 5 6 |
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 就可以开始安装,并正常使用了。
15.基于容器的升级
只要将数据保存到了容器外部,在升级时,只要将原容器停止并删除,然后用以下命令下载最新版本镜像
1 |
docker pull registry.discuz.chat/tencent/dzq:latest |
然后再使用上次启动相同的命令重新启动即可。
16.基于容器的一些其它配置
如果你想对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,可同样映射修改
17.Web 服务器配置
Web服务器推荐启用SSL(https协议)
Nginx
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
listen 443 ssl http2; listen 80; server_name www.xxx.com; root /home/www/discuz/public; ssl_certificate /xxx/server.crt; ssl_certificate_key /xxx/server.key; ssl_session_cache shared:SSL:10m; ssl_session_timeout 24h; ssl_prefer_server_ciphers on; ssl_ciphers EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH; ssl_protocols TLSv1.2 TLSv1.3; ssl_ecdh_curve secp521r1:secp384r1; ssl_session_tickets off; ssl_stapling on; ssl_stapling_verify on; ssl_buffer_size 4k; add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always; add_header X-Frame-Options "SAMEORIGIN"; add_header X-XSS-Protection "1; mode=block"; add_header X-Content-Type-Options "nosniff"; index index.html; location /install { try_files $uri $uri/ /index.php?$query_string; } location /api { try_files $uri $uri/ /index.php?$query_string; } location / { try_files $uri $uri/ /index.html; } location = /favicon.ico { access_log off; log_not_found off; } location = /robots.txt { access_log off; log_not_found off; } error_page 404 /index.php; |
如果你使用 Nginx ,除了PHP的相关配置之外,还要在你的站点配置中加入以下配置,建议(非强制)开启 https 和 http2 ,将root目录指向 discuz/public 目录,同时一定要配置 location /、location /install 和 location /api ,将所有的请求将引导至 index.html 前端控制器和后端 index.php API控制器:
Apache
Apache要在配置中,将 DocumentRoot 指向 discuz/public 目录,同时通过重写规则,将 /install 和 /api 请求转发给 index.php,其它请求由 index.html 处理
1 2 3 4 5 6 7 8 9 |
DocumentRoot /app/public <IfModule mod_rewrite.c> RewriteEngine on RewriteRule ^/install.* /index.php?%{QUERY_STRING} [L,QSA,PT] RewriteRule ^/api.* /index.php?%{QUERY_STRING} [L,QSA,PT,E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-d RewriteRule (.*) /index.html [L] </IfModule> |
18.计划任务
目前统计财务报表需要用到系统计划任务,Linux 服务器配置如下:
1 |
* * * * * php /home/wwwroot/discuss/disco schedule:run > /dev/null 2>&1 |
19.配置说明
公共路径
安装完 Discuz! Q 之后,你的 web 服务的文档目录指向 public 路径。该路径下的 index.php 文件作为所有接口控制器, index.html 作为所有前端 HTTP 请求控制器。
配置文件
Discuz! Q 的所有配置文件存放在 config 目录下。每个选项都有文档标注,便于通过文件查看并熟悉对你有用的选项。
目录权限
在安装 Discuz! Q 后,你可能需要配置一些权限。 storage 目录在你的 web 服务下应该是可写的权限,否则 Discuz! Q 将无法运行。
应用密钥
在安装过程中,应用密钥已经通过 php disco key:generate 命令为你设置好了。
通常,这个字符串应该是 32 个字符长度。这个密钥将会设置在 config.php 文件中。如果应用密钥还没有设置,你的用户会话和其他的加密数据将会不安全
其他配置
Discuz! Q 几乎不需要除上面所说的其他什么配置了。打开你的站点开始你建站之旅然而,你可能会想要再次查看 config/config.php 文件和它的注释说明。它包含一些你希望根据你应用来更改的选项,诸如: timezone 和 locale 。