Centos7.2部署.Net Core2.0 WebApi
部署前准备
1.VisualStudio2017+.netcore2.0SDK
2.Centos7.2
3.SecureCRT,Xftp(根据自己喜好)
创建WebApi项目
修改Program.cs中的BuildWebHost方法为(不改也可,core默认使用Kestrel作为Server)
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration()
.UseUrls("http://localhost:5000")
.UseStartup<Startup>()
.Build();
尝试使用IIS Express启动应用程序,启动项配置在
一切正常,然后我们发布程序,右键项目-发布-发布到文件夹,发布完成后的应用程序位置在\bin\Release\CoreTest.WebApi\
Xftp注意两处连接选项,使用Xftp将发布好的程序上传到服务器,位置在/home/wwwroot/
安装CentOS7下.NET Core SDK
(参考https://www.microsoft.com/net/core#linuxcentos)
sudo yum install libunwind libicu curl -sSL -o dotnet.tar.gz https://aka.ms/dotnet-sdk-2.0.0-linux-x64 mkdir -p ~/dotnet && tar zxf dotnet.tar.gz -C ~/dotnet sudo ln -s /root/dotnet/dotnet /usr/local/bin
输入命令dotnet --info查看sdk的安装信息,如下图
输入命令dotnet /home/wwwroot/CoreTest.WebApi/CoreTest.WebApi.dll 出现下图信息表明运行成功,我们的程序正在监听localhost:5000,此时还不能通过外网访问,我们使用Nginx将外部请求转发到应用程序上
安装Centos7下Nginx
curl -o nginx.rpm http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
rpm -ivh nginx.rpm
yum install nginx
启动: systemctl start nginx
设置开机启动:systemctl enable nginx
此时通过IP访问,出现Nginx的默认访问页面,表明安装成功
修改Nginx的配置文件,转发外部请求到应用程序
vi /etc/nginx/conf.d/default.conf
键入I 进入输入模式
将文件内容替换为
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;
}
}
然后按Esc退出输入模式,进入命令模式,输入:wq回车,保存并退出
保存成功后
重新加载service nginx reload
输入命令dotnet /home/wwwroot/CoreTest.WebApi/CoreTest.WebApi.dll启动应用程序
此时再访问接口/api/values(创建项目的时候自带的) Nginx监听80端口接收外部请求并将请求转发给应用程序
配置守护服务(Supervisor)
目前存在三个问题
问题1:ASP.NET Core应用程序运行在shell之中,如果关闭shell则会发现ASP.NET Core应用被关闭,从而导致应用无法访问,这种情况当然是我们不想遇到的,而且生产环境对这种情况是零容忍的。
问题2:如果ASP.NET Core进程意外终止那么需要人为连进shell进行再次启动,往往这种操作都不够及时。
问题3:如果服务器宕机或需要重启我们则还是需要连入shell进行启动。
为了解决这个问题,我们需要有一个程序来监听ASP.NET Core 应用程序的状况。在应用程序停止运行的时候立即重新启动。这边我们用到了Supervisor这个工具,Supervisor使用Python开发的。
安装Supervisor
yum install python-setuptools
easy_install supervisor
mkdir /etc/supervisor
echo_supervisord_conf > /etc/supervisor/supervisord.conf
vi /etc/supervisor/supervisord.conf
修改supervisord.conf文件,将文件尾部的配置
修改成(注意前面的两个分号去掉)
Esc后:wq回车,保存退出ps:如果服务已启动,修改配置文件后可用supervisorctl reload命令来使其生效
监听应用程序配置
创建conf.d文件夹:mkdir /etc/supervisor/conf.d
创建并编辑CoreTest.conf配置文件:vi /etc/supervisor/conf.d/CoreTest.conf
[program:CoreTest]
command=/bin/bash -c "dotnet CoreTest.WebApi.dll"
directory=/home/wwwroot/CoreTest.WebApi/
autorestart=true
stderr_logfile=/var/log/CoreTest.err.log
stdout_logfile=/var/log/CoreTest.out.log
environment=ASPNETCORE_ENVIRONMENT=Production
user=root
stopsignal=INT
运行supervisord,查看是否生效
supervisord -c /etc/supervisor/supervisord.conf ps -ef | grep CoreTest
出现下图所示,则表示配置成功
此时不用手动dotnet CoreTest.WebApi.dll启动应用程序也能访问(由Supervisor进程在后台监听)
配置Supervisor开机启动
新建一个“supervisord.service”文件 vi /usr/lib/systemd/system/supervisord.service
# dservice for systemd (CentOS 7.0+)
# by ET-CS (https://github.com/ET-CS)
[Unit]
Description=Supervisor daemon [Service]
Type=forking
ExecStart=/usr/bin/supervisord -c /etc/supervisor/supervisord.conf
ExecStop=/usr/bin/supervisorctl shutdown
ExecReload=/usr/bin/supervisorctl reload
KillMode=process
Restart=on-failure
RestartSec=42s [Install]
WantedBy=multi-user.target
设置开机启动:systemctl enable supervisord
验证开机启动是否成功:systemctl is-enabled supervisord
重启服务器:reboot 此时不能访问
重启完成后,所有服务自动开启,正常访问
部分内容参考:http://www.cnblogs.com/ants/p/5732337.html
Centos7.2部署.Net Core2.0 WebApi的更多相关文章
- CentOS7部署.Net Core2.0站点(上)
其实类似的教程网上已经有很多了,之所以要写,是应为发现在使用最新的centos7和.netcore2.1版本时还是遇到了不少坑,所以记录下,以后希望大家能少走弯路. 一.安装CentOS7 我是用虚拟 ...
- CentOS7部署.Net Core2.0站点(中)
继续上篇的内容,本篇来学习下nginx的配置和守护进程supervisor的使用. 一.Nginx安装及配置 (1)安装nginx sudo yum install epel-release #添加源 ...
- DotNet跨平台 - docker部署.net core2.0项目
参考文档: https://docs.docker.com/install/linux/docker-ce/centos/ http://www.dockerinfo.net/document htt ...
- centos7安装部署opentsdb2.4.0
写在前面 安装HBase 在HBase中创建表结构 安装配置并启动opentsdb 写在前面 最近因为项目需要在读opentsdb的一部分源码,后面会做个小结分享出来.本人是不大喜欢写这种安装部署的文 ...
- Asp.Net Core2.0 WebAPI 使用Swagger生成漂亮的接口文档
1.引用NuGet: Swashbuckle.AspNetCore.Swagger Swashbuckle.AspNetCore.SwaggerGen 或 <PackageReference I ...
- 在阿里云centOS7上部署Redis 5.0.5主从 + 哨兵模式
一.在两台服务器上分别安装.配置Redis 5.0.5 ,为一主一从 安装Redis关键命令: 将安装包上传至:/home 目录下解 压:.tar.gz 安装依赖:yum install gcc 安装 ...
- 在CentOS7中安装.Net Core2.0 SDK
1.sudo yum install libunwind libicu(安装libicu依赖) 2.curl -sSL -o dotnet.tar.gz https://go.microsoft.co ...
- 一步一步带你做WebApi迁移ASP.NET Core2.0
随着ASP.NET Core 2.0发布之后,原先运行在Windows IIS中的ASP.NET WebApi站点,就可以跨平台运行在Linux中.我们有必要先说一下ASP.NET Core. ASP ...
- WebApi迁移ASP.NET Core2.0
WebApi迁移ASP.NET Core2.0 一步一步带你做WebApi迁移ASP.NET Core2.0 随着ASP.NET Core 2.0发布之后,原先运行在Windows IIS中的AS ...
随机推荐
- 没有绝对安全的系统:写在AES 256破解之后
NULL 在理论上,理论和实践是一致的.在实践中,呵呵. ——(应该是)爱因斯坦(说的) (INFO:本文中不会出现公式,请放心阅读) AES 256被破解了? 对于TLNR(Too Long, No ...
- XRouter-像Retrofit一样使用阿里开源路由中间件
XRouter 一种基于Arouter的使用封装方案,实现对ARouter的Retrofit式使用. ARouter是阿里巴巴开源的Android平台中对页面.服务提供路由功能的中间件,没用过的务必点 ...
- C++ 之 Asio 库
1 简介 Asio 是一个跨平台的 C++ 库,常用于网络编程.底层的 I/O 编程等 (low-level I/O),其结构框架如下: 2 使用 Asio 2.1 下载 Asio 可分为 ...
- 花了一年时间开发的TTF2FNT字库转换软件
TTF(True Type Font)字库是微软定义的基于windows的标准字库格式.但其由于专利保护以及无法跨平台导致TTF字库在实际应用中无法有效使用. 为此我开发了TTF2FNT字库转换软件, ...
- 使用Modelsim进行简单仿真
这里记载一下使用modelsim进行简单的仿真,方便以后使用的时候进行查看.所谓的简单的仿真,就是没有IP核.只用图形界面不用tcl脚本进行的仿真.简单的仿真步骤为: 1.改变路径到工作环境下的路径下 ...
- WinFrom通过委托传递事件
今天一个功能需要动态创建pictruebox然后根据时间来倒叙显示,一开始对于这个需求摸不着头脑,后来在公司的大神帮助下实现了,话不多说具体实现上代码了: 1.动态添加控件并倒叙 首先添加一个用户控件 ...
- Python网络数据采集2-wikipedia
Python网络数据采集2-wikipedia 随机链接跳转 获取维基百科的词条超链接,并随机跳转.可能侧边栏和低栏会有其他链接.这不是我们想要的,所以定位到正文.正文在id为bodyContent的 ...
- 机器学习实战 logistic回归 python代码
# -*- coding: utf-8 -*- """ Created on Sun Aug 06 15:57:18 2017 @author: mdz "&q ...
- CI框架主题切换的功能
CI框架主题切换的功能 本人接触到这个框架不就,属于菜鸟 , 公司现在用CI框架做项目 ,老大要做一个主题切换的功能,说明功能的要求我的脑子里瞬间有几个想法. 脑子里最简单的就是设置全局变量 如 : ...
- 初识Java,猜字游戏
import java.util.*; public class caizi{ public static void main(String[] args){ Scanner in=new Scann ...