さくらVPSにインストールしているDebian9に ASP.Net Core 3ランタイムをインストールし、
Windows10のVisualStudio2019環境のC#で作成したRESTful APIサーバをデプロイする。Apacheのリバースプロキシ設定を行い、その後疎通確認を行う。
サーバ環境
- OS: Debian9
- Apache2インストール済み
- Microsoftのレポジトリは登録済み
ASP.Net Core 3.1ランタイムをインストール
以下のコマンドを実行する。
sudo apt-get install aspnetcore-runtime-3.1
Apache2で ASP.Net Core のアプリの公開準備
今回では/var/www/netcore/
以下にアプリケーションを配置する。
VisualStudioでプロジェクトを発行
プロジェクトを右クリックし、”発行”をクリックする。
今回はDebianのApacheの公開フォルダに展開するので、”フォルダー”を選択する。
展開場所はデフォルトのままで、”完了”をクリック。初めて設定したのでまだ発行はされず、プロファイル設定が生成されたのみである。
画面右上の”発行”をクリックして発行を行う。
こんな感じになれば成功。さっそく、発行したフォルダをサーバにアップする。
WinSCPを使ってbin\Release\netcoreapp3.1\publish\の中身全部をDebianの/var/www/netcore/にコピーする
アプリ起動
以下のコマンドを実行する。
dotnet アプリ名.dll
こんな感じになっていれば成功。
Apacheリバースプロキシ設定
初めにプロキシモジュールがApacheで有効化されているか確認する。
sudo /usr/sbin/apachectl -M | grep proxy
以下のように表示されていたらリバースプロキシに必要な機能が有効化されている。
proxy_module (shared)
proxy_balancer_module (shared)
proxy_http_module (shared)
上記表示がなければ以下のコマンドを実行して有効化する。
sudo a2enmod proxy_http
sudo a2enmod proxy_balancer
モジュール有効化後に、apache2の設定を行っていく。設定ファイル/etc/apache2/sites-available/000-default.confに以下を追加する。
<VirtualHost *:80>
ServerName nukomochi.work
ProxyPreserveHost On
ProxyPass /udonapi http://127.0.0.1:5000
ProxyPassReverse /udonapi http://127.0.0.1:5000
ServerAlias *.nukomochi.work
ErrorLog ${APACHE_LOG_DIR}udonapi-error.log
CustomLog ${APACHE_LOG_DIR}udonapi-access.log common
</VirtualHost>
これで、http://nukomochi.work/udonapi へリクエストした場合、http://127.0.0.1:5000へリクエストが飛ばされ、ASP.NET Coreサーバがリクエストを処理する。設定を保存したらapache2サービスを再起動する。
sudo service apache2 restart
疎通確認
別のターミナルを開いてcurl localhost:5000
を実行すると以下のような警告が発生した。
warn: Microsoft.AspNetCore.HttpsPolicy.HttpsRedirectionMiddleware[3]
Failed to determine the https port for redirect.
どうやらASP.Net側のコードに問題があるらしく、公式サイトによると、HTTPS設定をしていない状態にもかかわらず、HTTPSを使用するようなコードになっているようだったので、以下のようにapp.UseHttpsRedirection();をコメントアウトした。
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
//app.UseHttpsRedirection();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
その後正常に稼働したので、稼働確認終了。
Debianのサービス登録を行う記事はこちら。