ubuntu16.04-x64系统中Jexus web server部署.NetCore和端口分析引发的猜想!

简介: 您有这样的牢骚么? 有一周没更新博客了,简单说下在干什么吧;主要是公司安排对接某旅游大公司的接口,接口数量倒也就10个左右,对接完后还需要加入到业务系统中和App端,因此还是需要花点时间的;时间上来说业务需求安排在6月最后一周上线,整个3周的时间,就本人一人负责,由于在这之前对接过另外一个公司接口,我已经搭建好了整体架构和提供给app端接口了,因此主要还是对接某公司接口而已,至于细节上的东西改改后台系统,调调数据格式应该就差不多了;就本人开发的熟练度来讲一周时间基本能搞定,其他剩余时间就测试,喝喝茶,学习一下;谁知。

您有这样的牢骚么?

有一周没更新博客了,简单说下在干什么吧;主要是公司安排对接某旅游大公司的接口,接口数量倒也就10个左右,对接完后还需要加入到业务系统中和App端,因此还是需要花点时间的;时间上来说业务需求安排在6月最后一周上线,整个3周的时间,就本人一人负责,由于在这之前对接过另外一个公司接口,我已经搭建好了整体架构和提供给app端接口了,因此主要还是对接某公司接口而已,至于细节上的东西改改后台系统,调调数据格式应该就差不多了;就本人开发的熟练度来讲一周时间基本能搞定,其他剩余时间就测试,喝喝茶,学习一下;谁知。。。由于接口方说明文档不全,接口几乎是每位技术负责一两个接口(没错这就是大公司,分得就这么细),而且有疑问通过qq咨询时响应慢(可能别人大公司的人就是忙),就这样来到第一周的星期五,从app测试结果和对接接口几乎都完成的情况来看还是不错的(我的方式对接一个接口就嵌入到业务中,所以可以直接拿app测试),谁知第二周的时候,也就是本周星期二我在测试多人下单出现了异常,随后联系对方,结果被告知对接的这个下单接口不是最新的,但是除此之外其他几个接口都是最新的,最新的下单接口我们等一段时间才上线,等上线了在对接吧;来到此时我只能无语(谁叫您们是大公司呢),纯属浪费我对接和咨询的“热情”;

部署前的准备

来到这里就开始进入正题了,首先要准备ubuntu系统(后面我会单独写一篇怎么在OracleVM中安装ubuntu和注意事项),这里我是16.04-x64版本,为什么我重点写明版本号呢,因为我在官网直接下载最新的Jexus包后,尽然运行不起来,后来在善友兄文章中找到了个地址,安装试运行后是可以的也同样标记的是最新版,只不过后面带了个64位的标记,这是一个悲催的天;

我们还需要一个.netcore程序,为了测试方便我这里创建的是一个api程序,并且api的action里面这样修改了下:

1 [HttpGet]
2         public IEnumerable<string> Get()
3         {
4             return new string[] {$"这个站点是:{Request.Host.Host}:{Request.Host.Port}" };
5         }

输出当前应用程序对应的ip和端口,因为在后面为了更好的测试以及区分;这里也简单改造了下Program.cs中的代码,同样也是为了方便测试:

 1  public static void Main(string[] args)
 2         {
 3             var builder = new WebHostBuilder()
 4                 .UseKestrel();
 5             //参数指定端口
 6             builder = args.Length > 0 ? builder.UseUrls(args[0]) : builder;
 7             var host = builder.UseContentRoot(Directory.GetCurrentDirectory())
 8                   .UseIISIntegration()
 9                   .UseStartup<Startup>()
10                   .UseApplicationInsights()
11                   .Build();
12             host.Run();
13         }

改完代码后,需要生成运行包,怎么生成这里就不讲了,有兴趣的朋友可以去看这里Asp.NetCore1.1版本没了project.json,这样来生成跨平台包;然后通过多种方式把程序包传到虚拟机上,这里我通过共享目录的方式传递的,如果有朋友需要以后有机会分享吧;

再来剩下的就是在ubuntu中使用Jexus web server服务了,为了我虚拟机空间着想,这里我是在tmp中操作的,主要以下步骤,打开终端:

1. cd /tmp(进入临时目录)

2. wget linuxdot.net/down/jexus-5.8.2-x64.tar.gz(下载jexus文件包)

3. tar zxvf jexus-5.8.2-x64.tar.gz(解压到当前目录,无需安装)

4. chmod o+w /tmp/jexus/siteconf(为了方便设置jexus文件夹中的siteconf配置文件夹可以直接操作)

5. chmod o+w /tmp/jexus/siteconf/default(设置默认配置default文件可直接通过打开文件方式修改 注:本人不喜欢通过命令来修改,才有此步骤)

6. cd jexus(进入jexus目录  注:由于如果按照我步骤操作的话这样可以直接进入jexus目录,实际jexus目录在 cd /tmp/jexus)

7. ./jws start(测试jexus是否能正常运行,就我写本篇博客的时候第一次执行这命令返回的结果是:Failure,原因是我没用root权限执行命令,改成root执行命令就行了,怎么root以后有机会再讲)

 

