.netcore的跨平台如此之火,忍不住想试试 在linux下部署 .net 程序。

借鉴此篇博文:将ASP.NET Core应用程序部署至生产环境中(CentOS7)

虽然是借鉴,但过程坎坷。对从未使用过linux的我难度可想而知,但万事有百度。分享一些坑,下载Centos7后,安装在VMware中,注意网络连接,最好是关机后重新启动。

总体思路

环境说明 VMware虚拟机+CentOS7
在linux中用 dotnet 命令创建ASP.NET Core应用程序
安装CentOS7  
安装.NET Core SDK for CentOS7。
部署ASP.NET Core应用程序
配置Nginx 
配置守护服务(Supervisor)

可把写好的.netcore程序上传到linux下,通过ftp服务上传,需在linux中安装 vsftpd,然后开启服务,在windows中下载安装WinSCP,打开WinSCP,连接linux,可把.netcore程序上传到linux,不会的百度,踩的坑越多了解的越多。

64位系统安装 sudo yum install libunwind libicu(安装libicu依赖)

curl -sSL -o dotnet.tar.gz https://go.microsoft.com/fwlink/?linkid=843449(下载sdk压缩包)

sudo mkdir -p /opt/dotnet && sudo tar zxf dotnet.tar.gz -C /opt/dotnet(解压缩)

sudo ln -s /opt/dotnet/dotnet /usr/local/bin(创建链接)

dotnet --info查看是否可以使用dotnet命令


cd到home文件夹下 运行如下命令

dotnet new mvc 创建

dotnet restore 还原包

dotnet run 运行

出现下图,则说明运行成功,但还无法访问,需要部署一个 web 容器来转发

安装 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的开机启动(linux宕机、重启会自动运行nginx不需要连上去输入命令)。

配置防火墙

命令:firewall-cmd --zone=public --add-port=80/tcp --permanent(开放80端口)

命令:systemctl restart firewalld(重启防火墙以使配置即时生效)

测试nginx是否可以访问。

配置Nginx对Asp.Net Core应用的转发,监听 5000端口

安装 vim  , yum -y install vim

修改 /etc/nginx/conf.d/default.conf 文件。通过 vim /etc/nginx/conf.d/default.conf 打开,编辑里面的内容,保存时按住 Esc 再输入 :wq! 命令保存退出

将文件内容替换为

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;
    }
}

上传至CentOS进行覆盖。

执行:nginx –s reload 使其即时生效

dotnet run 运行ASP.NET Core应用程序 发现还是无法访问,

这个问题是由于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

再次尝试访问,在虚拟机中打 ip a可查看虚拟机ip,在虚拟机外的windows系统中通过IP访问即可

至此基本完成了部署。

后面的守护服务,我没有进行配置了,喜欢尝试的可以自己试试,下面贴出

配置守护服务

目前存在三个问题

问题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

配置Supervisor

mkdir /etc/supervisor

echo_supervisord_conf > /etc/supervisor/supervisord.conf

修改supervisord.conf文件,将文件尾部的配置

修改为

ps:如果服务已启动,修改配置文件可用“supervisorctl reload”命令来使其生效

配置对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 进程则代表运行成功,这时候在使用浏览器进行访问

至此关于ASP.NET Core应用程序的守护即配置完成。

配置Supervisor开机启动

新建一个“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

将文件拷贝至:“/usr/lib/systemd/system/supervisord.service”

执行命令:systemctl enable supervisord

执行命令:systemctl is-enabled supervisord #来验证是否为开机启动

