Nuxt完全な静的サイトをDigitalseaで配備する方法


このポストでは、私はどのようにDigalalOceanでNuxtの完全な静的サイトを公開することができるドロップダウンを構成している良いパフォーマンスを教えてください.

アルバシルヴェンテ💃🏼

こんにちは、今週、我々はプロジェクトのためのprod構成についてあなたに話したいです.✨まだ多くのことがあり、改善するが、私は私たちの完全な静的サイトを展開する方法については、このガイドであなたを残したかった💜 dawntraoz.com/blog/how-to-de…
午後20時40分

開始前


まだDigitalOceanを知らないあなたのそれらのために、それは複数のコンピュータで同時に実行するアプリケーションを展開して、スケールするのを助ける開発者雲サービスを提供します.
あなたは、私がポストを通してWord液滴に言及するのを見ます.Digitaloceanでは、dropletsは、仮想化されたハードウェアの上で動く柔軟なLinuxベースの仮想機械(VMS)です.それで、あなたがつくる各々の水滴は、あなたが使うことができる新しいサーバーです.
提供される液滴計画の異なる種類があります、しかし、我々は我々のホスティングニーズに関して多くの自由と柔軟性を提供する標準的な液滴を使うつもりです.しかし、最初に、私はあなたがother droplets plansを見て、あなたのプロジェクトに最適なものを参照してくださいすることをお勧めします.

If you don't have an account yet, you can register here: https://cloud.digitalocean.com/registrations/new!


ステップ1 -あなたの液滴を作成します


