我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Discuz 安装全流程 CentOS + Docker + PHP + Nginx + Mariadb

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Discuz 安装全流程 CentOS + Docker + PHP + Nginx + Mariadb

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

文章目录


系统环境: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-class="lazy" data-src https://mirrors.tuna.tsinghua.edu.cn/debian/ buster main contrib non-freedeb https://mirrors.tuna.tsinghua.edu.cn/debian/ buster-updates main contrib non-free# deb-class="lazy" data-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-class="lazy" data-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-class="lazy" data-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/class="lazy" data-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://

来源地址:https://blog.csdn.net/weixin_43529394/article/details/125539660

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Discuz 安装全流程 CentOS + Docker + PHP + Nginx + Mariadb

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

通过Docker Compose、Nginx和MariaDB实现PHP应用程序的安全加密

在当今数字化时代,数据安全是一个非常重要的问题。对于许多应用程序而言,保护用户数据和敏感信息的安全是不可忽视的。本文将介绍如何使用Docker Compose、Nginx和MariaDB来实现PHP应用程序的安全加密。同时,我们还会提供一些
2023-10-21

使用Docker Compose、Nginx和MariaDB实现PHP应用程序的安全加固

随着网络攻击和数据泄漏的频繁发生,保护应用程序和数据库的安全变得愈发重要。在PHP应用程序中,使用Docker Compose、Nginx和MariaDB可以实现安全加固,并提供一定的安全保护措施。本文将介绍如何使用这些工具进行安全加固,并
2023-10-21

使用Docker Compose、Nginx和MariaDB实现PHP应用程序的快速部署流程

摘要:本文将介绍如何使用Docker Compose、Nginx和MariaDB实现快速部署PHP应用程序的流程。我们将使用Docker Compose来定义和管理容器化应用程序的配置,Nginx作为Web服务器,MariaDB作为数据库。
2023-10-21

使用Docker Compose、Nginx和MariaDB实现PHP应用程序的自动化部署流程

摘要:本文旨在介绍如何使用Docker Compose、Nginx和MariaDB来自动化部署PHP应用程序。我们将使用Docker Compose来管理容器化的应用程序,并使用Nginx作为反向代理服务器,同时与MariaDB数据库集成。
2023-10-21

Docker Compose、Nginx和MariaDB的最佳实践:部署PHP应用程序的流程整合

引言:随着云计算和容器化技术的迅速发展,Docker已成为了现代化开发和部署应用程序的一种重要方式。在众多的Docker工具中,Docker Compose作为一个编排容器服务的工具,被广泛应用于多容器应用的部署和管理。而Nginx和Mar
2023-10-21

Docker安装Nginx并部署及MySQL容器构建全过程

本指南详细介绍了在Docker环境中安装Nginx并部署MySQL容器的步骤。从安装Docker开始,逐步讲解了运行Nginx容器、构建MySQL镜像和运行MySQL容器。还包括连接到MySQL、创建数据库和用户的说明。最后,指南提供了配置Nginx反向代理MySQL容器的步骤,并指导读者进行测试。希望这篇指南对读者部署自己的Docker容器有所帮助,并让他们了解使用Docker管理基础设施的优势。
Docker安装Nginx并部署及MySQL容器构建全过程
2024-04-02

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录