兩篇文章帶你走入.NET Core 世界:CentOS+Kestrel+Ngnix 虛擬機先走一遍(一)

背景:

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

已經交待了背景,這篇就省下背景了。python

折騰的過程分兩步:linux

第一步是:本機跑虛擬機部署試一下;nginx

第二步是:買了個雲服務器部署了上去。git

折騰完,感受DotNetCore,雖然普及率不高,但總體還算是比較成熟了。github

下面,就和大夥分享一下這兩步的過程及遇到的坑吧,讓大夥也方便進入NetCore的世界。web

 

測試環境跑:ASPNETCore on Linux(CentOS7)步驟:centos

1:下載:虛擬機VMware、CentOS7系統

VMware 下載地址:https://www.cr173.com/soft/81088.html服務器

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

爲何選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/

而後運行:

1
2
3
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。

在坑裏轉了半天,最後找到一個最簡單的,就兩行命令:

一、添加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

二、安裝Nginx,在你的CentOS 7 服務器中使用yum命令從Nginx源服務器中獲取來安裝Nginx:

sudo yum install -y nginx

Nginx將完成安裝在你的CentOS 7 服務器中。

三、啓動Nginx,剛安裝的Nginx不會自行啓動。運行Nginx:

sudo systemctl start nginx.service

直接輸入本機IP,默認80端口,便可訪問,看到Welcome...。

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

七、關閉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的世界:

一、NetCore的技術學習成本還算是比較低的:

由於Taurus和Aries在window和linux的開發方式和代碼都是同一套,

根本不須要學習NetCore下的MVC、EF以及一大堆有的沒的消費時間。

二、總體的學習成本,更多的仍是熟悉Linux系統及命令行花的時間多。

Aries on CentOS7:mvc.aries.cyqdata.com

Taurus on CentOS7:mvc.taurus.cyqdata.com

下一篇,介紹正式往服務器上部署的過程。

相關文章
相關標籤/搜索