828华为云征文|华为云Flexus云服务器X实例之openEuler系统部署Tailchat开源聊天系统
前言
在
华为云Flexus云服务器X实例
的支持下,本次实践将展示如何在先进的openEuler系统环境中部署TailChat开源聊天系统。作为面向中小企业和开发者的柔性算力云服务器,Flexus X实例凭借其卓越的性能和灵活性,为部署过程提供了坚实的保障。TailChat这款专为团队协作设计的应用,以其强大的可扩展性和易用性,将成为展示华为云强大技术实力的理想平台。通过这一部署,我们将共同见证华为云在技术创新和优质服务方面的领先地位。
一、Flexus云服务器X实例介绍
1.1 Flexus云服务器X实例简介
- 官网地址: 华为云Flexus云服务器X实例
华为云
Flexus云服务器X实例
是新一代面向中小企业和开发者的柔性算力云服务器。它能够智能感知业务负载的变化,自动调整资源配置。这款服务器特别适用于中低负载的应用场景,例如电商直播、企业网站建设、开发测试环境、游戏服务器以及音视频服务等。X实例的设计理念旨在为用户提供更加灵活和高效的计算资源管理方式。通过智能调整,它可以更好地满足不同业务的需求,提高资源利用率。
1.2 Flexus云服务器X实例特点
-
提供丰富的公共镜像:Flexus云服务器X实例提供多种公共镜像供用户选择,方便快速部署各种应用和服务。
-
可灵活自定义vCPU内存配比:用户可以根据自己的需要灵活调整虚拟CPU和内存的配比,以满足不同场景的需求。
-
智能感知业务动态升降配:Flexus云服务器X实例能够智能感知业务的负载情况,并根据需要自动升降配,以满足业务的需求,提高系统的稳定性和性能。
-
负载范围更高:相对于Flexus应用服务器L实例,Flexus云服务器X实例能够处理更高的负载,适用于更复杂和繁忙的场景。
1.3 Flexus云服务器X实例使用场景
Flexus云服务器X实例针对不同的使用场景展现出其独特的优势:
-
电商直播:利用X实例搭建电商交易平台,可以有效应对电商市场的瞬息万变,从容处理业务压力波动,确保交易过程顺畅无阻。
-
企业建站:面向博客、论坛和企业门户等应用场景,X实例帮助企业高效传播价值信息,促进信息共享与交流,支持构建多功能传播和交互平台。
-
个人开发测试:开发者在开发和测试过程中所需的环境资源可以通过X实例便捷获取,不仅提高了搭建效率,而且降低了成本。
-
游戏服务器:适用于搭建游戏后台服务器,强大的计算能力可以轻松应对大量玩家同时在线的情况,同时支持平滑扩容,快速应对玩家数量增长的需求,以及提供出色的网络加速能力以提升用户体验。
二、Tailchat介绍
2.1 Tailchat简介
TailChat是一款专为团队协作设计的下一代即时通讯(IM)应用程序。它不仅是一个简单的聊天工具,更是一个可扩展性强、易于使用且完全免费开源的平台。
2.2 Tailchat特点
-
隐私保护:TailChat重视用户的隐私安全,只有经过邀请的成员才能加入特定的群组或频道,这确保了信息交流的安全性。
-
好友添加机制:为了防止陌生人随意添加好友,TailChat采用了昵称加随机字符串的方式,增加了陌生人添加好友的难度,进一步保障用户隐私。
-
双层群组空间:TailChat支持创建多级群组空间,通过面板来划分不同的讨论主题,使得信息分类更加清晰。
-
高度定制化:用户可以通过拖拽操作来创建独特的群组空间布局,并且可以利用丰富的插件来增强功能,满足个性化需求。
-
多功能性:无论是正式的工作场景还是轻松的社交场合,TailChat都可以通过不同的插件组合来适应不同需求,服务对象既包括个人用户也涵盖企业用户。
-
微服务架构:TailChat采用后端微服务架构,这使得它能够轻松地应对大规模部署的需求,无需担心用户增长带来的技术挑战。
三、本次实践介绍
3.1 本次实践简介
1.本次实践为个人测试学习环境,旨在快速部署应用,生产环境请谨慎;
2.本次实践环境为华为云Flexus云服务器X实例,使用的操作系统为openEuler 22.03 LTS;
3.本次实践在Docker环境下部署Tailchat开源聊天系统。
3.2 本次环境规划
服务器类别 | 公共镜像选择 | 内网IP地址 | Docker版本 | 操作系统版本 |
---|---|---|---|---|
华为云Flexus云服务器X实例 | openEuler | 192.168.0.169 | 26.1.3 | openEuler 22.03 LTS |
四、远程连接华为云Flexus云服务器X实例
4.1 购买Flexus云服务器X实例
进入华为云官网:https://activity.huaweicloud.com/,登录自己的华为云账号,进入华为云首页。
- 镜像选择:本次实践使用openEuler作为公共镜像,请根据实际需求自定义选择合适的操作系统镜像。
- 镜像切换说明:参考的公共镜像原为Huawei Cloud EulerOS,但本次实践中已切换至openEuler。
- 基础配置参考:购买时可参考以下基础配置进行选择。
1.计费模式:包年/包月,这里选择此模式;
2.区域:华北—北京四,可用区:随机即可;
3.实例规格:关闭性能模式,选择自定义,4vCPUs | 12GiB;
4.镜像:公共镜像,Huawei Cloud EulerOS,版本,Huawei Cloud EulerOS 2.0 Standard 64 bit(10GiB);
5.应用加速:这里选择不加速;
6.存储:系统盘,通用型SSD100G;
7.网络:选择默认即可;
8.安全组:选择默认即可;
9.弹性公网IP:选择“现在购买”,全动态BGP,带宽3Mbit/s;
10.云服务器名称:可自定义设置,这里选择默认的名称;
11.登录凭证:自定义设置密码;
12.云备份:暂不购买;
其余配置默认即可。
- 确认配置及购买:在确认配置页面仔细检查Flexus云服务器X实例的各项设置,确保无误后点击“立即购买”,完成付款流程即可成功购买。
4.2 查看Flexus云服务器X实例状态
进入华为云Flexus云服务的控制台,选择Flexus云服务器X实例,可以看到已经正在运行的Flexus云服务器X实例。
4.3 使用Xshell远程连接
- 复制Flexus云服务器X实例的弹性公网IP地址
- 主要填写Flexus云服务器X实例的弹性公网IP地址,输入其登录用户和密码,连接即可。
五、检查Flexus云服务器X实例系统环境
5.1 检查操作系统版本
检查Flexus云服务器X实例的操作系统版本,本次实践选择的版本为
openEuler 22.03 LTS
[root@flexusx-51a1 ~]# cat /etc/os-release
NAME="openEuler"
VERSION="22.03 LTS"
ID="openEuler"
VERSION_ID="22.03"
PRETTY_NAME="openEuler 22.03 LTS"
ANSI_COLOR="0;31"
5.2 检查内核版本
检查当前操作系统的内核版本,当前内核版本为
5.10.0-60.109.0.136.oe2203.x86_64
。
[root@flexusx-51a1 ~]# uname -r
5.10.0-60.109.0.136.oe2203.x86_64
5.3 检查Docker版本
部署该项目需要提前安装Docker环境,检查Docker版本,当前安装的Docker版本为
26.1.3
。
[root@flexusx-51a1 ~]# docker -v
Docker version 26.1.3, build b72abbb
5.4 检查Docker服务状态
检查Docker服务状态,确保Docker服务正常。
[root@flexusx-51a1 ~]# systemctl status docker
● docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
Active: active (running) since Wed 2024-09-04 21:23:44 CST; 15min ago
TriggeredBy: ● docker.socket
Docs: https://docs.docker.com
Main PID: 10018 (dockerd)
Tasks: 10
Memory: 196.3M
CGroup: /system.slice/docker.service
└─ 10018 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
5.5 检查Docker compose版本
检查docker compose版本,当前默认安装版本为v2.27.0`。
[root@flexusx-51a1 ~]# docker compose version
Docker Compose version v2.27.0
六、构建容器镜像
6.1 拉取项目
创建目录/docker/,在此目录下下载Tailchat项目。
mkdir /docker && cd /docker
执行以下命令,在Github下载Tailchat项目。
git clone https://github.com/msgbyte/tailchat.git
6.2 查看项目内容
使用tail命令,查看Tailchat项目内容。
[root@flexusx-51a1 docker]# tree -L 1 ./tailchat/
./tailchat/
├── apps
├── CHANGELOG.md
├── client
├── codemagic.yaml
├── commitlint.config.js
├── docker
├── docker-compose.env
├── docker-compose.yml
├── Dockerfile
├── LICENSE
├── package.json
├── packages
├── page
├── patches
├── pnpm-lock.yaml
├── pnpm-workspace.yaml
├── README.md
├── README.zh.md
├── server
├── tsconfig.json
├── vercel.json
└── website
8 directories, 14 files
6.3 编辑变量文件
在部署目录/docker/tailchat下,可以看到存在变量文件
docker-compose.env
。这里选择选择默认配置,有需要可自行修改。
- 进入项目目录
[root@flexusx-51a1 docker]# cd tailchat/
[root@flexusx-51a1 tailchat]# ls
apps codemagic.yaml docker-compose.env LICENSE page pnpm-workspace.yaml server website
CHANGELOG.md commitlint.config.js docker-compose.yml package.json patches README.md tsconfig.json
client docker Dockerfile packages pnpm-lock.yaml README.zh.md vercel.json
- 修改docker-compose.env文件
vim docker-compose.env
LOGGER=true
LOGLEVEL=info
SERVICEDIR=services
TRANSPORTER=redis://redis:6379
REDIS_URL=redis://redis:6379
MONGO_URL=mongodb://mongo/tailchat
SECRET=
# file
API_URL=https://tailchat-nightly.moonrailgun.com
# minio
MINIO_URL=minio:9000
MINIO_USER=tailchat
MINIO_PASS=com.msgbyte.tailchat
# SMTP
SMTP_SENDER=
SMTP_URI=
# metrics
PROMETHEUS=1
# Admin
ADMIN_USER=tailchat
ADMIN_PASS=
6.4 编辑docker-compose.yml文件
查看docker-compose.yml文件内容,这里选择默认配置,不作修改。
version: "3.5"
services:
# Tailchat Core Services
service-core:
build:
context: .
image: tailchat
restart: unless-stopped
env_file: docker-compose.env
environment:
SERVICES: core/gateway,core/user/*.service.js,core/group/*.service.js,core/chat/*.service.js,core/file,core/plugin/registry,core/config
PORT: 3000
depends_on:
- mongo
- redis
- minio
labels:
- "traefik.enable=true"
- "traefik.http.routers.api-gw.rule=PathPrefix(`/`)"
- "traefik.http.services.api-gw.loadbalancer.server.port=3000"
networks:
- internal
# Open Platform
service-openapi:
build:
context: .
image: tailchat
restart: unless-stopped
env_file: docker-compose.env
environment:
SERVICES: openapi/app,openapi/bot,openapi/integration,openapi/oidc/oidc
OPENAPI_PORT: 3003
OPENAPI_UNDER_PROXY: "true"
depends_on:
- mongo
- redis
- minio
labels:
- "traefik.enable=true"
- "traefik.http.routers.openapi-oidc.rule=PathPrefix(`/open`)"
- "traefik.http.services.openapi-oidc.loadbalancer.server.port=3003"
networks:
- internal
# Plugin Service (All Plugins)
service-all-plugins:
build:
context: .
image: tailchat
restart: unless-stopped
env_file: docker-compose.env
environment:
SERVICEDIR: plugins
depends_on:
- mongo
- redis
- minio
networks:
- internal
# Database
mongo:
image: mongo:4
restart: on-failure
volumes:
- data:/data/db
networks:
- internal
# Data cache and Transporter
redis:
image: redis:alpine
restart: on-failure
networks:
- internal
# Persist Storage
minio:
image: minio/minio
restart: on-failure
networks:
- internal
environment:
MINIO_ROOT_USER: tailchat
MINIO_ROOT_PASSWORD: com.msgbyte.tailchat
volumes:
- storage:/data
command: minio server /data --console-address ":9001"
# Router
traefik:
image: traefik:v2.1
restart: unless-stopped
command:
- "--api.insecure=true" # Don't do that in production!
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
- "--entryPoints.web.address=:80"
- "--entryPoints.web.forwardedHeaders.insecure" # Not good
ports:
- 11000:80
- 127.0.0.1:11001:8080
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
networks:
- internal
- default
networks:
internal:
name: tailchat-internal
volumes:
data:
storage:
6.5 修改Dockerfile文件
我们修改Dockerfile文件,增加国内镜像源。
vim Dockerfile
FROM node:18.18.0-alpine
# use with --build-arg VERSION=xxxx
ARG VERSION
# Working directory
WORKDIR /app/tailchat
RUN ulimit -n 10240
# Install dependencies
RUN npm config set registry https://registry.npmmirror.com
RUN npm install -g pnpm@8.3.1
RUN npm install -g tailchat-cli@latest
# Add mc for minio
RUN wget https://dl.min.io/client/mc/release/linux-amd64/mc -O /usr/local/bin/mc
RUN chmod +x /usr/local/bin/mc
# Install plugins and sdk dependency
COPY ./tsconfig.json ./tsconfig.json
COPY ./packages ./packages
COPY ./server/packages ./server/packages
COPY ./server/plugins ./server/plugins
COPY ./server/package.json ./server/package.json
COPY ./server/tsconfig.json ./server/tsconfig.json
COPY ./package.json ./pnpm-lock.yaml ./pnpm-workspace.yaml ./.npmrc ./
COPY ./patches ./patches
RUN pnpm install --frozen-lockfile
# Copy client
COPY ./client ./client
RUN pnpm install --frozen-lockfile
# Copy all source
COPY . .
RUN pnpm install --frozen-lockfile
# Build and cleanup (client and server)
ENV NODE_ENV=production
ENV VERSION=$VERSION
RUN pnpm build
# web static service port
EXPOSE 3000
# Start server, ENV var is necessary
CMD ["pnpm", "start:service"]
6.6 构建镜像
提前拉取相关镜像,加快构建速度。
docker pull traefik:v2.1
docker pull node:18.18.0-alpine
docker pull mongo:4
docker pull redis:alpine
docker pull minio/minio
docker-compose.yaml中有三个镜像需要构建,我们执行以下命令,进行构建相关镜像。
docker compose build
6.7 查看本地镜像
查看已经构建镜像,可以看到本地刚构建好的3个镜像。
docker images
七、部署Tailchat应用
7.1 创建Tailchat相关容器
使用docker compose方式,快速创建Tailchat容器组。
docker compose up -d
7.2 查看容器状态
查看Tailchat容器相关状态,确保所有容器都正常运行。
[root@flexusx-51a1 tailchat]# docker compose ps
WARN[0000] /docker/tailchat/docker-compose.yml: `version` is obsolete
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
tailchat-minio-1 minio/minio "/usr/bin/docker-ent…" minio 11 minutes ago Up 11 minutes 9000/tcp
tailchat-mongo-1 mongo:4 "docker-entrypoint.s…" mongo 11 minutes ago Up 11 minutes 27017/tcp
tailchat-redis-1 redis:alpine "docker-entrypoint.s…" redis 11 minutes ago Up 11 minutes 6379/tcp
tailchat-service-all-plugins-1 tailchat "docker-entrypoint.s…" service-all-plugins 11 minutes ago Up 11 minutes 3000/tcp
tailchat-service-core-1 tailchat "docker-entrypoint.s…" service-core 11 minutes ago Up 11 minutes 3000/tcp
tailchat-service-openapi-1 tailchat "docker-entrypoint.s…" service-openapi 11 minutes ago Up 11 minutes 3000/tcp
tailchat-traefik-1 traefik:v2.1 "/entrypoint.sh --ap…" traefik 11 minutes ago Up 11 minutes 0.0.0.0:11000->80/tcp, :::11000->80/tcp, 127.0.0.1:11001->8080/tcp
八、访问Tailchat网页
8.1 关闭防火墙与selinux
- 关闭防火墙
systemctl stop firewalld && systemctl disable firewalld
- 关闭selinux
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
8.2 Flexus云服务器X实例安全组配置
进入Flexus云服务器X实例控制台,进行安全组规则配置。在安全组入方向规则上,放行11000和11001端口。
8.3 访问Tailchat初始页
浏览器访问地址:http://弹性公网IP地址:11000,将IP替换为自己服务器IP地址。浏览器打开后,进入Tailchat初始页。
8.4 访问Tailchat首页
在登录页,选择注册账号,自定义设置即可。账号注册完毕后,会自动跳转到Tailchat首页。
九、Tailchat的基本使用
9.1 注册第二个账号
我们在本机的另外一个浏览器或者另外一台电脑打开Tailchat网页,重新注册账号。
9.2 添加好友
我们复制刚注册jeven用户的个人标识,用于admin用户查找添加好友。
我们切换到admin用户下,将jeven用户的个人标识粘贴到查找栏,点查找好友。
可以看到已经查询到jeven用户,点击“申请好友”。
我们再次切换到jeven用户,同意好友申请即可。
9.3 发送消息
在好友列表,选择好友,点击发送消息。
输入消息内容,对方可以正常收到。
9.4 创建群组
选择创建群组选项,填写群组名称,确认即可。
邀请用户加入群组,在群组设置中点击“邀请用户”选项。
创建好友加群链接,如下图所示:
复制好友加群链接,发送其他人确认即可。
9.5 插件中心
可以查看插件中心下的所有插件,插件功能可自行探索。
十、使用体验与总结
通过在
华为云Flexus云服务器X实例
上部署TailChat的过程,我们深刻体会到华为云的强大与便捷。作为新一代面向中小企业和开发者的柔性算力云服务器,Flexus X实例以其出色的性能和灵活性,显著提升了部署效率。TailChat在openEuler系统下的顺利安装与运行,不仅验证了其高可扩展性和易用性,也彰显了华为云对开源生态的强有力支持。得益于华为云的稳定性和高效的服务,整个部署流程变得简单快捷,大大缩短了从准备到上线的时间。对于寻求高效云端解决方案的企业和开发者而言,华为云无疑是最佳选择之一,它不仅能满足当前需求,还能支持未来业务的增长与发展。
华为云828 B2B企业节来临,这是一个绝佳的机会。快来探寻Flexus X实例所带来的超值优惠吧,体验技术与创新的美妙融合。无论是高性能计算,还是智能监控,华为云在每一个细节之处都展现出对卓越品质的不懈追求。选择华为云,意味着技术实力将得到提升,这更是迈向未来的重要一步。让我们携手共进,在云端谱写崭新的辉煌篇章!