しばやん雑記

Azure とメイドさんが大好きなフリーランスのプログラマーのブログ

ロリポップ!マネージドクラウドで ASP.NET Core 2.2 アプリを動かしてみる

タイトルの通りですが .NET Core に対応したということだったので、実際に契約して試してみました。

新しくプロジェクトを作成する画面に .NET Core が出てくるので、それを選んで情報を入力して行けばサクサク作れます。関係ないですが、標準で Let's Encrypt が使えるのは便利ですね。

f:id:shiba-yan:20190602145014p:plain

バージョンは今のところ 1 つだけですが、今後アップデートの度に提供されていくのでしょう。

10 日間は無料で使えるらしいです。コンテナの起動回数で課金されるのはちょっと面白いです。

f:id:shiba-yan:20190602145023p:plain

.NET Core のコンテナと SSH を受けるコンテナは別です。この辺りの構成は App Service で言うところの Kudu に相当する部分という感じです。Linux 版だと SSH 使えますし。

初めて .NET Core が標準でサポートされた日本発サービスを見た気がします。

f:id:shiba-yan:20190602145033p:plain

.NET Core が動くコンテナにアプリケーションを配置する方法は SSH か SFTP だけのようなので、とりあえずローカルでビルドした ASP.NET Core アプリケーションを配置しました。

後は起動コマンドを dotnet ***.dll とでも変更すれば良いと思いましたが、カレントディレクトリを dll がある場所に変更しないと静的コンテンツの配布などで問題が出るので、スクリプトを書きました。

cd /var/app/aspnetcore
dotnet ./WebApplication32.dll

適当にファイル名を付けて保存して、起動コマンドでスクリプトを呼び出すようにします。

f:id:shiba-yan:20190602145140p:plain

本来ならここでカレントディレクトリの変更まで書きたかったのですが、いろんなパターンを試してもエラーになってしまったので諦めた経緯があります。

追記 : カレントディレクトリ問題への対応

ASP.NET Core の ContentRoot は環境変数 ASPNETCORE_CONTENTROOT や dotnet-cli に--contentRoot を渡すことでオーバーライド可能だった*1ので、大幅にシンプルなコマンドで扱えるようになりました。

dotnet /var/app/aspnetcore/WebApplication32.dll --contentRoot /var/app/aspnetcore

環境変数で設定する場合は ASPNETCORE_ が prefix として必要ですが、それ以外の方法で渡す場合は必要ないです。ドキュメントは環境変数しか書いてなかったのでコードを読んで確認しました。

これで ASP.NET Core アプリケーションを動かすことが出来ました。

f:id:shiba-yan:20190602151800p:plain

デプロイの自動化が少し難しそうですが、Azure DevOps などを使って SSH 経由で発行してあげるしかないと思われます。Azure DevOps は SSH でファイルをコピーするタスクがあるので比較的簡単でしょう。

現実的には Git を使ったデプロイを最低限使いたいところです。

Git でのビルドとデプロイ(上手く動かなかった 解決済み)

Ruby や Node.js は Git を使ってデプロイが出来るようだったので、ビルドスクリプトをカスタマイズすれば ASP.NET Core も同じようにデプロイ出来るのではないかと思って試しました。

結果としては謎のエラーで失敗しましたが、ビルドスクリプトの実行が出来れば上手くいくはずです。

Git を使った場合には current が最新コミットへのシンボリックリンクになるので、その中にあるプロジェクトに対して発行を行ってあげれば良いはずです。単に dotnet publish を実行するだけです。

f:id:shiba-yan:20190602155856p:plain

色々調べたところ user_command.sh というファイルを用意すれば、ビルドスクリプトの置き換えが出来るようだったので、以下のように書きました。

#!/bin/sh

dotnet publish -c Release -o ../publish

これで git push を実行すると以下のようなエラーが出てしまいました。空のファイルでも同じエラーだったので、スクリプトで行っている処理は関係ないようです。ちょっと残念。

f:id:shiba-yan:20190602160429p:plain

発行が上手くいけば、ビルドされたアプリケーションは常に /var/app/current/publish に配置されるので、後は起動スクリプトが指す場所を変えれば Git デプロイが出来そうでした。

恐らく大した問題ではないと思うので、いずれエラーが修正されたり Git デプロイが公式にサポートされるのではないかと思っています。安く使える選択肢が広がるのは良いことですね。

追記 : git push でのデプロイが可能に

上の件を問合せしてみたら、素早く修正してくれたようで git push で ASP.NET Core アプリケーションのビルドとデプロイが行えるようになりました。user_command.sh と起動コマンドは以下のように用意します。

#!/bin/sh

dotnet publish -c Release -o ../publish
dotnet /var/app/current/publish/***.dll --contentRoot /var/app/current/publish

アセット系のビルドが必要な場合は user_command.sh に追加してください。

これで git push を実行したタイミングで dotnet publish が実行されて、ビルド結果が publish ディレクトリに出力されます。ビルドログも流れてくるので分かりやすいです。

f:id:shiba-yan:20190605201607p:plain

ページにアクセスすると、もちろん git でコミットした内容が反映されています。

f:id:shiba-yan:20190605201712p:plain

これでデプロイまで問題なく行えるようになったので、App Service だと価格が高くてちょっと厳しいと思っていた方でも安く使えるのではないでしょうか。