.net core 2.0 部署到centos 7生产环境相关推荐

  1. .NET Core 3.0 部署在docker上运行

    自从.NET Core3.0发布之后,写了几篇关于.NET Core 3.0的文章,有助于你快速入门.NET Core3.0. 本篇文章主要讲解如何一步步创建一个mvc项目,然后发布并部署在Docke ...

  2. 百度地图部署流程(实际生产环境部署内网)

    请以 root 账户运行(root用户拥有最高权限) 安装最低环境配置:Centos 6.5及以上,jdk1.8 ,gcc3.4.5以上,内存64G及以上,硬盘500G及以上,CPU 8核及以上 ce ...

  3. springcloud生产环境一般怎么部署_机器学习模型生产环境部署的四种系统架构总结...

    本文将从简单到复杂介绍典型架构的特点以及其优缺点. 介绍 一旦数据科学家对模型的性能感到满意,下一步便是"模型生产环境部署", 没有系统的合理配置,您的Kaggle Top1模型可 ...

  4. .net core 2.0部署到CentOS7系统

    1.Nginx的安装(重启Nginx命令: systemctl restart nginx) 输入命令( 根据提示输入Y 即可): sudo yum install epel-release sudo ...

  5. DotNet Core 2.0部署后外网IP访问

    将DotNet Core2.0项目部署在Ubuntu上并且运行后,可以用localhost:5000来访问. 但是如果这时候用外网来访问就不行了. 这时候就有两种解决方案,第一种是用Nginx做代理实 ...

  6. .net Core 6.0 部署到欧拉(Linux)系统上,“The type initializer for ‘Gdip‘ threw an exception” 报错的解决方案

    前言 "The type initializer for 'Gdip' threw an exception" 报错的根本原因, 是因为我们使用了"System.Draw ...

  7. node.js 微信小程序 部署服务器_自行部署微信小程序生产环境(node.js)—腾讯云服务器...

    一.前期准备 购买域名 + (云)服务器 购买https证书 二.解决方案 在一台(云)服务器上,安装好运行环境(nodejs+mysql+pm2+nginx),然后通过pm2运行小程序后端项目,并在 ...

  8. Centos 7 生产环境优化 Mysql 5.7

    目录 1.MySQL层相关优化 2.系统层相关优化 2.1其他内核参数优化 2.2文件系统层优化 3.硬件层相关优化 3.1CPU相关 3.2磁盘I/O相关 4.参考文章 假设生产服务器内存8核16G ...

  9. mysql8.0.13可以用在生产环境_(13)生产环境出现大量DB死锁

    1.死锁日志 2018-10-23T07:16:23.919555+08:00 478808 [Note] InnoDB: Transactions deadlock detected, dumpin ...

最新文章

  1. linux 命令窗口美化,美化你的命令行终端Terminal
  2. 这次拿下Python全靠它了!一个交互式的学习资源!
  3. 怎么合成音乐_剪映教程:剪映怎么剪辑音乐?
  4. [转]Linux下如何安装软件
  5. java 6 26_WebSphere7.0 Java6.26安装
  6. android 横向滑动日期_移动端横向滑动如何设计?
  7. 源达投顾软件怎么样_源达投顾:让人工智能炒股终端变得更简单
  8. 直方图均衡 视觉显著_视觉图像:对比度受限直方图均衡化CLAHE
  9. (八)linux驱动之ioctl的使用
  10. 一、ssh 协议:SSH 传输层协议
  11. utf8汉字编码对照表
  12. python pytorch库_一个简单而强大的深度学习库—PyTorch
  13. 质检动真格,你的本科毕业论文该怎么做?
  14. ERP管理web后台_数字化、Axure高保真智能化工厂管理系统原型(erp生产管理、仓库管理、采购管理、设备能源管理、计划管理)
  15. Promise初步详解(resolve,reject,catch)
  16. MATLAB拟合函数使用说明
  17. 6--目标检测和边界框和锚框
  18. 21 07 13学习总结
  19. 配置文件导入服务器什么意思,配置服务器需要什么意思
  20. 指南Java面试常问问题及答案

热门文章

  1. 【Qt】Log4Qt(二)使用
  2. 【C++】google gtest 详解
  3. mysql有那些存储引擎_MySQL有那哪些存储引擎
  4. vb.net 当前计算机用户,用VB写的一个组件,实现添加系统用户,并添加到指定组-.NET教程,VB.Net语言...
  5. 64位游戏找call_《使命召唤16:战区》配置注册登录全攻略,三步让你极迅游戏!...
  6. Java项目:进销存系统(java+Gui)
  7. python gui编程框架添加工具栏_python gui编程,我是初学者。用tk,制作下拉菜单的command不分我想打开另一个界面。如和解决,求解!!...
  8. 【二级java】二叉树序列
  9. Redis数据库设置密码
  10. php ile_get_contents无法请求https连接的解决方法