Centos7 系统下搭建.NET Core2.0+Nginx+Supervisor+Mysql环境

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 RDS MySQL Serverless,价值2615元额度,1个月
简介:

一、简介

        一直以来,微软只对自家平台提供.NET支持,这样等于让这个“理论上”可以跨平台的框架在Linux和macOS上的支持只能由第三方项目提供(比如Mono .NET)。直到微软推出完全开源的.NET Core。这个开源的平台兼容.NET  Standard,并且能在Windows、Linux和MacOS上提供完全一致的API。虽然这个小巧的.NET框架只是标准.NET的一个子集,但是已经相当强大了。

       一方面,这个小巧的框架可以让某些功能性应用同时运行在三个平台上(就像某些功能性的Python脚本一样),另一方面,这也可以让服务器运维人员将ASP .NET服务程序部署在Linux服务器上(特别是对于运行Windows Server较为吃力的服务器)。

官网参考资料:https://www.microsoft.com/net/core#linuxcentos

二、.NET Core2.0 环境部署前准备


1.环境说明:


服务器系统:CentOS 7.2.1511


2.安装前准备(关闭防火墙、关闭selinux)

1)关闭firewall:

1
2
3
systemctl stop firewalld.service  #停止firewall
systemctl disable firewalld.service  #禁止firewall开机启动
firewall-cmd --state  #查看默认防火墙状态(关闭后显示notrunning,开启后显示running)


2)关闭selinux

1
sed  -i  "s/SELINUX=enforcing/SELINUX=disabled/g"  /etc/selinux/config

查看改后文件如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@localhost ~] # cat /etc/selinux/config 
 
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of three two values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected. 
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted


3.重启Centos

1
reboot


三、部署.NET Core2.0 环境

1.添加DOTNET产品


     在安装.NET核心之前,您需要注册微软产品提要。这只需要做一次。首先,注册微软签名密钥,然后添加微软产品提要。

1
2
rpm -- import  https: //packages .microsoft.com /keys/microsoft .asc                                     
sh -c  'echo -e "[packages-microsoft-com-prod]\nname=packages-microsoft-com-prod \nbaseurl=https://packages.microsoft.com/yumrepos/microsoft-rhel7.3-prod\nenabled=1\ngpgcheck=1\ngpgkey=https://packages.microsoft.com/keys/microsoft.asc" > /etc/yum.repos.d/dotnetdev.repo'


2.安装.NET核心SDK

在下一步之前,请从您的系统中删除.NET .NET以前的任何预览版本。

以下命令更新用于安装的产品列表,安装.NET核心所需的组件,然后安装.NET核心SDK。

1
2
3
yum update
yum  install  libunwind libicu -y
yum  install  dotnet-sdk-2.0.0 -y


3.检查dotnet是否安装成功与版本查看

1
2
3
dotnet --info
 
dotnet --version



四、测试.NET Core2.0 环境

1.在home目录下初始化一个测试环境并输出"Hello World "内容 (测试方式一,可忽略)

1
2
3
4
cd  /home
dotnet new console -o hwapp
cd  hwapp
dotnet run



输出空内容如下:

1
2
[root@localhost hwapp] # dotnet run
Hello World!


2.上传.net core的实例页面进行测试 (测试方式二、推荐)

 

Centos 下.net core 2 环境测试用例 (把它上传到/home目录下或自定义的目录)

下载地址:

http://down.51cto.com/data/2334968

  

执行以下命令

1
2
3
cd  /home/WebApplication1
dotnet restore    // 如果使过用测试方式一,就需先执行这命令重新加载一下当前新的网站文件
dotnet run


运行后如下图:

wKioL1mvcQqBr7V6AAAkggKNOvU437.png


通过IE访问测试页

wKioL1mvcQrgsda8AAFjuVp6Ga0021.png


五、安装配置nginx对ASP.NET Core应用的转发

  1. 安装Nginx环境

1
2
3
[root@localhost ~] #curl -o  nginx.rpm http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
[root@localhost ~] #rpm -ivh nginx.rpm
[root@localhost ~] #yum install nginx -y


