exceptionless 在 windows 上 手动部署,非docker 详细步骤

关于exceptionless 是什么我就不多说了,能看到这篇文章的都知道了。网上几乎都是docker部署的,docker部署的确十分方便,但是有的人没有条件用docker,像我就不想花这个钱去多服务器或者云服务

所以我就利用现有的windows 服务器搭建了。网上关于手动搭建exceptionless的文章几乎没有,只有一点点大家抄来抄去的文章,并且都是老掉牙的版本。倒腾了好久,自己摸索出步骤,现在把记录发出来,供大家参考。

我用目前github上最新的exceptionless版本来搭建。目前github上最新的版本为 v7.0.9配套的elasticsearch版本为7.10(在dockerfile中可以看到)

该项目涉及的文件,我没传,需要的人请留言或者私信我我发给你吧。一般自己编译即可,从github上下载下来后,直接可以编译过去。要确保vs版本为2019+并且支持.net 5.0的开发。

 先说下该项目的大概运行方式:1、一个api项目,里面包含了所有api。2、一个elasticsearch项目,用来存储相关数据。3、一个UI项目,也就是查看异常、设置新异常邮件通知等操作的后台。

再说一下异常在客户端提交的代码原理:一个异常被提交,先写入一个队列,然后随后会被post 到 api ,api收到数据后也是先写队列,然后再通过job作业同步到elasticsearch。

expectionless允许不要redis缓存,job作业随api项目一起启动,不需要单独部署

综上,该项目最小化运行的方案:不要redis,不要job单独进程,只需要部署:1、api项目。2、elasticsearch项目。3、ui项目

如果性能不满足使用,再考虑上redis以及单独部署job作业以便多job作业,同步数据到elasticsearch更及时。

以下开始部署步骤:(以下部署均为内网环境,先跑通内网环境后,再来设置外网环境)
第一步:
首先,该项目使用.net 5.0开发,所以,服务器上必须要安装 .net5.0运行环境,只要在服务器上安装“dotnet-hosting-5.0.1-win.exe” 文件即可
(如何确认windows服务器是否安装了.net 5.0?答:在cmd下运行 dotnet --version 即可看到)

