以前的教程里,我用过cygwin和bash on windows,但都有一个缺点,就是事实上底层仍是windows的,因此此次搞.net core 我决定仍是上虚拟机而后用 bash on windows的ssh来控制。因此先装个虚拟机。 既然底子是软狗,那就先用hyper-v吧,简单的说一下教程吧。html
而后点击新建出来的虚拟交换机,进行设置java
这样就能够了。node
进入 ubuntu 安装 sshdpython
sudo apt-get install openssh-serverlinux
打开bash on windows,连一下并测试。nginx
ssh root@192.168.1.113 sudo apt-get updategit
ok,测试成功。web
而后直接点击publish,发布出来。npm
无论怎样仍是要首先安装 .net core sdkjson
不想装vs2015,因而仍是用文本编辑器吧,这里我用的也是微软的 vs code。
微软使用了nodejs的npm做为依赖管理项,不过我有点奇怪这是出于什么考虑,大概与微软全面转向json格式有关?
先无论,那就要先安装npm了。我准备了网盘,下载解压,加到PATH目录就能够了,固然,本身在网上找也能够。
而后在npm中安装插件,其中glup插件依赖git,因此要先安装git for windows,安装的时候注意勾选在windows console中使用。 而后以管理员打开命令行安装插件。
npm install -g yo bower grunt-cli gulp npm install -g generator-aspnet
安装完成以后就能够直接用模板生成项目了。cd 到项目目录,执行
## 先新建一个目录 cd Code mkdir DotnetCore cd DotnetCore yo aspnet
在生成过程当中会再让你输入项目名称,我输入了CoreTest,因此以后会生成一个CoreTest的文件夹。自后不用修改程序,继续在命令行里执行。
cd CoreTest ## 处理依赖(由于要下载可能会有点慢) dotnet resotre ## 测试运行(dotnet会启动内置服务器) dotnet run
最后,使用 dotnet publish 发布项目。
一点感想 事实上npm不止是新建项目的时候用到,在 dotnet publish 的时候也会用到,我拷贝过vs里默认生成的asp.net core项目进行 dotnet publish,也会报错缺乏npm的模块,因此估计vs内置了某些包管理器的功能。
我用的linux的 scp 命令把本地包拷贝到了linux服务器上。命令的具体用法仍是你们自行查询吧,这一步须要在 bash on windows 中进行(由于用到的是linux 命令嘛),若是目录不存在,须要先ssh进去新建目录(而后退出ssh执行scp)。若有其它好办法请留言告诉我 ^_^
scp -r /mnt/p/Code/DotnetCore/CoreTest/bin/Debug/netcoreapp1.0/publish henry@192.168.1.113:/home/henry/Documents/Code
由于是最多见的ubuntu,因此安装也是格外简单,微软提供了全程脚本可用,并且我安装的仍是最新的16.04lts,因此直接按照官方教程打命令就能够了。
虽然教程很明显,但我仍是把16.04的安装语句写一下吧。
sudo sh -c 'echo "deb [arch=amd64] https://apt-mo.trafficmanager.net/repos/dotnet/ xenial main" > /etc/apt/sources.list.d/dotnetdev.list' sudo apt-key adv --keyserver apt-mo.trafficmanager.net --recv-keys 417A0893 sudo apt-get update sudo apt-get install dotnet-dev-1.0.0-preview2-003121
这篇文章还提到了如何写一个hello world ,因此你们自行测试。
这是dotnet core 自带的 web 服务器的名字,在安装 dotnet 的时候会自行安装,因此你们并不须要安装tomcat那样的java服务器。而运行这个服务器也很简单,就是运行命令。
## Asp.net Core 的程序入口也是 Main 方法,因此运行的这个dll是包含 Main方法的那个。随后的输入应该跟windows下运行dotnet run 的效果是同样的。 sudo dotnet /home/henry/Documents/Code/CoreTest.dll
不过由于服务器的默认设置,在外部好像没法访问到5000端口,因此,官方建议咱们使用反向代理,就是下面的nginx。
所谓的“反向”代理就是说服务器的代理,由于咱们常见的代理都是客户端代理,浏览器输入一个代理服务器,服务器看到的实际上是客户端的代理服务器,而这个反向代理其实就是说咱们访问的某网站服务器,实际上是转发到其余服务器上再返回的,真实的服务器地址客户端其实并不清楚,这对分布式部署格外重要,而集群化负载均衡固然是须要分布式部署的。
nginx就是这么一个web服务器,它能够配置对它的请求转交给某个具体的应用服务器,并自动负载均衡。 ubuntu上安装nginx也十分简单,直接 执行命令:
sudo apt-get install nginx sudo service nginx start
而后对nginx进行配置,使对其的访问转发到Kestrel的5000端口上。
sudo nano /etc/nginx/sites-available/default
编辑配置文件以下
server { listen 80; location / { proxy_pass http://localhost:5000; 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; } }
而后从新读取配置文件并重启nginx
## 这一句是先测试配置文件是否正确 sudo nginx -t sudo nginx -s reload
好了,测试成功! 咱们已经成功的在linux上部署了asp.net core 程序!
官网的教程中还提到了 supervisor 程序,这是基于python的进程管理小程序,最开始好像是用来管理某些python脚本的执行。
官网提到由于Kestrel服务并不能自行启动,因此最好部署一个进程管理工具来管理初始化进程。固然,好像写脚本也是能够的。由于我目标不是做为生产环境的测试而只是学习,因此这次到此为止。官博上还写了一些关于安全性方面的改进,如防火墙配置等,有兴趣详细了解请到 asp.net core 官方博客。
前一阵子有个段子,说微软在忙着开源,oracle在忙着做死。 java8若是是java的最后一个版本,那 dotnet core 仍是有点机会的。C#的语法糖不少,支持的特性也更多,因此我我的仍是倾向于写C#代码的,只是如今已是优先考虑整个解决方案的时代,微软因为过于其服务器价格昂贵,因此在云时代已经被java甩开了太远,不过仍是但愿dotnet能够发展的更好,不要让我失业啊 ^_^
PS. HyperV这个随系统自启动的效果至关不错,感受不到本身跑了虚拟机 ^_^