ASP.NET Coreで作成したWebアプリケーションをCentOSにデプロイして公開するまでにやったこと まとめ
ASP.NET Coreで作成したWebアプリケーションをCentOSにデプロイして公開するまでにやったことのまとめになります。ざっとですが、なにかに書いておかないと忘れそうなので、設定時に使用したコマンドも含めて、メモ程度に残しておきます。
環境は CentOS 7、Nginx、MySQL5.7。
SELinuxは無効化している前提で行います。
目次
- yumのアップデート
- Nginxのインストール
- firewallの設定でhttpのポートを許可する
- dotnetランタイムのインストール
- MariaDBの削除
- MySQL5.7のインストール
- node.jsのインストール
- ASP.NET Coreプロジェクトの発行(開発マシン側の作業)
- zipファイルの解凍
- ASP.NET Coreアプリのサービス化
- Nginxにプロキシとして登録
- firewallの設定
- 最後に
yumのアップデート
yumのパッケージを最新にアップデート。
yum -y update
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
インストール、設定。
# インストール
yum install nginx
# 自動起動の設定
systemctl enable nginx
# サービス開始
systemctl start nginx
firewallの設定でhttpのポートを許可する
デフォルトはhttpのポートが開いてないのでfirewallの設定が必要。
# 現在のfirewallの設定確認
firewall-cmd --info-zone public
# サービス確認
firewall-cmd --get-services
# http(80)を許可
firewall-cmd --permanent --zone public --add-service http
# https(443)も許可する場合
firewall-cmd --permanent --zone public --add-service https
# 設定の反映
firewall-cmd --reload
http://[サーバーのIPアドレス]にアクセスして、「Welcome to nginx!」が表示されればOK。
dotnetランタイムのインストール
ASP.NET Coreアプリを動かすために必要なランタイムをインストール。
# RPMパッケージの更新
rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm
# yumのアップデート
yum update
# インストール
yum install libunwind libicu
yum install dotnet-runtime-2.0.7
MariaDBの削除
今回はMySQLを使うので、CentOS7にデフォルトで入っているMariaDBを削除。
# アンインストール
yum remove mariadb-libs
# 不要なディレクトリ削除
rm -rf /var/lib/mysql/
MySQL5.7のインストール
MySQL5.7のインストール
# インストール
yum localinstall http://dev.mysql.com/get/mysql57-community-release-el7-7.noarch.rpm
yum info mysql-community-server
yum install mysql-community-server
# 動作確認
mysqld --version
# 自動起動の設定
systemctl enable mysqld.service
# サービス開始
systemctl start mysqld.service
MySQL5.7の場合、rootのパスワードは自動生成されていて/var/log/mysqld.logに以下のような形で出力される。
2019-01-01T07:11:43.630076Z 1 [Note] A temporary password is generated for root@localhost: -r2ea5lAg1kd
インストール後の初期設定。
mysql_secure_installation
上記のコマンドを実行後、ログに出力されていた初期パスワードを入力して、パスワードを変更する。
続いて、設定ファイルの書き換え。
vi /etc/my.cnf
上記ファイルに以下の内容を追記する。
character-set-server = utf8
default_password_lifetime = 0
サービスの再起動。
systemctl restart mysqld.service
※ データベースやユーザーの作成はここでは割愛。
node.jsのインストール
node.jsのインストール
yum install epel-release
yum install nodejs npm
※ Webアプリケーションで使っていなければ不要...だったはず。記憶が曖昧ですが、ASP.NET CoreのAngularやReactベースのプロジェクトテンプレートを使用していた場合、必要だったと思います。
ASP.NET Coreプロジェクトの発行(開発マシン側の作業)
Visual Studioからプロジェクトの発行を行う。詳しくはこちらを参照。
発行で作成されたファイルは、ディレクトリごと、zipで圧縮してサーバーにアップロード。
zipファイルの解凍
デフォルトではzipファイルの解凍ができないので、zip用の解凍ソフトをインストールする。
# unzipのインストール(解凍用)
yum install unzip
# ついでにzipのインストール(圧縮用)
yum install zip
アップロードしたzipファイルを解凍。
# zipファイルの解凍
unzip example.zip
解凍したファイルはディレクトリ毎、/var/webappsに移動。ディレクトリはなければ作成。
以下、/var/webapps/example配下に発行されたファイルが格納されているものとして進める。
ASP.NET Coreアプリのサービス化
ASP.NET Coreアプリをサービスとして登録するため、サービスファイルを作成。
vi /etc/systemd/system/example.webapp.service
以下の内容を設定。
[Unit]
Description=example webapp
[Service]
WorkingDirectory=/var/webapps/example
ExecStart=/usr/bin/dotnet /var/webapps/example/example.dll
Restart=always
RestartSec=10
SyslogIdentifier=example
User=nginx
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false
[Install]
WantedBy=multi-user.target
保存後、以下のコマンドを実行。
# 自動起動の設定
systemctl enable example.webapp.service
# サービス開始
systemctl start example.webapp.service
Nginxにプロキシとして登録
設定ファイルの追加。
vi /etc/nginx/conf.d/example.conf
以下の内容を設定して保存。
server {
server_name http://example-webapp.com;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_max_temp_file_size 0;
location / {
proxy_pass http://localhost:8080;
}
}
Nginxの再起動。
nginx -s reload
firewallの設定
ASP.NET Coreアプリ用のポートを開放する。
# 設定
firewall-cmd --zone=public --add-port=8080/tcp --permanent
# 設定の反映
firewall-cmd --reload
# 設定の確認
firewall-cmd --list-all
[2020年4月27日 追記]
すいません。今回対応した内容ではfirewallの設定は不要でした。
最後に
設定後、ブラウザでアクセスしてASP.NET Coreで作成したWebアプリケーションが表示されれば完了です。
メモとして残していたものを忘れない様に書き写しただけなので、もしかしたら足りないものがあるかもしれません。こんなことやらないといけないんだなぁ、くらいの参考程度でお願いします。