输入:systemctl start nginx 来启动nginx。

1
[root@localhost ~] # systemctl start nginx


输入:systemctl enable nginx 来设置nginx的开机启动(linux宕机、重启会自动运行nginx不需要连上去输入命令)

1
2
[root@localhost ~] #systemctl enable nginx
Created  symlink  from  /etc/systemd/system/multi-user .target.wants /nginx .service to  /usr/lib/systemd/system/nginx .service.



2.通过iE检查能否访问

1
2
3
4
[root@localhost nginx-1.8.1] # ps -ef|grep nginx
root      14626      1  0 08:47 ?        00:00:00 nginx: master process nginx
nginx     14627  14626  0 08:47 ?        00:00:00 nginx: worker process
root      14636   3269  0 08:49 pts /1     00:00:00  grep  --color=auto nginx


wKioL1mvmnXyApKbAABcQvMOuHk226.png


nginx常用的操作命令

systemctl start nginx.service               #启动nginx服务 

systemctl enable nginx.service             #设置开机自启动 

systemctl disable nginx.service            #停止开机自启动 

systemctl status nginx.service             #查看服务当前状态 

systemctl restart nginx.service           #重新启动服务 

systemctl list-units --type=service        #查看所有已启动的服务





4.防火墙配置(如果系统有防火墙就需要进行写入规则)

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

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


5.配置nginx对ASP.NET Core应用的转发

修改 /etc/nginx/conf.d/default.conf 文件。

将文件内容替换为

server {
    listen 80;
    location / {
        proxy_pass 
http://localhost:88;
        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;
    }
}


重新加载nignx

1
[root@localhost nginx] # nginx -s reload

nginx的配置己完成


6.开启dotnet run进行测试

1
2
3
4
5
6
7
[root@localhost ~] # cd /home/WebApplication1/
[root@localhost WebApplication1] # dotnet run
Using launch settings from  /home/WebApplication1/Properties/launchSettings .json...
Hosting environment: Development
Content root path:  /home/WebApplication1
Now listening on: http: // [::]:88
Application started. Press Ctrl+C to shut down.

通过IP 80端口访问

wKioL1mvpmWgU9-5AAG89-QoCHQ565.png


六、配置守护服务(Supervisor)

目前存在三个问题

问题1:ASP.NET Core应用程序运行在shell之中,如果关闭shell则会发现ASP.NET Core应用被关闭,从而导致应用无法访问,这种情况当然是我们不想遇到的,而且生产环境对这种情况是零容忍的。

问题2:如果ASP.NET Core进程意外终止那么需要人为连进shell进行再次启动,往往这种操作都不够及时。

问题3:如果服务器宕机或需要重启我们则还是需要连入shell进行启动。

为了解决这个问题,我们需要有一个程序来监听ASP.NET Core 应用程序的状况。在应用程序停止运行的时候立即重新启动。这边我们用到了Supervisor这个工具,Supervisor使用Python开发的。



1.安装Supervisor

1
2
[root@localhost /] # yum install python-setuptools -y
[root@localhost /] #easy_install supervisor


2.配置Supervisor

1
2
[root@localhost /] #mkdir /etc/supervisor
[root@localhost /] #echo_supervisord_conf > /etc/supervisor/supervisord.conf

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

1
[root@localhost /] # vi /etc/supervisor/supervisord.conf


将里面的最后两行:          

1
2
;[include]                                                   
;files = relative /directory/ *.ini

              
改为

