今天摸索了一下asp.net core.其他都熟门熟路,唯独部署没碰过.本来以为很简单,没想到还是有很多坑的.
1.给ubuntu安装dotnet core
参见微软官方说明,需要先安装一个预备包,然后安装的时候要指定版本.
sudo apt-get install dotnet-sdk-2.1.4
2.准备网站
用VS向导准备一个网站,然后发布.
发布后的网站会放在bin\Release\netcoreapp2.0\publish\,压缩为zip,然后用scp上传到服务器上.
3.启动网站
在服务器上用unzip解压缩.然后进入文件夹,
启动网站
dotnet yoursite.dll
和spring boot的java -jar yoursite.jar是一个套路有没有.
验证一下,本机没有浏览器,所以用wget下载来验证.wget http://localhost:5000,下载成功!
下一步,用开发机的浏览器看看呗.输入http://your_ip:5000
页面显示:访问被拒绝
一开始以为是防火墙作梗,查了半天.最后用lsof -i看了一下监听的端口发现了问题.asp.net core,如果不设置,默认监听的是Localhost:5000,也就是本机的5000端口,也就是只有本机才能访问.
好吧.修改监听端口.在program.cs中添加UseUrls,指定监听任何ip,端口也改一下
WebHost.CreateDefaultBuilder(args)
.UseUrls("http://*:8999")
.UseStartup<Startup>()
.Build();
然后再上传,启动,这时外部就能打开了.
4.设置服务
dotnet命令执行之后,是不会退出的.所以老规矩.设置个服务.这就看出来ubuntu的好处了.设置服务超级简单.
到/lib/systemd/system.创建xxx.service文件.然后编辑
[Unit]
Description=desc
[Service]
ExecStart=/usr/bin/dotnet /home/publish/publish/yoursite.dll
[Install]
WantedBy=multi-user.target
注意:dotnet路径要写全,不能偷懒写dotnet
然后保存,退出.然后启动
service xxx restart
没有报错!
然后在浏览器访问,咦?500错误?
用service xxx status看一下,网站报错了.错误信息是
The view 'Index' was not found. The following locations were searched:
/Views/Home/Index.cshtml
/Views/Shared/Index.cshtml
这就神器了,刚刚明明还是好的.怎么到了服务里就不行了.猜想这是由于启动路径的原因.查了一圈果然如此.
解决方案,还要回到你程序的program.cs,再添加个设置 UseContentRoot(Path.GetDirectoryName( System.Reflection.Assembly.GetEntryAssembly().Location))
最终设置为:
WebHost.CreateDefaultBuilder(args)
.UseUrls("http://*:8999")
.UseContentRoot(Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location))
.UseStartup<Startup>()
.Build();
再次上传,启动,终于可以使用了.