第二步:
部署 elasticsearch-7.10.0 (请从官网下载,官网地址为:https://www.elastic.co/cn/downloads/elasticsearch ,如果要指定版本下载,找到页面中的“past releases” 点击)。

elasticsearch 部署方式为:解压 elasticsearch-7.10.0-windows-x86_64.zip 到某个文件夹,比如 D:\elasticsearch-7.10.0\
(elasticsearch 的索引数据文件默认存储路径为自身根目录下的 data 文件夹,所以尽量将它放在一个剩余空间比较大的盘符中)
然后cmd进入到该目录的bin文件夹下(比如D:\elasticsearch-7.10.0\bin) ,然后 运行 elasticsearch.bat
(服务器上最好以service的方式运行elasticsearch,因为可以设置自启动。server方式运行的话就是cmd运行 elasticsearch-service.bat)
如果不修改配置文件,正确 运行 elasticsearch 后,访问 http://localhost:9200/ 可以成功访问,并展示一段json,json中包含集群名字、版本等信息,看到该json代表elasticsearch正确运行。

第三步:
安装 mapper-size 。 因为expectionless一定要这个插件,具体作用百度。安装插件的方法在下面这个链接
https://www.elastic.co/guide/en/elasticsearch/plugins/current/mapper-size.html
简单说一下安装这个插件的步骤
第1步:下载插件 https://artifacts.elastic.co/downloads/elasticsearch-plugins/mapper-size/mapper-size-7.10.0.zip (可以修改版本号直接下载其他es版本,es版本与这个插件版本必须要一一对应,,比如 mapper-size-7.10.1.zip 它对应的是7.10.1的elasticsearch)
第2步:打开cmd ,进入到 D:\elasticsearch-7.10.0\bin 目录下运下面这个命令: elasticsearch-plugin install file:///C:/path/to/plugin.zip (这个路径改为你刚刚下载的文件的存放路径)
第3步:看到installed的字样后,代表插件安装完成,然后重启es后,访问如下地址: http://localhost:9200/_cat/plugins (http://localhost:9200 是你es安装成功后,elasticsearch默认的访问地址,/_cat/plugins 代表查看当前运行的插件) ,
如果能看到 mapper-size 7.10.0 ,则代表已成功安装该插件。

第四步:将已经编译好的的 Exceptionless.Web 部署到IIS中,这是整个 expectionless 的api (在测试过程中,先不要部署IIS,直接运行编译后的文件夹中的Exceptionless.Web.exe 文件,直接运行该exe它将默认以 5000 端口通讯,请确保5000端口未被占用,先不要尝试修改端口以免后面文档衔接不上。)。部署后,确保 http://localhost:5000/ 可以访问,并且点击 “API Documentation” 能看到所有api列表(expectionless用 Swagger 做api 文档)

第五步:将已经编译好的Exceptionless.UI项目部署到IIS中(Exceptionless.UI-3.0.11.Build.zip 该文件我),这个项目是用来创建账号、登录查看异常、处理异常的,也就是expectionless的后台。
(Exceptionless.UI是 angularJs 写的项目,要把它编译一下)
Exceptionless.UI 部署到IIS后,该项目还要做以下几件事
1、将根目录下的“app.config.8abddc8ed08ca795.js” (文件名类似这样子不一定是这个样子,看你自己编译后的结果) 的js修改一下,将BASE_URL中的值改为你刚刚api的地址,正常来说,默认的就是 http://localhost:5000/
2、如果IIS的MIME类型中没有.json的话,还需要添加一条文件拓展名为 .json MIME类型为 application/json 的记录(如果访问UI项目,浏览器调试工具的network中.json请求出错,代表服务器不支持该mime)。
3、注册账号登录后,会发现url类似 http://localhost:5100/#!/type/error/frequent 会带着 #! ,而邮件发过来的url会类似 http://localhost:5100/type/error/frequent ,导致不能访问,
这个时候需要修改 app.config.8abddc8ed08ca795.js .constant('USE_HTML5_MODE', false) 修改该值为true,即 .constant('USE_HTML5_MODE', true)
4、做了第3步后会发现 http://localhost:5100/type/error/frequent 可以访问了,但是如果刷新会报404,这是由于anglarjs特性导致的,需要加入重写规则。(具体解决方案看这里 https://www.cnblogs.com/fxck/p/13076467.html)

 

搭建过程就是以上 五个步骤 ,接下来,修改一下 Exceptionless.Web 的项目配置

首先,Exceptionless.Web项目加载配置文件,是根据系统环境变量来加载不同的配置文件的(如果不知道是什么搜一下windows系统环境变量,其他系统自行百度)
如果系统环境变量中存在 EX_AppMode 的话,比如 EX_AppMode=Staging则加载 appsettings.Staging.yml 文件。(EX_AppMode如果不存在则为 Production) 

以下是一个配置文件示例,可以视情况自己修改,配置文件是以QQ邮箱作为发信邮箱的,Email: "smtps://10000:bsvfwsfcucxwagfa@smtp.qq.com:465" 这个配置文件 10000 代表你的QQ号,: 号后面的是你QQ smtp发信密码(不是QQ密码,具体自己去QQ邮箱申请smtp密码,其他几个参数不动。)

---
ConnectionStrings:
# Redis: server="localhost,abortConnect=false"
Elasticsearch: server=http://localhost:9200;replicas=0
Storage: provider=folder;path=D:\webform\expectionless\storage
# Cache: provider=redis;
# MessageBus: provider=redis;
# Metrics: provider=statsd;server=10.0.0.5;
# Queue: provider=redis;
Email: "smtps://10000:bsvfwsfcucxwagfa@smtp.qq.com:465"
# OAuth: FacebookId=395178683904310;GitHubId=7ef1dd5bfbc4ccf7f5ef;GoogleId=809763155066-enkkdmt4ierc33q9cft9nf5d5c02h30q.apps.googleusercontent.com;MicrosoftId=000000004C137E8B;SlackId=34500115540.177239122322;

# Base url for the ui used to build links in emails and other places.
#BaseURL: https://dev.exceptionless.io
BaseURL: http://ex.xxxxx.net

# Exceptionless Client Settings
#ExceptionlessServerUrl: https://dev-api.exceptionless.io
ExceptionlessServerUrl: http://exapi.xxxxx.net/
InternalProjectId: 50ca6b2423d6c8493020b823
#TestEmailAddress: 10000@qq.com
#SmtpEncryption: StartTLS

#是否将作业运行在同一个进程中,如果为true,则在同一个进程中运行作业,如果false,则需要单独开启 Exceptionless.Job
RunJobsInProcess: true

#将允许外发邮件的邮箱域名加到这里,不然的话会统一发往 TestEmailAddress这个邮箱
AllowedOutboundAddresses: "qq.com,xxxxx.net"

#如果是用QQ邮箱发邮件的话,需要加上发件邮箱账号,因为QQ邮箱的smtp服务需要验证这个。
SmtpFrom: 10000@qq.com

#urls: http://localhost:5000
Serilog:
MinimumLevel:
Default: Debug

 

 重启expectionless后,访问 Exceptionless.UI这个项目的IIS站点,应该正常能注册创建账号了。

如果根据以上步骤还是不能搞定的,请留言或私信我。为了捣鼓手动部署,浪费了我不少时间,希望该文章能为下一个和我一样手动部署的你节省宝贵的时间。

最后上一张图

 

posted @ 2021-01-12 13:05  LoveCoder  阅读(1533)  评论(16编辑  收藏  举报