Linux+Nginx+Asp.net Core及守护进程部署
上篇《Docker基础入门及示例》文章介绍了Docker部署,以及相关.net core 的打包示例。这篇文章我将以oss.offical.site站点为例,主要介绍下在linux机器下完整的部署流程,.net core在docker容器中的运行已经介绍,这里.net core运行环境我会介绍直接在linux运行的场景,内容主要包含以下几个部分:
1. 基础工具和Linux环境准备
2. .Net Core环境安装及端口配置
3. Nginx的安装配置
4. Supervisor守护进程安装配置
一. 基础工具和Linux环境准备
工具介绍:
Ubuntu:azure云端linux主机
Xshell:免费的linux客户端工具
FileZilla: 免费文件上传(sftp、ftp)工具
vs2017: 开发工具
本次部署主要是通过Nginx负载代理.net core服务,提供对外站点访问。.net core 本身的宿主则通过其自带的Kestrel服务运行。如果你是云主机请记得在管理控制台添加80访问端口。
那这里我先创建一个www文件夹,作为后边存放站点文件的根目录,同时设置相关权限,这里可能会有一个小的需要注意的问题,现在很多云主机直接登录后权限是很低的,需要使用:sudo -s 命令提升权限,否则创建文件夹会出现权限不足的错误。
1. mkdir /home/www/ossoffical // 创建ossoffical站点文件夹
2. chown [-R] 账号名称 ossoffical // 把账号名称添加到www文件夹的所有者中,保证后续sftp上传文件夹等在无法提权的情况下也能操作
二. .Net Core环境安装及端口配置
1. 安装,这里参照微软官网即可,我这里使用的是Ubuntu 14.04版本,主要执行以下几条命令
sudo sh -c 'echo "deb [arch=amd64] https://apt-mo.trafficmanager.net/repos/dotnet-release/ trusty main" > /etc/apt/sources.list.d/dotnetdev.list'
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 417A0893
sudo apt-get update
sudo apt-get install dotnet-dev-1.0.1
2. vs端口相关设置
这里需要注意一下,当前版本创建的.net core项目在不制定具体端口的情况下,会默认使用5000端口。但是这个在后续的版本中会移除,见官方文档:

并且我也希望自己指定具体的端口,这样以后站点多了之后防止冲突,我修改自己项目中的Program文件中内容,指定8000端口,如图:

请注意先后的顺序,否则在vs中可能会出现调试无法打开的情况,发布当前项目。
3. 上传项目文件运行
a. 通过filezilla上传项目文件到ossoffical目录下
b. 通过命令客户端进入ossoffical目录(cd /home/www/ossoffical),执行:dotnet OSS.Offical.Site.dll(我当前站点项目程序集名称),结果如图:

退出执行ctrl+c 。当然我们也可以执行 “ dotnet OSS.Offical.Site.dll & ” ,让其在后台运行,只是这个更方便让我们查看。这个时候你可以访问对应的8000端口即可访问(云主机请注意开放访问端口)。
三. Nginx安装
1. 执行:sudo apt-get install nginx 命令
2. 安装完成之后访问对应的80端口,应该如下:

