Linux に .NET 6 MVC をデプロイする

まず Linux サーバー上にフォルダを作成します。例えば「myweb」という名前にします。フォルダのアクセス権を適切に設定することを忘れないでください。標準的な既定値は 0755 です。0755rwxr-xr-x の権限に対応します。

その他のユーザー:読み取りと実行のみ許可 (r-x)

所有者(自身のユーザーアカウント):読み取り、書き込み、実行のすべての権限を保有 (rwx)

グループメンバー:読み取りと実行のみ許可 (r-x)

次に Visual Studio からプロジェクトを発行します。ビルド構成を Release に切り替えてコンパイルを実行した後、プロジェクトを右クリックして「発行」を選択してください。発行が完了したら、FTP クライアントを使って発行フォルダ内のファイル一式を、先ほど作成した myweb ディレクトリへコピーします。

cd /usr/myweb

ファイルの移行が完了したら、以下のコマンドを実行してアプリをバックグラウンドで起動します。バックグラウンド実行にすると、リモート Linux の SSH ウィンドウを閉じてもプログラムは稼働し続けます。

sudo nohup dotnet yourprogramname.dll &Code language: CSS (css)

コマンド末尾の & はバックグラウンド実行に欠かせない記号です。これを省略するとフォアグラウンドで動作し、ターミナルを閉じたり Ctrl + C を押したりすると、プログラムが即座に停止します。

実際の使用例はこちらです:sudo nohup dotnet WebSite.dll &

追加の重要な注意事項

発行作業の前にポート設定を行ってください。.NET MVC プロジェクト内の appsettings.json ファイルを開きます。

以下の設定をテンプレートとして追加してください。

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "AllowedHosts": "*",
  "Kestrel": {
    "Endpoints": {
      "Http": {
        "Url": "http://0.0.0.0:8080"
      }
    }
  }
}Code language: JSON / JSON with Comments (json)

この設定では 8080 番ポートで任意の IP アドレスからの接続を受け入れます。Nginx をリバースプロキシとして活用し、1 台の Linux サーバーに複数のドメインをホストすることも可能です。

Nginx をリバースプロキシ専用で使用する場合は、ファイアウォールでポートを開放する必要はなく、サービスをローカルアドレスに限定してください。設定例は以下の通りです。

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "AllowedHosts": "*",
  "Kestrel": {
    "Endpoints": {
      "Http": {
        "Url": "http://127.0.0.1:8080"
      }
    }
  }
}Code language: JSON / JSON with Comments (json)

この設定を適用すると、アプリはローカルからのリクエストのみ受け付け、外部からの直接接続をすべて遮断します。

今回の目標は、abc.com/hello という URL からこのアプリにアクセスすることです。

続いて sudo nohup dotnet WebSite.dll & を実行し、アプリを起動します。

次のコマンドでアプリが正常に稼働しているか確認できます:ps -aux | grep WebSite.dll

対応するプロセスが表示されれば、サービスの起動に成功しています。

Nginx リバースプロキシの設定(プロキシ機能が不要な場合はこのセクションを飛ばしてください)

既に Nginx をインストールしている場合、メイン設定ファイルは /etc/nginx/nginx.conf に存在します。

/etc/nginx/sites-available/default にあるサイト設定ファイルを編集します。

server {
	listen 80 default_server;
	listen [::]:80 default_server;

	root /var/web/xxxx;
	index index.html index.htm index.nginx-debian.html;
	server_name _;

	# メインサイト
	location / {
		try_files $uri $uri/ =404;
	}

	# ✅ 重要:/hello へのアクセスを .NET へ転送
	location /hello {
		proxy_pass http://127.0.0.1:8080;
		proxy_http_version 1.1;
		proxy_set_header Host $host;
		proxy_set_header X-Real-IP $remote_addr;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		proxy_set_header X-Forwarded-Proto $scheme;
	}
}Code language: PHP (php)

変更を保存したら Nginx を再起動します。

sudo nginx -t
sudo systemctl restart nginx

次に .NET MVC アプリを再起動します。

まず ps -aux | grep WebSite.dll で実行中のプロセスを検索し、sudo の行の先頭に表示される PID 番号を控えてください。

この PID を使用して、現在稼働中の .NET MVC インスタンスを停止させます。

以下のコマンドでサービスを再起動します:sudo nohup dotnet 你的项目.dll –urls http://127.0.0.1:8080 > /dev/null 2>&1 &

ここから全体の動作確認を行います。

Nginx を再起動

次のコマンドを実行してください。

bash

コマンドを入力:

sudo systemctl restart nginx

.NET が 8080 ポートで待ち受け

以下のコマンドで .NET サービスの稼働状況を確認します。

bash

コマンドを入力:

curl http://127.0.0.1:8080
Code language: JavaScript (javascript)

ターミナルに生の HTML コンテンツが表示されれば、正常に動作している証拠です。

カテゴリー: .NET

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です