2019.3.22
2020.4.27

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アプリケーションが表示されれば完了です。

メモとして残していたものを忘れない様に書き写しただけなので、もしかしたら足りないものがあるかもしれません。こんなことやらないといけないんだなぁ、くらいの参考程度でお願いします。

ASP.NET Core】関連記事