• Linux或者CentOS环境下部署.NET Core网站项目


    本文介绍了在linux服务器的环境下发布.NET Core网站项目,文章有点长,请客官耐心看完~

    一、创建ASP.NET Core Web应用

    1.1、在创建项目时,“配置HTTPS”取消勾选,后面部署到CentOS或Ubuntu系统会报错

    创建.NET Core项目

    1.2、进行端口监听的修改

    .NET Core端口监听是通过localhost,所以需要处理一下,须通过IP或者*来进行端口监听才可以

    1.2.1、在ASP.NET Core Web应用中的“Program.cs”文件中,修改代码。

    1. 在 方法 “CreateHostBuilder” 下 的“ConfigureWebHostDefaults” 中添加代码:
    webBuilder.UseKestrel();
    webBuilder.UseUrls("http://*:5000");
    
    • 1
    • 2

    (注意:设置的端口,需要在系统中开放对应的端口,以上两行代码必须加在.UseStartup之前)
    端口设置

    1.3、发布Web项目

    在项目上右键=》选择菜单“发布”=》选择“文件夹”=》设置发布之后文件存放文件位置=》设置完成之后,点击按钮“发布”,等待发布完成即可。
    发布项目

    1.4、将项目文件移动到服务器上

    打开发布项目的文件夹,将发布的文件全选,复制粘贴到云服务器所新建的项目存放得文件中。(我使用的是XFtp和XShell)
    项目文件拷贝至服务器

    二、远程服务器操作

    相应安装建议以管理员方式登录系统,非管理员请以sudo命令安装。Linux sudo命令以系统管理者的身份执行指令,也就是说,经由 sudo 所执行的指令就好像是 root 亲自执行。

    2.1、服务器调试项目

    2.1.1、启动.NET Core项目

    在XShell中输入命令启动发布的项目

    1. 输入命令进入存放项目的文件夹中
    cd /testproject
    
    • 1

    效果如下如图所示:
    进入目录

    1. 在该目录下输入启动命令,启动项目;在浏览器中输入:http://你的服务器IP:5000

    linux命令

    sudo dotnet NET5.dll --urls "http://*:8081"
    
    • 1

    效果如下如图所示:
    启动

    如果发现无法访问或者进不去,则可按住:Ctrl+C停止项目,然后再命令面板使用,防火墙命令将对应的端口开放:

    linux命令

    sudo firewall-cmd --zone=public --add-port=8081/tcp --permanent
    sudo firewall-cmd --reload
    
    • 1
    • 2

    设置完成之后,将防火墙重启;然后再浏览器中输入:http://你的服务器IP:8081或者刷新刚刚的网页,则访问成功。

    linux命令

    sudo systemctl start firewalld
    
    • 1

    效果如下如图所示:
    服务器网站运行

    2.2、使用Supervisor守护进程

    2.2.1、为什么要用Supervisor?

    在linux或者unix操作系统中,守护进程(Daemon)是一种运行在后台的特殊进程,它独立于控制终端并且周期性的执行某种任务或等待处理某些发生的事件。由于在linux中,每个系统与用户进行交流的界面称为终端,每一个从此终端开始运行的进程都会依附于这个终端,这个终端被称为这些进程的控制终端,当控制终端被关闭的时候,相应的进程都会自动关闭。但是守护进程却能突破这种限制,它脱离于终端并且在后台运行,并且它脱离终端的目的是为了避免进程在运行的过程中的信息在任何终端中显示并且进程也不会被任何终端所产生的终端信息所打断。它从被执行的时候开始运转,直到整个系统关闭才退出。

    此处的创建守护进程,是指发布在Linux上 ASP.NET Core 程序的dotnet xxx.dll命令的宿主进程创建一个守护进程。在 Linux 上有很多可以管理进程的工具,我们使用 Supervisor 来做这个事情。

    2.2.2、安装Supervisor

    2.2.2.1、安装EPEL源

    linux命令:sudo yum -y install epel-release

    2.2.2.2、安装Supervisor

    linux命令:sudo yum -y install supervisor

    2.2.2.3、设置Supervisor为开机自启动

    linux命令:systemctl enable supervisord

    2.2.2.4、启动Supervisord

    linux命令:systemctl start supervisord

    2.2.2.5、查看Supervisord的运行状态

    linux命令:systemctl status supervisord

    效果如下图所示:
    查看Supervisord的运行状态

    2.2.3、配置Supervisor守护进程

    2.2.3.1、配置Server

    通过vi命令或者xftp修改配置文件开启web界面访问,如下图所示,参照inet_http_server等四个配置的注释添加数据,该用户名和密码是用于进入守护进程页面的。(注意:同时这里设置的端口也需要在系统防火墙中开放对应的端口才可正常访问守护进程页面)

    linux命令:vi /etc/supervisord.conf

    配置Server

    2.2.3.2、重新加载配置文件

    linux命令:supervisorctl reload

    然后在浏览器打开http://你的ip:8895,输入上面我们设置的用户名和密码。
    输入用户名和密码
    ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------运行成功看到上图这个界面,则就表示supervisor安装完成了!

    2.2.3.3、配置项目下的Supervisor启动文件
    2.2.3.3.1、进入到“Supervsior.d”目录下

    linux命令:cd /etc/supervisord.d

    2.2.3.3.2、创建.ini可编辑文件

    linux命令

    sudo touch NET5.ini
    sudo vim NET5.ini
    
    • 1
    • 2
    2.2.3.3.3、编辑如下内容

    注意:stdout_logfile指向的文件夹一定要先创建,否则无法启动,上述配置文件中的内容需要根据用户实际情况修改
    确认无误时候,按下“ESC”键,再次输入“:wq”回车即可退出并保存文件。

    #表示程序名称,用于在supervisor中显示,无特殊意义。
    [program:NET5] 
    # 输入执行命令,这里表示执行的是dotnet Core50Test.dll
    command=/bin/bash -c "dotnet NET5.dll"
    # 应用程序根目录 
    directory=/testproject
    # 是否自动启动,当 supervisor 加载该配置文件的时候立即启动它 
    autostart=true
    # 是否自动重启, 程序异常退出后自动重启
    autorestart=true
    # 该配置文件输出单个日志文件的大小,默认50M
    logfile_maxbytes=50MB
    # 日志备份个数 
    logfile_backups=10
    # 记录日志级别 
    loglevel=info
    # 指定标准输出日志文件 
    stdout_logfile=/root/app_data/data/logs/core50test/core50test.out.log
    # 环境变量
    environment=ASPNETCORE_ENVIRONMENT=Production
    # 启动服务的用户
    user=admin
    # 把stderr重定向到stdout,默认 false
    redirect_stderr=true
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    2.2.3.3.4、重新加载配置文件

    linux命令:supervisorctl reload

    上述命令执行完成之后,刷新浏览器

    效果如下图所示:

    supervisor守护进程运行
    项目运行

    Supervisor最常用的几个命令为:
    #启动所有
    supervisorctl start all
    
    # 重启所有
    supervisorctl restart all
    
    # 停止所有
    supervisorctl stop all
    
    #PS:要操作某个服务,把all换成服务名即可
    #查看服务状态
    supervisorctl status
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    2.3、使用Nginx

    在之前我们的应用程序默认是绑定的5000端口,如果要指定80端口或者配置域名该怎么处理呢?下面就该nginx登场了。

    2.3.1、Nginx介绍

    Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。

    2.3.1.1、Nginx常用命令
    #1、查看版本
    nginx -v
    
    #2、查看nginx安装目录
    ps  -ef | grep nginx
    
    #3、检查配置文件
    nginx -t
    
    #4、启动
    systemctl start nginx.service
    
    #5、停止
    systemctl stop nginx.service
    
    #5、重启
    systemctl restart nginx.service
    
    #6、设置开机自启动
    systemctl enable nginx.service
    
    #7、停止开机自启动
    systemctl disable nginx.service
    
    #8、查看当前状态
    systemctl status nginx.service
    
    #9、查看所有已启动的服务
    systemctl list-units --type=service
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    2.3.2、安装Nginx

    linux命令:

    #安装Nginx的源
    sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
    
    #安装Nginx
    sudo yum install -y nginx
    
    #安装完成后,使用以下命令启用并启动Nginx服务
    #sudo systemctl enable nginx
    sudo systemctl enable nginx.service
    sudo systemctl start nginx.service
    #sudo systemctl start nginx
    
    #要验证服务是否正在运行,请检查其状态:
    sudo systemctl status nginx
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    上述安装完成之后,在浏览器输入:http://你的IP,效果如下如所示即安装成功!
    nginx运行成功

    2.3.3、安装Nginx,无法访问解决措施;Nginx默认80端口

    2.3.3.1、首先检查服务器所属的平台端口是否开放
    2.3.3.1.1、检查系统是否开放对应端口

    linux命令

    #查看所有开启的端口
    sudo firewall-cmd --list-ports
    
    • 1
    • 2

    如果结果没有显示包含的端口,则代表没开放

    2.3.3.1.2、开放对应端口
    #开放指定的端口
    sudo firewall-cmd --zone=public --add-port=80/tcp --permanent
    
    #重启防火墙 开启后需要重启防火墙才生效
    firewall-cmd --reload
    
    • 1
    • 2
    • 3
    • 4
    • 5

    2.3.4、配置Nginx

    Nginx安装完成后,切换到/etc/nginx/conf.d目录;实际是做了一个内网端口映射,将内网的8081映射到了Nginx的80端口

    cd /etc/nginx/conf.d
    
    • 1

    1、存在default.conf文件

    linux命令:sudo vim default.conf

    修改,确认无误时候,按下“ESC”键,再次输入“:wq”回车即可退出并保存文件:

    linux命令:

    server {
        listen       80;
        server_name  serverIP;    #自己服务器公网IP或者备案的域名
        location / {
            proxy_pass http://127.0.0.1:8081;    #.NET Core项目启动所对应的端口
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    2、不存在default.conf文件

    linux命令:

    sudo touch default.conf
    sudo vim default.conf
    
    • 1
    • 2

    编辑文件,确认无误时候,按下“ESC”键,再次输入“:wq”回车即可退出并保存文件:

    linux命令:

    server {
        listen       80;
        server_name  serverIP;    #自己服务器公网IP或者备案的域名
        location / {
            proxy_pass http://127.0.0.1:8081;    #.NET Core项目启动所对应的端口
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    保存后,执行如下命令,重新加载配置;然后再次访问http://你的ip,一切正常的话应该可以看到如下的界面,表示我们的.NET Core程序已经完美运行在linux系统了。

    linux命令:nginx -s reload

    nginx运行成功
    至此,.NET Core Web网站项目已完成全部Linux或CentOS系统的部署!

  • 相关阅读:
    Monaco Editor教程(十一):monaco中的位置信息Position类型详解
    实现物联网的技术要素
    万界星空科技商业开源MES
    Linux CentOS7 vim多窗口编辑
    Vue 2.0/3.0
    猿创征文|实例展示Sklearn中三种常用的编码方式OneHotEncoder,LabelEncoder,OrdinalEncoder的使用过程
    SpringBoot原理初探
    Linux 查找动态库位置
    git cherry-pick 合并某次提交
    利用现有数据库管理系统创建一个安全的分布式数据库集群
  • 原文地址:https://blog.csdn.net/weixin_44146294/article/details/127663166