Ubuntu 22.04でのStrapiの本番環境の設定とインストール方法

日本語で自然な文に書き換えると、以下のようになります(1つのオプションのみ):
イントロダクション

Strapiは、JavaScriptプログラネックで構築されたオープンソースのヘッドレスコンテンツ管理システム(CMS)です。他のヘッドレスCMSと同様に、Strapiにはフロントエンドが最初から用意されていません。代わりに、コンテンツ構造を設計するためのAPIに依存しています。さらに、StrapiはReactやNext.jsなどの人気のあるフレームワークと統合するためのさまざまな方法を提供しています。さらに、REST APIまたはGraphQLを使用してAPIを消費する方法を選択することができます。

このチュートリアルでは、Strapiをインストールし、コンテンツ作成を開始するための本番環境をセットアップします。Strapiは開発モードでSQLiteを実行していますが、PostgreSQLを使用するように設定します。また、Nginxのリバースプロキシを介してStrapiアプリケーションを提供し、安定したアップタイムを確保するためにPM2プロセスマネージャーを使用します。最後に、Let’s Encryptを使用してNginx接続をセキュアにします。

前提条件

このチュートリアルを実行するためには、以下が必要です。

  • An Ubuntu 22.04 server set up by following our Initial Server Setup GuideStrapi recommends a server with at least 2 CPU cores and 4GB of RAM. This tutorial will assume your server meets the recommended hardware specifications.
  • Node.js version 16.xx installed on your server. Follow Option 2 in our How To Install Node.js on Ubuntu 22.04 tutorial.Make sure to replace version 18.xx with 16.xx via the PPA option. Strapi may not work properly with Node versions beyond 16 at the time of this writing. Specifically, Node v16.18.1 is used in this tutorial.
  • PostgreSQL installed by following Step 1 of our How To Install and Use PostgreSQL on Ubuntu 22.04 tutorial.
  • Nginx installed and configured as a reverse proxy. Follow Steps 1 and 2 of our How To Configure Nginx as a Reverse Proxy tutorial.When configuring the address of the application server to proxy, use http://localhost:1337 as the app_server_address.
  • A domain name pointed at your server’s public IP. This will be configured with Nginx to proxy your application server.

Node.jsバージョン16、Nginx、およびPostgresがサーバーにインストールされている場合、チュートリアルに進む準備が整いました。

ステップ1 – Postgresデータベースの設定

Strapiプロジェクトでは、データベースが必要です。現在、MySQL、MariaDB、SQlite、PostgreSQLをサポートしています。正式なドキュメント内で、最低バージョン要件を確認することができます。さらに、Strapiは新しいデータベースを必要とします。これは、既存のデータベースをStrapiインスタンスにリンクすることはできないことを意味します。

最初に、データベースを作成してください。

  1. sudo -i -u postgres createdb strapi-db

 

その後、データベースのためにユーザーを作成してください。

  1. sudo -i -u postgres createuser –interactive

 

Output

Enter name of role to add: sammy Shall the new role be a superuser? (y/n) y

デフォルトでは、PostgreSQLでデータベースユーザーとしての認証はIdentification Protocolまたはident認証方式を使用します。これにより、PostgreSQLはクライアントのUbuntuのユーザー名を取得し、それをデータベースのユーザー名として使用します。これにより、多くの場合においてセキュリティが向上しますが、Strapiなどの外部プログラムがデータベースに接続する場合に問題が発生することもあります。この問題を解決するには、このPostgreSQLのロールにパスワードを設定して、Strapiがデータベースに接続できるようにします。

ターミナルから、PostgreSQLのプロンプトを開いてください。

  1. sudo -u postgres psql

 

PostgreSQLのプロンプトから、ユーザープロファイルを強力なパスワードで更新してください。

  1. ALTER USER sammy PASSWORD postgres_password;

 

ターミナルで\q を入力してPostgreSQLユーザーからログアウトしてください。

  1. \q

 

データベースとユーザーの認証情報が作成されたので、Strapiをインストールする準備が整いました。

ステップ2 – あなたのサーバーにStrapiをインストールします。

サーバーにStrapiをインストールするには、以下のコマンドを入力してください。

  1. npx create-strapi-app@latest my-project

 

インストールを進めるために、Yで確認してください。

Yesと確認した後、インタラクティブなインストールにアクセスします。データベース名、ユーザー名、パスワードが適切に変更されていることを確認しながら、次のオプションを選択してください。

Output

