最近在学习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,大功告成!!!

posted on 2018-05-06 02:19  布里渊区  阅读(306)  评论(1编辑  收藏  举报