前言:
最近在專案中遇到了遇到了寫部署步驟過多的問題,為了減少.net core專案部署步驟;需要對一些基礎問題進行驗證:
如埠設定、單頁應用程式(angluar)合併部署方式等相關問題,特將解決過程記錄下來
一、.NET Core部署埠指定問題?
Kestrel 是 ASP.NET Core 專案模板指定的預設 Web 伺服器。
那麼在.NET Core中以Kestrel 作為作為web伺服器有哪些方式能指定服務的監聽埠呢?
- 方式1:環境變數設定:launchSettings.json檔案中指定applicationUrl地址
修改launchSettings.json的配置項applicationUrl值:如下兩種設定方式;多個地址用;分割
{ "$schema": "http://json.schemastore.org/launchsettings.json","profiles": { "AuditLogDemo": { "commandName": "Project", "launchBrowser": true, "launchUrl": "swagger", "applicationUrl": "http://localhost:5000;https://localhost:5001", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } } } }
執行結果:
- 方式2:程式碼中設定地址
在ConfigureWebHostDefaults中設定啟動預設值時,使用UseUrls繫結地址;多個地址用;分割
public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) //改用Autofac來實現依賴注入 .UseServiceProviderFactory(new AutofacServiceProviderFactory()) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); webBuilder.UseUrls("http://*:5100;http://*:5101"); });
執行如下:
此時:方式1的設定依然存在,說明優先順序:方式2>方式1
- 方式3:配置檔案設定(appsettings.json)-推薦
修改程式配置檔案:新增以下節點:
{ "Urls": "http://*:5200;https://*:5201" }
執行效果:
此時:方式1、方式2的設定依然存在,說明優先順序:方式3>方式2>方式1
- 方式4:使用命令列配置
使用以下命令啟動程式:
//專案根目錄執行: dotnet run --urls "http://*:5300;https://*:5301" //編譯輸出命令執行 dotnet AuditLogDemo.dll --urls "http://*:5300;https://*:5301"
執行效果:
所以最後可以得出各種方式優先順序為:
命令列配置(方式4)>配置檔案方式(方式3)>程式指定(方式2)>環境變數配置(方式1)
二、Angular(單頁應用程式)開發頁面採用Kestrel 伺服器執行
由於專案前期採用前後端分離實現,但在實施部署環節需要分成兩個站點;給實施人員帶來了多餘的步驟。那麼怎麼解決這個問題呢?
1、新增包引用:Microsoft.AspNetCore.SpaServices.Extensions
Install-Package Microsoft.AspNetCore.SpaServices.Extensions
2、修改Startup.cs 檔案中方法:
public class Startup { public Startup(IConfiguration configuration) { Configuration = configuration; }public IConfiguration Configuration { get; } // This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.AddSpaStaticFiles(configuration => {
//指定單頁應用檔案路徑地址 configuration.RootPath = "wwwroot/dist"; });
//…… } // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { app.UseStaticFiles();
// app.UseSpaStaticFiles(); app.UseEndpoints(endpoints => { endpoints.MapControllers();
//繫結路由;必須設定 endpoints.MapControllerRoute(name: "default", pattern: "{controller}/{action=Index}/{id?}"); }); app.UseSpa(configuration =>{}); } }
執行效果:
三、LogDashboard的使用
在專案中檢視日誌一直都是直接檢視日誌檔案,那麼有沒有辦法直接在頁面中檢視日誌內容呢?
最近了解到一個開源專案:LogDashboard 採用中介軟體方式,提供了一個可以簡單快速檢視日誌的皮膚。使用簡單方便。
使用方式:
1、新增包引用:LogDashboard
Install-Package LogDashboard
2、在Startup中使用LogDashboard
public void ConfigureServices(IServiceCollection services) { services.AddLogDashboard(); } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { //使用日誌看板 app.UseLogDashboard(); }
3、新增NLog及NLog配置檔案
<?xml version="1.0" encoding="utf-8" ?> <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" autoReload="true" throwExceptions="false" internalLogLevel="Off" internalLogFile="c:\temp\nlog-internal.log"> <variable name="myvar" value="myvalue"/> <targets> <target xsi:type="file" name="File" fileName="${basedir}/logs/${shortdate}.log" layout="${longdate}||${level}||${logger}||${message}||${exception:format=ToString:innerFormat=ToString:maxInnerExceptionLevel=10:separator=\r\n}||end" /> </targets> <rules> <logger name="*" minlevel="Debug" writeTo="file" /> </rules> </nlog>
4、執行效果:
更加詳細的使用方式:
https://doc.logdashboard.net/ru-men/quickstart