ホスティング.NGinXとのネットコアアプリをしましょう


我々は、シンプルなビルド.NETコアアプリケーションは、我々のイベント登録の支払い処理を処理します.それは私たちのローカルマシン上のチャンピオンのように動作しますが、誰もそれにアクセスすることができない場合はそれは私たちに良いことをしないでください.
今日、我々はそれを一般に利用できるようにします.
私は主にこの便利な記事で始まったMicrosoft Docs . しかし、私は私が働かなければならなかったいくつかの問題を見つけました.

アプリへのクイックアップデート
nginxを使うと、プロキシを逆にする必要がありますので、これを処理するために少しのコードをプロジェクトに追加する必要があります.インstartup.cs , 私たちはConfigure メソッド.
app.UseForwardedHeaders(new ForwardedHeadersOptions
    {
        ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
    });
使用する文を追加する必要があります.
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.HttpOverrides;
これでサーバーを構築することができます.

サーバの設定
私は始めからLinode Ubuntu 18.04をインストールした“Nanode”サーバ.私のケースでは、このページは3ヶ月間利用できなくて、1トンのトラフィックを見ることができないので、小さいサイズとより小さいコスト(5ヵ月につき月)は本当に私がしようとしていることに合います.
あなたの通常のセットアップ(更新、アップグレード、安全なsshなど)を行ってくださいそれから、我々は我々が必要とする他の部分をインストールします.

DotNetのインストール
再び参照Microsofts Docs このために、私は簡潔にするために、コマンドを一緒に凝縮しました.
wget -q https://packages.microsoft.com/config/ubuntu/18.04/packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
sudo add-apt-repository universe
sudo apt-get install apt-transport-https
sudo apt-get update
sudo apt-get install dotnet-sdk-2.2

コピーコードと建物
どのように強烈なあなたがこれに行きたいかもしれないに応じて、完全なCIパイプラインを構築する必要があります.私の場合、私はどんな反復をするつもりでもないので、私はコードをscp サーバ上で実行した.
scp -r ~/path/to/directory ssh@server:~/appname
そのコマンド(あなたの情報が一度入力される)はあなたのマシンからSSHユーザーホームディレクトリのサーバーにフォルダ全体をコピーする必要があります.
サーバーにSSHとビルド/アプリケーションを発行します.
dotnet build
dotnet publish --configuration Release
発行はすべてのフォルダに移動する必要がありますbin/Release/netcore2.2/ ディレクトリ.
一旦成功したら、シンボリックリンクを使って/var/www . それをする必要はありませんが、それは古い習慣です.
sudo ln -s ~/appname/bin/Release/netcore2.2/publish /var/www/appname
これはホームディレクトリのフォルダを/var/www/ ディレクトリは、もしあなたが修正を行う必要がある場合は、周りのものをコピーする心配はありません.

Certbotのインストールと設定
Certbotはかなりまっすぐ前方にあり、それは私が少し書いた美しいツールです.
まず、インストールapt .
sudo apt install -y certbot
一旦それがされるならば、我々は証明書を要求することができます.私は、使用を好むstandalone メソッド.
sudo certbot certonly --standalone -d yourdomain.com -d www.yourdomain.com
一旦それが終わるならば、あなたは走ることができなければなりませんsudo certbot certificate お使いのマシンの証明書の場所を参照してください.どこかにこれを保つのは重要です、我々は次のステップでそれを必要とします.

