[CentOS] 结合Nginx部署DotNetCore的demo项目【转载】
部署前准备
1.VisualStudio2017+.netcore2.0SDK
2.Centos7.2
3.SecureCRT,Xftp(根据自己喜好)
创建WebApi项目
修改Program.cs中的BuildWebHost方法为(不改也可,core默认使用Kestrel作为Server)
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration()
.UseUrls("http://localhost:5000")
.UseStartup<Startup>()
.Build();
尝试使用IIS Express启动应用程序,启动项配置在
一切正常,然后我们发布程序,右键项目-发布-发布到文件夹,发布完成后的应用程序位置在\bin\Release\CoreTest.WebApi\
Xftp注意两处连接选项,使用Xftp将发布好的程序上传到服务器,位置在/home/wwwroot/,
安装CentOS7下.NET Core SDK(参考https://www.microsoft.com/net/core#linuxcentos)
sudo yum install libunwind libicu curl -sSL -o dotnet.tar.gz https://aka.ms/dotnet-sdk-2.0.0-linux-x64 mkdir -p ~/dotnet && tar zxf dotnet.tar.gz -C ~/dotnet sudo ln -s /root/dotnet/dotnet /usr/local/bin
输入命令dotnet --info查看sdk的安装信息,如下图
输入命令dotnet /home/wwwroot/CoreTest.WebApi/CoreTest.WebApi.dll 出现下图信息表明运行成功,我们的程序正在监听localhost:5000,此时还不能通过外网访问,我们使用Nginx将外部请求转发到应用程序上
安装Centos7下Nginx
curl -o nginx.rpm http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
rpm -ivh nginx.rpm
yum install nginx
启动: systemctl start nginx
设置开机启动:systemctl enable nginx
此时通过IP访问,出现Nginx的默认访问页面,表明安装成功
修改Nginx的配置文件,转发外部请求到应用程序
vi /etc/nginx/conf.d/default.conf
键入I 进入输入模式
将文件内容替换为
server {
listen 80;
location / {
proxy_pass http://localhost:5000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
然后按Esc退出输入模式,进入命令模式,输入:wq回车,保存并退出
保存成功后
重新加载service nginx reload
输入命令dotnet /home/wwwroot/CoreTest.WebApi/CoreTest.WebApi.dll启动应用程序
此时再访问接口/api/values(创建项目的时候自带的) Nginx监听80端口接收外部请求并将请求转发给应用程序
配置守护服务(Supervisor)
目前存在三个问题
问题1:ASP.NET Core应用程序运行在shell之中,如果关闭shell则会发现ASP.NET Core应用被关闭,从而导致应用无法访问,这种情况当然是我们不想遇到的,而且生产环境对这种情况是零容忍的。
问题2:如果ASP.NET Core进程意外终止那么需要人为连进shell进行再次启动,往往这种操作都不够及时。
问题3:如果服务器宕机或需要重启我们则还是需要连入shell进行启动。
为了解决这个问题,我们需要有一个程序来监听ASP.NET Core 应用程序的状况。在应用程序停止运行的时候立即重新启动。这边我们用到了Supervisor这个工具,Supervisor使用Python开发的。
安装Supervisor
yum install python-setuptools
easy_install supervisor
mkdir /etc/supervisor
echo_supervisord_conf > /etc/supervisor/supervisord.conf
vi /etc/supervisor/supervisord.onf
修改supervisord.conf文件,将文件尾部的配置
修改成(注意前面的两个分号去掉)
Esc后:wq回车,保存退出ps:如果服务已启动,修改配置文件后可用supervisorctl reload命令来使其生效
监听应用程序配置
创建conf.d文件夹:mkdir /etc/supervisor/conf.d
创建并编辑CoreTest.conf配置文件:vi /etc/supervisor/conf.d/CoreTest.conf
[program:CoreTest]
command=/bin/bash -c "dotnet CoreTest.WebApi.dll"
directory=/home/wwwroot/CoreTest.WebApi/
autorestart=true
stderr_logfile=/var/log/CoreTest.err.log
stdout_logfile=/var/log/CoreTest.out.log
environment=ASPNETCORE_ENVIRONMENT=Production
user=root
stopsignal=INT
运行supervisord,查看是否生效
supervisord -c /etc/supervisor/supervisord.conf ps -ef | grep CoreTest
出现下图所示,则表示配置成功
此时不用手动dotnet CoreTest.WebApi.dll启动应用程序也能访问(由Supervisor进程在后台监听)
配置Supervisor开机启动
新建一个“supervisord.service”文件 vi /usr/lib/systemd/system/supervisord.service
# dservice for systemd (CentOS 7.0+)
# by ET-CS (https://github.com/ET-CS)
[Unit]
Description=Supervisor daemon [Service]
Type=forking
ExecStart=/usr/bin/supervisord -c /etc/supervisor/supervisord.conf
ExecStop=/usr/bin/supervisorctl shutdown
ExecReload=/usr/bin/supervisorctl reload
KillMode=process
Restart=on-failure
RestartSec=42s [Install]
WantedBy=multi-user.target
设置开机启动:systemctl enable supervisord
验证开机启动是否成功:systemctl is-enabled supervisord
重启服务器:reboot 此时不能访问
重启完成后,所有服务自动开启,正常访问
部分内容参考:http://www.cnblogs.com/ants/p/5732337.html
[CentOS] 结合Nginx部署DotNetCore的demo项目【转载】的更多相关文章
- CentOS Mono Nginx 部署 MVC4+WebApi
CentOS Mono Nginx 部署 MVC4+WebApi 经过几天的折磨,终于在CentOS上成功部署了MVC4+WebApi.Mono上的服务器推荐两种:Jexus(国产高人写的一款很牛的服 ...
- CentOS 7 Nginx部署.NET Core Web应用
部署.NET Core运行时 必要前提 在安装.NET Core前,需要注册Microsoft签名秘钥并添加Microsoft产品提要,每台机器只需要注册一次,执行如下命令: sudo rpm -Uv ...
- 使用 Nginx 部署前后端分离项目,解决跨域问题
前后端分离这个问题其实松哥和大家聊过很多了,上周松哥把自己的两个开源项目部署在服务器上以帮助大家可以快速在线预览(喜大普奔,两个开源的 Spring Boot + Vue 前后端分离项目可以在线体验了 ...
- Nginx 部署多个 web 项目(虚拟主机)
1,创建 www 目录 2,在 www 目录下创建 test1 和 test2 目录,表示两个项目 3,test1 下创建 test1.html 4,test2 下创建 test2.html 5,配置 ...
- centOS+uwsgi+nginx 部署flask项目,问题记录
用flask做的项目想要部署到centOS系统上,填了一些坑,终于成功了,记录一下遇到的问题: 此次部署主要是按照这个博客进行的 https://www.cnblogs.com/Ray-liang/p ...
- vue+uwsgi+nginx部署前后端分离项目
前后端分离,vue前端提供静态页面,且可以向后台发起get,post等restful请求. django后台提供数据支撑,返回json数据,返回给vue,进行数据页面渲染 后端 创建虚拟环境 解决dj ...
- CentOS使用nginx部署https服务
nginx安装参考:https://www.cnblogs.com/taiyonghai/p/6728707.html 自签证书生成参考:https://gmd20.github.io/blog/op ...
- CentOS下Nginx部署React静态应用
查看CentOS版本: cat /etc/redhat-release 安装nginx: yum install nginx 查看nginx版本: nginx -v 启动nginx: systemct ...
- linux --- 部署前后端分离项目
vue + uwsgi +nginx 部署前后端分离项目 准备项目 1.将前端vue项目包和后端django项目包上传服务器,通过lrzsz,直接从windows拖进linux中 2.解压缩操作 前端 ...
随机推荐
- Java正确获取客户端真实IP方法整理
在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的.但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实I ...
- JavaScript之this的工作原理
JavaScript 有一套完全不同于其它语言的对 this 的处理机制. 在五种不同的情况下 ,this 指向的各不相同. 1.全局范围内 当在全部范围内使用 this,它将会指向全局对象. 2.函 ...
- Unity3D研究院之Inspector视图中的get/set使用
get set 使用起来很方便,但是编辑时在Inspector视图中问题就来了,因为get/set的属性即使是public了,但是在Inspector视图中依然不显示..谷歌一下估计就是下面这样的答案 ...
- EasyNVR H5无插件摄像机直播解决方案前端解析之:如何在播放界面添加实时云台控制界面
如何在播放器上加一个云台控制界面 问题: 对于实时直播的视频播放, 由于播放页面客观样式要求(一个播放器占据了整个页面),因此很难找出很合理的空间来放置其他功能按钮的位置(比如配合实时是平的云台控制界 ...
- 2-phase-commit 3-phase-commit
2 prepare commit rollback acknowledge
- 性能测试--Jmeter的Non GUI模式、集群
Jmeter的Non GUI模式.集群 一.Non GUI模式 1.一般情况下在NonGUI模式下运行jmeter,有两个好处: 节省系统资源,能够产生更大的负载 可以通过命令行参数对测试场景进行更精 ...
- 双缓冲类里的OnPaint与OnSize,以及构造函数的关系
代码摘自wx\lib\agw\knobctrl.py一点体会是,OnSize作为class的函数,被放在构造函数里执行,会先于OnPaint执行.测试结果是,初始启动后,会执行8次OnSize(为什么 ...
- 列举你了解的Python较其他语言的优势
1.简单易学 2.开发速度快 3.拥有最成熟的程序包资源库(第三方库)
- 《Python Machine Learning》索引
目录部分: 第一章:赋予计算机从数据中学习的能力 第二章:训练简单的机器学习算法——分类 第三章:使用sklearn训练机器学习分类器 第四章:建立好的训练集——数据预处理 第五章:通过降维压缩数据 ...
- Java for LeetCode 083 Remove Duplicates from Sorted List
Given a sorted linked list, delete all duplicates such that each element appear only once. For examp ...



