Jexus web server开始部署.NetCore

首先直接通过点击文件夹的方式进入如下目录(您也可以通过终端进入,个人喜好便捷):/tmp/jexus/siteconf;能够看到名称问default的文件,此文件在安装时是非root权限只读的,由于我们在上面使用命令:chmod o+w /tmp/jexus/siteconf/default设置了运行其他权限的用户都能修改内容,所以这里我直接改,其他信息暂时不改动,只需要增加apphost节点:

1 port=80
2 root=/ /var/www/default
3 hosts=*    #OR your.com,*.your.com
4 #增加apphost节点
5 AppHost={CmdLine=dotnet /home/wangrudong003/netcore/publish01/T_Jexus.dll;AppRoot=/home/wangrudong003/netcore/publish01;Port=5000}

增加apphost节点的几个属性说明:

CmdLine:执行命令(熟悉一点.netcore运行的朋友可能知道,.netcore运行命令可以这样:dotnet xxx.dll这样就能跑起来程序了,同理可以看成一样的,但是需要指定应用程序具体目录,这里我的是 /home/wangrudong003/netcore/publish01 )
AppRoot:表示应用程序的目录,这里我的是 /home/wangrudong003/netcore/publish01
Port:监听端口;

 

jexus注意点(大家可以去这里详细了解:https://www.linuxdot.net/bbsfile-3084):
port=80:表示通过jexus来监听80端口,以此来访问我们的  /home/wangrudong003/netcore/publish01/T_Jexus.dll  程序
root=/ /var/www/default:指定的虚拟目录

最后root权限进入cd /tmp/jesux目录,然后开启服务:./jws start  ;如果不出意外的话,您也能够看到如下截图信息:

然后咋们来通过80端口访问以下我们部署的接口(这里我ubuntu服务器的ip是172.16.9.66):http://172.16.9.66/api/values,访问成功的截图:

 

分析一下AppHost配置中的Port是否起作用

有上图测试我们看到了通过80端口能正常访问我们的接口站点,现在我们通过linux命令,查看下服务器上所监听的端口,查看tcp监听端口命令: sudo netstat -lntp ,能投得到如图:

由图能够看出来jexus服务监听的80端口,dotnet命令执行的5000端口;为了更好的测试apphost的port的作用,我们需要把default文件中的port为5000端口改成5001来测试,改完之后的配置:

1 AppHost={CmdLine=dotnet /home/wangrudong003/netcore/publish01/T_Jexus.dll;AppRoot=/home/wangrudong003/netcore/publish01;Port=5001}

然后需要重启jexus服务,通过如下命令: ./jws restart :

重启完之后,我们又来访问:http://172.16.9.66/api/values,这个时候就访问不了接口了:

尽管我们的jexus服务器是ok状态,但是接口已经无法访问了,那么我们再来看看监听的端口:

端口图对比分析

这张和之前端口截图对比,能够发现dotnet执行的还是5000端口,和我们修改配置文件的port:5001不能对应,这有点奇怪,就这点能够让我们大胆猜想jexus的这个port端口设置没有效果;而最后5000端口应该还是dotnet自带的默认端口;

疑问

然而又让我们奇怪的是,如果5000端口运行没问题,那么为什么jexus公布出去的80端口无法访问api接口能,我们又来大胆猜想,是不是由于我们设置的jexus的port:5001端口也真实监听的5000不对应造成的呢?为了测试我们再一次修改下AppHost的配置信息:

AppHost={CmdLine=dotnet /home/wangrudong003/netcore/publish01/T_Jexus.dll http://127.0.0.1:5001;AppRoot=/home/wangrudong003/netcore/publish01;Port=5001}

这次我们按照netcore的命令格式:dotnet xxx.dll http://127.0.0.1:5001来设置下netcore监听的端口,这也就是为什么开篇部分我修改Program.cs中代码的原因,一切为了测试猜想;同样修改完后,我们执行jexus服务的命令:./jws restart ;命令执行ok有,先来访问下80端口的接口:

此时能够正常访问咋们的接口了,那最好需要验证的就是看看监听端口了:

第二幅与第三幅端口图大比拼分析

通过上面第三方图能够看到netcore程序此时绑定的是5001端口,这个时候由jexus开放出去的80端口也能正常访问咋们的接口了,那说明我们在jexus的defaut文件中的apphost节点中的port:5001必须要与dotnetcore自身监听的端口一致,没错一致;假如jexus的端口是8080,那么netcore监听的端口也必须是8080,这样咋们通过jexus开放出来的地址才能正常的访问;好了到这里本篇分享文章就结束了,希望能给您带来好的帮助,也希望大家多多点赞推荐,谢谢!!!

目录
打赏
0
0
0
0
1134
分享
相关文章
简化 ASP.NET Core 依赖注入(DI)注册-Scrutor
Scrutor 是一个简化 ASP.NET Core 应用程序中依赖注入(DI)注册过程的开源库,支持自动扫描和注册服务。通过简单的配置,开发者可以轻松地从指定程序集中筛选、注册服务,并设置其生命周期,同时支持服务装饰等高级功能。适用于大型项目,提高代码的可维护性和简洁性。仓库地址:&lt;https://github.com/khellang/Scrutor&gt;
81 5
docker快速部署OS web中间件 数据库 编程应用
通过Docker,可以轻松地部署操作系统、Web中间件、数据库和编程应用。本文详细介绍了使用Docker部署这些组件的基本步骤和命令,展示了如何通过Docker Compose编排多容器应用。希望本文能帮助开发者更高效地使用Docker进行应用部署和管理。
58 19
|
5月前
|
ServiceStack:不仅仅是一个高性能Web API和微服务框架,更是一站式解决方案——深入解析其多协议支持及简便开发流程,带您体验前所未有的.NET开发效率革命
【10月更文挑战第9天】ServiceStack 是一个高性能的 Web API 和微服务框架,支持 JSON、XML、CSV 等多种数据格式。它简化了 .NET 应用的开发流程,提供了直观的 RESTful 服务构建方式。ServiceStack 支持高并发请求和复杂业务逻辑,安装简单,通过 NuGet 包管理器即可快速集成。示例代码展示了如何创建一个返回当前日期的简单服务,包括定义请求和响应 DTO、实现服务逻辑、配置路由和宿主。ServiceStack 还支持 WebSocket、SignalR 等实时通信协议,具备自动验证、自动过滤器等丰富功能,适合快速搭建高性能、可扩展的服务端应用。
324 3
部署使用 CHAT-NEXT-WEB 基于 Deepseek
本文介绍如何在阿里云轻量服务器上部署基于 `Deepseek` 的 `CHAT-NEXT-WEB` 项目。首先,准备一台 Linux 服务器并安装 Docker,确保防火墙允许特定端口访问。接着,通过阿里云容器镜像服务解决国内网络限制问题,将镜像推送到私有仓库并拉取到本地。配置并启动 `chat-next` 项目,使用 Deepseek API 进行优化。最后,安装 Nginx 和 Certbot 配置 HTTPS 访问,确保安全性和自动续签。整个过程需严格遵循官方文档,以避免因网络问题导致的安装失败。
java spring 项目若依框架启动失败,启动不了服务提示端口8080占用escription: Web server failed to start. Port 8080 was already in use. Action: Identify and stop the process that’s listening on port 8080 or configure this application to listen on another port-优雅草卓伊凡解决方案
java spring 项目若依框架启动失败,启动不了服务提示端口8080占用escription: Web server failed to start. Port 8080 was already in use. Action: Identify and stop the process that’s listening on port 8080 or configure this application to listen on another port-优雅草卓伊凡解决方案
83 7
ASP.NET Core OData 9 正式发布
【10月更文挑战第8天】Microsoft 在 2024 年 8 月 30 日宣布推出 ASP.NET Core OData 9,此版本与 .NET 8 的 OData 库保持一致,改进了数据编码以符合 OData 规范,并放弃了对旧版 .NET Framework 的支持,仅支持 .NET 8 及更高版本。新版本引入了更快的 JSON 编写器 `System.Text.UTF8JsonWriter`,优化了内存使用和序列化速度。
132 0
ASP.NET Core 中的速率限制中间件
在ASP.NET Core中,速率限制中间件用于控制客户端请求速率,防止服务器过载并提高安全性。通过`AddRateLimiter`注册服务,并配置不同策略如固定窗口、滑动窗口、令牌桶和并发限制。这些策略可在全局、控制器或动作级别应用,支持自定义响应处理。使用中间件`UseRateLimiter`启用限流功能,并可通过属性禁用特定控制器或动作的限流。这有助于有效保护API免受滥用和过载。 欢迎关注我的公众号:Net分享 (239字符)
86 1
在 ASP.NET Core 中创建 gRPC 客户端和服务器
本文介绍了如何使用 gRPC 框架搭建一个简单的“Hello World”示例。首先创建了一个名为 GrpcDemo 的解决方案,其中包含一个 gRPC 服务端项目 GrpcServer 和一个客户端项目 GrpcClient。服务端通过定义 `greeter.proto` 文件中的服务和消息类型,实现了一个简单的问候服务 `GreeterService`。客户端则通过 gRPC 客户端库连接到服务端并调用其 `SayHello` 方法,展示了 gRPC 在 C# 中的基本使用方法。
87 5
在 ASP.NET Core 中创建 gRPC 客户端和服务器
GraphQL 与 ASP.NET Core 集成:从入门到精通
本文详细介绍了如何在ASP.NET Core中集成GraphQL,包括安装必要的NuGet包、创建GraphQL Schema、配置GraphQL服务等步骤。同时,文章还探讨了常见问题及其解决方法,如处理复杂查询、错误处理、性能优化和实现认证授权等,旨在帮助开发者构建灵活且高效的API。
73 3
ASP.NET Web Pages - 添加 Razor 代码
ASP.NET Web Pages 使用 Razor 标记添加服务器端代码,支持 C# 和 Visual Basic。Razor 语法简洁易学,类似于 ASP 和 PHP。例如,在网页中加入 `@DateTime.Now` 可以实时显示当前时间。

热门文章

最新文章