nginxのインストールと設定
私たちはコードを持っています、我々は証明書を持っています、現在、我々はちょうどそれがAdjust大衆に利用できるようにする必要があります.
まず、nginxをインストールします.
sudo apt install nginx
第二に、あなたのファイアウォールを介してアクセスできることを確認します.仮定しているufw , 許可を更新できます.
sudo ufw allow 'Nginx Full'
今、あなたのサーバーのIPアドレスに移動する場合は、“NGNXへようこそ”画面が表示されます.
サーバーにアクセスできることを確認したら、ドメインがIPであることを確認します.これはあなたのDNSプロバイダが何であるかに基づいて乱暴に変化するでしょうが、私はあなたを信じています.
ドメインで、我々は現在我々のサイトのためにNGinxをセットアップすることを取り扱うことができます.私はすべてのこの作品の方法の退屈な詳細を保存しますが、ここで我々がする必要があります.
ファイルを作成する/etc/nginx/sites-available/ :
sudo nano /etc/nginx/sites-available/yourdomain.conf
テキストエディタで、この設定でコピーします
server { 
    listen 80;
    server_name yourdomain.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443;
    server_name yourdomain.com;

    ssl_certificate           /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
    ssl_certificate_key       /etc/letsencrypt/live/yourdomain.com/privkey.pem;

    ssl on;
    ssl_session_cache  builtin:1000  shared:SSL:10m;
    ssl_protocols  TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
    ssl_prefer_server_ciphers on;

    gzip  on;
    gzip_http_version 1.1;
    gzip_vary on;
    gzip_comp_level 6;
    gzip_proxied any;
    gzip_types text/plain text/html text/css application/json application/javascript application/x-javascript text/javascript text/xml application/xml application/rss+xml application/atom+xml application/rdf+xml;
    gzip_buffers 16 8k;
    gzip_disable “MSIE [1-6].(?!.*SV1)”;

    access_log  /var/log/nginx/yourdomain .access.log;

location / {
    proxy_pass            https://localhost:5001;        
    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;
    } 
}
また、私はここで簡潔です、しかし、これは我々が要請をする必要があるすべてをしなければなりませんyourdomain.com , SSLに転送し、サーバー上で実行しているアプリケーションに接続します.
それを可能にするために、もう一つのシンボリックリンクを作り、次にNGinxを再起動します.
sudo ln -s /etc/nginx/sites-available/yourdomain.conf /etc/nginx/sites-enabled/yourdomain.conf
sudo systemctl restart nginx
すべてが動作していることを確認するには、我々自身でアプリを起動し、ブラウズを介してアクセスしようとします.
dotnet run /var/www/yourapp/yourapp.dll
この機能を確認した後、アプリケーションを閉じることができます.次のステップは自分でそれを行うようにすることです.

システムの設定
はい、いくつかの周りsystemd , しかし、それはまだ便利です.
クリエイトア.service アプリケーション用ファイル:
sudo nano /etc/systemd/system/yourapp.service
次の情報をファイルに追加します.
[Unit]
Description=Event Registration Example

[Service]
WorkingDirectory=/var/www/yourapp
ExecStart=/usr/bin/dotnet /var/www/yourapp/yourapp.dll
Restart=always
# Restart service after 10 seconds if the dotnet service crashes:
RestartSec=10
KillSignal=SIGINT
SyslogIdentifier=dotnet-example
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false

[Install]
WantedBy=multi-user.target
私がここでマイクロソフトDocから変更した唯一のものはUser=www-data ライン.限られたスコープユーザを持つのがベストプラクティスですが、私はrootとして走っているこのサービスを心配する必要はありませんでした.これはリダイレクト以外の何にも対応していない非臨界システムであるので、私は十分に安全であると思いました.
今、我々はシステムを介してサービスを有効にして起動することができます.
sudo systemctl enable yourapp.service
sudo systemctl start yourapp.service
sudo systemctl status yourapp.service
すべてが計画に行くならば、あなたは走っている地位を受けなければならなくて、あなたのページにアクセスすることができなければなりません.すべてのペアの形をしている場合は、まだログにアクセスすることができます.
sudo journalctl -fu yourapp.service
それだ!
これが助ける望み.これが最適化されたり、より安全に確保できる方法がたくさんあります.しかし、この単純な私はあまりにも汗をかいませんでした.それは数週間のために実行されており、我々が早期にアクセスを与えた人々から一握りの支払いを処理した.
私は若干の微妙なスタイル変更をしました、しかし、それはそれについてです.完璧に動作し、比較的簡単に前進行くことです.
一緒に乗るのおかげで!