用途 | 工具&版本 |
---|---|
操做系統 | Windows 10 |
開發工具 | Visual Studio 2017(15.7.5) |
SDK | .NET Core SDK 2.1 |
傳輸工具 | FlashFxp |
用途 | 工具&版本 |
---|---|
Linux Server | CentOS 7 |
SDK | .NET Core SDK 2.1 |
傳輸工具 | Vsftp |
反向代理 | Nginx 1.12.2 |
項 | 說明 |
---|---|
SDK | .NET Core SDK 2.1 |
項目模板 | ASP.NET Core Web App(MVC) |
項目名稱 | HelloWeb |
解決方案名稱 | HelloWeb |
解決方案根目錄 | D:\Projects\Test\HelloWeb |
項目建立完成後,須要修改Program.cs文件
手動指定啓動的Url爲:http://*:5000html
public class Program { public static void Main(string[] args) { CreateWebHostBuilder(args).Build().Run(); } public static IWebHostBuilder CreateWebHostBuilder(string[] args) => WebHost.CreateDefaultBuilder(args) .UseStartup<Startup>() .UseUrls("http://*:5000"); }
http://*:5000
能夠兼容 http://localhost:5000
,http://127.0.0.1:5000
,http://所在機器ip:5000
,方便咱們部署到Linux Server後進行測試nginx
CentOS 7虛擬機安裝:https://ken.io/note/hyper-v-course-setup-centosweb
在cmd命令行操做centos
#進入項目根目錄(HelloWeb.csproj所在目錄) d: && cd D:\Projects\Test\HelloWeb\HelloWeb #執行publish命令 dotnet publish -c release #dotnet publish -h能夠查看publish可選參數 #-c release 表示以Release方式進行編譯
發佈完成後,能夠在D:\Projects\Test\HelloWeb\HelloWeb\bin\Release\netcoreapp2.1\publish查看發佈後的文件輸出。瀏覽器
在cmd命令行操做:bash
#進入發佈輸出目錄 d: && cd D:\Projects\Test\HelloWeb\HelloWeb\bin\Release\netcoreapp2.1\publish #啓動應用 dotnet HelloWeb.dll #啓動成功會輸出如下信息 Hosting environment: Production Content root path: D:\Projects\Test\HelloWeb\HelloWeb\bin\Release\netcoreapp2.1\publish Now listening on: http://[::]:5000 Application started. Press Ctrl+C to shut down.
經過瀏覽器訪問:localhost:5000,驗證是否正常服務器
經過XShell鏈接到CentOS7服務器進行操做app
#建立站點根目錄 sudo mkdir -p /webroot/helloweb #建立站點應用目錄 sudo mkdir -p /webroot/helloweb/app #建立站點日誌目錄 sudo mkdir -p /webroot/helloweb/logs #目錄受權 sudo chmod 777 /webroot/helloweb/app sudo chmod 777 /webroot/helloweb/logs
#添加可訪問端口 sudo firewall-cmd --add-port=5000/tcp --permanent #從新加載防火牆策略 sudo firewall-cmd --reload
經過FTP將傳輸到/webroot/helloweb/appasp.net
經過命令啓動:dom
#進入app目錄並經過dotnet命令啓動站點 cd /webroot/helloweb/app/ dotnet HelloWeb.dll #啓動成功後,將會輸出: Hosting environment: Production Content root path: /webroot Now listening on: http://[::]:5000 Application started. Press Ctrl+C to shut down.
這時候經過瀏覽器訪問 http://{centos-ip}:5000便可
若是網站樣式沒有被正常加載,那應該是訪問wwwroot下面的靜態文件時404了。
這是由於 ASP.NET Core默認是以命令執行所在的目錄做爲應用根目錄讀取文件的
因此,必定要在HelloWeb.dll所在目錄執行dotnet命令,否則會讀取不到wwwroot目錄下的靜態文件
顯示啓動的方式,若是關閉XShell的鏈接窗口,那這個應用的進行就被關掉了。因此能夠用nohup命令啓動,腳本示例:
nohup dotnet HelloWeb.dll &
nohup因爲是隱私啓動,那應用的關閉就要找到進程id後才能關閉,因此仍是乾脆配置啓動、中止腳原本操做更方便一些
建立start.sh文件
sudo vi /webroot/helloweb/start.sh
腳本內容:
#!/bin/sh cd $(cd "$(dirname "$0")"; pwd) APP_NAME=HelloWeb.dll echo "start begin..." echo $APP_NAME cd app nohup dotnet $APP_NAME >>../logs/info.log 2>>../logs/error.log & cd .. sleep 5 if test $(pgrep -f $APP_NAME|wc -l) -eq 0 then echo "start failed" else echo "start successed" fi
建立stop.sh文件
sudo vi /webroot/helloweb/stop.sh
腳本內容:
#!/bin/sh cd $(cd "$(dirname "$0")"; pwd) APP_NAME=HelloWeb.dll PROCESS=`ps -ef|grep $APP_NAME|grep -v grep |awk '{ print $2}'` while : do kill -9 $PROCESS > /dev/null 2>&1 if [ $? -ne 0 ];then break else continue fi done echo 'stop success!'
#啓動應用 sh /webroot/helloweb/start.sh #啓動成功輸出 start begin... HelloWeb.dll start successed #中止應用 sh /webroot/helloweb/stop.sh #中止成功後輸出 stop success!
sudo chmod +x /webroot/helloweb/stop.sh
#建立服務文件 sudo vi /usr/lib/systemd/system/helloweb.service #文件內容 [Unit] Description=helloweb After=network.target [Service] WorkingDirectory=/webroot/helloweb/app ExecStart=/usr/bin/dotnet /webroot/helloweb/app/HelloWeb.dll ExecStop=/webroot/helloweb/stop.sh Restart=always RestartSec=10 [Install] WantedBy=multi-user.target
若是你配置了多個版本的.NET Core環境,記得把/usr/bin/dotnet換成對應的路徑
#設置服務開機啓動 sudo systemctl enable helloweb #啓動服務 sudo systemctl start helloweb
#新建配置文件 sudo vi /etc/nginx/conf.d/helloweb.conf #反向代理配置內容 server { listen 80; #監聽80端口 server_name helloweb.mydomain.com; #綁定的域名 location / { #轉發或處理 proxy_pass http://localhost:5000; } error_page 500 502 503 504 /50x.html;#錯誤頁 location = /50x.html { root /usr/share/nginx/html; } }
sudo nginx -s reload
#添加可訪問端口 sudo firewall-cmd --add-port=80/tcp --permanent #從新加載防火牆策略 sudo firewall-cmd --reload
經過設置本地hosts將helloweb.mydomain.com指向服務器IP
而後經過瀏覽器訪問: helloweb.mydomain.com
便可
以上,若有疑問,歡迎聯繫我:https://ken.io/home/about