仅供技术研究,并非最简单的Discuz安装方法

文章目录

  • 1 Docker 安装
  • 2 MariaDB 安装
  • 3 PHP 安装
  • 4 Nginx 安装
  • 5 Discuz 安装
    • 5.1 安装文件部署
    • 5.2 安装
    • 5.3 GD图像处理软件安装
    • 5.4 附件上传失败问题
    • 5.5 域名 HTTPS SSL 配置

系统环境:CentOS 8 Stream

远程SSH工具:FinalShell 4.9.4

PHP版本:7.2-fpm

Discuz版本:Discuz_X3.4_SC_UTF8_20220518

1 Docker 安装

安装 yum 工具:

yum install -y -q yum-utils

添加 docker-ce 软件源:

yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

更新 yum :

yum update

安装 docker:

yum install -y docker-ce
# yum install docker 默认安装 podman-docker,所以要用docker-ce

虚拟机可能自带了 podman,如果再安装 docker-ce 会报错:

Problem: package podman-2:4.0.2-1.module_el8.7.0+1106+45480ee0.x86_64 requires runc >= 1.0.0-57, but none of the providers can be installed
....

podman 与 docker 功能类似,将 docker 命令中的 docker 替换为 podman 即可正常使用,若不习惯,可以卸载 podman 和 buildah:

yum rm podman buildah

再安装docker:

yum install -y docker-ce
# yum install docker 默认安装 podman-docker,所以要用docker-ce

启动 docker 服务:

systemctl start docker

2 MariaDB 安装

拉取镜像:

docker pull mariadb:latest  # 此步也可不执行,直接run也会自动拉取镜像

运行容器:(命令参数顺序不对可能导致容器启动就退出)

docker run --name mymariadb -e MYSQL_ROOT_PASSWORD=你的密码 -itd mariadb

参数解释

--name mariadb: 容器名称为 mariadb

-e MYSQL_ROOT_PASSWORD=你的密码:设置环境变量 MYSQL_ROOT_PASSWORD 为密码

-itd-i, -t, -d的组合,分别为以交互模式运行容器、为容器重新分配一个伪输入终端、后台运行容器,并返回容器ID

3 PHP 安装

拉取镜像:

docker pull php:7.2-fpm  # 此步也可不执行,直接run也会自动拉取镜像

运行容器:(注意 link 和 name 前均为两个横杠)

docker run --name  myphp -v ~/nginx/www:/www --link mymariadb:db -itd php:7.2-fpm

参数解释

--name myphp-test: 容器名称为 myphp

-v ~/nginx/www:/www :将主机的目录 ~/nginx/www 映射到容器的 /www/www存放 php 服务器文件,文件夹会自动创建

--link mariadb:db:连接名为 mariadb 的容器,并为其设置了别名 db,这里别名 db 就可以代表 mymariadb 容器的 ip 地址。

–link 使容器之间可以通过容器名互相通信,而不再使用易发生变化的 ip 地址。

4 Nginx 安装

拉取镜像:

docker pull nginx  # 此步也可不执行,直接run也会自动拉取镜像

运行容器:

docker run --name nginx -p 80:80  \-v ~/nginx/www:/usr/share/nginx/html:ro \-v ~/nginx/conf/conf.d:/etc/nginx/conf.d:ro \--link myphp:php \-itd nginx

参数解释

-p 80:80: 容器内 80 端口映射主机 80 端口

-v ~/nginx/www:/usr/share/nginx/html:ro:将主机的目录 ~/nginx/www 映射到容器的 /usr/share/nginx/html

-v ~/nginx/conf/conf.d:/etc/nginx/conf.d:ro:将主机的目录 ~/nginx/conf/conf.d 映射到容器的 /etc/nginx/conf.d

--link myphp:php:连接名为 myphp 的容器,并为其设置了别名 php

在自己的电脑上新建一个 php.conf,内容如下:

server {listen       80;server_name  localhost;location / {root   /usr/share/nginx/html;index  index.html index.htm index.php;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   /usr/share/nginx/html;}location ~ \.php$ {fastcgi_pass   php:9000;fastcgi_index  index.php;fastcgi_param  SCRIPT_FILENAME  /www/$fastcgi_script_name;include        fastcgi_params;}
}

参数解释

