CentOS 30分钟部署 .net core 在线客服系统
<p>前段时间我发表了一系列文章,开始介绍基于 .net core 的在线客服系统开发过程。期间有一些朋友希望能够给出 Linux 环境的安装部署指导,本文基于 CentOS 8.3 来安装部署。在本文中我详细的记录了:</p><ul>
<li>安装 SQL Server 数据库,创建数据库,执行脚本创建表结构(是否需要支持 MySQL?我也没考虑好,不知你们怎么看。)</li>
<li>安装 Nginx,反向代理到客服系统服务端,并设置开机自启动</li>
<li>安装 .net core ,部署客服系统并开机自启动</li>
</ul>
<p>我详细列出了需要执行的命令的全过程,跟随本文可以在 30 分钟内完成部署。</p>
<h1 id="简介">简介</h1>
<p>升讯威在线客服与营销系统是基于 .net core / WPF 开发的一款在线客服软件,宗旨是: <strong>开放、开源、共享。努力打造 .net 社区的一款优秀开源产品。</strong></p>
<h2 id="完整私有化包下载地址">完整私有化包下载地址</h2>
<blockquote>
<p>💾 https://kf.shengxunwei.com/freesite.zip</p>
</blockquote>
<h2 id="当前版本信息">当前版本信息</h2>
<p>发布日期:2021-6-11<br>
数据库版本:20210608063023_20210608a<br>
通信协议版本:20210609<br>
服务器版本:1.3.1.0<br>
客服程序版本:1.3.3.0<br>
资源站点版本:1.2.56.0</p>
<p><img src="https://docs-api.shengxunwei.com/StaticFiles/Upload/94798a64-bfb1-433b-a9d3-331a209a2797.jpg" alt="" loading="lazy"></p>
<p><img src="https://docs-api.shengxunwei.com/StaticFiles/Upload/bb06b2e5-4d94-48af-aa3e-f600c909af12.JPG" alt="" loading="lazy"></p>
<h1 id="准备操作系统">准备操作系统</h1>
<ul>
<li>本文以 CentOS 8.3 为例进行说明,其它版本的 Linux 安装配置过程大同小异。</li>
</ul>
<h2 id="开放防火墙端口">开放防火墙端口</h2>
<p>客服系统默认使用 9527 端口进行通信,如果开启了防火墙,请在防火墙中开放此端口。</p>
<p>也可以更改为其它可用端口号,在后续配置客服系统服务端程序时要做对应的修改。</p>
<blockquote>
<p>请确保您所使用的主机服务商提供的防火墙服务中,也开放了对应端口。如阿里云服务器需要在安全组规则中配置。</p>
</blockquote>
<h1 id="安装数据库引擎">安装数据库引擎</h1>
<ol>
<li>
<p>下载<br>
<code>curl -o /etc/yum.repos.d/mssql-server.repo https://packages.microsoft.com/config/rhel/8/mssql-server-2019.repo</code></p>
</li>
<li>
<p>安装<br>
<code>yum install -y mssql-server</code></p>
</li>
<li>
<p>配置<br>
<code>/opt/mssql/bin/mssql-conf setup</code></p>
</li>
</ol>
<blockquote>
<p>选择 SQL Server 的一个版本:</p>
<ol>
<li>Evaluation (免费,无生产许可,180 天限制)</li>
</ol>
</blockquote>
<ol start="2">
<li>Developer (免费,无生产许可)</li>
<li>Express (免费)</li>
<li>Web (付费版)</li>
<li>Standard (付费版)</li>
<li>Enterprise (付费版) - CPU 核心利用率限制为 20 个物理/40 个超线程</li>
<li>Enterprise Core (付费版) - CPU 核心利用率达到操作系统最大值</li>
<li>我通过零售渠道购买了许可证并具有要输入的产品密钥。</li>
</ol>
<p>选 <code>5</code> 安装标准版即可,接着输入 <code>Yes</code></p>
<p>提示 Enter the SQL Server system administrator password 时输入管理员密码<br>
要注意输入的密码要不低于8位,且要包含字母大小写和数字。</p>
<h2 id="安装命令行工具">安装命令行工具</h2>
<ol>
<li>
<p>下载<br>
<code>curl -o /etc/yum.repos.d/msprod.repo https://packages.microsoft.com/config/rhel/8/prod.repo</code></p>
</li>
<li>
<p>安装<br>
<code>yum install -y mssql-tools unixODBC-devel</code><br>
中途提示时输入 <code>Yes</code></p>
</li>
<li>
<p>添加环境变量<br>
<code>echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile</code><br>
<code>echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc</code><br>
<code>source ~/.bashrc</code></p>
</li>
<li>
<p>连接数据库<br>
<code>sqlcmd -S localhost -U SA -P '<YourPassword>'</code><br>
出现 1> 表示登陆成功</p>
</li>
</ol>
<h1 id="安装-nginx">安装 Nginx</h1>
<h2 id="安装依赖项">安装依赖项</h2>
<ol>
<li>
<p>安装 gcc<br>
<code>yum -y install gcc</code></p>
</li>
<li>
<p>安装 pcre、pcre-devel<br>
<code>yum install -y pcre pcre-devel</code></p>
</li>
<li>
<p>安装 zlib<br>
<code>yum install -y zlib zlib-devel</code></p>
</li>
<li>
<p>安装 openssl<br>
<code>yum install -y openssl openssl-devel</code></p>
</li>
</ol>
<h2 id="安装-nginx-1">安装 nginx</h2>
<ol>
<li>
<p>下载<br>
<code>wget http://nginx.org/download/nginx-1.20.1.tar.gz</code></p>
</li>
<li>
<p>解压缩<br>
<code>tar zxvf nginx-1.20.1.tar.gz</code></p>
</li>
<li>
<p>进入目录<br>
<code>cd nginx-1.20.1</code></p>
</li>
<li>
<p>安装和配置,依次执行<br>
<code>./configure</code><br>
<code>make</code><br>
<code>make install</code></p>
</li>
<li>
<p>启动 nginx 服务<br>
<code>cd /usr/local/nginx/sbin</code><br>
<code>./nginx</code></p>
</li>
<li>
<p>查看nginx服务是否启动成功<br>
<code>ps -ef | grep nginx</code></p>
</li>
<li>
<p>访问你的服务器IP<br>
看到显示欢迎页面。</p>
</li>
</ol>
<h2 id="设置开机自动启动">设置开机自动启动</h2>
<ol>
<li>
<p>进入到 /lib/systemd/system/ 目录<br>
<code>cd /lib/systemd/system/</code></p>
</li>
<li>
<p>创建 nginx.service 文件<br>
<code>vim nginx.service</code></p>
</li>
<li>
<p>输入以下内容后保存退出<br>
注意其中的 nginx 安装路径</p>
</li>
</ol>
<pre><code>
Description=nginx service
After=network.target
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
WantedBy=multi-user.target
</code></pre>
<p>内容说明</p>
<blockquote></blockquote>
<p>Description:描述服务<br>
After:描述服务类别<br>
服务运行参数的设置<br>
Type=forking是后台运行的形式<br>
ExecStart为服务的具体运行命令<br>
ExecReload为重启命令<br>
ExecStop为停止命令<br>
PrivateTmp=True表示给服务分配独立的临时空间<br>
注意:的启动、重启、停止命令全部要求使用绝对路径<br>
运行级别下服务安装的相关设置,可设置为多用户,即系统运行级别为3</p>
<ol start="4">
<li>
<p>启动 nginx<br>
<code>systemctl start nginx.service</code></p>
</li>
<li>
<p>加入开机自启动<br>
<code>systemctl enable nginx.service</code></p>
</li>
<li>
<p>查看服务当前状态<br>
<code>systemctl status nginx.service</code></p>
</li>
</ol>
<h1 id="安装-net-core">安装 .Net Core</h1>
<ol>
<li>安装<br>
<code>sudo dnf install dotnet-sdk-3.1</code></li>
</ol>
<h1 id="创建数据库">创建数据库</h1>
<ol>
<li>
<p>通过命令行登陆<br>
<code>sqlcmd -S localhost -U SA -P '<YourPassword>'</code></p>
</li>
<li>
<p>创建数据库<br>
<code>create database KF</code><br>
<code>go</code></p>
</li>
<li>
<p>创建数据库表结构<br>
<code>sqlcmd -i CreateDatabase.sql -d kf -U sa -P '<YourPassword>'</code></p>
</li>
</ol>
<h1 id="配置服务器主程序">配置服务器主程序</h1>
<p>请确认已经完成了对服务器主程序配置文件的配置。<br>
参阅:使用自动化工具配置服务器端程序</p>
<h2 id="配置主程序站点">配置主程序站点</h2>
<ol>
<li>
<p>上传并解压缩 Server 目录<br>
<code>tar -xvf Server.tar</code></p>
</li>
<li>
<p>编辑 nginx 配置文件<br>
<code>vim /usr/local/nginx/conf/nginx.conf</code></p>
</li>
<li>
<p>在 Server 节点<strong>平级</strong>添加如下内容<br>
注意 <code>server_name</code> 处替换为你所使用的域名。</p>
</li>
</ol>
<pre><code>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;
}
}
</code></pre>
<ol start="4">
<li>在 http 节点下加入</li>
</ol>
<pre><code>map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
</code></pre>
<ol start="5">
<li>
<p>重新加载 nginx 配置文件<br>
<code>cd /usr/local/nginx/sbin</code><br>
<code>./nginx -s reload</code></p>
</li>
<li>
<p>测试运行<br>
<code>cd /root/wwwroot/Server/</code><br>
<code>dotnet Sheng.Linkup.Server.dll &</code></p>
</li>
<li>
<p>访问域名,进入 Status 查看状态<br>
https://kf-api.yourname.com/Status</p>
</li>
</ol>
<p><img src="https://docs-api.shengxunwei.com/StaticFiles/Upload/7fe0de94-d11c-4cdd-8550-621e17f464a2.JPG" alt="" loading="lazy"></p>
<ol start="8">
<li><strong>初始化数据</strong><br>
访问域名,进入 <code>Status/Setup</code> 命令<br>
如:https://kf-api.yourname.com/Status/Setup</li>
</ol>
<p><img src="https://docs-api.shengxunwei.com/StaticFiles/Upload/67855b8c-fe0a-4256-98b7-0fb35c3b545e.JPG" alt="" loading="lazy"></p>
<h2 id="设置开机自启动">设置开机自启动</h2>
<ol>
<li>
<p>进入<br>
<code>cd /lib/systemd/system/</code></p>
</li>
<li>
<p>创建文件<br>
<code>vim kfServer.service</code></p>
</li>
<li>
<p>输入以下内容后保存退出<br>
注意 <code>WorkingDirectory</code> 为您的 Server 目录</p>
</li>
</ol>
<pre><code>
Description=kfServer service
After=network.target
Type=simple
GuessMainPID=true
WorkingDirectory=/root/wwwroot/Server/
StandardOutput=journal
StandardError=journal
ExecStart=dotnet Sheng.Linkup.Server.dll &
Restart=always
WantedBy=multi-user.target
</code></pre>
<ol start="4">
<li>
<p>启动服务器主程序<br>
<code>systemctl start kfServer.service</code></p>
</li>
<li>
<p>设置开机启动<br>
<code>systemctl enable kfServer.service</code></p>
</li>
<li>
<p>查看运行状态<br>
<code>systemctl status kfServer.service</code></p>
</li>
</ol>
<h1 id="配置静态资源站点">配置静态资源站点</h1>
<p>请确认已经完成了对服务器主程序配置文件的配置。<br>
参阅:使用自动化工具配置服务器端程序</p>
<h2 id="配置静态资源站点-1">配置静态资源站点</h2>
<ol>
<li>
<p>上传并解压缩 Resource 目录<br>
<code>tar -xvf Resource.tar</code></p>
</li>
<li>
<p>编辑 nginx 配置文件<br>
<code>vim /usr/local/nginx/conf/nginx.conf</code></p>
</li>
<li>
<p>在 Server 节点<strong>平级</strong>添加如下内容<br>
注意 <code>server_name</code> 处替换为你所使用的域名。<br>
<code>location</code> 下的 <code>root</code> 后为 Resource 目录路径。</p>
</li>
</ol>
<pre><code>server {
listen 80;
server_namekf-resource.yourname.com;
location / {
root /root/wwwroot/Resource;
indexv.html;
}
error_page 500 502 503 504/50x.html;
location = /50x.html {
root html;
}
}
</code></pre>
<ol start="4">
<li>为目录赋予访问权限</li>
</ol>
<pre><code>chmod 777 /root
chmod 777 /root/wwwroot
chmod 777 /root/wwwroot/Resource
</code></pre>
<h1 id="配置发布客服端程序">配置发布客服端程序</h1>
<blockquote>
<p>此页面显示的是私有化部署版本的客服端配置说明,如果您在线使用,下载客服端程序请至:下载安装客服端软件</p>
</blockquote>
<h2 id="客服端程序运行需求">客服端程序运行需求</h2>
<p>操作系统:</p>
<ul>
<li>Windows 7 SP1 或更高版本</li>
<li>Windows Server 2008 R2 SP1或更高版本</li>
</ul>
<p>依赖:</p>
<ul>
<li>本程序需要 .Net Framework 4.8 或更高版本。<br>
私有化部署免费版压缩包中已经提供了“ndp48-web.exe”,这是 .Net Framework 4.8 的在线安装程序,推荐使用。只有 1 MB 多的大小,能够自动判断电脑是否已经安装了 .Net Framework 4.8 。</li>
</ul>
<h2 id="声明">声明</h2>
<p>客服程序没有任何恶意代码并经过病毒扫描。 使用的是:</p>
<ul>
<li>ESET Internet Security</li>
<li>McAfee Total Protection</li>
</ul>
<p>如果执行安装程序时显示 Windows SmartScreen 筛选器窗口,请点击“<code>更多信息</code>”后,点击“<code>运行</code>”按钮即可。</p>
<p>出现该窗口的原因 <code>并不是发现恶意代码</code> ,而是单纯的指程序没有企业签名。<br>
代码签名证书的价格较贵,需要每年近万元的费用,对于免费软件来说 <code>成本高昂</code>。<br>
此外 360 如果出现类似提示也是由于类似原因,并不是发现恶意代码,而是需要向 360 缴纳认证费。</p>
<h2 id="启动客服端程序">启动客服端程序</h2>
<p>压缩包中的“Shell”目录为客服端程序。</p>
<p><img src="https://docs-api.shengxunwei.com/StaticFiles/Upload/75d4b258-1a29-4a1d-8e47-e52e239265ac.JPG" alt="" loading="lazy"></p>
<ol>
<li>找到 Shell 目录下的“Sheng.Linkup.Client.Shell.exe”。</li>
</ol>
<p><img src="https://docs-api.shengxunwei.com/StaticFiles/Upload/5d9d0869-d9d4-4771-9476-a3aff8d27367.JPG" alt="" loading="lazy"></p>
<ol start="2">
<li>初次启动时,配置服务地址。</li>
</ol>
<p><img src="https://docs-api.shengxunwei.com/StaticFiles/Upload/8a96badf-55c3-4e04-8fa2-5e2b11ec105b.JPG" alt="" loading="lazy"></p>
<ol start="3">
<li>配置完成后,显示登录界面。</li>
</ol>
<p><img src="https://docs-api.shengxunwei.com/StaticFiles/Upload/40475bec-7461-42be-b24c-efe55b014745.JPG" alt="" loading="lazy"></p>
<blockquote>
<ul>
<li>如果提示<u><strong>没有返回版本信息</strong></u>,是因为在配置服务器主程序后,没有初始化数据。请查阅 配置服务器主程序 的结尾部分。</li>
<li>如果登录时提示“<u><strong>不允许对非连接的套接字执行此操作</strong></u>”,请检查服务器的防火配置,将客服系统使用的通信规则添加到入站规则,参阅:准备操作系统</li>
</ul>
</blockquote>
<ol start="3">
<li>填写默认密码“123”,点击“登录”进入系统。</li>
</ol>
<p><img src="https://docs-api.shengxunwei.com/StaticFiles/Upload/188ce37d-bee5-42ae-9e83-117e55301807.JPG" alt="" loading="lazy"></p>
<h2 id="访客聊天测试">访客聊天测试</h2>
<p>登录客服端以后,用浏览器打开你的资源站点域名下的聊天页面,如:</p>
<blockquote>
<p>kf-resource.shengxunwei.com/WebChat/WebChat.html?sitecode=freesite</p>
</blockquote>
<p>开始聊天。</p>
<p><img src="https://docs-api.shengxunwei.com/StaticFiles/Upload/295287db-7946-4f5c-a624-65a2e08a9782.JPG" alt="" loading="lazy"></p>
<p><img src="https://docs-api.shengxunwei.com/StaticFiles/Upload/564f10a0-9b2e-4048-a975-3cb4c7d6d065.JPG" alt="" loading="lazy"></p>
<h2 id="发布">发布</h2>
<p>将配置好的客服端程序 Shell 目录,压缩或打包分发给客服使用即可。</p>
<h2 id="集成">集成</h2>
<ul>
<li>集成到您的网站</li>
<li>集成到您的手机APP</li>
<li>集成到您的公众号等平台</li>
<li>深度集成:传递您的访客数据到客服系统</li>
</ul><br><br>
来源:https://www.cnblogs.com/sheng_chao/p/14889995.html
頁:
[1]