从零开始,将ASP.NET Core部署到Linux生产环境
2016-09-13 10:14
761 查看
研究.NET Core已经一段时间了,一直都是在Windows上开发,这2天尝试着将公司一个很简单的内部Web项目改造成了ASP.NET Core,并且部署到Linux上。生产环境如下:
Linux Ubuntu 14.04
Windows Server 2008, SQL Server 2008 EXPRESS R2
不巧的是我找的虚拟机只能访问内网,因此只能通过代理的方式来安装。关于如何设置代理,可以参考这篇文章
在我设置代理以后,按照官方文档的步骤总是在这一步失败,现在也没搞明白原因。
如果有在这一步失败的小伙伴,可以去DotNet Cli的Dot NET Cli Github主页,下载4个deb文件,按照顺序依次安装。当然安装过程中可能会出现错误,提示缺少依赖的组件,这个时候执行下面的命令即可。
如果编译没有问题,那么执行以下命令发布
发布的文件会拷贝到bin/[Debug|Release]/netcoreapp1.0/publish。这个时候进入publish文件夹,执行以下命令已经可以运行网站了。
安装Nginx很简单,执行以下命令即可
然后开始配置Nginx,vim打开
在执行以下命令,使Nginx配置生效
执行以下命令安装
执行以下命令配置supervisor
在配置文件填写以下内容
这里有个坑要注意了,一定要在enviroment里设置
配置好以后,重新启动supervisor服务
可以通过以下命令查看supervisor下挂载的进程状态,如果有异常,及时查看上面配置的日志文件
整个安装过程就是这样,希望这篇文章能帮助到各位小伙伴。
PS:现在回想,才觉得有些东西是很坑的。
supervisor的配置,完全按照官方文档来,是没有设置HOME这个变量。这里的ISSUE提了几个月了也没人管,这个错误提示简直不知所云,还好搜到这个PR,才明白该怎么解决。
SQL Server这个更坑了,只支持SQL Server 2008 R2 SP3我就不吐槽了,居然不支持命名实例。我在安装SP3以后再遇到连接问题都开始怀疑人生了,还好又千辛万苦搜到一个ISSUE。好消息是.NET Core 1.1.0就可以支持命名实例了。
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就可以支持命名实例了。
相关文章推荐
- Linux还是亲生的好,实战自制Linux操作系统
- Linux还是亲生的好,实战自制Linux操作系统
- Linux还是亲生的好,实战自制Linux操作系统 推荐
- Centos 6.5 Install KVM
- Linux操作系统 Samba服务器配置与使用
- The Beginner’s Guide to iptables, the Linux Firewall
- CentOS 6.5/6.6 安装mysql 5.7 最完整版教程
- linux CentOS 系统下如何将php和mysql命令加入到环境变量中
- Linux系统有7个运行级别
- linux常用命令
- Linux中的变量【1】预定义变量
- centos7 安装php7及memcashe
- 每天一条linux---find命令之xargs选项
- centos6.5配置vncserver
- linux jdk安装
- linux yum安装mysql
- Linux搭建sendmail服务器
- A:UBOOT向LINUX内核传递参数的原理
- LINUX系统的调试信息是如何从串口输出的
- 每天一条linux---find命令的exec