研究.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就可以支持命名实例了。

最新文章

  1. Androidstudio报错UnsupportedClassVersionError
  2. linux系统ftp命令
  3. 使用NSJSONSerialization将数组或字典转为字符串
  4. EXCEL datatable 根据列名自动写入到相应属性、字段或列中
  5. android listview去掉分割线
  6. Mac 上SVN上传.a文件
  7. JavaScript空判断
  8. iOS常见的设计模式
  9. 【ImageMagick】Unix Windows 源码安装
  10. 深入java并发Lock一
  11. ACM Fibonacci数 计算
  12. MySQL 的分页查询 SQL 语句
  13. php 定时任务
  14. 数据库导出excel,前后端分离
  15. hexo博客添加功能
  16. 快速入门Splay
  17. English trip EM2-LP-1A Hi Teacher:Taylor
  18. Git的各种状态
  19. List的Capacity,了解一下
  20. No.7 selenium学习之路之Alert弹窗

热门文章

  1. Cross-Origin Resource Sharing协议介绍
  2. Java集合分组
  3. php 页面传递数组元素
  4. Centos修改DNS重启或者重启network服务后丢失问题处理
  5. eclipse常用配置
  6. nodejs学习资料
  7. JQuery入门——进度条
  8. Mac brew命令
  9. xsd.exe的使用
  10. 【简易版】IOS仿periscope自制狂赞飘桃心