使用PM2 啓動ASP.NET Core應用程序

使用PM2 啓動ASP.NET Core應用程序

PM2

PM2 (github上的源碼)是開源的基於Nodejs的進程管理器,包括守護進程,監控,日誌的一整套完整的功能,基本是Nodejs應用程序不二的守護進程選擇,事實上它並不單單能夠啓動Nodejs的程序,只要是通常的腳本的程序它一樣能夠勝任。node

安裝 PM2

首先安裝NodeJS的運行環境(可自行google方法,仍是比較簡單),在命令行方式下輸入命令:git

npm install -g pm2github

將 pm2 全局安裝到nodejs全局環境下,安裝成功後就可使用pm2命令了web

如下是pm2經常使用的命令行npm

$ pm2 start app.js              # 啓動app.js應用程序
$ pm2 start app.js -i 4         # cluster mode 模式啓動4個app.js的應用實例
                                # 4個應用程序會自動進行負債均衡
$ pm2 start app.js --name="api" # 啓動應用程序並命名爲 "api"
$ pm2 start app.js --watch      # 當文件變化時自動重啓應用
$ pm2 start script.sh           # 啓動 bash 腳本

$ pm2 list                      # 列表 PM2 啓動的全部的應用程序
$ pm2 monit                     # 顯示每一個應用程序的CPU和內存佔用狀況
$ pm2 show [app-name]           # 顯示應用程序的全部信息

$ pm2 logs                      # 顯示全部應用程序的日誌
$ pm2 logs [app-name]           # 顯示指定應用程序的日誌
$ pm2 flush

$ pm2 stop all                  # 中止全部的應用程序
$ pm2 stop 0                    # 中止 id爲 0的指定應用程序
$ pm2 restart all               # 重啓全部應用
$ pm2 reload all                # 重啓 cluster mode下的全部應用
$ pm2 gracefulReload all        # Graceful reload all apps in cluster mode
$ pm2 delete all                # 關閉並刪除全部應用
$ pm2 delete 0                  # 刪除指定應用 id 0
$ pm2 scale api 10              # 把名字叫api的應用擴展到10個實例
$ pm2 reset [app-name]          # 重置重啓數量

$ pm2 startup                   # 建立開機自啓動命令
$ pm2 save                      # 保存當前應用列表
$ pm2 resurrect                 # 從新加載保存的應用列表
$ pm2 update                    # Save processes, kill PM2 and restore processes
$ pm2 generate                  # Generate a sample json configuration file

$ pm2 deploy app.json prod setup    # Setup "prod" remote server
$ pm2 deploy app.json prod          # Update "prod" remote server
$ pm2 deploy app.json prod revert 2 # Revert "prod" remote server by 2

$ pm2 module:generate [name]    # Generate sample module with name [name]
$ pm2 install pm2-logrotate     # Install module (here a log rotation system)
$ pm2 uninstall pm2-logrotate   # Uninstall module
$ pm2 publish                   # Increment version, git push and npm publish

## 沒翻譯幾個沒怎麼用過,有機會你們能夠試試

而後放幾張效果美圖json

進程管理

進程管理

CPU / 內存監控

CPU內存監控

日誌分析

日誌分析

經過PM2啓動 ASP.NET Core應用程序

1 新建應用程序,並調整配置

你能夠經過VS2015 建立,或者經過yo aspnet模板來建立,這可有可無,這裏我經過yo aspnet建立了一個名爲MyWebApp的應用程序centos

$ cd MyWebApp
$ dotnet restore
$ dotnet build
$ dotnet run

執行命令來看看是否建立成功,在瀏覽器中輸入http://localhost:5000/來查看運行效果 運行效果api

2 修改配置,使用自定義端口

在網站根目錄新建 hosting.json 文件,將應用程序綁定到兩個端口 6001和6002,內容以下瀏覽器

{
  "server.urls": "http://0.0.0.0:6001;http://0.0.0.0:6002"
}

接下來更新一下 Program.cs 來加載你的hosting配置, 而後使用 UseConfiguration 擴展方法將 配置信息傳遞給 WebHostBuilder:bash

public static void Main(string[] args)
{
    var config = new ConfigurationBuilder()
        .SetBasePath(Directory.GetCurrentDirectory())
        .AddJsonFile("hosting.json", optional: true)
        .Build();

    var host = new WebHostBuilder()
        .UseConfiguration(config)
        .UseKestrel()
        .UseContentRoot(Directory.GetCurrentDirectory())
        .UseIISIntegration()
        .UseStartup<Startup>()
        .Build();

    host.Run();
}

重啓使用命令 dotnet run 會看到應用會綁定到兩個端口上,而且均可以正常訪問

新建文件 start.sh 編寫實際啓動應用程序的代碼,內容以下:

dotnet MyWebApp.dll

最後將文件名配置到 project.json 中的 publishOptions 節點中,不然發佈的時候會丟失這個文件

"publishOptions": {
    "include": [
      "wwwroot",
      "Views",
      "Areas/**/Views",
      "hosting.json", //添加這個文件名
      "start.sh",  //添加這個文件名
      "appsettings.json",
      "web.config"
    ]
  },

3 發佈程序

經過命令將程序發佈成指定平臺,以下所示:

dotnet publish -r centos.7-x64 -c Release

將代碼打包並上傳到服務器,使用 dotnet MyWebApp.dll 命令查看是否運行正常

使用pm2 命令啓動程序

pm2 start start.sh --name mywebapp

結果如圖所示,能夠看到aspnet core 默認佔用的內存很是小哦: 此處輸入圖片的描述

配置啓動信息和環境變量

其實咱們能夠經過json配置文件來定製pm2的一些配置選項,在網站目錄下新建 production.json 文件 添加內容以下:

{
"apps" : [{
    // Application #1
    "name"        : "mywebapp",
    "script"      : "start.sh",   
    "cwd"         : "/home/www/mywebapp",
    "error_file" :  "/home/www/logs/mywebapp-err.log",
    "out_file"   :  "/home/www/logs/mywebapp-out.log",
    "max_memory_restart": "500M",
    "env": {
	    "ASPNETCORE_ENVIRONMENT":"production"        
    }  
  }]
}

這個文件在一臺服務器上運行多個網站的時候很是有用。 能夠設置日誌的目錄,自動重啓的內存閾值等,其實也能夠經過配置環境變量的方式來指定應用程序的端口,並經過配置多個節點來多進程運行同一個應用。

$ pm2 delete mywebapp // 刪除以前啓動的應用
$ pm2 start production.json //經過配置文件的形式 從新啓動
相關文章
相關標籤/搜索