目錄html
你們對於在IIS上部署.NET站點已經得心應手了,部署.NET Core也沒有什麼本質區別,可是這其中仍然有一些細節是不一樣的,下面記錄了一些我在部署時遇到的問題linux
要在IIS上運行ASP.NET Core,必須安裝.NET Core Windows Server Hostingnginx
安裝完成後最好重啓IISweb
若是沒有安裝該組件就直接打開部署的網站會出現 500.19 相關的配置數據無效windows
Core的IIS站點應用程序池的.NET CLR版本要選擇 無託管代碼安全
我最開始測試的時候,仍然使用Web根目錄做爲網站的物理路徑,可是網站沒法訪問,報HTTP403錯誤——Web 服務器被配置爲不列出此目錄的內容,也是就是這個文件夾下沒有能夠訪問的文件,在查閱網上的資料後發現其餘人都是使用了發佈文件夾做爲物理路徑,生成發佈版本設置相應路徑後.NET Core的示例站點便可正常訪問服務器
發佈文件夾結構mvc
成功訪問app
微軟官方給出了不一樣系統的部署方法Tutorial Guide,因爲Linux有不一樣的版本,因此這裏選擇CentOS做爲示例,有如下幾個步驟ide
在安裝.NET以前,你須要註冊微軟的Key,註冊產品倉庫,而且安裝須要的依賴,在每臺機器上只須要作一次。
直接執行如下命令:
sudo rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm
更新可供安裝的產品,而後安裝.NET SDK
輸入如下命令:
sudo yum update sudo yum install dotnet-sdk-2.2
中間有兩次手動確認,而後等待安裝完成便可
經過輸入命令就能夠建立一個官方的示例.NET Core程序
dotnet new console -o myApp cd myApp
第一條命令新建應用,第二條進入應用文件夾
經過 ls 命令咱們能夠看到該文件夾下只有兩個文件,obj是文件夾
默認的主文件Program.cs的內容以下:
using System; namespace myApp { class Program { static void Main(string[] args) { Console.WriteLine("Hello World!"); } } }
dotnet run
使用mkdir命令新建一個文件夾mvc,而後進入目錄
建立網站
dotnet new mvc
而後發佈這個網站程序
dotnet restore dotnet publish -c release
默認的發佈目錄是在/bin/release/netcoreapp2.x/publish/裏,能夠新建一個目錄拷貝進去
scp -r /root/mvc/bin/release/netcoreapp2.2/publish/* /root/www/firstapp
完成發佈後,已經能夠經過執行dotnet命令來啓動網站了,可是隻能在內網訪問,顯然這不是咱們想要的,要想從外網訪問,咱們須要反向代理服務器,這裏選擇Nginx
使用yum命令遠程安裝
sudo yum install epel-release yum install nginx
啓動
systemctl start nginx #啓用Nginx systemctl enable nginx #設置開機啓動
這時候已經能夠直接經過服務器的IP地址的80端口訪問Nginx的測試頁了,須要注意的是若是使用阿里雲服務器,須要在安全組配置中開放80端口才可以訪問
接下來根據須要進行一些端口的配置,dotnet默認的訪問端口爲5000,可是我測試的時候好像是在linux上被佔用了,因此對 Program.cs 進行修改,使其能夠經過其餘端口訪問,這裏使用8080
public class Program { public static void Main(string[] args) { CreateWebHostBuilder(args).Build().Run(); } public static IWebHostBuilder CreateWebHostBuilder(string[] args) => WebHost.CreateDefaultBuilder(args) .UseUrls("http://*:8080") .UseStartup<Startup>(); }
改完以後須要從新生成發佈,開始我使用的是微軟官方的示例程序,這裏爲了對比端口,我在本身Windows系統下新建了一個2.1的示例程序,使用VS2017進行程序修改,發佈後經過xftp再上傳到Linux服務器上
而後去修改Nginx的配置,默認的路徑應該是/etc/nginx/nginx.conf,在server節點下的location節點加一句 proxy_pass http://localhost:8080; 就能夠
server { listen 80 default_server; listen [::]:80 default_server; server_name _; root /usr/share/nginx/html; # Load configuration files for the default server block. include /etc/nginx/default.d/*.conf; location / { proxy_pass http://localhost:8080; } error_page 404 /404.html; location = /40x.html { } error_page 500 502 503 504 /50x.html; location = /50x.html { } }
修改完成後測試並重啓Nginx服務
sudo nginx -t #測試配置 sudo nginx -s reload #從新加載配置
配置完成以後,啓動網站訪問服務器IP地址的8080端口便可
可是啓動網站這裏存在一個問題,若是像上面那樣沒有使用cd命令進入網站目錄啓動,樣式和腳本等文件的路徑就會出現錯誤,致使頁面顯示不正常因此要在網站目錄啓動
基本的網站部署就到這裏,下一次講講用Docker如何進行.NET Core的部署與開發