1
2
[include]
files = conf.d/*.conf


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

3.配置对ASP.NET Core应用的守护

创建一个 WebApplication1.conf文件,内容大致如下

[root@localhost /]# vi WebApplication1.conf

1
2
3
4
5
6
7
8
9
[program:WebApplication1]
command =dotnet WebApplication1.dll ; 运行程序的命令
directory= /home/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”下

1
2
[root@localhost /] #mkdir /etc/supervisor/conf.d
[root@localhost /] #cp WebApplication1.conf /etc/supervisor/conf.d/


运行supervisord,查看是否生效

1
2
3
4
[root@localhost /] #supervisord -c /etc/supervisor/supervisord.confsupervisord -c /etc/supervisor/supervisord.conf
[root@localhost /] # ps -ef | grep WebApplication1
root      29878  29685  0 09:57 ?        00:00:00 dotnet WebApplication1.dll
root      29892  29363  0 09:57 pts /3     00:00:00  grep  --color=auto WebApplication1

如果存在dotnet WebApplication1.dll 进程则代表运行成功,这时候在使用浏览器进行访问。


wKioL1mvqjHzkEM3AAG89-QoCHQ310.png

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


Supervisor守护进程常用操作

【启动supervisord】
确保配置无误后可以在每台主机上使用下面的命令启动supervisor的服务器端supervisord
supervisord


【停止supervisord】     
supervisorctl shutdown


【重新加载配置文件】
supervisorctl reload

七 、配置Supervisor开机启动

新建一个“supervisord.service”文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@localhost /] # vi 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”

1
[root@localhost /] # cp supervisord.service /usr/lib/systemd/system/


执行命令:systemctl enable supervisord

1
2
[root@localhost /] # systemctl enable supervisord
Created  symlink  from  /etc/systemd/system/multi-user .target.wants /supervisord .service to  /usr/lib/systemd/system/supervisord .service.


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

1
[root@localhost /] # systemctl is-enabled supervisord

八、最后测试

重启系统看能否能成功访问

1
[root@localhost /] # reboot

wKioL1mwFlKTjEb7AAG89-QoCHQ980.png

 







           本文转自MrXiong2017 51CTO博客,原文链接:http://blog.51cto.com/mrxiong2017/2083663,如需转载请自行联系原作者







相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2天前
|
安全 Linux Anolis
centos停止更新?这篇博客教会你CentOS 7转化系统为阿里龙蜥Anolis OS 7
centos停止更新?这篇博客教会你CentOS 7转化系统为阿里龙蜥Anolis OS 7
|
2天前
|
关系型数据库 MySQL Linux
在Centos7中:通过Docker安装MySQL5.7(保姆级)
在Centos7中:通过Docker安装MySQL5.7(保姆级)
|
2天前
|
关系型数据库 MySQL Shell
在Centos7中利用Shell脚本:实现MySQL的数据备份
在Centos7中利用Shell脚本:实现MySQL的数据备份
|
2天前
|
SQL 关系型数据库 MySQL
这篇文章带你了解:如何一次性将Centos中Mysql的数据快速导出!!!
这篇文章带你了解:如何一次性将Centos中Mysql的数据快速导出!!!
|
3天前
|
存储 关系型数据库 MySQL
9.3 【MySQL】系统表空间
9.3 【MySQL】系统表空间
10 0
|
3天前
|
传感器 人工智能 前端开发
JAVA语言VUE2+Spring boot+MySQL开发的智慧校园系统源码(电子班牌可人脸识别)Saas 模式
智慧校园电子班牌,坐落于班级的门口,适合于各类型学校的场景应用,班级学校日常内容更新可由班级自行管理,也可由学校统一管理。让我们一起看看,电子班牌有哪些功能呢?
45 4
JAVA语言VUE2+Spring boot+MySQL开发的智慧校园系统源码(电子班牌可人脸识别)Saas 模式
|
4天前
|
安全 关系型数据库 MySQL
CentOS 7系统加固详细方案SSH FTP MYSQL加固
CentOS 7系统加固详细方案SSH FTP MYSQL加固
|
4天前
|
Linux 网络安全 数据库
linux centos系统搭建samba文件服务器 NetBIOS解析 (超详细)
linux centos系统搭建samba文件服务器 NetBIOS解析 (超详细)
|
4天前
|
关系型数据库 MySQL Linux
Linux CentOs7 安装Mysql(5.7和8.0版本)密码修改 超详细教程
Linux CentOs7 安装Mysql(5.7和8.0版本)密码修改 超详细教程
|
7月前
|
Linux
百度搜索:蓝易云 ,Centos7系统wget 的安装与使用详细教程。
以上是在CentOS 7系统上安装和使用wget的详细教程。确保按照步骤操作,并根据您的需求进行必要的修改和调整。
129 0