在CentOS 7上部署ASP.NET Core 2.0 Web应用程序

在CentOS 7上部署ASP.NET Core 2.0 Web应用程序

说明:
  在Windows平台上用Visual Studio 2017编写ASP.NET Core 2.0的Web MVC项目,并用VS 2017发布项目。
  在虚拟机上安装CentOS 7系统,将Web项目部署在Cent OS 7上。
  使用Nginx(服务器和反向代理服务器)。
  使用Supervisor进行进程管理。

目录

  • 部署环境
  • 发布ASP.NET Core 2.0程序
  • 安装CentOS 7
  • 安装.NET Core SDK
  • 在CentOS 7上部署程序
  • 配置Nginx
  • 配置进程守护(Supervisor)

部署环境

  系统:CentOS 7
  相关软件和工具:.NET Core SDK、Nginx、Supervisor、policycoreutils-python

发布ASP.NET Core 2.0程序

  发布方式有两种,一种是使用Visual Studio 2017上的发布,另一种是在控制台使用命令方式在项目文件夹下发布,即dotnet publish(发布)命令

安装CentOS 7

  安装方式很多,比如:https://blog.csdn.net/hui_2016/article/details/68927487

安装.NET Core SDK

  这里丢出一个官方链接:https://www.microsoft.com/net/learn/get-started/linux/centos
  要是不想看链接,看下面:
  照着做:

    sudo rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm
    
    sudo yum update
    sudo yum install libunwind libicu
    sudo yum install dotnet-sdk-2.1.200 //最好选最新版本

  做完后可以输入dotnet --info看一下是否安装成功。

在CentOS 7上部署程序

  弄完之后就是准备在CentOS 7上部署Webc程序了。
  先将发布后的文件夹放到CentOS 7下,检查一下能否运行,使用dotnet命令。
  如果成功了,就继续。此时,无法访问这个Web程序的页面,需要部署一个Web容器进行转发,就是Nginx。

配置Nginx

  先下载安装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(启动Nginx)
    systemctl enable nginx (设置nginx的开机启动)

  如果需要,可以配置防火墙。

  命令:firewall-cmd --zone=public --add-port=80/tcp –permanent(开放80端口)
  命令:systemctl restart firewalld(重启防火墙以使配置即时生效)
  输入ip地址测试Nginx是否可以访问。

  配置Nginx对ASP.NET Core应用的转发:

  修改 /etc/nginx/conf.d/default.conf 文件。(如果对文件没有修改权限,就用chmod命令修改文件权限)
  根据需要修改文件内容:

 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 –s reload 命令使配置生效。

  使用dotnet命令启动Web程序。
  在浏览器输入ip地址访问,如果访问成功就表示已经在CentOS 7上部署成功。

  如果访问显示“502 Bad Gateway”,可能是由于SELinux保护机制所导致,
  需要将nginx添加至SELinux的白名单。命令如下:

yum install policycoreutils-python
sudo cat /var/log/audit/audit.log | grep nginx | grep denied | audit2allow -M mynginx
sudo semodule -i mynginx.pp

  成功,部署完成。

配置进程守护(Supervisor)

  在CentOS 7上,如果关闭终端,开启的进程就会关闭,导致程序无法访问。
  为了解决这个问题,就用到了Supervisor这个工具,Supervisor使用Python开发的,用于监听ASP.NET Core 应用程序的状况。在应用程序停止运行的时候立即重新启动。

  Supervisor(http://supervisord.org/)是用Python开发的一个client/server服务,是Linux/Unix系统下的一个进程管理工具,不支持Windows系统。它可以很方便的监听、启动、停止、重启一个或多个进程。用Supervisor管理的进程,当一个进程意外被杀死,supervisort监听到进程死后,会自动将它重新拉起,很方便的做到进程自动恢复的功能,不再需要自己写shell脚本来控制。

  安装Supervisor(...我在安装的时候碰到一些问题,弄了很久才成功安装。)
  这里丢出两个链接:https://blog.csdn.net/bbg221/article/details/78715734
  https://blog.csdn.net/fenglailea/article/details/77146248

1、安装Python包管理工具(easy_install)
  easy_install是setuptools包里带的一个命令,使用easy_install实际上是在调用setuptools来完成安装模块的工作,所以安装setuptools即可。
  wget --no-check-certificate https://bootstrap.pypa.io/ez_setup.py -O - | sudo python 或 yum install python-setuptools

2、安装supervisor
  easy_install supervisor 或 yum install supervisor

3、配置Supervisor
  mkdir /etc/supervisor
  echo_supervisord_conf > /etc/supervisor/supervisord.conf (注意文件权限,没有读写权限必出错)
  修改supervisord.conf文件,一般修改最后两行就行。去掉两行前面的分号,把files后改成conf.d/*.conf
  如果服务已经启动,修改配置文件可用“supervisorctl reload”命令来使其生效。

4、配置对ASP.NET Core应用的守护
  创建一个 WebApplication1.conf文件,内容大概如下:(根据需要修改)

        [program:WebApplication1]
        command=dotnet WebApplication1.dll ; 运行程序的命令
        directory=/home/wwwroot/WebApplication1/ ; 命令执行的目录
        autorestart=true ; 程序意外退出是否自动重启
        stderr_logfile=/var/log/WebApplication1.err.log ; 错误日志文件(如果文件不存在就创建一个)
        stdout_logfile=/var/log/WebApplication1.out.log ; 输出日志文件
        environment=ASPNETCORE_ENVIRONMENT=Production ; 进程环境变量
        user=root ; 进程执行的用户身份
        stopsignal=INT

  然后,将文件拷贝到:“/etc/supervisor/conf.d/WebApplication1.conf”下
  运行supervisord,查看是否生效。命令如下:

supervisord -c /etc/supervisor/supervisord.conf
ps -ef | grep WebApplication1

  如果存在dotnet WebApplication1.dll 进程则代表运行成功,这时候在使用浏览器进行访问。
  如果访问成功,关于ASP.NET Core应用程序的守护就配置完成了。
  再将Supervisor设为开机自启动,就完了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容