【开发者空间实践指导】基于云主机部署高可用Discuz论坛

举报
开发者空间小蜜蜂 发表于 2025/01/07 16:28:49 2025/01/07
561 0 0
【摘要】 本实验通过在华为云主机上搭建LAMP(Linux+Apache+MySQL+PHP)环境,部署Discuz高可用论坛场景,提升开发者在云主机上部署应用的能力。

一、案例介绍

Crossday Discuz! Board(以下简称 Discuz!)是一套通用的社区论坛软件系统,用户可以通过简单的设置和安装,在互联网上搭建起具备完善功能、很强负载能力和高度定制的论坛服务。

华为云开发者空间是华为云为初级开发者打造的入门级开发技能训练平台,旨在培养开发者通过使用云主机提升开发者个人能力和技能。

本文通过华为云主机上搭建LAMP(Linux+Apache+MySQL+PHP)环境部署Discuz高可用论坛场景,提升开发者在云主机上部署应用的能力。

二、免费领取云主机

如您还没有云主机,可点击链接 ,根据领取指南进行操作。

如您已领取云主机,可直接开始实验。

三、实验流程

说明:

①下载Discuz论坛代码到云主机;

②在云主机上配置基础环境,安装MySQL数据库和数据缓存服务Redis;

③配置PHP,在线安装Discuz论坛;

④安装和配置HaProxy实现高可用;

⑤验证Discuz论坛的高可用特性。

四、实验资源

本次实验预计花费总计0元。

云资源

消耗/时

时长

开发者空间-云主机

免费

1小时

五、安装配置基础环境

5.1 在云主机上安装Redis

Redis是一款高性能缓存组件,在Discuz论坛中提供数据缓存能力,提升论坛的响应速度,优化用户体验。

进入云主机后,在桌面鼠标右击,在菜单中点击 “在终端中打开”,打开命令行工具。

1) 在命令行中输入命令安装redis

sudo apt-get -y install redis-server

2) 输入命令确认redis已经安装并且服务正在运行

sudo systemctl status redis-server

确认Active为running状态,然后按q退出即可。

3) 修改Redis配置文件置密码

安装好redis后,需要给redis服务器设置密码,先找到redis的配置文件,按照上面方式安装的redis,配置文件路径为/etc/redis/redis.conf,使用命令“sudo vim /etc/redis/redis.conf”打开并编辑配置文件,并找到“requirepass”这一行,把前面的注释符号“#”删除,并将“1qaz2wsx”改成想要设置的密码。

执行命令:

sudo vim /etc/redis/redis.conf

然后按 Esc按键,输入 :wq保存文件并退出。

4) 重启redis

sudo systemctl restart redis-server

5.2 安装配置MySQL

MySQL是一款高性能关系数据库,论坛使用MySQL做数据持久化存储。

1) 安装MySQL、启动并查看服务状态。

sudo apt update
sudo apt install -y mysql-server

sudo systemctl start mysql
sudo systemctl status mysql

确认Active为running状态,即可按q退出查看页面。

2) 登录mysql

sudo mysql -uroot

3) 登录成功后,执行如下命令,修改默认的MySQL密码

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password;
alter user root@localhost identified with mysql_native_password by '1qaz2wsx';

说明:其中 1qaz2wsx 为配置的数据库密码,后面登录的时候需要使用。

4) 退出MySQL

命令行中输入quit,退出MySQL客户端。

quit

5) 重新登录数据库,设置数据库访问权限

   sudo mysql -h 127.0.0.1 -uroot -p 

输入命令后回车,然后输入自己设置的密码,回车后登录成功。

登录成功完成MySQL安装。

六、安装论坛

6.1 下载并安装PHP

PHP是一种广泛用于Web开发的开源服务器端脚本语言 它嵌入在HTML中,可以与数据库交互,生成动态网页内容。PHP代码在服务器上执行,并将结果发送到客户端浏览器,从而实现网页的动态交互功能。Discuz论坛基于PHP语言开发。

1) 执行安装命令

sudo apt install -y software-properties-common

