之前写了一个如何在window和windows server上启用IIS发布网站和ASP.NET CORE网站的方法,这篇文章来说一说如何在Centos 7上发布运行ASP.NET Core网站。

    需要用到Linux系统,我选择的时Centos 7 ,它相当于Redhat的免费版,但是功能却一点都不少,入门可以选择Ubuntu,图形化界面、软件商店操作方便。

    安装Linux的方法以及步骤可以看之前的一篇文章,也可以网上找一找,非常多,在此不再赘述。

    今天,实验操作,我们可以选择三种方式

    第一种:虚拟机安装

        简单、快速、方便,可以使用VMware也可以使用Heper-V,这两款虚拟机软件都可以,但是对系统硬件要求高,很吃CPU和内存,CPU性能差,内存小的机器,请不要尝试。

    第二种:阿里云服务器

        更简单,安装更快捷,直接拿来用就可以,但是需要花点小钱,根据需要包月最低配置现在大概是70~80块大洋,但是只有部分地区可选,可以多选择几个地去看看,如果只是用几个小时,那么按量使用最好,低配一个小时不到一块钱,配置高点,也就几块钱一小时。

    第三种:双系统

        比较麻烦,但是如果计算机配置低,又不想花钱,自己还想长时间耍耍Linux的可以选择该方案

    第二种方式安装不用我们操心,第一种和第三种安装方式几乎一样,第一种相比第三种也就是需要安装虚拟机,不用制作启动盘。

    

    准备工作:

        如果时第三种方式,可以选择使用FAT32格式的U盘,传输网站文件;也可以在Linux中安装ntfs-3g,直接挂载window下存放网站文件的盘读取文件。

        第一种和第二中需要两个工具辅助,第一个:Xshell,使用Xshell远程连接centos进行操作,没有图形界面,只是命令行,第二种方式必须使用,第一种你也可以直接在虚拟机中操作;第二个WinSCP:FTP工具用来传输文件,当你配置好centos后,使用WinSCP将网站文件传输到Centos中,如果使用的VMware虚拟机,也可以安装插件,直接复制粘贴。

回归主题:

一、安装.NET Core

根据微软资料 https://www.microsoft.com/net/core#linuxcentos

在终端执行:

sudo yum install libunwind libicu  #(安装libicu依赖)

curl -sSL -o dotnet.tar.gz https://go.microsoft.com/fwlink/?linkid=848821 #(下载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 new console -o hwapp   # 我们初始化一个示例Hello World应用程序 (这里稍微耗时点)

cd hwapp

dotnet restore

dotnet run   #运行应用程序

二、安装NGinx

NGinx在Linux上有类似IIS的功能,用作WEB服务器使用,运行如下代码进行安装

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的开机启动

如果安装了图形化界面,打开自带的网页浏览器,输入http://ip 或者输入http://localhost 就会看到Welcome to nginx!页面,就说明安装成功了 ,命令行下也可以浏览网页,但是支持英文字符,汉语字符和图片等都不支持,需要的可以自己查找一下。

三、防火墙设置(可选)

如果你想让网站,在其他机器上也可以访问,你需要开放端口,否则会被防火墙屏蔽掉,执行下列命令,可开放80端口

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

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

四、发布ASP.NET CORE网站

先将网站文件使用文章前面所说的方式或工具传输到centos中,执行下列命令

cd /home/NetCoreDemo #这个目录 要输入你自己对应放的目录

dotnet netcoreDemo.dll # netcoreDemo.dll 这个对应你建的项目生成的dll

看到有Now listening on :......  //现在监听:.........

说明这个地址被监听了

然后在浏览器里面访问 http://localhost:5000

看到网页正常显示,说明ASP.NET CORE已经成功运行了

五、配置NGinx

现在http://localhost:5000 可以访问。但是通过ip却不能访问。那么我们现在就可以通过80访问nginx,然后nginx再帮我们访问5000。

打开路径 /etc/nginx/conf.d

编辑default.conf 文件内容替换为

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添加至SELinux的白名单,否则会报502错误。

nginx -s reload #使其即时生效
【注意】然后这里访问下 http://192.168.0.13/ (对应你自己的centos ip,这一步好重要。应该是要先主动触发这个502错误吧。)
yum install policycoreutils-python  #(选y)
cat /var/log/audit/audit.log | grep nginx | grep denied | audit2allow -M mynginx
semodule -i mynginx.pp

然后我们就可以在物理机上通过ip访问了(不用带端口了,直接80 然后 nginx 转到了5000)。

配置守护服务(Supervisor)

yum install python-setuptools
easy_install supervisor  #安装Supervisor
mkdir /etc/supervisor
echo_supervisord_conf > /etc/supervisor/supervisord.conf  #配置Supervisor

文件的最后

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

改成(【注意】去掉;且不能有空格)

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

进入目录 /etc/supervisor/ 新建 conf.d文件夹,conf.d文件夹下新建 netcoreDemo.conf文件

内容(【注意】看 第二行 第三行的 注释,根据实际名字填入)

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

    supervisord -c /etc/supervisor/supervisord.conf
    ps -ef | grep netcoreDemo  #【注意】netcoreDemo是上面 program:netcoreDemo 的命名
    supervisorctl reload  #重新加载

然后就好了,现在关掉那个5000界面也可以访问。

配置Supervisor开机启动

打开目录 /usr/lib/systemd/system/ 新建文件 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

执行命令:

systemctl enable supervisord
systemctl is-enabled supervisord #来验证是否为开机启动

到此,完工。现在重新电脑什么都不用管,直接可以访问部署好的网站。
 

文章信息

创建时间
2023-12-11
作者
郭铭心
是否所有人可见
所有人可见
最后修改日期
2023-12-11
点击数
254