Linux で ASP.NET Core をホスティングするための完全ガイド
Kestrel と Nginx を使用して Linux 上で ASP.NET Core アプリケーションを安全かつ最適に展開するための手順と重要なヒント

Linux で ASP.NET Core をホスティングするための完全ガイド

この記事では、Linux上でASP.NET Coreアプリケーションをホストする方法を説明します。.NETランタイムのインストール方法、KestrelとNginxの設定方法、そしてセキュリティ、最適化、スケーラビリティを考慮する方法について学びます。.
0 株式
0
0
0
0

 

Linux で ASP.NET Core をホストする - 理由とタイミング

ASP.NET Core は *Kestrel* を搭載した Linux 上で適切に動作し、ホスティングにこのプラットフォームを選択すると、次のような重要な利点が得られます。 コスト削減、オープンソースツールとの互換性、コンテナ化の容易さ このオプションは、Web サイト、API、バックグラウンド サービス、ゲームや取引などの遅延の影響を受けやすいアプリケーションに適しています。.

 

前提条件とサーバーの選択

 

Linuxディストリビューションと.NETバージョン

推奨されるディストリビューションは次のとおりです: Ubuntu LTS (20.04/22.04)デビアン (11/12)、 そして CentOS Stream または Rocky/Alma これらは本番環境向けです。厳格なセキュリティが求められる環境では RHEL 公式の Microsoft ランタイムと SDK (例: .NET 6/7/8) を使用します。.

 

ハードウェアリソースとサービスタイプ

ウェブサイトや軽量APIの場合、通常は 1~2 vCPU、1~4GB RAM、NVMe SSD もう十分です。ビジネスや重いアプリケーションに 4 個以上の vCPU と 8 GB 以上の RAM そして高速ネットワークが必要です。.

低pingでの取引とゲーム用 取引所または地域のデータセンターに近いローカライズされたVPSを選択するのが最適です。当社は世界中に85以上の拠点を保有しており、最寄りのデータセンターを簡単にお選びいただけます。.

AI/推論やレンダリングにはグラフィック サーバー (GPU) を使用します。当社は、高速ネットワークを備えた GPU クラウド サービスとコンピューティング サーバーを提供します。.

攻撃から保護するには、DDoS 対策サーバーと、BGP および CDN を備えたネットワークを検討してください。.

 

基本的なインストールとセットアップ(.NET ランタイム)— Ubuntu の例

公式の Microsoft ランタイムをインストールするには、リポジトリを追加してからランタイムをインストールします。

sudo apt update
wget https://packages.microsoft.com/config/ubuntu/22.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
sudo apt update
sudo apt install -y dotnet-runtime-7.0

次に、安全なサービス ユーザーとアプリケーション ディレクトリを作成します。

sudo useradd -r -s /usr/sbin/nologin aspnetuser
sudo mkdir -p /var/www/myapp
sudo chown aspnetuser:aspnetuser /var/www/myapp

 

コンテナレスデプロイメント — Kestrel + systemd + Nginx

 

アプリケーションを公開し、systemdを構成する

アプリケーションをビルドし、アプリ ディレクトリ パスに公開します。

dotnet publish -c Release -o /var/www/myapp

systemdのユニットファイルの例 /etc/systemd/system/myapp.service 場所:

[Unit]
Description=My ASP.NET Core App
After=network.target

[Service]
WorkingDirectory=/var/www/myapp
ExecStart=/usr/bin/dotnet /var/www/myapp/MyApp.dll
Restart=always
# Safe User/Group
User=aspnetuser
Group=aspnetuser
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false

[Install]
WantedBy=multi-user.target

サービスの有効化と実行:

sudo systemctl daemon-reload
sudo systemctl enable myapp
sudo systemctl start myapp
sudo journalctl -u myapp -f

 

Nginx をリバース プロキシとして構成する (SSL 終了)

Nginx と Certbot をインストールします。

sudo apt install -y nginx certbot python3-certbot-nginx

Nginxのサンプル設定 /etc/nginx/sites-available/myapp 場所:

server {
    listen 80;
    server_name example.com www.example.com;

    location / {
        proxy_pass         http://127.0.0.1:5000;
        proxy_http_version 1.1;
        proxy_set_header   Upgrade $http_upgrade;
        proxy_set_header   Connection keep-alive;
        proxy_set_header   Host $host;
        proxy_cache_bypass $http_upgrade;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Proto $scheme;
    }
}

無料のSSL証明書を入手してください:

sudo certbot --nginx -d example.com -d www.example.com

 

DockerとDocker Composeを使ったデプロイ

小さく最適化されたイメージを生成するためのマルチステップ Dockerfile の例:

FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build
WORKDIR /src
COPY . .
RUN dotnet publish -c Release -o /app

FROM mcr.microsoft.com/dotnet/aspnet:7.0 AS runtime
WORKDIR /app
COPY --from=build /app .
ENTRYPOINT ["dotnet", "MyApp.dll"]

サンプル docker-compose.yml (nginx-proxy または Traefik も使用できます):

version: '3.8'
services:
  web:
    build: .
    ports:
      - "5000"
    environment:
      - ASPNETCORE_ENVIRONMENT=Production
  nginx:
    image: nginx:stable
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx/conf.d:/etc/nginx/conf.d
      - ./certs:/etc/letsencrypt