3. 配置代理
a. mkdir /etc/nginx/hosts 创建一个文件夹,用来放置站点配置文件
b. 执行 cd /etc/nginx/hosts 进入目录, 执行: vi ossoffical 按 “i” 添加如下内容:
server {
listen 80;index index.html index.htm;
server_name www.osscoder.com; #域名
location / {
proxy_pass http://127.0.0.1:8000; # 刚才设置的地址端口
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;
}
}
退出保存。
4. 修改nginx配置文件,vi /etc/nginx/nginx.conf
在http节点末尾,添加 :include /etc/nginx/hosts/*;
5. 重启nginx服务器: sudo service nginx restart(reload)
6. 进入站点目录,dotnet OSS.Offical.Site.dll & ,确保站点正确运行,访问 www.osscoder.com,如下:

四. 守护进程安装配置
为了保证服务能够稳定运行,我们安装守护进程以确保在应用程序出现异常中断时能够正常重启。
1. 安装,执行:sudo apt-get install supervisor
2. 安装成功后进入:/ect/supervisor/conf.d/ 目录,添加 ossoffical.conf 文件,添加如下内容:
[program:OSS.Offical.Site]
command=dotnet OSS.Offical.Site.dll //要执行的命令
directory=/home/www/ossoffical //命令执行的目录
environment=ASPNETCORE__ENVIRONMENT=Production #环境变量
user=osscoder //进程执行的用户身份
stopsignal=INT
autostart=true
autorestart=true
startsecs=3 //自动重启间隔
stderr_logfile=/var/log/ossoffical.err.log //标准错误日志
stdout_logfile=/var/log/ossoffical.out.log //标准输出日志
把对应的目录和名称换掉即可,请删除注释,否则有时会出现命令执行失败的情况。完毕之后重启supervisor:
sudo service supervisor stop
sudo service supervisor start
完成之后可以杀掉进程或者重启机器测试。
我最近正在开发OSS系列开源项目,现在已有OSS.Common,OSS.Http, OSS.Social和 OSS.PayCenter几个项目,如果你也有兴趣,请联系我或者关注公众号OSSCoder

Linux+Nginx+Asp.net Core及守护进程部署的更多相关文章
- Linux+Nginx+Asp.net Core
Linux+Nginx+Asp.net Core 上篇<Docker基础入门及示例>文章介绍了Docker部署,以及相关.net core 的打包示例.这篇文章我将以oss.offical ...
- Linux+Nginx+Asp.net Core部署
上篇<Docker基础入门及示例>文章介绍了Docker部署,以及相关.net core 的打包示例.这篇文章我将以oss.offical.site站点为例,主要介绍下在linux机器下完 ...
- Linux中以单容器部署Nginx+ASP.NET Core
引言 正如前文提到的,强烈推荐在生产环境中使用反向代理服务器转发请求到Kestrel Http服务器,本文将会实践将Nginx --->ASP.NET Core 部署架构容器化的过程. Ng ...
- [06]ASP.NET Core中的进程内(InProcess)托管
ASP.NET Core 进程内(InProcess)托管 本文作者:梁桐铭- 微软最有价值专家(Microsoft MVP) 文章会随着版本进行更新,关注我获取最新版本 本文出自<从零开始学 ...
- linux第1天 fork exec 守护进程
概念方面 文件是对I/O设备的抽象表示.虚拟存储器是对主存和磁盘I/O设备的抽象表示.进程则是对处理器.主存和I/O设备的抽象表示 中断 早期是没有进程这个概念,当出现中断技术以后才出现进程这个概念 ...
- windows/Linux下设置ASP.Net Core开发环境并部署应用
10分钟学会在windows/Linux下设置ASP.Net Core开发环境并部署应用 创建和开发ASP.NET Core应用可以有二种方式:最简单的方式是通过Visual Studio 2017 ...
- ASP.NET Core ASP.NET Core+MVC搭建及部署
ASP.NET Core+MVC搭建及部署 一.创建项目: 1.选择ASP.NET Core Web Application(.NET Core) 注意框架 2.选择Web Application: ...
- ASP.NET Core 2.0发布/部署到Ubuntu服务器并配置Nginx反向代理
原文链接https://www.linuxidc.com/Linux/2017-12/149557.htm ASP.NET Core 2.0 怎么发布到Ubuntu服务器?又如何在服务器上配置使用AS ...
- Linux系统添加应用服务进程的守护进程
以前曾在Linux上维护应用服务,但是只是简单的迭代版本等工作,没有什么技术含量.最近部署在Linux服务器上的一个平台的总线进程broker(下面总线用broker指代)经常挂掉,由于总线负责服务之 ...
随机推荐
- 灰度发布:灰度很简单,发布很复杂&灰度发布(灰度法则)的6点认识
什么是灰度发布,其要点有哪些? 最近跟几个聊的来的同行来了一次说聚就聚的晚餐,聊了一下最近的工作情况如何以及未来规划等等,酒足饭饱后我们聊了一个话题“灰度发布”. 因为笔者所负责的产品还没有达到他们产 ...
- Windows进程间的通信
一.进程与进程通信 进程间通信(Interprocess Communication, IPC)是指不同的进程之间进行数据共享和数据交换. 二.进程间通信方式 1. 文件映射 注:文件映射是在多 ...
- 自己模拟写C++中的String类型
下面是模拟实现字符串的相关功能,它包括一下功能: String(const char * s);//利用字符串来初始化对象 String(); //默认构造函数 String(con ...
- 2-8 R语言基础 日期与时间
#日期 Date > x<-date()> class(x)[1] "character" > x2 <- Sys.Date()> class( ...
- Netty入门(七)使用SSL/TLS加密Netty程序
为了支持 SSL/TLS,Java 提供了 javax.net.ssl API 的类 SslContext 和 SslEngine 使它相对简单的实现解密和加密.Netty 利用该 API 实现了 C ...
- redis三种启动方式
Part I. 直接启动下载 官网下载:http://redis.io/download安装 tar zxvf redis-2.8.9.tar.gzcd redis-2.8.9#直接make 编译ma ...
- Node.js实战(八)之回调函数
Node.js 异步编程的直接体现就是回调. 异步编程依托于回调来实现,但不能说使用了回调后程序就异步化了. 回调函数在完成任务后就会被调用,Node 使用了大量的回调函数,Node 所有 API 都 ...
- 贪心算法——字典序最小问题,Saruman‘s Army
题目描述 Best Cow Line (POJ 3617) 给定长度为N的字符串S,要构造一个长度为N字符串T.T是一个空串,反复执行下列任意操作: 从S的头部删除一个字符,加到T的尾部: 从S的尾部 ...
- Controller中添加一个异步的Action
给一段示例代码: public Task<ActionResult> TbReport(string code) { return Task.Factory.StartNew(() =&g ...
- AbelSu教你搭建go语言开发环境
go语言官网:https://golang.org/ windows:官网下载go1.6.windows-amd64.msi安装文件,安装位置选择默认C:\Go\安装结束后配置环境变量Path: C: ...