从零开始,将ASP.NET Core部署到Linux生产环境
研究.NET Core已经一段时间了,一直都是在Windows上开发,这2天尝试着将公司一个很简单的内部Web项目改造成了ASP.NET Core,并且部署到Linux上。生产环境如下:
- Linux Ubuntu 14.04
- Windows Server 2008, SQL Server 2008 EXPRESS R2
安装SDK
如果Linux服务器可以访问外网,那么按照 官网文档 的指导可以很简单的完成SDK的安装。
不巧的是我找的虚拟机只能访问内网,因此只能通过代理的方式来安装。关于如何设置代理,可以参考这篇文章
在我设置代理以后,按照官方文档的步骤总是在这一步失败,现在也没搞明白原因。
sudo apt-key adv --keyserver apt-mo.trafficmanager.net --recv-keys 417A0893
如果有在这一步失败的小伙伴,可以去DotNet Cli的Dot NET Cli Github主页,下载4个deb文件,按照顺序依次安装。当然安装过程中可能会出现错误,提示缺少依赖的组件,这个时候执行下面的命令即可。
sudo apt-get install -f
项目编译发布
首先把代码拷贝到Linux环境,进入web文件夹,执行以下命令进行编译。
dotnet restore
dotnet run
如果编译没有问题,那么执行以下命令发布
dotnet publish -c [Debug|Release]
发布的文件会拷贝到bin/[Debug|Release]/netcoreapp1.0/publish。这个时候进入publish文件夹,执行以下命令已经可以运行网站了。
dotnet [Your Web Assembly].dll
安装Nginx
按照官方文档的说法,Kestrel不像IIS一样拥有WEB服务器的丰富的特性,因此部署到生产环境时,需要在前面安装一个反向代理服务器接收HTTP请求,并将请求转发到Kestrel。
安装Nginx很简单,执行以下命令即可
sudo apt-get install nginx
然后开始配置Nginx,vim打开/etc/nginx/sites-available/default文件,编辑成如下的配置。
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;
}
}
在执行以下命令,使Nginx配置生效
sudo nginx -s reload
安装Supervisor
由于dotnet是我们手动执行的,如果想系统启动时自动启动,就需要写个守护进程。按照官网文档,可以安装Supervisor解决这个需求。
执行以下命令安装
sudo apt-get install supervisor
执行以下命令配置supervisor
sudo vim /etc/supervisor/conf.d/[Your Application Name].conf
在配置文件填写以下内容
[program:[Your Application Name]]
command=/usr/bin/dotnet [Your Publish File Path]
directory=[Your Publish File Path]
autostart=true
autorestart=true
stderr_logfile=/var/log/[Your Application Name].err.log
stdout_logfile=/var/log/[Your Application Name].out.log
environment=ASPNETCORE_ENVIRONMENT=Production,HOME=/var/www/
user=www-data
stopsignal=INT
这里有个坑要注意了,一定要在enviroment里设置HOME变量,否则启动时会报Value cannot be null. Parameter name: Path1这样的错误
配置好以后,重新启动supervisor服务
sudo service supervisor stop
sudo service supervisor start
可以通过以下命令查看supervisor下挂载的进程状态,如果有异常,及时查看上面配置的日志文件
sudo supervisorctl status
连接SQL Server数据库
我在执行以上步骤以后,已经可以访问静态页面了,但是与SQL Server的连接老是出现错误。查了下Github上的Issue,发现是不支持SQL Server 2008 R2。装了SP3补丁以后,发现又不支持命名实例。于是只有重新安装了一个默认实例。这些都搞定以后,项目终于正常运行了。
整个安装过程就是这样,希望这篇文章能帮助到各位小伙伴。
PS:现在回想,才觉得有些东西是很坑的。
- supervisor的配置,完全按照官方文档来,是没有设置HOME这个变量。这里的ISSUE提了几个月了也没人管,这个错误提示简直不知所云,还好搜到这个PR,才明白该怎么解决。
- SQL Server这个更坑了,只支持SQL Server 2008 R2 SP3我就不吐槽了,居然不支持命名实例。我在安装SP3以后再遇到连接问题都开始怀疑人生了,还好又千辛万苦搜到一个ISSUE。好消息是.NET Core 1.1.0就可以支持命名实例了。
从零开始,将ASP.NET Core部署到Linux生产环境的更多相关文章
- ASP.NET Core 发布至Linux生产环境 Ubuntu 系统
ASP.NET Core 发布至Linux生产环境 Ubuntu 系统,之前跟大家讲解了 dotnet publish 发布,而没有将整个系统串起来. 今天就跟大家综合的讲一下ASP.NET Core ...
- 发布ASP.NET Core程序到Linux生产环境
原文翻译:Publish to a Linux Production Environment 作者:Sourabh Shirhatti 在这篇文章里我们将介绍如何在 Ubuntu 14.04 Serv ...
- Asp.Net Core部署到Linux服务器
从2016年7月, .NET Core1.0 正式发布开始,由于时间问题,我没怎么关注过.NET Core,最近刚抽出点时间研究了下,先讲下如何把ASP.NET Core部署到Linux上吧.这里我用 ...
- ASP.NET CORE部署到Linux
ASP.NET CORE部署到CentOS中 在Linux上安装.NET Core 参考:https://www.microsoft.com/net/core#linuxcentos 配置Nginx ...
- CentOs7 +Jexus 5.8.2部署Asp.Net Core WebApi 1.0生产环境
Jexus 是一款运行于 Linux 平台,以支持 ASP.NET.PHP 为特色的集高安全性和高性能为一体的 WEB 服务器和反向代理服务器.最新版 5.8.2 已经发布,有如下更新: 1,现在大 ...
- ASP.NET Core 实战:Linux 小白的 .NET Core 部署之路
一.前言 最近一段时间自己主要的学习计划还是按照毕业后设定的计划,自己一步步的搭建一个前后端分离的 ASP.NET Core 项目,目前也还在继续学习 Vue 中,虽然中间断了很长时间,好歹还是坚持 ...
- ASP.Net Core 运行在Linux(Ubuntu)
这段时间一直在研究asp.net core部署到linux,今天终于成功了,这里分享一下我的部署过程. Linux Disibutaion:Ubuntu 14.04 Web Server:nginx. ...
- 从零开始学习 asp.net core 2.1 web api 后端api基础框架(二)-创建项目
原文:从零开始学习 asp.net core 2.1 web api 后端api基础框架(二)-创建项目 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.ne ...
- ASP.NET Core MVC 在linux上的创建及发布
前言 ASP.NET core转眼都发布半月多了,社区最近也是非常活跃,虽然最近从事python工作,但也一直对.NET念念不忘,看过了园区大神们搭建的Asp.net core项目之后,自己也是跃跃欲 ...
随机推荐
- 用SQL语句建库建表建约束(用SQl语句在指定盘符创建文件夹)
一 :创建数据库 创建一个数据文件和一个日志文件(MySchool) create database MySchoolon primary --默认属于primary主文件组,可省略(--数 ...
- 记一次ORACLE的UNDO表空间爆满分析过程
这篇文章是记录一次ORACLE数据库UNDO表空间爆满的分析过程,主要整理.梳理了同事分析的思路.具体过程如下所示: 早上收到一数据库服务器的UNDO表空间的告警邮件,最早一封是7:55发出的(监控作 ...
- Spring AOP 动态代理 缓存
Spring AOP应用:xml配置及注解实现. 动态代理:jdk.cglib.javassist 缓存应用:高速缓存提供程序ehcache,页面缓存,session缓存 项目地址:https://g ...
- goldengate初始化
对丢弃已久的goldengate环境重新配置,使其重新开始跑起来 环境是一个主机上的两个库,都是单机,所以也就没配pump进程了,trail file都是在一个文件夹下的,extract写trail ...
- mysql set names 命令和 mysql 字符编码问题
先看下面的执行结果: (root@localhost)[(none)]mysql>show variables like 'character%'; +--------------------- ...
- .Net程序员之Python基础教程学习----列表和元组 [First Day]
一. 通用序列操作: 其实对于列表,元组 都属于序列化数据,可以通过下表来访问的.下面就来看看序列的基本操作吧. 1.1 索引: 序列中的所有元素的下标是从0开始递增的. 如果索引的长度的是N,那么所 ...
- MMORPG大型游戏设计与开发(客户端架构 part11 of vegine)
从早年的无声电影到现在的逼真3D大片,人类在科技上可谓是一再突破.不知道有没有人经历过那无声的日子,没有声音的世界,咱们的耳朵也就失去了它本有的用途了.在游戏世界中,声音元素成了必不可少的一部分,一个 ...
- Caffe 抽取CNN网络特征 Python
Caffe Python特征抽取 转载请注明出处,楼燚(yì)航的blog,http://www.cnblogs.com/louyihang-loves-baiyan/ Caffe大家一般用到的深度学 ...
- Mobizen免帐号版
Mobizen电脑控制手机软件,是远程软件专家RSUPPORT公司研发的一款全新产品,可以通过电脑(web页面和客户端两种形式)远程控制安卓系统的智能手机和平板电脑,三种连接方式3G/4G.Wifi. ...
- 杭电OJ——1198 Farm Irrigation (并查集)
畅通工程 Problem Description 某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇.省政府"畅通工程"的目标是使全省任何两个城镇间都可 ...