今、私たちは、液滴が何であるかを知っています🎉
を作成します.
  • イメージ
  • を選択します
    この場合、私たちの好きなフレームワークnuxtjsを展開するつもりであるので、我々はnodejsイメージを必要とします.市場に移動し、入力入力でnodejsを入力し、利用可能な最新バージョンを選択します.
  • は、プラン
  • を選びます
    プロジェクトのスケーラビリティとそれに必要な容量を考慮しなければなりません.

    In our case, for IS ! MY BUG, we have decided to try a standard droplet ($10/month it might be enough).


  • は、データセンター領域
  • を選択します
    このセクションでは、最高のパフォーマンスを持っているあなたのウェブサイトを望む地域を選択するのが最適です.
  • 認証
  • これはあなたの液滴との接続方法を定義するオプションです.

    We recommend to use SSH keys, for security purposes



    新しいSSHキーを作成するときには、モーダルの内部のチュートリアルに従って、TextArea内で生成された公開キー(IDHERE RSA . PUB)を追加する必要があります.

    完了したら、すべてのオプションを完了したら、名前を与え、作成ボタンを押します.

    さて、我々の滴は準備ができて!💜

    ステップ2 -独自のドメインを追加


    既に購入したドメインがある場合は、DigitalOceanにそれを追加しましょう.そうでなければ、1つを最初に購入する必要があります.
    トップバーメニューのドメイン/DNSを作成するには、ドメインタブを選択してネットワーキングページを開きます.
    次に、「ドメインを入力」にドメインを入力し、「ドメインを追加」ボタンをクリックします.

    ドメインを追加したら、そのDNSレコードを表示して変更するには、その名前をクリックします.
    デフォルトで3 nsタイプのレコードが表示されます.あなたの液滴にこのドメインを加えるために、あなたは2つのA - Type記録を必要とします
  • あなたの液滴(IPによって)を指示しているホスト名(あなたのドメイン. ioに相当する)は、
  • です
    ホスト名としてWWWを持つ
  • は、再びあなたの液滴に向けてサブドメインwww.domain.ioを作成します.
  • 今、すべての我々の液滴での作業を開始する準備が整いました.ドメインが次のコマンドで動作しているかどうかを確認できます

    If you have any problems related to the DNS management I recommend you to take a look at How to Create, Edit, and Delete DNS Records.


    ステップ3 -あなたの液滴に接続ssh


    SSHによってあなたの液滴に接続するには、端末を開く必要があります.使用するオペレーティングシステムによって異なりますが、一般的には以下のようになります:

  • Linux :検索端末またはCtrl + Alt + Tキーを押してください.

  • 検索端末.

  • bashの検索結果.Windowsでbashを持っていない場合は、gitをインストールすることができます.
  • 端末が開いているので、このコマンドで接続しなければなりません:
    ssh root@DROPLET_IP_ADDRESS
    

    When you finished creating your droplet an IP address would be generated, that's the one you have to use after the @.


    複数のsshキーを持つ場合、- iフラグを使用して秘密鍵のパスを指定する必要があります.
    ssh -i /path/key username@DROPLET_IP_ADDRESS
    
    すべてがうまく行っていて、ガイドが推奨するようにパスフレーズを作成したら、今では以下のように追加します.
    Enter passphrase for key '/c/Users/USER/.ssh/key':
    
    今、我々は我々の液滴に接続している🙌, 私たちはroot@DROPLET_NAME万事うまくいったら.さもなければ、あなたはDigitalseaチームからこれ以上detailed guideに相談することができます.

    ステップ4 -私たちのnuxtjsプロジェクトを実行するnginxを設定します


    良いニュースは、我々の液滴NGinxではすでにインストールされている、我々はちょうどそれが生成されるときに我々の静的サイトを実行するサーバーを構成する必要があります.それがどのように働くかについて見ましょう!
  • ドメインフォルダ
  • を作成します
    /var/www/にあるフォルダを私たちのドメインと同じ名前で追加します.
      cd /var/www/
      mkdir domain.io
    
    ドメインフォルダの内部には、HTMLと呼ばれる別のものが必要になります.
      cd /var/www/domain.io
      mkdir html
    
  • ドメインNGinx設定
  • を作成する
    NGinxをドメインに設定するには、ドメインとして指定されたファイルに利用可能なデフォルトのサイトをコピーしましょう.
      cd /etc/nginx/sites-available/
      cp default domain.io
      sudo nano domain.io
    
    コピーしたファイルを開くと、次のようになります.
      server {
        listen 80 default_server;
        listen [::]:80 default_server;
    
        root /var/www/html;
    
        index index.html index.htm index.nginx-debian.html;
    
        server_name hellonode;
    
        location ^~ /assets/ { 
          gzip_static on;
          expires 12h;
          add_header Cache-Control public;
        }
    
        location / {
          ...
          proxy_pass http://localhost:3000;
        }
      }
    
    次のコンテンツを変更、追加、削除する必要があります.
  • 最初にroot/var/www/htmlを変更します.root/var/www/domainへ.IO/html/dist ;とヘルロードデを返します.について.
  • それから、
  • は「場所^~/資産/{}」と「場所/」の内容を取り除きます.
  • 最後に
  • で、serverRange名の下に追加します.
  •   error_page 404 /200.html;
    
    さあ、
      server {
        listen 80 default_server;
        listen [::]:80 default_server;
    
        root /var/www/domain.io/html/dist;
        index index.html index.htm index.nginx-debian.html;
    
        server_name domain.io www.domain.io;
    
        error_page 404 /200.html;
    
        location / {
        }
      }
    
    このファイルはサイトでも有効になっており、デフォルトは削除されます.
      // Create a symbolic link to have the same content in both
      sudo ln -sf /etc/nginx/sites-available/domain.io /etc/nginx/sites-enabled/domain.io
      rm /etc/nginx/sites-available/default /etc/nginx/sites-enabled/default
    
    最後に、すでに変更されているのを見るには、nginxを再起動する必要があります.
      sudo nginx -t // Test configuration
      sudo nginx -s reload
    
    我々はまだそこに任意のプロジェクトを持っていないので、我々は404エラーが表示されます、我々はほとんどそこにある.次のステップでプロジェクトを設定しましょう!

    ドメイン名.io ステップ5 - Gitを使用して自動化を展開する


    Gitコマンドを使用して我々のコードを液滴にアップロードして、このようにプロセスを自動化するために、我々はGithookを作成することができます(あるいは、 を使うことができます).
    この場合、Githookを設定するプロジェクトをアップロードする方法を示します.
  • リポジトリ
  • を開始する
    我々の静的サイトのファイルを含むフォルダで.git - repoを初期化する必要があります.
      cd /var/www/domain.io/html
      git init
    
  • RepoBearフォルダを作成します
    さて、ドメインに戻ってください.フォルダを作成します.
      cd ..
      mkdir repobare
    
    取り替えに行って、裸のrepoを開始してください:
      cd repobare
      git init --bare
    
    我々のコミットを傍受し、我々のドメインにファイルをプッシュするgithookを作成する必要があります.IOフォルダ.
      sudo nano hooks/post-receive
    
    以下のコンテンツを投稿します.
  • 最初のコマンドは、リポジトリからプッシュされた内容をHTMLフォルダに追加します.
  • 最後のコマンドは、そのフォルダに移動し、依存関係をインストールし、静的サイトファイルをdistフォルダを生成します.
  •   #!/bin/bash
      git --work-tree=/var/www/domain.io/html --git-dir=/var/www/domain.io/repobare checkout -f
      cd /var/www/domain.io/html
      npm install
      npm run generate
    
    それからPOSTファイルを保存し、実行する許可を与えます.
      sudo chmod +x hooks/post-receive
    
  • ローカルレポ
  • に新しい起源を作成します
    我々の起源を無傷に保つために、我々は選ばれた名前と交換して、我々が欲しい名前で新しい起源をつくるつもりです.
    ローカルリポジトリに行き、次のコマンドを実行します.
      git remote add <deploy_origin> root@<DROPLET_IP_ADDRESS>:/var/www/domain.io/repobare
      git add .
      git commit -m "First commit"
      git push <deploy_origin> master
    

    When you run git push it will ask you for the SSH passphrase, fill in and press Enter.


    今、すべてのあなたのドメインです.フォルダを作成する👏 あなたの結果を最も好きなブラウザでチェックしてください🎉

    ギタブアクション 付録-パフォーマンス向上


    SSL認証


    最初のステップは、SSL証明書を取得します.それをするために、我々はLetの暗号化を として使います.そのために、我々はCrotbotソフトウェアを我々の液滴にインストールします.
    Certbotをインストールしてください.
    sudo apt install certbot python3-certbot-nginx
    
    Certbot今すぐ使用する準備ができており、我々はすでにNginxの設定をそれの準備ができている.
    したがって、両方のドメインに対して同じ証明書を得るために以下のコマンドを実行する必要があります.
    sudo certbot --nginx -d www.domain.io -d domain.io
    
    これがあなたの最初の「certbot」を使用するならば、あなたのドメイン(すなわちDigitalOcean recommend us in this post)に関連している電子メールアドレスを入力して、サービスの条件に同意してください.
    すべてがうまくいくなら、' certbot 'はhttps設定の設定を選択するよう頼みます.
    Output
    Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    1: No redirect - Make no further changes to the webserver configuration.
    2: Redirect - Make all requests redirect to secure HTTPS access...
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2
    
    今、証明書はダウンロード、インストール、およびロードされ、あなたのウェブサイトをチェックすることができます“https ://”を使用します.

    It includes a renewal process, if you want to test it go to Verifying Certbot Auto-Renewal.


    [email protected] 2 .キャッシュポリシー


    キャッシュコントロールを構成し、ドメイン内のヘッダを期限切れにしましょう.私たちはNGinxのサイトを利用可能なフォルダの前に作成した.
    sudo nano /etc/nginx/sites-available/domain.io
    
    2つの新しいセクションを追加します
    サーバーブロックの前の
  • 、各ファイルタイプのキャッシュの持続時間.
  • サーバーブロック内の
  • 、キャッシングヘッダーの設定.
  • # Expires map
    map $sent_http_content_type $expires {
        default                    off;
        text/html                  epoch;
        text/css                   max;
        application/javascript     max;
        ~image/                    max;
    }
    
    server {
        ...
    
        expires $expires;
    
        root /var/www/domain.io/html/dist;
    ...
    
    新しい設定を有効にするにはnginxを再起動します.
    sudo nginx -s reload
    
    そして、次のコマンドを実行して、新しい設定が動作しているか確認してください.
    curl -I https://domain.io/index.html
    

    If you want more information about it, go to How to Implement Browser Caching.


    エンコードを受け入れる


    サーバーのGZIP設定を変更するにはnginxを編集します.設定ファイル:
    sudo nano /etc/nginx/nginx.conf
    
    gzip設定セクションを見つけ、変更します.
  • すべてのコメント行をコメントアウトして追加設定を有効にします.
  • gzipの長さを256とgzip形式にエンコードしたい形式で追加します.
  • ...
    ##
    # `gzip` Settings
    #
    #
    gzip on;
    
    gzip_vary on;
    gzip_proxied any;
    gzip_comp_level 6;
    gzip_buffers 16 8k;
    gzip_http_version 1.1;
    gzip_min_length 256;
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript application/vnd.ms-fontobject application/x-font-ttf font/opentype image/svg+xml image/x-icon;
    ...
    
    それだ!新しい設定を有効にするには、再度nginxを再読み込みします.
    sudo nginx -s reload
    
    次のコマンドを実行して、新しい設定が動作していることを確認します.
    curl -H "Accept-Encoding: gzip" -I https://domain.io/index.html
    

    If you want more information about it, go to How To Add the gzip Module to Nginx.


    結果


    我々のプロジェクト にこの構成を加えたあと、結果はちょうど信じられないです😍 我々はショックを受けている!
    IS!MYBUG
    私はあなたがそれを読んで楽しい時間を過ごすことを願って、それはあなたがあなたのNuxtフル静的サイトのDigitalOceanを使用することを決定するときに可能性があります疑いを解決します.
    ここに来てくれてありがとう、いつものように、フィードバックは非常に歓迎です!💜🎉