研究.NET Core已经一段时间了,一直都是在Windows上开发,这2天尝试着将公司一个很简单的内部Web项目改造成了ASP.NET Core,并且部署到Linux上。生产环境如下:

  1. Linux Ubuntu 14.04
  2. 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:现在回想,才觉得有些东西是很坑的。

  1. supervisor的配置,完全按照官方文档来,是没有设置HOME这个变量。这里的ISSUE提了几个月了也没人管,这个错误提示简直不知所云,还好搜到这个PR,才明白该怎么解决。
  2. SQL Server这个更坑了,只支持SQL Server 2008 R2 SP3我就不吐槽了,居然不支持命名实例。我在安装SP3以后再遇到连接问题都开始怀疑人生了,还好又千辛万苦搜到一个ISSUE。好消息是.NET Core 1.1.0就可以支持命名实例了。

从零开始,将ASP.NET Core部署到Linux生产环境的更多相关文章

  1. ASP.NET Core 发布至Linux生产环境 Ubuntu 系统

    ASP.NET Core 发布至Linux生产环境 Ubuntu 系统,之前跟大家讲解了 dotnet publish 发布,而没有将整个系统串起来. 今天就跟大家综合的讲一下ASP.NET Core ...

  2. 发布ASP.NET Core程序到Linux生产环境

    原文翻译:Publish to a Linux Production Environment 作者:Sourabh Shirhatti 在这篇文章里我们将介绍如何在 Ubuntu 14.04 Serv ...

  3. Asp.Net Core部署到Linux服务器

    从2016年7月, .NET Core1.0 正式发布开始,由于时间问题,我没怎么关注过.NET Core,最近刚抽出点时间研究了下,先讲下如何把ASP.NET Core部署到Linux上吧.这里我用 ...

  4. ASP.NET CORE部署到Linux

    ASP.NET CORE部署到CentOS中 在Linux上安装.NET Core 参考:https://www.microsoft.com/net/core#linuxcentos 配置Nginx ...

  5. CentOs7 +Jexus 5.8.2部署Asp.Net Core WebApi 1.0生产环境

    Jexus 是一款运行于 Linux 平台,以支持  ASP.NET.PHP 为特色的集高安全性和高性能为一体的 WEB 服务器和反向代理服务器.最新版 5.8.2 已经发布,有如下更新: 1,现在大 ...

  6. ASP.NET Core 实战:Linux 小白的 .NET Core 部署之路

    一.前言  最近一段时间自己主要的学习计划还是按照毕业后设定的计划,自己一步步的搭建一个前后端分离的 ASP.NET Core 项目,目前也还在继续学习 Vue 中,虽然中间断了很长时间,好歹还是坚持 ...

  7. ASP.Net Core 运行在Linux(Ubuntu)

    这段时间一直在研究asp.net core部署到linux,今天终于成功了,这里分享一下我的部署过程. Linux Disibutaion:Ubuntu 14.04 Web Server:nginx. ...

  8. 从零开始学习 asp.net core 2.1 web api 后端api基础框架(二)-创建项目

    原文:从零开始学习 asp.net core 2.1 web api 后端api基础框架(二)-创建项目 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.ne ...

  9. ASP.NET Core MVC 在linux上的创建及发布

    前言 ASP.NET core转眼都发布半月多了,社区最近也是非常活跃,虽然最近从事python工作,但也一直对.NET念念不忘,看过了园区大神们搭建的Asp.net core项目之后,自己也是跃跃欲 ...

随机推荐

  1. ORACLE SQL调优案例一则

    收到监控告警日志文件(Alert)的作业发出的告警邮件,表空间TEMPSCM2不能扩展临时段,说明临时表空间已经被用完了,TEMPSCM2表空间不够用了 Dear All:   The Instanc ...

  2. 在JavaScript和C#中获得referer

    1. JavaScript /** * 获取HTTP请求的Referer * @ishost 布尔类型 Referer为空时是否返回Host(网站首页地址) */ function get_http_ ...

  3. Remote Desktop File Format

    转自:http://engrmosaic.uncc.edu/mosaic-anywhere/remote-desktop-file-format The new Terminal Services c ...

  4. MySQL调优系列基础篇

    前言 有一段时间没有写博客了,整天都在忙,上班,录制课程,恰巧最近一段时间比较清闲,打算弄弄MYSQL数据库. 关于MySQL数据库,这里就不做过多的介绍,开源.免费等特性深受各个互联网行业喜爱,尤其 ...

  5. oracle数据泵示例

    主要的导出示例: 1.导出指定表空间: expdp system/xxx DIRECTORY=dump_dir tableapace=xxx dumpfile=xxx_%DATE:~0,4%%DATE ...

  6. Office——EXCEL 显示 隐藏 Ribbon 调用宏

    ==================================声明================================== 本文版权归作者所有 未经作者授权 请勿转载 保留法律追究的 ...

  7. dyld: Library not loaded: @rpath/libswiftCore.dylib 解决方法

    解决: 设置Build Setting - > 搜索 embe关键字 -> 修改属性 见如下图: 如果更新了Xcode 8 这里变成:

  8. x01.os.15: 看上去很美

    张碧晨在韩国学的不是技巧,而是基本功:气息!声音由气息托着,似真声而不是真声,似假声又不是假声,所以才能在动听的地方唱得更动听.编程也是一样,基本功很重要:内存!所谓的黑客高手,攻击的一大手段,便是利 ...

  9. mysql 远程访问控制

    如需要让192.168.2.3的test用户可以访问本机所有数据库,mysql命令如下 mysql>GRANT ALL PRIVILEGES ON *.* TO 'test'@'192.168. ...

  10. Redhat使用CentOS的Yum 网络源

    Redhat 的更新包只对注册的用户生效,所以我们自己手动更改成CentOS 的更新包,CentOS几乎和redhat是一样的. 1.首先查看redhat 7.0系统本身所安装的那些yum 软件包:[ ...