折騰的過程分兩步:第一步是:本機跑虛擬機部署試一下;第二步是:買了個雲伺服器部署了上去。折騰完,感覺DotNetCore,雖然普及率不高,但整體還算是比較成熟了。下麵,就和大伙分享一下這兩步的過程及遇到的坑吧,讓大伙也方便進入NetCore的世界。 ...
背景:
上一篇: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
下一篇,介紹正式往伺服器上部署的過程。