fastcgi_pass php:9000;php 与之前启动 Nginx 容器时的参数 --link myphp:php 中设置的别名 php 保持一致,即 php 代表 myphp 容器的 ip 地址。9000 为 myphp 容器中 php 服务器默认的端口号。

fastcgi_pass:Nginx本身不能处理PHP,它只是个 web 服务器,当接收到请求后,如果是 php 请求,则发给php解释器处理,并把结果返回给客户端。nginx 一般是把请求发 fastcgi 管理进程处理, fascgi 管理进程选择 cgi 子进程处理结果并返回给 Nginx。

将自己电脑上的 php.conf 利用 FinalShell 上传至服务器的 ~/nginx/conf/conf.d/ 位置。

5 Discuz 安装

5.1 安装文件部署

从官网下载 Discuz 安装包,这里使用的是 Discuz_X3.4_SC_UTF8_20220518.zip,附件所在帖子链接为:https://www.dismall.com/thread-73-1-1.html。

打开路径 `~/nginx/www

cd ~/nginx/www

利用 FinalShell 将安装包上传至 ~/nginx/www

解压安装包:

unzip Discuz_X3.4_SC_UTF8_20220518.zip

将其 upload 文件夹的内容个复制到 ~/nginx/www

mv ./Discuz_X3.4_SC_UTF8_20220518/upload/* ./

删除剩余文件:

rm -rf ./Discuz_X3.4_SC_UTF8_20220518

删除安装包:

rm -f ./Discuz_X3.4_SC_UTF8_20220518.zip

~/nginx/www/ 赋最高权限:

chmod 777 -r ~/nginx/www/  # 无这一步,Discuz安装会报一堆权限问题

重启所有容器:

docker restart mymariadb nginx myphp

5.2 安装

使用浏览器访问服务器的 ip 地址,即 Discuz 网站,进入 Discuz 安装阶段,同意授权协议后,显示安装环境检查界面:

如果之前步骤进行正确,除如下 mysql_connect() 函数依赖问题外,其他项目均正常。

下边解决 mysql_connect() 函数依赖问题,进入启动的 myphp 容器:

docker exec -it myphp bash

进入目录 bin:

cd /usr/local/bin

安装扩展 pdo_mysql:

./docker-php-ext-install pdo_mysql

安装扩展 mysqli:

./docker-php-ext-install mysqli

退出 myphp 容器:

exit

重启所有容器:

docker restart mymariadb nginx myphp

重新访问 Discuz 网站,显示函数依赖已正常:

进入下一步,运行环境设置,笔者不太清楚两选项区别,选择了含 UCenter Server 安装,有备无患。

进入下一步,安装数据库:

参数解释

数据库服务器地址db ,即第 3 节 PHP 安装中连接 mymariadb 容器设置的别名 db

数据库用户名:root,即默认

数据库密码:第 2 节MariaDB 安装中设置的 MYSQL_ROOT_PASSWORD 环境变量值

数据库名、数据表前缀:无特殊需要保持默认即可

其他信息根据自身情况填写即可。点击下一步之后自动安装,片刻即好,之后可进入 Discuz 网站,使用安装过程填写的管理员信息登录(初次可设置验证问题提高账户安全性)。

5.3 GD图像处理软件安装

此时网站还存在一个问题,在 Discuz 后台的全局->上传设置,点击“预览略缩图效果”,会显示如下错误:

从下图位置进入管理中心,使用管理员账号登录后台:

首页会显示如下警告:

下边安装 GD ,进入 myphp 容器:

docker exec -it myphp bash

需要将 apt-get 软件安装源替换,才能找到后边要用的安装包。

软件源替换方法如下:

备份原来的源文件:

cp  /etc/apt/sources.list /etc/apt/sources.list.bak

在容器内查看系统版本:

cat /etc/os-release

显示如下信息,说明容器内的环境为 Debian buster 10。

打开清华大学镜像网站https://mirrors.tuna.tsinghua.edu.cn/help/debian/,找到对应版本的国内源:

复制网页下方代码,Debian buster如下:

# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ buster main contrib non-free
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ buster main contrib non-free
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ buster-updates main contrib non-free
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ buster-updates main contrib non-freedeb https://mirrors.tuna.tsinghua.edu.cn/debian/ buster-backports main contrib non-free
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ buster-backports main contrib non-freedeb https://mirrors.tuna.tsinghua.edu.cn/debian-security buster/updates main contrib non-free
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian-security buster/updates main contrib non-free

在自己的电脑上新建 source.list文件,粘贴清华源到文件里,借助 FinalShell 先将文件上传至 ~/nginx/www(为了可以从容器中的 /www 访问),然后移动到软件源所在位置:

mv /www/sources.list /etc/apt/sources.list

更新:

apt-get update

安装依赖库:

apt install -y libwebp-dev libjpeg-dev libpng-dev libfreetype6-dev

解压源码:

docker-php-source extract

进入gd源码文件夹:

cd /usr/src/php/ext/gd

准备编译:

docker-php-ext-configure gd --with-webp-dir=/usr/include/webp --with-jpeg-dir=/usr/include --with-png-dir=/usr/include --with-freetype-dir=/usr/include/freetype2

编译安装:

docker-php-ext-install gd

检查扩展是否安装成功:

php -m | grep gd

显示 gd 即表示安装成功:

退出容器:

exit

重启所有容器:

docker restart mymariadb nginx myphp

重新登录 Discuz 后台后,运行环境检测显示一切正常:

略缩图预览正常:

5.4 附件上传失败问题

换比较小的文件试试,需要修改 php 最大上传大小,docker 里边不是修改 php.ini,先挖个坑,以后补方法。

5.5 域名 HTTPS SSL 配置

~/nginx/conf/conf.d 配置修改:

server {listen 443 ssl;server_name abc.top; # 你的域名root /usr/share/nginx/html;ssl_certificate  /etc/nginx/conf.d/ssl/domain.cert.pem; # 证书路径ssl_certificate_key /etc/nginx/conf.d/ssl/private.key.pem; # 秘钥路径index  index.html index.htm index.php;location ~ \.php$ {fastcgi_pass   php:9000;fastcgi_index  index.php;fastcgi_param  SCRIPT_FILENAME  /www/$fastcgi_script_name;include        fastcgi_params;}location / {#       index  index.html index.htm index.php;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   /usr/share/nginx/html;}
}
server {listen 80;server_name abc.top; # 你的域名rewrite ^(.*)$ https://$host$1 permanent;
}

后台配置修改:

  • 在后台 – 全局 – 网站 URL 填写

    https://你的网址

  • 在后台 站长 – UCenter 设置 – UCenter 访问地址填写
    https://你的网址/uc_server

  • 在后台 – UCenter – 应用管理 – 点右边的编辑 – 应用的主 URL 填写

    https://你的网址

检查网址是否能正常访问,不能再进行下一步修改:

修改3个源文件(修改前请记得做好文件备份):

  • source/class/discuz/discuz_application.php (大概在第 190 行处)

    查找: \$_G['isHTTPS'] =

    这一行直接修改为: `$_G[‘isHTTPS’] = true;`

  • uc_server/avatar.php(约第13行处)

    查找:

    define('UC_API', strtolower(($_SERVER['HTTPS'] == 'on' ? 'https' : 'http').'://'.$_SERVER['HTTP_HOST'].substr($_SERVER['PHP_SELF'], 0, strrpos($_SERVER['PHP_SELF'], '/'))));
    

    修改为:

    define('UC_API', strtolower(($_SERVER['SERVER_PORT'] == 443 || $_SERVER['HTTPS'] == 'on' ? 'https' : 'http').'://'.$_SERVER['HTTP_HOST'].substr($_SERVER['PHP_SELF'], 0, strrpos($_SERVER['PHP_SELF'], '/'))));
    
  • template/default/common/header.htm

    查找: http:// 全部替换为: https://

Discuz 安装全流程 CentOS+Docker+PHP+Nginx+Mariadb相关推荐

  1. (一)Ubuntu安装详细教程(从镜像制作到NVIDIA驱动安装全流程)——超详细的图文教程

    Ubuntu安装详细教程(从下载镜像到安装NVIDIA驱动) 1.下载镜像文件 2.制作硬盘镜像 2.1 安装UltraISO并打开ISO文件 2.2 制作硬盘镜像 2.3 检查是否成功 3.划分磁盘 ...

  2. R语言Bioconductor安装全流程

    R语言Bioconductor安装全流程 作为一只生物狗,R语言对于生物数据分析真的很重要!如果你翻翻生物专业研究生的朋友圈,你的感觉一定是: 满世界都在学R语言: 满世界都在吐槽R包难装! 下面给大 ...

  3. 阿里云服务器域名http升级为https访问,SSL证书下载安装全流程

    阿里云服务器域名http升级为https访问,SSL证书下载安装全流程 目录 阿里云服务器域名http升级为https访问,SSL证书下载安装全流程 1.背景 2.阿里云下载安装SSL证书流程 2.1 ...

  4. CentOS 8通过DNF命令安装最新版的LNMP(Linux+Nginx+MariaDB+PHP)

    今天给大家讲解下如何安装LNMP ,首先呢我们要知道上面是DNF命令是什么. DNF是什么? YUM是什么? DNF和YUM的区别,为什么用DNF代替YUM? 安装Nginx 安装PHP7.4 安装M ...

  5. CentOS7+CDH5.14.0安装全流程记录,图文详解全程实测-8CDH5安装和集群配置

    Cloudera Manager Server和Agent都启动以后,就可以进行CDH5的安装配置了.  准备文件 从 http://archive.cloudera.com/cdh5/parcels ...

  6. CentOS7+CDH5.14.0安装全流程记录,图文详解全程实测-1虚拟机安装及环境初始化

    1.软件准备: VMware-workstation-full-14.1.2-8497320.exe CentOS-7-x86_64-DVD-1804.iso 2.VMare激活码: AU5WA-0E ...

  7. 达梦数据库安装全流程

    需要安装达梦数据库获得一些资料,所以要新安装一些软件.数据库等等.大概的流程就是安装DM6-新建数据库-导入文件-链接到可视化文件.下面对每个步骤都深入介绍相关的流程. (1)安装软件 在[DM6]压 ...

  8. Linux | Ubuntu 20.04安装ipopt和cppAD | 安装全流程+报错解决

    文章目录 参考资料 1. Ipopt安装 1. 方式1: 命令行安装 2. 方式2:源码安装 3. 方式3:源码安装 4. Ipopt测试 5. 报错修复 2. CppAD安装 1. 方式1:命令行安 ...

  9. Centos7.9网络配置及图形界面的安装全流程

    Centos网络配置及图形界面安装 背景 Centos的网络配置(NAT模式) 1.核查子网掩码.IP网段.网关.网卡MAC地址 2.修改网络配置文件 3.安装net-tools工具(含*Ifconf ...

最新文章

  1. node-webkit File Dialog
  2. 详解mysql int类型的长度值问题
  3. 【今晚7点】:圆桌PI回归 继续聊聊开源的故事
  4. window screen (获取屏幕信息)
  5. sql number转varchar_MySQL 指南之 SQL 语句基础
  6. JAVA-数据类型-复习
  7. matlab com组件 发布,matlab生成com组件
  8. 《Spring技术内幕》——1.2节Spring的设计目标
  9. 巧用G6FTPServer账号***台湾某图书服务器
  10. windows、ubuntu、Red Hat、Solaris 单网卡绑定多个IP
  11. 数据挖掘技术、方法及应用
  12. 用react-custom-scrollbars插件美化 滚动条
  13. Java是如何存储元素的(3)—Map集合存储数据原理(为什么HashMap集合的key部分的特点是无序,不可重复)
  14. Zxing扫描条形码后得到结果前面多了一个0的问题
  15. 案例:用python将中文翻译的和英文原文合成新的word文档
  16. 后端存储课程笔记(大量实战经验)
  17. 如何成为小型咖啡店的优秀老板?需具备这6个特质
  18. STM32串口读取一帧数据USART_IT_IDLE
  19. GDAL中的地理坐标系、投影坐标系及其相互转换
  20. @Target、@Retenrion注解

热门文章

  1. oracle row_number函数操作(含实例)
  2. 二级目录部署springboot项目
  3. 网络编程-C/S、B/S结构、网络通讯
  4. python将时间戳转化为时间格式_python时间戳转换日期格式的方法是什么
  5. 海贼王热血航线服务器维护4月,《航海王热血航线》4月29日停服更新公告
  6. 移远BC95使用CoAP协议接入华为IoT平台(NB-IoT专栏—进阶篇1)
  7. OpenCV 变换整幅图像的warpPerspective()函数——中心化坐标表示
  8. Terminate快捷键
  9. python怎么切片提取_彻底搞懂Python切片操作
  10. .NetCore DBFirst