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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介:

一、简介

        一直以来,微软只对自家平台提供.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,如需转载请自行联系原作者







相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
人工智能 JavaScript 关系型数据库
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
103 14
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
|
20天前
|
人工智能 关系型数据库 分布式数据库
100%兼容MySQL!手把手教你基于PolarDB搭建RAG系统
100%兼容MySQL!手把手教你基于PolarDB搭建RAG系统
|
2月前
|
安全 关系型数据库 MySQL
CentOS7仅安装部署MySQL80客户端
通过上述步骤,你可以在CentOS 7上成功安装并配置MySQL 8.0客户端。这个过程确保你能够使用MySQL客户端工具连接和管理远程的MySQL数据库,而不需要在本地安装MySQL服务器。定期更新MySQL客户端可以确保你使用的是最新的功能和安全修复。
295 16
|
3月前
|
弹性计算 开发框架 安全
基于云效 Windows 构建环境和 Nuget 制品仓库进行 .Net 应用开发
本文将基于云效 Flow 流水线 Windows 构建环境和云效 Packages Nuget 制品仓库手把手教你如何开发并部署一个 .NET 应用,从环境搭建到实战应用发布的详细教程,帮助你掌握 .NET 开发的核心技能。
|
4月前
|
关系型数据库 MySQL Linux
在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,并与使用 RPM 包安装进行了对比
本文介绍了在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,并与使用 RPM 包安装进行了对比。通过具体案例,读者可以了解如何准备环境、下载源码、编译安装、配置服务及登录 MySQL。编译源码安装虽然复杂,但提供了更高的定制性和灵活性,适用于需要高度定制的场景。
258 3
|
4月前
|
关系型数据库 MySQL Linux
在 CentOS 7 中通过编译源码安装 MySQL 数据库的详细步骤,并与使用 RPM 包安装进行了对比。
本文介绍了在 CentOS 7 中通过编译源码安装 MySQL 数据库的详细步骤,并与使用 RPM 包安装进行了对比。内容涵盖准备工作、下载源码、编译安装、配置服务、登录设置及实践心得,帮助读者根据需求选择最适合的安装方法。
293 2
|
4月前
|
关系型数据库 MySQL Linux
Linux系统如何设置自启动服务在MySQL数据库启动后执行?
【10月更文挑战第25天】Linux系统如何设置自启动服务在MySQL数据库启动后执行?
289 3
|
4月前
|
关系型数据库 MySQL Linux
在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。
本文介绍了在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。同时,文章还对比了编译源码安装与使用 RPM 包安装的优缺点,帮助读者根据需求选择最合适的方法。通过具体案例,展示了编译源码安装的灵活性和定制性。
413 2
|
1天前
|
关系型数据库 MySQL 数据库连接
docker拉取MySQL后数据库连接失败解决方案
通过以上方法,可以解决Docker中拉取MySQL镜像后数据库连接失败的常见问题。关键步骤包括确保容器正确启动、配置正确的环境变量、合理设置网络和权限,以及检查主机防火墙设置等。通过逐步排查,可以快速定位并解决连接问题,确保MySQL服务的正常使用。
95 82
|
2月前
|
关系型数据库 MySQL 数据库连接
数据库连接工具连接mysql提示:“Host ‘172.23.0.1‘ is not allowed to connect to this MySQL server“
docker-compose部署mysql8服务后,连接时提示不允许连接问题解决