The ASP.NET core 2.0 initial project run on the ubuntu 17.04 with Apache 2.4

 

一、先前準備

為了方便示範 ASP.NET Core 2.0 的 web project如何在Ubuntu 17.04平台上跑起來,

所以也將 ASP.NET Core 2.0 SDK一起裝在Ubuntu server 上,在實務上可以是由開發平台deploy到server端。

 

1、安裝dotnet core

a、Register the trusted Microsoft signature key

安裝ASP.NET Core前,先下載金鑰(Microsoft signature key),請依序在終端機執行以下指令

  • curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg
  • sudo mv microsoft.gpg /etc/apt/trusted.gpg.d/microsoft.gpg

然後添加套件庫來源,

以下指令適用在Ubuntu 17.04版,不同的版本號有不同的指令,

詳細請參考https://www.microsoft.com/net/core/#linuxubuntu

  • sudo sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/microsoft-ubuntu-zesty-prod zesty main" > /etc/apt/sources.list.d/dotnetdev.list'

 

b、Install .NET Core SDK

正式安裝ASP.NET Core SDK,請依序在終端機執行以下指令

  • sudo apt update
  • sudo apt upgrade
  • sudo apt install dotnet-sdk-2.0.0

 

2、安裝apache

為了將web project建立起來,當然也要裝上網頁伺服器,

本例是使用 Apache Http Server,你也可使用nginx。

請依序執行以下指令

  • sudo apt update
  • sudo apt upgrade
  • sudo apt install apache2
  • sudo systemctl restart apache2

 

二、建立一個web project

現在來利用終端機建立一個 web project

  • mkdir ~/aspnetcoreapp
  • cd ~/aspnetcoreapp
  • dotnet new razor

建立好之後可先執行起來

  • dotnet run

由於ASP.NET Core自帶的Kestrel網頁伺服器預設監聽port 5000,

所以請開啟瀏覽器前往 http://localhost:5000 或是 http://127.0.0.1:5000 看看頁面是否有問題。

沒問題後,執行以下指令建立發行版本

  • dotnet publish -c release

然後將publish資料夾裡面的程式移動到 var/www/aspnetcoreapp 資料夾裡,

以便將網站對外開放

  • sudo mkdir /var/www/aspnetcoreapp
  • sudo mv ~/aspnetcoreapp/bin/release/netcoreapp2.0/publish/* /var/www/aspnetcoreapp

 

三、設定 reverse proxy

由於該dotnet core project跑起來預設的Url路徑是 http://127.0.0.1:5000 ,

所以我要設定 Virtual Host 將外部經由 80 port 的連線導向 http://127.0.0.1:5000

執行以下指令新增 aspnetcoreapp.conf 檔

  • sudo nano /etc/apache2/sites-available/aspnetcoreapp.conf

請寫入以下內容並存檔

<VirtualHost *:80>
    DocumentRoot /var/www/aspnetcoreapp
    ProxyPreserveHost On
    ProxyPass / http://127.0.0.1:5000/
    ProxyPassReverse / http://127.0.0.1:5000/
    ErrorLog /var/log/apache2/aspnetcoreapp.log
    CustomLog /var/log/apache2/aspnetcoreapp.log common
</VirtualHost>

註冊 aspnetcoreapp.conf 設定檔

  • sudo a2ensite aspnetcoreapp.conf

由於打算使用新建立的aspnetcoreapp project來做為唯一對外的網站,

而原本預設的網站,之預設的 000-default.conf 設定檔,為避免衝突,我決定註銷它。

  • sudo a2dissite 000-default.conf

都設定好之後,做一下reload

  • sudo systemctl reload apache2

別忘了開啟proxy、proxy_http模組,否則會出現相關怪怪的proxy錯誤事件

  • sudo a2enmod proxy
  • sudo a2enmod proxy_http

最後記得restart apache吧

  • sudo systemctl restart apache2

 

Tips:

看過有人註冊了一堆proxy模組,各取所需,列出來參考一下。

  • sudo a2enmod proxy
  • sudo a2enmod proxy_http
  • sudo a2enmod proxy_ajp
  • sudo a2enmod rewrite
  • sudo a2enmod deflate
  • sudo a2enmod headers
  • sudo a2enmod proxy_balancer
  • sudo a2enmod proxy_connect
  • sudo a2enmod proxy_html

 

四、Configure our ASP.NET Core application to run as a service

執行以下指令新增 aspnetcoreapp.service 檔

  • sudo nano /etc/systemd/system/aspnetcoreapp.service

請寫入以下內容並存檔

[Unit]
    Description=Example .NET Web API Application running on ubuntu

    [Service]
    WorkingDirectory=/var/www/aspnetcoreapp
    ExecStart=/usr/bin/dotnet /var/www/aspnetcoreapp/aspnetcoreapp.dll
    Restart=always
    # Restart service after 10 seconds if dotnet service crashes
    RestartSec=10
    SyslogIdentifier=dotnet-example
    Environment=ASPNETCORE_ENVIRONMENT=Production

    [Install]
    WantedBy=multi-user.target

開啟 aspnetcoreapp.service 服務

  • sudo systemctl enable aspnetcoreapp.service

啟動 aspnetcoreapp.service 服務

  • sudo systemctl start aspnetcoreapp.service

可以利用以下兩指令檢視服務啟動有沒有問題

  • sudo systemctl status aspnetcoreapp.service
  • sudo journalctl -fu aspnetcoreapp.service

再restart apache,然後測試看看對外網站是否已建立完成

  • sudo service apache2 restart

 

參考資料:

.NET Core command-line interface (CLI) tools

http://httpd.apache.org/

透過 systemctl 管理服務

Systemd 入门教程:命令篇

systemd.index — List all manpages from the systemd project

Set up a hosting environment for ASP.NET Core on Linux with Apache, and deploy to it

Publishing and running your ASP.NET Core project on Linux

Run & Deploy ASP.NET Core Web Applications on Ubuntu Linux (AWS EC2) behind Apache Server

使用 supervisor 管理进程

Ubuntu based GNU/Linux 上的防火牆 (ufw) 基本設定