最近在学习Dotnet Core,整合各种资源,一遍学习,一边操练,记录一下。
画个图,来表示本文要达到的目的
1、用VS2017 创建一个 .net core asp.net 默认项目
2、发布Release到文件夹
3、在阿里云 Ubantu 上安装 .NET Core Runtime
参见:https://www.microsoft.com/net/download/linux-package-manager/ubuntu16-04/runtime-2.0.6
上面只是安装了 .net core,并没有 安装 asp.net core, 所以还需要下载 ASP.NET Core并解压 到环境目录去
wget -O aspnetcore-store.tar.gz https://download.microsoft.com/download/8/D/A/8DA04DA7-565B-4372-BBCE-D44C7809A467/aspnetcore-store-2.0.6-linux-x64.tar.gz tar zxf aspnetcore-store.tar.gz -C /usr/share/dotnet
参见:https://www.cnblogs.com/seriawei/p/8746249.html
4、用FTP 将发布的程序上传到Ubantu,执行下面
From the command line, run dotnet <app_assembly>.dll. In a browser, navigate to http://<serveraddress>:<port> to verify the app works on Linux.
注意:run dotnet <app_assembly>.dll 的时候,一定要cd 到(进入) dll 所在的目录,然后 执行 dotnet <app_assembly>.dll,
如果在其他目录,直接 dotnet /home/..../ <app_assembly>.dll 这样,可能导致网页js 和css 文件加载不正常。
5、发现 http://<serveraddress>:<port> 在浏览器根本打不开网页,于是
netstat -tnl 查看端口5000是否正常
发现5000端口,只对本地127.0.0.1有效,当然我们客户端没法访问了
修改程序 Programe.cs 文件
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseUrls("http://*:5000")
.UseStartup<Startup>()
.Build();
ok,重新发布,然后再执行上面 第 4步,就可以在客户端正常打开网址 http://服务器IP:5000 页面了!
6、继续配置Nginx
在程序 Startup 里面的Configure 里面,添加如下代码,发布到服务器
app.UseForwardedHeaders(new ForwardedHeadersOptions { ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto });
7、在Ubantu上安装好Nginx,然后修改Nginx配置文件
server { listen 80; server_name xxxxx.com; location / { proxy_pass http://127.0.0.1:5000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection keep-alive; proxy_set_header Host $http_host; proxy_cache_bypass $http_upgrade; } }
8、重启Nginx就可以用网址访问啦!http://xxxxx.com
service nginx reload
或者进入nginx目录,执行 nginx -s reload
9、至此,上面的图片的整个流程的目的实现了,但是还有些问题:
因为Nginx没有管理 Kestrel 的进程,启动web 程序只能通过前面的 dotnet xxxxx.dll,这样的方法不科学,不方便,而且万一程序崩溃,需要自动重启的办法;
所以要做一个 服务来 启动和管理、和监控 web 程序。
systemd(全称:system daemon) 就是一种比较流行的 初始化系统,启动、停止、管理进程的 一种方案。
sudo vi /etc/systemd/system/DotnetCoreWebApi.service
创建一个文件DotnetCoreWebApi.service ,然后内容:
[Unit] Description=CoreWebApi测试程序 [Service] WorkingDirectory=/home/ftp/data/ ExecStart=/usr/bin/dotnet /home/ftp/data/CoreWebApi.dll Restart=always RestartSec=10 # 崩溃后10秒重启 SyslogIdentifier=dotnet-example User=root Environment=ASPNETCORE_ENVIRONMENT=Production Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false [Install] WantedBy=multi-user.target
注意:WorkingDirectory 要指向你的程序根目录,ExecStart ,后半部分路径就是指向 程序的dll,User 必须存在
生成服务
systemctl enable DotnetCoreWebApi.service
启动服务,并查看服务运行状态
systemctl start DotnetCoreWebApi.service systemctl status DotnetCoreWebApi.service
OK,大功告成!!!