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/myappsystemdのユニットファイルの例 /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-nginxNginxのサンプル設定 /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/letsencryptCI/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 アプリケーション向けのホスティングおよびサポート ソリューションを提供しています。.