安装第三方源,更新安装包列表

sudo add-apt-repository ppa:ondrej/php
sudo apt update

安装相关包apache PHP,MySQL

sudo apt-get  install -y apache2 php8.0 php8.0-fpm php8.0-mysql php8.0-xml libapache2-mod-php8.0

2) 启动apache2服务

sudo systemctl start apache2

6.2 在线安装论坛

1) 命令行运行,回到家目录

cd 

2) 下载论坛代码并解压

wget -O Discuz_X3.5_SC_UTF8_20240520.zip https://gitee.com/Discuz/DiscuzX/attach_files/1773967/download
unzip Discuz_X3.5_SC_UTF8_20240520.zip

执行以下命令,将解压后的“upload”中的所有文件,复制到“/var/www/html/”目录。

sudo cp -R upload/* /var/www/html/

目录文件权限和属主修改

sudo chmod -R 777 /var/www/html
sudo chown -R www-data:www-data /var/www/html

3) 重启apache2服务

sudo systemctl restart apache2

4) 浏览器访问 http://127.0.0.1/install

5) 确认状态正常后,进入下一步设置运行环境。初次安装选择全部安装Discuz! X(UCenter Server)”,进入下一步开始创建数据库。

6) 相关参数配置

参数名称

参数值

说明

数据库服务器地址

127.0.0.1

本地安装的mysql服务

数据库名

ultrax

数据库用户名

root

数据库密码

1qaz2wsx

上文配置的密码

数据表前缀

pre_

系统邮箱Email

admin@admin.com

管理员信息

管理员账号

admin

管理员密码

1qaz2wsx

管理员Email

admin@admin.com

7) 配置完成进入主页

如无法正常跳转,访问地址

http://127.0.0.1/index.php

8) 启用redis

执行以下命令修改配置文件。

sudo vim /var/www/html/config/config_global.php

按i进入编辑模式,在下图位置。

修改内容为:

$_config['memory']['redis']['server'] = '127.0.0.1'
$_config['memory']['redis']['requirepass'] = '1qaz2wsx'

按 Esc 退出编辑模式, 再按 :wq 保存退出。

9) 修改完成后重启apache服务

sudo systemctl restart apache2

至此,第一个虚拟主机配置完成。

6.3 配置第二个虚拟机

实验的目标是验证论坛部署的高可用性,需要验证在其中有论坛服务不可访问的时候,其他正常的服务是可以提供服务,因此需要后端启动多个论坛程序。所以需要配置多个虚拟主机。

1) 创建新的虚拟主机配置文件:

sudo vim /etc/apache2/sites-available/second-vhost.conf

配置内容:

<VirtualHost *:8080>
    ServerAdmin second@localhost
    DocumentRoot /var/www/html-second
    ErrorLog ${APACHE_LOG_DIR}/error-second.log
    CustomLog ${APACHE_LOG_DIR}/access-second.log combined
</VirtualHost>

复制完成后按 Esc ,输入 :wq 保存退出

2) 创建虚拟主机的根目录并设置权限:

sudo mkdir -p /var/www/html-second
sudo chown -R www-data:www-data /var/www/html-second
sudo chmod -R 755 /var/www/html-second

3) 启用新的虚拟主机:
使用 a2ensite 命令启用新的虚拟主机配置文件。

sudo a2ensite second-vhost.conf

4) 增加监听端口

sudo vim /etc/apache2/ports.conf  

    

Listen 8080

完成后按 Esc ,输入 :wq 保存后退出

5) 重启apache2服务

sudo systemctl restart apache2

6) 验证端口808080均已正常启动

sudo netstat -tlnp

发现80端口和8080端口均已启动。

7) 使用云主机的浏览器分别访问两个实例。复制地址到浏览器。

http://127.0.0.1/index.php
http://127.0.0.1:8080/index.php

结果分别如下,说明2个实例均已启动成功。

七、高可用配置

7.1 HaProxy安装

HAProxy 是一款具备高并发、高性能的TCP HTTP 负载均衡器‌。它能够支持万级以上的并发连接,适用于各种规模的网站和应用程序。HAProxy的主要功能包括负载均衡、会话保持、自动故障切换以及基于正则表达式的路由决策等。‌

1) 执行安装命令:

sudo apt-get -y install haproxy

2) 配置文件备份:

sudo mv /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg1

3) 创建新的配置文件

sudo vim /etc/haproxy/haproxy.cfg

配置文件内容如下,复制内容到上面的文件中

global
	log /dev/log	local0
	log /dev/log	local1 notice
	chroot /var/lib/haproxy
	stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners
	stats timeout 30s
	user haproxy
	group haproxy
	daemon

	# Default SSL material locations
	ca-base /etc/ssl/certs
	crt-base /etc/ssl/private

	# See: https://ssl-config.mozilla.org/#server=haproxy&server-version=2.0.3&config=intermediate
        ssl-default-bind-ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
        ssl-default-bind-ciphersuites TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256
        ssl-default-bind-options ssl-min-ver TLSv1.2 no-tls-tickets

defaults
	log	global
	mode	http
	option	httplog
	option	dontlognull
        timeout connect 5000
        timeout client  50000
        timeout server  50000
	errorfile 400 /etc/haproxy/errors/400.http
	errorfile 403 /etc/haproxy/errors/403.http
	errorfile 408 /etc/haproxy/errors/408.http
	errorfile 500 /etc/haproxy/errors/500.http
	errorfile 502 /etc/haproxy/errors/502.http
	errorfile 503 /etc/haproxy/errors/503.http
	errorfile 504 /etc/haproxy/errors/504.http
	balance source

frontend http-in
    bind *:90
    default_backend servers
 
backend servers
    mode http
    option redispatch
    option abortonclose
    balance source
    option httpchk GET /index.php 
    server server1 127.0.0.1:8080 weight 6 check inter 2000 rise 2 fall 3
    server server2 127.0.0.1:80 weight 6 check inter 2000 rise 2 fall 3

复制完成后按 Esc ,输入 :wq 保存退出

4) 启动haproxy

sudo systemctl restart haproxy

5) 检查服务启动状态

sudo systemctl status haproxy

服务运行正常,确定服务为running状态,按q键退出查看。

6) 验证访问,浏览器中输入访问地址

http://127.0.0.1:90/index.php

访问结果如下:

7.2 验证高可用特性

要验证服务的高可用性,需要分两步走:

第一步:验证后端单独8080端口的可用性,此时80端口关闭

第二步:验证后端单独80端口的可用性,此时8080端口关闭

7.2.1 关闭80端口,验证8080端口可用性

1) 修改配置文件

sudo vim /etc/apache2/ports.conf

按 i 进入编辑模式,注释第一行(Listen 80)

取消80端口监听

修改完成后,按Esc 退出编辑模式,再按 :wq 保存 退出。

2) 退出后重启apache2服务。

sudo systemctl restart apache2

3) 通过浏览器访问80端口

http://127.0.0.1:80/index.php

效果如下80端口,发现80端口不可访问。

4) 访问90端口,效果如下

以上情况说明在80端口服务不可用的情况下,集群可以正常访问。

7.2.2 关闭8080端口监听,启用80端口

1) 修改配置文件

sudo vim /etc/apache2/ports.conf

按 i 进入编辑模式,注释第二行(Listen 8080)

取消8080端口监听

修改完成后,按Esc 退出编辑模式,再按 :wq 保存 退出。

2) 退出后重启apache2服务。

sudo systemctl restart apache2

3) 通过浏览器访问8080端口

http://127.0.0.1:8080/index.php

效果如下8080端口,发现8080端口不可访问。

4) 访问90端口,效果如下

http://127.0.0.1:90/index.php

以上情况说明在8080端口服务不可用的情况下,集群可以正常访问。

至此,实验全部完成。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

作者其他文章

评论(0

抱歉,系统识别当前为高风险访问,暂不支持该操作

    全部回复

    上滑加载中

    设置昵称

    在此一键设置昵称,即可参与社区互动!

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。