? Choose your installation type Custom (manual settings) ? Choose your preferred language JavaScript ? Choose your default database client postgres ? Database name: strapi-db ? Host: 127.0.0.1 ? Port: 5432 ? Username: sammy ? Password: postgres_password ? Enable SSL connection: No

このチュートリアルでは、設定後にLet’s Encrypt証明書でSSL接続を有効にするため、SSL接続は有効になっていません。選択を行った後、Strapiのインストールが開始されます。

インストールが完了したら、Strapiプロジェクトの構築の準備が整います。

まず、マイプロジェクトディレクトリにいることを確認してください。

  1. cd my-project

 

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

  1. NODE_ENV=production npm run build

 

Output

> my-project@0.1.0 build > strapi build Building your admin UI with production configuration… ✔ Webpack Compiled successfully in 35.44s Admin UI built successfully

このコマンドを実行すると、Strapiのプロジェクトが構築され、Strapiの管理者UIも含まれます。

「Strapiサーバーをテストすることができます。以下のコマンドを実行して、直接Strapiサーバーを起動してください。」

  1. node /home/sammy/my-project/node_modules/.bin/strapi start

 

Output

[2022-11-21 13:54:24.671] info: The Users & Permissions plugin automatically generated a jwt secret and stored it in .env under the name JWT_SECRET. Project information ┌────────────────────┬──────────────────────────────────────────────────┐ │ Time │ Mon Nov 21 2022 13:54:24 GMT+0000 (Coordinated … │ │ Launched in │ 1603 ms │ │ Environment │ development │ │ Process PID │ 4743 │ │ Version │ 4.5.4 (node v16.18.1) │ │ Edition │ Community │ └────────────────────┴──────────────────────────────────────────────────┘ Actions available One more thing… Create your first administrator 💻 by going to the administration panel at: ┌─────────────────────────────┐ │ http://localhost:1337/admin │ └─────────────────────────────┘

前提条件を満たした場合、NginxをリバースプロキシとしてStrapiのデフォルトアドレスであるhttp://localhost:1337に設定してください。ブラウザでhttp://your_domainに移動して、Strapiのデフォルトのランディングページを表示してください。

Strapi landing page after initial 'build' and ‘start’ command.

デフォルトの設定でこのコマンドは現在、Strapiの開発モードを使用しています。また、ターミナル上のコマンドに関連するプロセスに依存しており、本番環境には適していません。次のステップでは、PM2というプロセスマネージャーに本番環境の設定を追加します。

「CTRL+c」を押して、サーバーを終了してください。

Strapiをインストールしたら、背景でサーバーをサービスとして実行するためにPM2のセットアップを準備しましょう。

ステップ3 – PM2のインストールと設定

サーバーを手動で起動する代わりに、このプロセスを管理するためにPM2を頼ることができます。PM2とプロダクションレディなNode.jsアプリケーションの設定についての詳細については、当社のガイドをご覧ください。PM2は手動で起動する必要なく、サーバーを稼働させるのに役立ち、アップタイムを確保します。

最初に、トップディレクトリにいることを確認してください。

  1. cd ~

 

次に、次のコマンドを使ってPM2をインストールします。

  1. sudo npm install pm2@latest -g

 

次に、好きなテキストエディタでPM2の設定ファイルを作成してください。この例ではnanoを使用します。

  1. sudo nano ecosystem.config.js

 

以下の内容をこのファイルに追加し、プロジェクトディレクトリ名とパス、データベース名、ユーザー名、パスワードを変更してください。

エコシステムの設定を行うファイル、ecosystem.config.js
module.exports = {
  apps: [
    {
      name: 'strapi',
      cwd: '/home/sammy/my-project',
      script: 'npm',
      args: 'start',
      env: {
        NODE_ENV: 'production',
        DATABASE_HOST: 'localhost',
        DATABASE_PORT: '5432',
        DATABASE_NAME: 'strapi-db',
        DATABASE_USERNAME: 'sammy',
        DATABASE_PASSWORD: 'postgres_password',
      },
    },
  ],
};

PM2の設定を編集した後、ファイルを終了してください。もしnanoを使用している場合は、CTRL+xを押してから、yを押し、ENTERキーを押してください。

以下のコマンドを使用してStrapiインスタンスをバックグラウンドで実行してください。

  1. pm2 start ecosystem.config.js

 

Output

[PM2][WARN] Applications strapi not running, starting… [PM2] App [strapi] launched (1 instances) ┌─────┬───────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┬───────────┬──────────┬──────────┬──────────┬──────────┐ │ id │ name │ namespace │ version │ mode │ pid │ uptime │ ↺ │ status │ cpu │ mem │ user │ watching │ ├─────┼───────────┼─────────────┼─────────┼─────────┼──────────┼────────┼──────┼───────────┼──────────┼──────────┼──────────┼──────────┤ │ 0 │ strapi │ default │ N/A │ fork │ 22608 │ 0s │ 0 │ online │ 0% │ 30.3mb │ sammy │ disabled │ └─────┴───────────┴─────────────┴─────────┴─────────┴──────────┴────────┴──────┴───────────┴──────────┴──────────┴──────────┴──────────┘

アプリケーションがPM2の下で実行されている場合、アプリケーションがクラッシュしたり終了したりした場合でも自動的に再起動されます。以下のサブコマンドを実行することで、起動時にStrapiインスタンスを開始することができます。

  1. pm2 startup

 

Output

[PM2] Init System found: systemd [PM2] To setup the Startup Script, copy/paste the following command: sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u sammy –hp /home/sammy

サーバーが起動すると、PM2とその管理プロセスを起動するスタートアップスクリプトが生成され、設定されます。

次に、出力で与えられたコマンドを、”sammy”の代わりに自分のユーザー名を使ってコピーして実行してください。

  1. sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u sammy –hp /home/sammy

 

次に、PM2のプロセスリストを保存してください。

  1. pm2 save

 

現在、サーバーでPM2サービスが実行されています。http://your_domainに戻ると、Strapiが本番モードで実行されていることに気付くでしょう。

Strapi production landing page indicator

PM2をバックグラウンドでサーバーに実行しているため、Strapiインスタンスのセキュリティを完了することができます。

Step 4 — Let’s Encryptを使用してStrapiをセキュリティ保護する

あなたがドメインに移動してStrapiのランディングページを見る際に気付いたかもしれませんが、URLはhttp://ではなくhttps://と表示されていないため、安全でない接続です。

以下のコマンドを入力して、Let’s EncryptでStrapiインスタンスを安全に保護してください。

  1. sudo snap install –classic certbot

 

snapインストールディレクトリからcertbotコマンドへのリンクをパスに設定して、certbotを実行できるようにしてください。

  1. sudo ln -s /snap/bin/certbot /usr/bin/certbot

 

次に、HTTPSトラフィックとNginxのフルプロファイルを許可します。

  1. sudo ufw allow ‘Nginx Full’

 

冗長なNginxのHTTPプロファイル許可を削除してください。

  1. sudo ufw delete allow ‘Nginx HTTP’

 

次に、ドメインアドレスを挿入して証明書を取得するためにNginxプラグインを使用してください。

  1. sudo certbot –nginx -d your_domain -d www.your_domain

 

コマンドを実行すると、メールアドレスの入力と利用規約への同意を求められます。メールリストに参加するかしないかを選択することもできます。それを行った後、プロセスが成功したことを伝えるメッセージが表示され、証明書の保存場所が案内されます。

Output

. . . Successfully received certificate. Certificate is saved at: /etc/letsencrypt/live/your_domain/fullchain.pem Key is saved at: /etc/letsencrypt/live/your_domain/privkey.pem This certificate expires on 2023-02-05. These files will be updated when the certificate renews. Certbot has set up a scheduled task to automatically renew this certificate in the background. Deploying certificate Successfully deployed certificate for your_domain to /etc/nginx/sites-enabled/your_domain Successfully deployed certificate for www.your_domain /etc/nginx/sites-enabled/your_domain Congratulations! You have successfully enabled HTTPS on https://your_domain and https://www.your_domain . . .

http://your_domainにアクセスしてください。サイトは自動的にHTTPSバージョンにリダイレクトされます。また、Strapiが本番モードで実行されていることにも注意してください。

Strapi production landing page indicator

ストラピの管理者アカウントを作成するには、https://あなたの_ドメイン/admin にアクセスしてください。

Strapi sign up landing page

新しい資格情報を入力した後、管理ダッシュボードに入ることができます。

Strapi's dashboard

ダッシュボードから、Strapi上でコンテンツ作成を始めることができます。

結論

このチュートリアルでは、PostgreSQLデータベースを使用してStrapiの本番環境をセットアップします。また、StrapiアプリケーションをNginxリバースプロキシの背後で提供し、サーバーを常に稼働させるためにPM2プロセスマネージャを使用します。

Strapiサーバーをセットアップした後、Strapiの管理ダッシュボードを使用してコンテンツを作成することができます。Strapiの公式ドキュメントから、Strapiアプリケーションのセットアップと設定について詳しく学ぶことができます。

コメントを残す 0

Your email address will not be published. Required fields are marked *