CentOS 30分钟部署免费在线客服系统
前段时间我发表了一系列文章,开始介绍基于 .net core 的在线客服系统开发过程。期间有一些朋友希望能够给出 Linux 环境的安装部署指导,本文基于 CentOS 7.9 来安装部署。
我详细列出了需要执行的命令的全过程,跟随本文可以在 30 分钟内完成部署。
简介
升讯威在线客服与营销系统是基于 .net core / WPF 开发的一款在线客服软件,宗旨是: 开放、开源、共享。努力打造 .net 社区的一款优秀开源产品。
完整私有化包下载地址
当前版本信息
发布日期: 2023-7-9
数据库版本: 20230402a
通信协议版本: 20220306
服务器版本: 1.11.10.0
客服程序版本: 1.11.2.0
更新程序版本: 1.2.0.0
资源站点版本: 1.6.2.0
Web管理后台版本: 2.0
准备操作系统
- 本文以 CentOS 7.9 为例进行说明,其它版本的 Linux 安装配置过程大同小异。
开放防火墙端口
客服系统默认使用 9527 端口进行通信,如果开启了防火墙,请在防火墙中开放此端口。
也可以更改为其它可用端口号,在后续配置客服系统服务端程序时要做对应的修改。
请确保您所使用的主机服务商提供的防火墙服务中,也开放了对应端口。如阿里云服务器需要在安全组规则中配置。
请使用 MySQL 5.7 或更高版本
安装数据库引擎
- 下载
wget https://dev.mysql.com/get/mysql80-community-release-el8-1.noarch.rpm
如果提示 command not found,则先执行
yum -y install wget
安装
- 安装
sudo yum install mysql80-community-release-el8-1.noarch.rpm -y
sudo yum install mysql-community-server -y
如果提示 command not found,则先执行
yum -y install sudo
安装
如果报 Error: Unable to find a match: mysql-community-server
则先执行yum module disable mysql
然后再执行sudo yum install mysql-community-server -y
启动
sudo systemctl start mysqld
查看安装时生成的临时密码
sudo cat /var/log/mysqld.log |grep password
使用临时密码连接 MySQL
mysql -uroot -p
修改 root 密码
alter user root@localhost identified with mysql_native_password by '你的密码';
安装 Nginx
安装依赖项
安装 gcc
yum -y install gcc
安装 pcre、pcre-devel
yum install -y pcre pcre-devel
安装 zlib
yum install -y zlib zlib-devel
安装 openssl
yum install -y openssl openssl-devel
安装 nginx
- 下载
wget http://nginx.org/download/nginx-1.20.1.tar.gz
如果提示 command not found,则先执行
yum install wget
安装
解压缩
tar zxvf nginx-1.20.1.tar.gz
进入目录
cd nginx-1.20.1
安装和配置,依次执行
./configure
make
make install
如果提示 command not found,则先执行
yum -y install gcc automake autoconf libtool make
安装
设置开机自动启动
进入到 /lib/systemd/system/ 目录
cd /lib/systemd/system/
创建 nginx.service 文件
vim nginx.service
如果提示 command not found,则先执行
yum -y install vim
安装
- 输入以下内容后保存退出
注意其中的 nginx 安装路径
[Unit]
Description=nginx service
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
PrivateTmp=true
[Install]
WantedBy=multi-user.target
内容说明
Description:描述服务
After:描述服务类别
[Service]服务运行参数的设置
Type=forking是后台运行的形式
ExecStart为服务的具体运行命令
ExecReload为重启命令
ExecStop为停止命令
PrivateTmp=True表示给服务分配独立的临时空间
注意:[Service]的启动、重启、停止命令全部要求使用绝对路径
[Install]运行级别下服务安装的相关设置,可设置为多用户,即系统运行级别为3
启动 nginx
systemctl start nginx.service
加入开机自启动
systemctl enable nginx.service
查看服务当前状态
systemctl status nginx.service
安装 .Net Core
配置安装源
sudo rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm
安装
sudo dnf install dotnet-sdk-3.1
如果提示 command not found,则先执行
yum -y install sudo
yum -y install dnf
- 确认安装成功
在命令行输入 dotnet
看到类似如下提示,表示安装成功。
安装依赖库
安装 libgdiplus
安装该组件后访客端页面才可以输出图形验证码。
安装依赖
yum install libgdiplus-devel -y
创建链接
ln -s /usr/lib64/libgdiplus.so /usr/lib/gdiplus.dll
ln -s /usr/lib64/libgdiplus.so /usr/lib64/gdiplus.dll
注意:如果是先启动了服务器主程序(Server),再安装 libgdiplus。需要重新启动 Server 主程序以使 libgdiplus 生效。
创建数据库
数据库建表脚本位于私有化部署安装包中的
数据库建表脚本
目录。
在创建数据库表结构之前,将对应的数据库建表脚本上传到服务器工作目录。
连接数据库引擎
mysql -uroot -p
创建数据库
create database kf;
切换到数据库
use kf
创建数据库表结构
source CreateDatabase_MySql.sql
配置和上传客服系统服务端程序
修改配置文件
将服务端程序上传之前,可先在本地电脑完成对配置文件的修改。
也可以选择先把服务端程序上传后,再通过 vim 手工对配置文件修改。
参阅:主程序配置文件修改维护说明
参阅:资源站点配置文件修改维护说明
参阅:Web 管理后台配置文件修改维护说明
上传服务端程序
在服务器建立目录
cd /
mkdir wwwroot
上传服务器程序
将私有化部署包中的以下目录上传到新建的 wwwroot 目录:
- Management
- Resource
- Server
配置服务器主程序
修改配置文件
将服务端程序上传之前,可先在本地电脑完成对配置文件的修改。
也可以选择先把服务端程序上传后,再通过 vim 手工对配置文件修改。
配置 Nginx
注意:服务端程序使用 5000 端口作为反向代理,请勿占用此端口。
编辑 nginx 配置文件
vim /usr/local/nginx/conf/nginx.conf
在 Server 节点 平级 添加如下内容
注意server_name
处替换为你所使用的域名。
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
upstream dotnet_server_proxy {
server localhost:5000;
keepalive 2000;
}
server{
listen 80;
listen [::]:80;
server_name kf-api.yourname.com;
location / {
proxy_pass http://dotnet_server_proxy;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
}
}
- 重新加载 nginx 配置文件
cd /usr/local/nginx/sbin
./nginx -s reload
配置主程序
进入
cd /lib/systemd/system/
创建文件
vim kfServer.service
输入以下内容后保存退出
注意WorkingDirectory
为您的 Server 目录
[Unit]
Description=kfServer service
After=network.target
[Service]
Type=simple
GuessMainPID=true
WorkingDirectory=/wwwroot/Server/
StandardOutput=journal
StandardError=journal
ExecStart=/usr/local/bin/dotnet Sheng.Linkup.Server.dll &
Restart=always
[Install]
WantedBy=multi-user.target
注意:在 CentOS 8 中,ExecStart 后无需要输入完整路径,如
ExecStart=dotnet Sheng.Linkup.Server.dll &
注意:通过终端工具复制粘贴文本可能会因为编码或换行符等问题导致服务无法启动。
如果遇到不明原因的服务无法启动问题,删除 kfServer.service 文件重建,手工编辑内容再试。
启动服务器主程序
systemctl start kfServer.service
设置开机启动
systemctl enable kfServer.service
查看运行状态
systemctl status kfServer.service
显示绿色的 active(running) 表示启动成功。
如需重新启动服务器主程序,可使用命令
systemctl restart kfServer.service
。
在修改了主程序配置文件后,需要重新启动以生效。
初始化主程序
- 访问域名,进入 Status 查看状态
https://kf-api.yourname.com/Status
注意:直接访问域名显示 404 是正常的,主程序没有默认页面,请留意上面的示例网址,进入
Status
命令
请确认已经完成了对服务器主程序配置文件的配置。
参阅:使用自动化工具配置服务器端程序
- 初始化数据
访问域名,进入Status/Setup
命令
如:https://kf-api.yourname.com/Status/Setup
配置静态资源站点
修改配置文件
将服务端程序上传之前,可先在本地电脑完成对配置文件的修改。
也可以选择先把服务端程序上传后,再通过 vim 手工对配置文件修改。
配置静态资源站点
编辑 nginx 配置文件
vim /usr/local/nginx/conf/nginx.conf
在 Server 节点平级添加如下内容
注意server_name
处替换为你所使用的域名。
location
下的root
后为 Resource 目录路径。
server {
listen 80;
server_name kf-resource.yourname.com;
location / {
root /wwwroot/Resource;
index v.html;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
- 重新加载 nginx 配置文件
cd /usr/local/nginx/sbin
./nginx -s reload
配置 Web 管理后台
修改配置文件
将服务端程序上传之前,可先在本地电脑完成对配置文件的修改。
也可以选择先把服务端程序上传后,再通过 vim 手工对配置文件修改。
配置 Web 管理后台
编辑 nginx 配置文件
vim /usr/local/nginx/conf/nginx.conf
在 Server 节点平级添加如下内容
注意server_name
处替换为你所使用的域名。
location
下的root
后为 Management 目录路径。
server {
listen 80;
server_name kf-m.yourname.com;
location / {
root /wwwroot/Management;
index index.html;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
重新加载 nginx 配置文件
cd /usr/local/nginx/sbin
./nginx -s reload
在浏览器中访问你的 Web 管理后台域名,显示登录画面,使用 “配置服务器主程序” 完成时,初始化得到的默认登录账户密码登录即可。
配置发布客服端程序
请点击参阅:配置发布客服端程序
启动客服端程序
压缩包中的“Shell”目录为客服端程序。
- 找到 Shell 目录下的“Sheng.Linkup.Client.Shell.exe”。
- 初次启动时,配置服务地址。
- 配置完成后,显示登录界面。
- 填写默认密码“123”,点击“登录”进入系统。
访客聊天测试
登录客服端以后,用浏览器打开你的资源站点域名下的聊天页面,如:
kf-resource.shengxunwei.com/WebChat/WebChat.html?sitecode=freesite
开始聊天。
发布
将配置好的客服端程序 Shell 目录,压缩或打包分发给客服使用即可。
集成
CentOS 30分钟部署免费在线客服系统的更多相关文章
- CentOS 30分钟部署 .net core 在线客服系统
前段时间我发表了一系列文章,开始介绍基于 .net core 的在线客服系统开发过程.期间有一些朋友希望能够给出 Linux 环境的安装部署指导,本文基于 CentOS 8.3 来安装部署.在本文中我 ...
- Docker 版 3分钟部署 .net core 开源在线客服系统,他来了
我在博客园发表了一系列文章,开始介绍基于 .net core 的在线客服系统开发过程. 前些天又应朋友的要求,发了一篇 CentOS 版本的安装部署教程:https://www.cnblogs.com ...
- .net core 和 WPF 开发升讯威在线客服系统【私有化部署免费版】发布
希望 .net 和 WPF 技术时至今日,还能有一些存在感. 这个项目源于2015年前后,当时开发的初版,我使用了 ASP.NET MVC 做为后端,数据库使用原生 ADO.NET 进行操作.WPF ...
- PHP如何使用免费在线客服插件
1 你可以从以下网址下载http://www.hur.cn/Soft/2011/12448.html 2 解压并放到任意文件夹下 3 在安装之前,先在数据库中创建一个完整的数据库,因为待会儿安装完成之 ...
- Linux + .net core 开发升讯威在线客服系统:同时支持 SQL Server 和 MySQL 的实现方法
前段时间我发表了一系列文章,开始介绍基于 .net core 的在线客服系统开发过程. 有很多朋友一直提出希望能够支持 MySQL 数据库,考虑到已经有朋友在用 SQL Server,我在升级的过程中 ...
- Linux 运行升讯威在线客服系统:同时支持 SQL Server 和 MySQL 的实现方法
前段时间我发表了一系列文章,开始介绍基于 .net core 的在线客服系统开发过程. 有很多朋友一直提出希望能够支持 MySQL 数据库,考虑到已经有朋友在用 SQL Server,我在升级的过程中 ...
- Linux + .net core 开发升讯威在线客服系统:首个经过实际验证的高性能版本
业余时间用 .net core 写了一个在线客服系统.并在博客园写了一个系列的文章,写介绍这个开发过程: .net core 和 WPF 开发升讯威在线客服系统:目录 https://blog.she ...
- .net core 和 WPF 开发升讯威在线客服系统:调用百度翻译接口实现实时自动翻译
业余时间用 .net core 写了一个在线客服系统.并在博客园写了一个系列的文章,写介绍这个开发过程. 我把这款业余时间写的小系统丢在网上,陆续有人找我要私有化版本,我都给了,毕竟软件业的初衷就是免 ...
- 开发升讯威在线客服系统启示录:怎样编写堪比 MSDN 的用户手册
本系列文章详细介绍使用 .net core 和 WPF 开发 升讯威在线客服与营销系统 的过程. 免费在线使用 & 免费私有化部署:https://kf.shengxunwei.com 文章目 ...
- .net core 和 WPF 开发升讯威在线客服系统:调用有道翻译接口实现实时自动翻译的方法
业余时间用 .net core 写了一个在线客服系统.并在博客园写了一个系列的文章,写介绍这个开发过程. 我把这款业余时间写的小系统丢在网上,陆续有人找我要私有化版本,我都给了,毕竟软件业的初衷就是免 ...
随机推荐
- jmeter参数化导致反斜杠(\)被转义
前情提要:在用jmeter做接口测试时,对请求体进行参数化,执行结果报错.但在不参数化的情况下,执行结果成功,而且参数化后,请求中读取到的参数是正确的(执行失败与执行成功时的参数一致). 问题排查:参 ...
- Linux内存和磁盘管理(入门)
关于对Linux系统的内存和磁盘的操作 内存和磁盘使用率 查看内存使用率: free.top 查看磁盘使用率: fdisk.df.du free 以KB为单位: $ free total used f ...
- Linux操作系统网络模块
Linux操作系统的网络模块是负责网络通信的核心部分.它通过实现各种协议和算法,使得计算机能够在网络中进行数据交换和通信.网络模块主要包括以下几个方面的功能: (1)IP协议栈:负责处理网络层的数据包 ...
- OpenHarmony SystemUI开发记录
背景介绍 最近学习OpenHarmony应用开发, SDK版本是3.2.9.2 Beta4,IDE版本是3.1.0.200.参考官方文档,做了个Demo应用,调试.运行非常顺利.启动应用后,状态栏和导 ...
- 关于PM系统以及OA系统的工作基本心态
这个系统的目的是什么? 这个系统的初衷是好的,是一个信息化管理的数据科学系统,目的是更好的累计公司的业务数据. 但实际操作过程中,包括推广过程中,你能看到上层人员对于这个系统的态度,更像是一个个人企业 ...
- 【Python基础】 什么是函数
函数是一段可重用的代码块,它接受输入参数并返回输出.函数在程序设计中具有很多优点,如: 代码重用:在程序中可以重复调用相同的代码块,使程序更加简洁.高效. 模块化设计:函数是模块化设计的基本单元,可以 ...
- #Powerbi 理解VAR函数
VAR意思即为变量,在编程语言中,变量是一个重要概念,DAX作为一种语言也有变量概念,利用VAR,我们可以缩短我们一些DAX语句的长度,更清晰的表达我们的度量值计算逻辑. 举例说明: 我们要计算一个产 ...
- selenium文件上传和弹框处理
文件上传 input 标签可以直接使用send_keys(文件地址)上传文件 用法: el = driver.find_element_by_id('上传按钮id') el.send_keys(&qu ...
- 2022-10-10:以下go语言代码输出什么?A:[1 2 3 0 1 2];B:死循环;C:[1 2 3 1 2 3];D:[1 2 3]。 package main import “fmt“
2022-10-10:以下go语言代码输出什么?A:[1 2 3 0 1 2]:B:死循环:C:[1 2 3 1 2 3]:D:[1 2 3]. package main import "f ...
- .Net8顶级技术:边界检查之IR解析(慎入)
前言 C#这种语言之所以号称安全的,面向对象的语言.这个安全两个字可不是瞎叫的哦.因为JIT会检查任何可能超出分配范围的数值,以便使其保持在安全边界内.这里有两个概念,其一边界检查,其二IR解析.后者 ...