创建第一个core mvc程序并部署到linux centos详细演示实例

创建第一个core mvc程序并部署到linux centos详细演示实例

468发表于2018-07-29

core mvc最大的亮点就是可以部署到其它平台了,不用被windows束缚了。

通过这一个简单实例,也演示一下从开发core mvc程序到生产部署到linux的完整过程,也希望.net core的生态越来越好。

相关环境

1、vs code 1.25.1

2、centos 7

3、core 版本2.1.302

一、创建 core mvc项目并发布

1.1、下载并安装.net core sdk

.net core sdk地址:https://www.microsoft.com/net/download

注意:我是在windows下开发,所以下载的是windows版本的sdk,如果你是苹果或者linux就下载与之相对应的sdk。

下载后安装就行了。

为了验证是否成功安装,打开cmd试试命令就知道了。


1.2、vs code配置

首先,在某个盘的下建一个所的工程的根目录,比如:L:\NetCore\pratice

然后,用vs code打开这个文件夹,这个时候vs code就会显示这个目录。

接下来, 我们要安装一些插件和core mvc相关的SCAFFOLD

vs code虽然是定位为一个轻量级的代码编辑器,而不是ide。但是我觉得完全可以和很多ide媲美了,很强大。尤其是丰富的插件库,现在很多前端开发也用vs code来开发了。

使用vs code来开发core程序,就不用安装庞大还贵的vs。

最后,我们来创建一个core mvc的项目。

按住键盘上的ctrl+~,~也就是数字1前面一个键,调出终端窗口。

然后,输入命令:dotnet new mvc -n MvcDemo1

其中前面是固定的,最后MvcDemo1就是项目名称。


创建成功后我们在vs的资源管理器中也能找到创建这个项目,自动给我们生成的一些文件和目录。


在最开始我们创建的practice目录下就多了一个项目目录。


下面我们在终端切换到项目所在的目录之后运行一下。

可以从上图看到,程序已经启动起来了。

http的端口是5000,我们在浏览器中输入这个地址试试。后面我会介绍解决办法:

注意:输入http://localhost:5000/ 会自动跳转到https://localhost:5001/,因为框架采用默认设置,做了处理,也推荐我们采用更安全的https协议。

上面只是在本机上运行,我们可以看一下项目目录有什么变化。

1.3、发布项目

那么要发布编译成可以部署的包又怎么办呢?

在终端输入:otnet publish --configuration Release


这个时候会在bin目录下生成一个Release目录,进入的netcoreapp2.1有一个publish。

publish里面就是需要部署的所有文件,需要上传到linux服务器。

二、配置core 在linux centos中的sdk运行环境

在centos7的终端执行以下命令:

注册.Net core包相关的yum源库和依赖配置

[root@bogon ~]# sudo rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm

更新yum源,这个过程可能会比较长,需要漫长等待
[root@bogon ~]# sudo yum update

安装.net core的sdk
[root@bogon ~]# sudo yum install dotnet-sdk-2.1


安装成功后可以通过dotnet --info或者 dotnet --version来看相关版本信息。

三、部署项目并运行

我们将上面发布的publish所有文件拷贝到,/root/dotnet-apps/demo1中

然后,通过命令启动:dotnet MvcDemo.dll

好了,启动成功了,我们换一台机器访问一下试试?

结果是无论怎么都访问不了,看来结果没有我们想象中的顺利。

可能首先第一个你们想到是不是防火墙的端口没有打开,好的我们来打开5000和5001端口。

[root@bogon ~]# firewall-cmd --zone=public --add-port=5000/tcp --permanent
success
[root@bogon ~]# firewall-cmd --zone=public --add-port=5001/tcp --permanent
success
[root@bogon ~]# firewall-cmd --reload

还是不行甚至通过:[root@bogon demo1]# systemctl stop firewalld.service

来彻底关闭防火墙还是不行!


后来才知道,.net core端口监听是通过localhost的,需要处理一下,要通过ip或者*来监听才可以。

这个时候你会不会联想到sockect绑定监听也会有这个问题?

好的,那么我们下面就来对症下药:

也就是在Program中CreateWebHostBuilder的时候在.UseStartup之前加上
.UseKestrel()
.UseUrls("http://*:5000")


更改之后更新发布,重启程序,完美解决,这时也不会跳转到https了。

收工!

小编蓝狐