Exceptionless有官方的系统,但要钱,免费的限制太大,只能加一个项目,考虑自己部署到自己的服务器。
以前部署过7.2.1版本,那时是.net5的,现在成.net6了,折腾了下没成功,总有那么点问题,然后又换8.0.4版本,elasticsearch要使用8,我下了最新的elasticsearch 8.10.4,部署好后,有的接口报错,又不行,又考虑换版本,折腾死了,最后想是不是elasticsearch版本太高了,换成elasticsearch 8.0.0,它妈的,可以了。文档又不写具体支持哪些版本,只写es8,太高还不行,搞死人。
在此写下部署过程,记录下以后万一还要用,也避免其它人折腾。
一、安装elasticsearch
进入https://www.elastic.co/cn/downloads/elasticsearch 下载8.0.0版本,具体其它哪些版本能用我也不清楚,反正8.10.4会出现Exceptionless接口报错。
1、下载解压后进入config文件夹下,找到elasticsearch.yml文件,在最后增加如下内容:
http.cors.enabled: true http.cors.allow-origin: "*" xpack.security.enabled: false #不使用https ingest.geoip.downloader.enabled: false #不连接GeoLite2-ASN.mmdb库
elasticsearch8会比较占内存,可以设置config下的jvm.options文件
## -Xms4g ## -Xmx4g 改为 -Xms2g -Xmx2g 表示2G,具体设多少自己把握
2、进入bin文件,默认什么都不用改,直接双击elasticsearch.bat,等待初始化安装即可。
3、cmd进入bin文件目录,执行命令elasticsearch-service.bat install安装windows服务,然后用elasticsearch-service.bat manager设置服务为自启动,然后点击启动或命令启动服务(注:刚开始可能启动一会就停掉,等会再启动)
elasticsearch-service.bat install #注册为服务 elasticsearch-service.bat remove #删除服务 elasticsearch-service.bat start #启动服务 elasticsearch-service.bat stop #停止服务 elasticsearch-service.bat manager #管理服务,设置服务启动类型,设置自动
打开http://localhost:9200有内容表示成功
4、安装mapper-size
下载插件 https://artifacts.elastic.co/downloads/elasticsearch-plugins/mapper-size/mapper-size-8.0.0.zip(版本要与elasticsearch对应),然后进入cmd进入elasticsearch的bin文件目录,执行如下命令
elasticsearch-plugin install file:///D:\Exceptionless\mapper-size-8.0.0.zip
这个路径改为你刚刚下载的mapper-size文件的存放路径,打开http://localhost:9200/_cat/plugins有mapper-size-8.0.0内容表示成功
二、部署Exceptionless
下载地址:Releases · exceptionless/Exceptionless · GitHub,找到8.0.0版本下载。
1、用VS打开项目,修改appsettings.Production.yml文件如下(测试相应的修改appsettings.Development.yml)
--- ConnectionStrings: Elasticsearch: server=http://localhost:9200 # Cache: provider=redis;server="localhost,abortConnect=false" # MessageBus: provider=redis;server="localhost,abortConnect=false" # Queue: provider=redis;server="localhost,abortConnect=false" # Storage: '' Storage: provider=folder;path=.\storage Email: 'smtps://327****:baihtyz****@smtp.qq.com:587' # LDAP: '' # 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: 'http://localhost:5000/' RunJobsInProcess: true # Controls whether users can signup. EnableAccountCreation: true # Exceptionless Client Settings ExceptionlessServerUrl: http://localhost:5000 InternalProjectId: 50ca6b2423d6c8493020b823 # test email SmtpFrom: 32725***@qq.com TestEmailAddress: 32725***@qq.com Serilog: MinimumLevel: Default: Warning WriteTo: - Name: Console Args: theme: "Serilog.Sinks.SystemConsole.Themes.ConsoleTheme::None, Serilog.Sinks.Console" Apm: ServiceEnvironment: prod
Elasticsearch: server=http://localhost:9200为前面安装的Elasticsearch地址
Email是用于发邮件的smtp地址
多个地方的http://localhost:5000是部署地址
SmtpFrom和TestEmailAddress都是发送邮件地址和测试邮件地址
其它的就不改了,如暂时不用redis,不独立Jobs
2、修改前端Exceptionless.Web\ClientApp下的app.config.js(不改也可以)
constant("USE_HTML5_MODE", false) 改为 constant("USE_HTML5_MODE", true) 避免地址中有#! 以前可以还要改constant("BASE_URL", window.location.origin),但现在前后端是部署 在一起,不需要改
3、然后发布(独立或依赖都可以,看自己服务器是否装了.net6),前端代码在ClientApp文件夹中,发布项目会发布到wwwroot中,上传到服务器部署即可。
以前的版本是Api和前端分开部署的,现在可以一起部署,比如以前Api部署http://localhost:5000,前端部署http://localhost:5100,现在直接部署一个,如http://localhost:5000即可
至此就部署好了,浏览器中打开 http://localhost:5000,然后注册,登录就能用了,后面的项目代码中如何接入就使用Exceptionless就不说了。
三、Delete接口失败问题
在IIS部署完后,删除日志等可能会报“405 Method Not Allowed”,发现删除接口用的是“DELETE”方式调用的,有可能是模块WebDAVModule的原因,在web.config文件中增加如下代码去除WebDAVModule
<modules runAllManagedModulesForAllRequests="true"> <remove name="WebDAVModule" /> </modules>
例如:
<?xml version="1.0" encoding="utf-8"?> <configuration> <location path="." inheritInChildApplications="false"> <system.webServer> <modules runAllManagedModulesForAllRequests="true"> <remove name="WebDAVModule" /> </modules> <handlers> <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" /> </handlers> <aspNetCore processPath=".\Exceptionless.Web.exe" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess" /> </system.webServer> </location> </configuration>