CI/CDの場合は、GitLab CIまたはGitHub Actionsを使用してイメージをビルド、テスト、レジストリへのデプロイを行い、サーバーにプルします。弊社では、プライベートチーム向けにGitLabホスティングを提供しています。.

 

セキュリティとベストプラクティス

 

ネットワークとファイアウォール

必要なポート (80/443) のみを開き、SSH アクセスを必要なアドレスに制限します。.

sudo ufw allow 80,443/tcp
sudo ufw allow from 203.0.113.0/24 to any port 22 proto tcp  # مثال
sudo ufw enable

 

TLSと強化

 

攻撃と防御

fail2banを使用してSSHとNginxのレート制限を保護します。機密性の高いアプリケーションにはアンチDDoSサーバーを使用してください。弊社では、BGP対応のアンチDDoSおよびCDNパッケージを提供しています。.

 

SELinux / AppArmor

SELinux が有効になっているディストリビューション(RHEL/CentOS)では、ファイルとポートのコンテキストが正しく設定されていることを確認してください。その他のディストリビューションでは、プロファイリングに AppArmor を使用してください。永続的なシャットダウンは推奨されません。.

 

パフォーマンスの最適化と監視

 

Kestrelのチューニングと接続設定

リバースプロキシ層ではHTTP/2とKeep-Aliveを使用してください。Kestrelの制限事項を考慮してください。 アプリ設定.json 設定します (例: Limits.MaxConcurrentConnections、MaxRequestBodySize)。.

レスポンス圧縮 (Brotli/Gzip) を使用してレスポンスを圧縮します。

services.AddResponseCompression(options => { options.EnableForHttps = true; });

 

キャッシュと会議

分散キャッシュとセッション状態にはRedisを使用し、水平スケーリングを実現します。静的コンテンツにはCDNを使用し、サーバー負荷を軽減します。.

 

監視とログ記録

構造化ログをSerilogまたはMicrosoft.Extensions.Loggingと組み合わせて、ELK/Graylogに送信します。メトリクスには、dotnet-counters、Prometheusエクスポーター(dotnet_exporter)、Grafanaを使用します。トレースにはApplication InsightsなどのAPMが便利です。.

 

場所を比較し、用途に応じて適切な場所を選択する

取引には低いping値と安定性が重要です。取引所やプライベートネットワークに近い場所を選びましょう。ゲームには、高速ネットワークを備えた地域サーバーやゲーム用VPSがおすすめです。.

AIとレンダリングには、NVMeと高帯域幅を備えたGPUクラウドとコンピューティングサーバーをご利用ください。ウェブサイトとアプリについては、主要ユーザーに近いロケーションと、CDNとマルチリージョンの組み合わせによる可用性向上を推奨します。当社は、世界85以上の拠点とCDN、BGPネットワークを提供しています。.

 

高いスケーラビリティと可用性

レイヤー7ロードバランサ(Nginx/HAProxy/クラウドロードバランサ)またはデータセンターロードバランサを使用します。セッションはRedisまたは共有データベースに保存します。コンテナとVMを水平展開して自動スケーリングを行い、KubernetesではHPAを使用します。グローバルトラフィック分散にはBGPエニーキャストとCDNを使用します。.

 

一般的なバグ修正

よくあるケースと検査方法:

  • 502 Bad Gateway: systemd をチェックしてください journalctl -u myapp、ローカルポート ss -tlnp およびファイルの権限。.
  • SSLの問題: チェック certbot 更新、cert フォルダーにアクセスし、Nginx で正しく参照します。.
  • ファイル/権限エラー: サービス ユーザーの正しい所有者/グループを確認してください。.
  • 予期しない速度低下: dotnet-counters とプロファイラーを使用して、CPU または GC のボトルネックを見つけます。.

 

制作のための実践的なヒント(DevOps)

  • マルチステージ Docker ビルドを使用してイメージを縮小します。.
  • シークレットをシークレット マネージャー (Vault、GitLab CI シークレット) に保存します。.
  • ヘルスエンドポイントを記述し、オーケストレーターの稼働状態と準備状況を構成します。.
  • GitLab CI または GitHub Actions を使用してビルド/テスト/デプロイの自動化を実行します。.

 

概要とサービス提供

Linux 上で ASP.NET Core をホストすることは、Web アプリケーションや API アプリケーションにとって **スケーラブルで安全、かつ拡張性に優れた** オプションです。高いパフォーマンスと可用性を実現するには、Kestrel + Nginx またはオーケストレーターを備えたコンテナにアプリをデプロイし、TLS とセキュリティ強化を慎重に考慮し、状態管理には Redis/DB を使用し、静的コンテンツには CDN を使用することをお勧めします。.

当社は、世界 85 か所以上の拠点、GPU クラウド、コンピューティングおよび専用サーバー、トレーディングおよびゲーム用 VPS、DDoS 対策インフラストラクチャ、GitLab ホスティング、CDN、BGP ネットワークを備え、さまざまなプランで ASP.NET Core アプリケーション向けのホスティングおよびサポート ソリューションを提供しています。.

あなたも気に入るかもしれない