• 两篇文章带你走入.NET Core 世界:CentOS+Kestrel+Ngnix 虚拟机先走一遍(一)


    背景:

    上一篇:ASP.Net Core on Linux (CentOS7) 共享第三方依赖库部署

    已经交待了背景,这篇就省下背景了。

    折腾的过程分两步:

    第一步是:本机跑虚拟机部署试一下;

    第二步是:买了个云服务器部署了上去。

    折腾完,感觉DotNetCore,虽然普及率不高,但整体还算是比较成熟了。

    下面,就和大伙分享一下这两步的过程及遇到的坑吧,让大伙也方便进入NetCore的世界。

    测试环境跑:ASPNETCore on Linux(CentOS7)步骤:

    1:下载:虚拟机VMware、CentOS7系统

    VMware 下载地址:https://www.cr173.com/soft/81088.html

    CentOS7 下载地址:https://www.centos.org/download/

    为什么选CentOS7?

    主要是上各大云平台,看他们提供最多的Linux版本就是这个了,比较大众化。

    地址里有两个版本:DVD ISO (全家桶版本)和 Min ISO(最小版本)

    为了避免麻烦,下载了DVD版本。

    2:安装:VMware Workstation

    如果是第一次安装:应该没啥情况好说。

    如果是二次安装,如我的情况比较坑:

    以前装了好多年的,重新运行时,发现要重新输入注册码。
    
    于是网上找了几个注册码重新输入,结果不管用哪个码,都无效,甚至下载了注册机,都过不去了。
    
    最后,想到重新安装,却连重新安装都提示无法安装。
    
    解决方法:把注册表里和WMware相关的项都删除了,再重新安装,安装过程输入注册码就可以了。
    
    在“运行”输入:regedit 打开 HKEY_LOCAL_MACHINE 选择 SOFTWARE找到VMware的键。删除即可。

    之后就可以重新安装了,再输入注册码就正常了。

    3:安装:CentOS7系统

    按着别人的教程,以为安装的没界面的版本,没想到装完也是带KDE界面的。

    找了两篇:

    https://www.cnblogs.com/wcwen1990/p/7630545.html

    http://baijiahao.baidu.com/s?id=1599601257937774752&wfr=spider&for=pc

    我遇到的坑是:安装完后,界面就黑屏了,一直进不去。

    解决方法:是BIOS的设置虚拟化没开(笔记本开机时的BIOS曾经重置到默认过)
    
    https://blog.csdn.net/weixin_41196185/article/details/79574494

    接下来,你需要熟悉一下Linux系统,先了解一下 Linux目录结构

    为了少点折腾,直接先用root账号玩吧,新创建的普通账号根本玩不来。

    4:安装:NET Core SDK

    跟着微软的教程走:https://www.microsoft.com/net/learn/get-started/linuxcentos

    其中一条:sudo yum update 这条更新系统组件(可选,200M左右,看网络是否方便)

    哥当时网络差,结果这一步卡了1个多小时,结果还失败了,后来直接跳过它了。

    5:发布部署并运行:Taurus.MVC 项目和 Aries 项目。

    你可以在GitHub上下载 Taurus.MVC 的源码项目,运行:Taurus.MVC_NetCore.sln 然后右键发布。

    由于当年VS2017装的比较早,发布的选项里是木有:部署模式 的。

    现在在VS 2017 的 视图-通知 菜单里,升级了一下,才有这东西。

    如果是运行自己的项目,注意发布前,需要提前设置好要监听的端口:

    public class Program
        {
            public static void Main(string[] args)
            {
                BuildWebHost(args).Run();
            }
    
            public static IWebHost BuildWebHost(string[] args) =>
                WebHost.CreateDefaultBuilder(args)
                    .UseStartup<Startup>()
                    .UseUrls(GetUrl())
                    .Build();
            public static string GetUrl()
            {
                string url = AppConfig.GetApp("Host", "[http|https]://*:8888");//这里弄成了可以配置的形式,不配置默认就是8888端口
                return url;
            }
        }

    我在/home/目录下创建了web目录,如:

    /home/web/taurus/

    /home/web/aries/

    将发布后的目录下的所有东西,包括100多个Microsoft.XXXX.dll,都复制粘贴到taurus目录或aries目录下。

    当然,你也可以参考上一篇文章,将第三方的dll移到单独的目录去。

    在虚拟机中有界面可以直接复制粘贴,所以暂时也不用搞ssh的工具和ftp了。

    这里你得会基本的linux命令,cd  切换目录总得会:

    切到项目目录,如 cd /home/web/taurus/

    然后运行:

    dotnet Taurus.View.dll (program.cs所在的dll名称)
    
    PS:按Ctrl+C 可退出程序

    现在可以用:http://ip:8888 访问了。

    我这里遇到的坑:

    提示找不到:libuv库
    
    百度半年无所得,后来看到runtime目录,里面发现linux-64目录下有libuv.so,把它给copy到根目录,才运行起来。

    PS:VS 2017 升级后,再发布时会自动把libuv.so给弄到根目录。

    6:安装: Ngnix

    默认 dotnet xxx.dll 运行的是 kestrel 服务器,不支持域名绑定,所以得弄一个支持域名绑定的来配合一下。

    而这个支持负载均衡的反向代理服务器,简单又实用,大伙都爱用它。

    网上有些很复杂的教程坑死人:

    就是下载源码,然后运行编绎的那些教程,结果我照着运行编绎,结果报错了,然后一脸朦B。

    在坑里转了半天,最后找到一个最简单的,就两行命令:

    1、添加Nginx到YUM源,添加CentOS 7 Nginx yum资源库,打开终端,使用以下命令:

    sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

    2、安装Nginx,在你的CentOS 7 服务器中使用yum命令从Nginx源服务器中获取来安装Nginx:

    sudo yum install -y nginx

    Nginx将完成安装在你的CentOS 7 服务器中。

    3、启动Nginx,刚安装的Nginx不会自行启动。运行Nginx:

    sudo systemctl start nginx.service

    直接输入本机IP,默认80端口,即可访问,看到Welcome...。

    参考:https://blog.csdn.net/u012486840/article/details/52610320

    7、关闭Selinux

    关闭本地IP自循环的这个限制,Ngnix才能指向Kestrel服务器,不然会报以下错:

    502 Bad gateway错误

    打开文件:/etc/selinux/config,把SELINUX=enforcing 改成如下的disabled

    # 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

    改完保存,要重启才能生效,可是哥不想重启,找了半年也没找到可以有即时生效的命令,坑啊。

    后来找到另一个方法,把Ngnix加入Selinux的白名单,就不用关它了。

    运行以下三条命令就好了:

    yum install policycoreutils-python
    cat /var/log/audit/audit.log | grep nginx | grep denied | audit2allow -M mynginx
    semodule -i mynginx.pp

    8:Nginx配置网站:

    nginx的配置文件在:/etc/nginx/nginx.conf,打开的话内容如下:

    user  nginx;
    worker_processes  1;
    
    error_log  /var/log/nginx/error.log warn;
    pid        /var/run/nginx.pid;
    
    
    events {
        worker_connections  1024;
    }
    
    
    http {
        include       /etc/nginx/mime.types;
        default_type  application/octet-stream;
    
        log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for"';
    
        access_log  /var/log/nginx/access.log  main;
    
        sendfile        on;
        #tcp_nopush     on;
    
        keepalive_timeout  65;
    
        #gzip  on;
    
        include /etc/nginx/conf.d/*.conf;
    }

    不过这个文件可以不用动,因为它的服务配置include 指向了/etc/nginx/conf.d/*.conf。

    所以,只要在conf.d目录下创建自己的网站配置文件即可,可以把default.conf 移除或改个后缀先:

    然后新建:taurus.conf 的配置(这里少了三个基本的配置:Domain替换、负载均衡、动静分离,在下一篇介绍):

    server {
        listen       80;
        server_name  mvc.taurus.cyqdata.com;//绑定域名
    location / { proxy_pass http://localhost:8888/;//跳转地址 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;    proxy_set_header Cookie $http_cookie; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } }

    接着,刷新配置即可:

    nginx -s reload

    访问效果:

    总结:

    进入NetCore的世界:

    1、NetCore的技术学习成本还算是比较低的:

    因为Taurus和Aries在window和linux的开发方式和代码都是同一套,

    根本不需要学习NetCore下的MVC、EF以及一大堆有的没的消费时间。

    2、整体的学习成本,更多的还是熟悉Linux系统及命令行花的时间多。

    Aries on CentOS7:mvc.aries.cyqdata.com

    Taurus on CentOS7:mvc.taurus.cyqdata.com

    下一篇,介绍正式往服务器上部署的过程。

  • 相关阅读:
    file_put_contents 和php://input 实现存储数据进图片中
    Oracle PL/SQL游标的学习
    三层的再理解
    取出字符串中任意的顺序匹配
    oracle的正则表达式(regular expression)简单介绍
    oracle动态游标的简单实现方法
    存储过程之游标笔记小结
    char,varchar,nvarchar的区别
    大连惊魂记
    让asp.net默认的上传组件支持进度条反映(转)
  • 原文地址:https://www.cnblogs.com/cyq1162/p/10540174.html
Copyright © 2020-2023  润新知