如何在CentOS 7上部署 .NET Core Web Application
月月
・9 分钟阅读
.NET Core是微软维护的开源跨平台开发框架,有不断增长的.NET社区,借助.NET Core,开发者可以在各种平台上轻松构建现代高性能应用。
在本文中,我将向你展示,如何在Centos7服务器实例上安装NET核心,然后部署一个功能完整的.NET Core Web Application。
前提条件
- 一个新的CentOS 7x64服务器实例,假设它的IP地址是203.0.113.1 ,
- 一个sudo用户 ,
- 服务器实例已被使用EPEL YUM更新到最新的稳定状态 ,
向系统添加.NET产品提要
作为跨平台开发framework,.NET Core为各种操作系统提供预先编译的二进制文件,在CentOS 7上,你可以使用sudo用户运行以下命令来设置有正式签名的.NET YUM repo :
sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc
sudo sh -c 'echo -e"[packages-microsoft-com-prod]nname=packages-microsoft-com-prod nbaseurl= https://packages.microsoft.com/yumrepos/microsoft-rhel7.3-prodnenabled=1ngpgcheck=1ngpgkey=https://packages.microsoft.com/keys/microsoft.asc" > /etc/yum.repos.d/dotnetdev.repo'
使用YUM安装最新的.NET SDK
安装.NET YUM repo后,在你的计算机上安装最新的.NET SDK,包括.NET Core和其他依赖项:
sudo yum update -y
sudo yum install libunwind libicu -y
sudo yum install dotnet-sdk-2.1.4 -y
你可以创建,并且运行NET Core演示应用程序"Hello World"来确认结果:
cd
dotnet new console -o helloworldApp
cd helloworldApp
dotnet run
dotnet new console -o helloworldApp
命令将在主目录中创建名为helloworldApp
的目录,然后使用console
模板在新创建的目录中生成应用程序文件。
执行dotnet run命令后,你将在控制台中看到Hello World消息!
创建.NET Core网络应用程序
现在,创建并运行razor
的.NET Core应用程序,记住"Razor Pages"是.NET CoreMVC的一个新应用程序模板,它是针对面向页面的场景而设计的:
cd
dotnet new razor -o myfirstwebapp
cd myfirstwebapp
dotnet run
通过执行上面的dotnet run
命令,你将启动一个.NET Core网络应用程序侦听: http://localhost:5000
。
如果你想确认web应用程序正在运行,尽管它在没有GUI的服务器实例上,但是,仍然可以打开curl http://localhost:5000
。
之后,你可以按CTRL C关闭.NET Core Web应用程序。
要实现你的Web应用程序,你需要编辑app目录中的文件。你可以在.NET文档页 官方网站上了解更多详情。
完成所有开发任务后,你可以使用以下命令发布你的网络应用程序:
cd ~/myfirstwebapp
dotnet publish
你可以在下面的代码中找到已发布 ~/myfirstwebapp/bin/Debug/netcoreapp2.0
目录。
(可选):Setup Supervisor使你的.NET Core Web应用程序保持在线状态
进程崩溃,为了保持web应用程序的联机,使用一个进程管理工具来监视和重新启动web应用程序。
在CentOS 7上,可以使用YUM安装Supervisor :
sudo yum install supervisor -y
接下来,你需要为你的网络应用程序设置一个专用的Supervisor程序配置文件:
cd /etc/supervisord.d
sudo vi myfirstwebapp.conf
填充文件:
[program:myfirstwebapp]
command=dotnet myfirstwebapp.dll
directory=/home/sudouser/myfirstwebapp/bin/Debug/netcoreapp2.0/
environment=ASPNETCORE__ENVIRONMENT=Production
user=root
stopsignal=INT
autostart=true
autorestart=true
startsecs=1
stderr_logfile=/var/log/myfirstwebapp.err.log
stdout_logfile=/var/log/myfirstwebapp.out.log
保存和退出:
:wq
!
接下来,你需要修改默认的supervisord配置文件以包含我们创建的配置文件:
sudo cp /etc/supervisord.conf /etc/supervisord.conf.bak
sudo vi /etc/supervisord.conf
查找最后一行:
files = supervisord.d/*.ini
替换它:
files = supervisord.d/*.conf
保存和退出:
:wq
!
启动管理员并将它设置为在系统启动时自动启动:
sudo systemctl start supervisord.service
sudo systemctl enable supervisord.service
加载新的主管设置:
sudo supervisorctl reread
sudo supervisorctl update
现在,可以使用以下命令显示应用程序的状态:
sudo supervisorctl status
输出将如下所示:
myfirstwebapp RUNNING pid 3925, uptime 0:08:45
接下来,你可以通过指定pid 3925
来尝试终止应用程序的进程:
sudo kill -s 9 3925
等待一段时间,然后再次检查状态:
sudo supervisorctl status
这次,输出将指示应用程序已经中断,并且自动启动:
myfirstwebapp RUNNING pid 3925, uptime 0:00:06
(可选):将Nginx安装为反向代理
为了便于访问者访问,你可以将Nginx安装为反向代理以将web流量传递给端口5000
。
使用YUM安装Nginx :
sudo yum install nginx -y
编辑缺省Nginx配置文件,如下所示:
sudo cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak
sudo vi /etc/nginx/nginx.conf
在http {}
段中查找以下段:
location/{
}
在大括号之间插入六行反向代理设置,如下所示:
location / {
proxy_pass http://127.0.0.1:5000;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
保存和退出:
:wq
!
启动Nginx服务,然后将它设置为在系统启动时启动:
sudo systemctl start nginx.service
sudo systemctl enable nginx.service
设置防火墙规则
访问者可以访问80
和443
上的.NET Core网络应用程序之前,需要修改防火墙规则,如下所示:
sudo firewall-cmd --zone=public --permanent --add-service=http
sudo firewall-cmd --zone=public --permanent --add-service=https
sudo firewall-cmd --reload
这就完成了应用程序设置,你现在可以在http://203.0.113.1
浏览.NET CoreWeb应用程序了。