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
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