.NET Core ランタイムのインストール
まず、CentOS7にASP.NET Coreで作成したサイトを動かすためのランタイムをインストールします。
プロダクトフィードの追加
rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm
.NET SDKのインストール
yum update
yum install libunwind libicu
yum install dotnet-runtime-2.0.7
MariaDBの削除
今回はDBにMySQLを使うので、CentOS7にデフォルトでインストールされているMariaDBを削除します。
yum remove mariadb-libs
rm -rf /var/lib/mysql/
MySQLのインストール、サービスの有効化・起動
MySQL5.7のインストール
yum install http://dev.mysql.com/get/mysql57-community-release-el7-7.noarch.rpm
yum install mysql-community-server
サービスの有効化、起動
# サービスの有効化
systemctl enable mysqld.service
# サービスの開始
systemctl start mysqld.service
初期設定
mysql_secure_installation
基本的にはデフォルトのままインストールでOK。パスワードはポリシーが厳しくなっているので注意。
デフォルトの状態ではパスワードの有効期限が360日間なので、「/etc/my.cnf」を開いて
vi /etc/my.cnf
以下の設定を末尾に追加します。
character-set-server = utf8
default_password_lifetime = 0
追加したらサービスを再起動します。
systemctl restart mysqld.service
あとは必要に応じて、DBやユーザー、テーブルの作成を行ってください。ここでは省略します。
プロジェクトの発行
サーバに配置するファイルはプロジェクトを右クリックして、メニューの中の「発行」を選択します。
フォルダーを選択して「発行」を開始。
発行が終わると出力先のフォルダーに以下のようなファイルが出力されます。
上記のファイルをフォルダごと圧縮したら、サーバ(CentOS7)へアップロードします。
発行されたdllの配置、動作確認
CentOS7にアップロードしたファイルを解凍して、動作確認を行います。
解凍されたファイルの中にある「プロジェクト名.dll」のファイル(WebApplication14.dll)を実行します。
dotnet WebApplication14.dll
問題なければ、デフォルトのポート番号「5000」でサイトが立ち上がりますが、私の場合、以下のエラーが出て失敗しました。
Error:
An assembly specified in the application dependencies manifest (WebApplication14.deps.json) was not found:
package: 'Microsoft.ApplicationInsights.AspNetCore', version: '2.1.1'
path: 'lib/netstandard1.6/Microsoft.ApplicationInsights.AspNetCore.dll'
This assembly was expected to be in the local runtime store as the application was published using the following target manifest files:
aspnetcore-store-2.0.0-linux-x64.xml;aspnetcore-store-2.0.0-osx-x64.xml;aspnetcore-store-2.0.0-win7-x64.xml;aspnetcore-store-2.0.0-win7-x86.xml
マニフェストファイルの不備が原因のようですが、どう直せばいいのかよく分からなかったので、こちら(An assembly specified in the application dependencies manifest (RhWeb.deps.json) was not found · Issue #13542 · dotnet/coreclr · GitHub)に書いてあった方法を試してみたら解決しました。
方法は、ソリューションエクスプローラーからプロジェクトを右クリックして、プロジェクト名.csprojを編集するを選択して、以下の内容を追記します。
<PropertyGroup>
<PublishWithAspNetCoreTargetManifest>false</PublishWithAspNetCoreTargetManifest>
</PropertyGroup>
追記したら、もう一度プロジェクトの発行を行って、CentOS7上のファイルを置き換えます。
通常は上記の対応だけで問題ないかと思いますが、私の場合、AngularやReactベースのプロジェクトテンプレートを利用していたものについては、さらにサーバにnode.jsのインストールが必要でした。
yum install epel-release
yum install nodejs npm
.NET Coreサイトのサービス化
今のままではコマンドラインで実行した時しかサイトが立ち上がらないので、これをサービス化します。
サービス化は、まずサービス登録用のファイルを新しく作ります。
vi /etc/systemd/system/WebApplication14-webapp.service
ファイルの内容は以下の通り。
[Unit]
Description=WebApplication14 .NET Web API App running on CentOS7
[Service]
WorkingDirectory=/var/aspnetcore/WebApplication14
ExecStart=/usr/bin/dotnet /var/aspnetcore/WebApplication14/WebApplication14.dll
Restart=always
RestartSec=10
SyslogIdentifier=dotnet-example
User=nginx
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false
[Install]
WantedBy=multi-user.target
ディレクトリやユーザーといった情報は、環境に合わせて設定します。
ファイル保存したら、サービスを有効化・開始します。
# サービスの有効化
systemctl enable WebApplication14-webapp.service
# サービスの開始
systemctl start WebApplication14-webapp.service
Nginx 搭載の Linux で ASP.NET Core をホストする | Microsoft Docs
Nginxのインストール
ここまで来たらあとすこし。Nginxをインストール・設定します。
リポジトリの設定
vi /etc/yum.repos.d/nginx.repo
ファイルの内容は以下の通り。
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/mainline/centos/7/$basearch/
gpgcheck=0
enabled=1
Nginxをインストール
yum install nginx
Nginxも同様にサービスの有効化・開始を行います。
# サービスの有効化
systemctl enable nginx
# サービスの開始
systemctl start nginx
この時点でブラウザからIP指定でアクセスすると、Nginxのデフォルトページが表示されます。
続いて、プロキシの設定
vi /etc/nginx/conf.d/server.conf
ファイルの内容は以下の通り。
server{
server_name 192.168.0.100;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
location / {
proxy_pass http://localhost:5000;
}
}
server_nameやproxy_passは環境に合わせて設定してください。
最後にサービスを再起動します。
systemctl restart nginx
サイトにアクセスして、ASP.NET Coreのサイトが表示されれば完了です。
CentOS7 に nginx導入
最後に
実際に稼働させる場合は、他にも色々と設定が必要ですが、上記の手順でとりあえずは動作すると思います。
また、最初は特定のサブディレクトリにアクセスされたらASP.NET Coreのサイトを表示しようとしましたが、サブディレクトリとした場合、どうもちゃんと動作しなかったので、諦めました。httpsの対応が面倒だったので避けたかったのですが、素直にサブドメインで対応したいと思います。