ubuntu16.04-x64系统中Jexus web server部署.NetCore和端口分析引发的猜想!
您有这样的牢骚么?
有一周没更新博客了,简单说下在干什么吧;主要是公司安排对接某旅游大公司的接口,接口数量倒也就10个左右,对接完后还需要加入到业务系统中和App端,因此还是需要花点时间的;时间上来说业务需求安排在6月最后一周上线,整个3周的时间,就本人一人负责,由于在这之前对接过另外一个公司接口,我已经搭建好了整体架构和提供给app端接口了,因此主要还是对接某公司接口而已,至于细节上的东西改改后台系统,调调数据格式应该就差不多了;就本人开发的熟练度来讲一周时间基本能搞定,其他剩余时间就测试,喝喝茶,学习一下;谁知。。。由于接口方说明文档不全,接口几乎是每位技术负责一两个接口(没错这就是大公司,分得就这么细),而且有疑问通过qq咨询时响应慢(可能别人大公司的人就是忙),就这样来到第一周的星期五,从app测试结果和对接接口几乎都完成的情况来看还是不错的(我的方式对接一个接口就嵌入到业务中,所以可以直接拿app测试),谁知第二周的时候,也就是本周星期二我在测试多人下单出现了异常,随后联系对方,结果被告知对接的这个下单接口不是最新的,但是除此之外其他几个接口都是最新的,最新的下单接口我们等一段时间才上线,等上线了在对接吧;来到此时我只能无语(谁叫您们是大公司呢),纯属浪费我对接和咨询的“热情”;
部署前的准备
来到这里就开始进入正题了,首先要准备ubuntu系统(后面我会单独写一篇怎么在OracleVM中安装ubuntu和注意事项),这里我是16.04-x64版本,为什么我重点写明版本号呢,因为我在官网直接下载最新的Jexus包后,尽然运行不起来,后来在善友兄文章中找到了个地址,安装试运行后是可以的也同样标记的是最新版,只不过后面带了个64位的标记,这是一个悲催的天;
我们还需要一个.netcore程序,为了测试方便我这里创建的是一个api程序,并且api的action里面这样修改了下:
[HttpGet]
public IEnumerable<string> Get()
{
return new string[] {$"这个站点是:{Request.Host.Host}:{Request.Host.Port}" };
}
输出当前应用程序对应的ip和端口,因为在后面为了更好的测试以及区分;这里也简单改造了下Program.cs中的代码,同样也是为了方便测试:
public static void Main(string[] args)
{
var builder = new WebHostBuilder()
.UseKestrel();
//参数指定端口
builder = args.Length > ? builder.UseUrls(args[]) : builder;
var host = builder.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration()
.UseStartup<Startup>()
.UseApplicationInsights()
.Build();
host.Run();
}
改完代码后,需要生成运行包,怎么生成这里就不讲了,有兴趣的朋友可以去看这里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节点:
port=
root=/ /var/www/default
hosts=* #OR your.com,*.your.com
#增加apphost节点
AppHost={CmdLine=dotnet /home/wangrudong003/netcore/publish01/T_Jexus.dll;AppRoot=/home/wangrudong003/netcore/publish01;Port=}
增加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来测试,改完之后的配置:
AppHost={CmdLine=dotnet /home/wangrudong003/netcore/publish01/T_Jexus.dll;AppRoot=/home/wangrudong003/netcore/publish01;Port=}
然后需要重启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开放出来的地址才能正常的访问;好了到这里本篇分享文章就结束了,希望能给您带来好的帮助,也希望大家多多点赞推荐,谢谢!!!
ubuntu16.04-x64系统中Jexus web server部署.NetCore和端口分析引发的猜想!的更多相关文章
- Jexus Web Server 完全傻瓜化图文配置教程(基于Ubuntu 12.04.3 64位)[内含Hyper-v 2012虚拟机镜像下载地址]
1. 前言 近日有感许多新朋友想尝试使用Jexus,不过绝大多数都困惑徘徊在Linux如何安装啊,如何编译Mono啊,如何配置Jexus啊...等等基础问题,于是昨日向宇内流云兄提议,不如搞几个配置好 ...
- Jexus web server V5.1 安装配置要点
一.Jexus简介:Jexus web server for linux 是一款基于.NET兼容环境,运行于Linux/unix操作系统之上,以支持ASP.NET为核心功能的高性能WEB服务器.Jex ...
- Jexus-5.6.3使用详解、Jexus Web Server配置
一.Jexus Web Server配置 在 jexus 的工作文件夹中(一般是“/usr/jexus”)有一个基本的配置文件,文件名是“jws.conf”. jws.conf 中至少有 Site ...
- Win7 U盘安装Ubuntu16.04 双系统详细教程
Win7 U盘安装Ubuntu16.04 双系统详细教程 安装主要分为以下几步: 一. 下载Ubuntu 16.04镜像软件: 二. 制作U盘启动盘使用ultraISO: 三. 安装Ubuntu系统: ...
- windows10下安装ubuntu16.04 双系统
软件和材料: UltraISO .ubuntu16.04镜像.U盘 步骤: 1.先在windows10 上下载UltraISO并安装 2.打开UltraISO,插入优盘,制作ubuntu160.4 ...
- Windows下安装Ubuntu16.04双系统
ROS需要在Ubuntu系统上开发,虚拟机跑Ubuntu开发ROS容易出现各种各样的问题,所以需要安装Ubuntu16.04双系统.笔者也是一步步按着网上的帖子来,由于网上的教程都不是最新的而且有的也 ...
- Win10系统下安装ubuntu16.04双系统-常见问题解答
Win10系统下安装ubuntu16.04双系统-常见问题解答 1. 安装ubuntu16.04.2系统 磁盘分区形式有两种:GPT和MBR,关系到设置引导项.在win10下压缩出500GB空间给ub ...
- windows10和ubuntu16.04双系统下时间不对的问题 ZT
最近装了windows10和ubuntu16.04双系统,仍然出现了喜闻乐见的老问题,装完后,在windows下时区不对,之前的老办法是: sudo gedit /etc/default/rcS ut ...
- windows10和ubuntu16.04双系统下时间不对的问题
最近装了windows10和ubuntu16.04双系统,仍然出现了喜闻乐见的老问题,装完后,在windows下时区不对,之前的老办法是: sudo gedit /etc/default/rcS ut ...
随机推荐
- 宝爷Debug小记——Cocos2d-x(3.13之前的版本)底层BUG导致Spine渲染花屏
最近在工作中碰到不少棘手的BUG,其中的一个是Spine骨骼的渲染花屏,在战斗中派发出大量士兵之后有概率出现花屏闪烁(如下图所示),这种莫名奇妙且难以重现的BUG最为蛋疼. 前段时间为了提高Spi ...
- redis数据库入门
Redis入门(1) 之安装.配置.安全登录 REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统. Redi ...
- struts的package的name与namespace
<struts> <constant name="struts.devMode" value="true"></constant& ...
- JAVA中事物以及连接池
一.事物 什么是事物? 事务,一般是指要做的或所做的事情.在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元.这些单元要么全都成功,要么全都不成功. 做一件事情,这个一件事情中有多个 ...
- bitnami gitlab 配置域名
正常安装完成以后gitlab的代码仓库域名的地址依然是IP,这样不便于我们记忆,所以我想给gitlab增加一个域名 找到gitlab.yml 配置文件,在gitlab 节点下的host 由IP变更为域 ...
- Linux下Samba服务器的安装和配置
第一步:sudo apt-get install samba smbclient 安装samba服务器. 第二步:打开/etc/samba/smb.conf文件,在末尾添加下面的字段: [用户名] c ...
- 008多对一 关联映射 --- many-to-one
多对一 --- many-to-one 一对多 --- one-to-many 一对一 --- one-to-one 多对多 --- many-to-many 场景:用户和组:从用户角度来,多个用户属 ...
- Java ClassLoader 原理分析
一.ClassLoader(类加载器)的作用 如果一个程序包含不止一个class文件,那么当程序启动时,带有main方法的类的class文件作为程序入口先被JVM加载,然后根据程序调用的需要,再逐步进 ...
- SQL SERVER大话存储结构(4)_复合索引与包含索引
索引这块从存储结构来分,有2大类,聚集索引和非聚集索引,而非聚集索引在堆表或者在聚集索引表都会对其 键值有所影响,这块可以详细查看本系列第二篇文章:SQL SERVER大话存储结构 ...
- Zepto源码分析-event模块
源码注释 // Zepto.js // (c) 2010-2015 Thomas Fuchs // Zepto.js may be freely distributed under the MIT l ...