828华为云征文|华为云Flexus云服务器X实例之openEuler系统下部署Tailchat开源聊天系统

前言


华为云Flexus云服务器X实例的支持下,本次实践将展示如何在先进的openEuler系统环境中部署TailChat开源聊天系统。作为面向中小企业和开发者的柔性算力云服务器,Flexus X实例凭借其卓越的性能和灵活性,为部署过程提供了坚实的保障。TailChat这款专为团队协作设计的应用,以其强大的可扩展性和易用性,将成为展示华为云强大技术实力的理想平台。通过这一部署,我们将共同见证华为云在技术创新和优质服务方面的领先地位。


一、Flexus云服务器X实例介绍

1.1 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实例针对不同的使用场景展现出其独特的优势:

  1. 电商直播:利用X实例搭建电商交易平台,可以有效应对电商市场的瞬息万变,从容处理业务压力波动,确保交易过程顺畅无阻。

  2. 企业建站:面向博客、论坛和企业门户等应用场景,X实例帮助企业高效传播价值信息,促进信息共享与交流,支持构建多功能传播和交互平台。

  3. 个人开发测试:开发者在开发和测试过程中所需的环境资源可以通过X实例便捷获取,不仅提高了搭建效率,而且降低了成本。

  4. 游戏服务器:适用于搭建游戏后台服务器,强大的计算能力可以轻松应对大量玩家同时在线的情况,同时支持平滑扩容,快速应对玩家数量增长的需求,以及提供出色的网络加速能力以提升用户体验。

二、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实例openEuler192.168.0.16926.1.3openEuler 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实例所带来的超值优惠吧,体验技术与创新的美妙融合。无论是高性能计算,还是智能监控,华为云在每一个细节之处都展现出对卓越品质的不懈追求。选择华为云,意味着技术实力将得到提升,这更是迈向未来的重要一步。让我们携手共进,在云端谱写崭新的辉煌篇章!


在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

江湖有缘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值