ホームページ >データベース >mysql チュートリアル >MySQL と Prisma を使用して Raspberry Pi に Node.js アプリケーションをデプロイする

MySQL と Prisma を使用して Raspberry Pi に Node.js アプリケーションをデプロイする

Linda Hamilton
Linda Hamiltonオリジナル
2025-01-06 04:06:38495ブラウズ

Deploy a Node.js Application Using MySQL and Prisma on a Raspberry Pi

Render、AWS、DigitalOcean などのさまざまな無料および有料のホスティング オプションにより、アプリケーションのデプロイがますます簡単になりました。ただし、ホスティング料金を定期的に支払わずにアプリケーションを学習、実験、展開したい開発者にとって、Raspberry Pi は優れた代替手段となります。このコンパクトでありながら強力なデバイスを使用すると、Web アプリケーションをホストするための独自の Linux ベースのサーバーを作成できます。

このブログでは、MySQL (Raspberry Pi 上の MariaDB) と Prisma ORM を使用して TypeScript Node.js アプリケーションをデプロイする方法を検討します。ラズベリーパイ。さらに、リバース プロキシ用に NGINX を構成し、Ngrok を使用してアプリケーションをインターネットに公開します。飛び込んでみましょう!


ツールの概要

ラズベリーパイ

Linux ベースのオペレーティング システムを実行する、低コストのシングルボード コンピューター。 IoT または Web アプリケーション用に独自のサーバーを作成するのに最適です。

Node.js と TypeScript

Node.js はサーバー上で JavaScript を実行するためのランタイム環境であり、TypeScript は JavaScript に静的型付けを追加して、コードベースをより保守しやすくします。

MySQL (Raspberry Pi 上の MariaDB)

人気のリレーショナル データベース システムである MariaDB は、MySQL と互換性のある代替品であり、Raspberry Pi に十分な軽量です。

プリズマ ORM

タイプセーフなクエリ言語とスキーマの移行によるデータベースの対話を簡素化するオブジェクト リレーショナル マッピング (ORM) ツール。

NGINX

高性能 HTTP サーバーおよびリバース プロキシ サーバー。これは、トラフィックを Node.js アプリケーションにルーティングするのに役立ちます。

ヌグロク

複雑なネットワーク構成を行わずに、ローカルでホストされているアプリケーションをインターネットに安全に公開するトンネリング ツールです。


前提条件

  1. 動作する Raspberry Pi - Raspberry Pi で SSH が有効になっていて、リモートからアクセスできることを確認します。
  2. Github リポジトリ - 簡単にデプロイできるように、Node.js TypeScript アプリケーションを GitHub リポジトリでホストする必要があります。
  3. Ngrok アカウント - Ngrok で無料アカウントを作成し、Raspberry Pi アプリをインターネットに公開するための認証トークンを取得します。

ラズベリーパイのセットアップ

  1. OS をインストールします

    Raspberry Pi OS などの OS を使用して Raspberry Pi をセットアップします。 Raspberry Pi Imager を使用して、Raspberry Pi と互換性のある他の OS を見つけます。

  2. IP アドレスを見つける

    Angry IP Scanner などのツールを使用して、Raspberry Pi の IP アドレスを検出します。 Raspberry Pi がローカル マシンと同じネットワークに接続されていることを確認してください。

  3. Raspberry Pi のステータスを確認する

    ping <IP_ADDRESS_OF_RPI>
    
  4. Raspberry Pi に SSH で接続します

    ssh <username>@<IP_ADDRESS_OF_RPI>
    

    を置き換えます。 Raspberry Pi のユーザー名と IP アドレスを入力し、パスワードを入力します。

  5. システムを更新します

    sudo apt update && sudo apt upgrade
    
  6. Git をインストールします

    git がインストールされているかどうかを確認します。そうでない場合は、以下のコマンドを実行して git
    をインストールします。

    sudo apt install git
    

Node.jsのインストール

node js をインストールするには、nvm (Node Version Manager) を使用します。コマンドライン経由で、異なるバージョンのノードを素早くインストールして使用することができます。

  1. NVM をインストールします

    curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
    
  2. インストールの確認

    nvm --version
    
  3. Node.js の最新の LTS バージョンをインストールします

    nvm install --lts
    
  4. Node.js と npm のインストールを確認する

    node --version
    # v22.12.0
    
    npm --version
    # 10.9.0
    

MySQL (MariaDB) のセットアップ

Raspberry Pi OS の場合は、MariaDB をインストールします。

  1. MariaDB SQL Server をインストールします

    sudo apt install mariadb-server
    
  2. MariaDB の安全なインストール

    sudo mysql_secure_installation
    

    プロンプトに従ってデータベースを保護します。

    • 現在の root パスワードを入力してください: - root ユーザーの現在のパスワードの入力を求められたら、Enter キーを押します (まだ設定されていないため)。
    • root パスワードを設定します: - root パスワードを設定するように求められたら、「n」と入力します (後で設定します)。
    • 匿名ユーザーの削除: - 匿名ユーザーを削除してセキュリティを向上させるには、「Y」と入力します。 (テスト目的で、n を入力して匿名ユーザーを維持できます。)
    • リモートでの root ログインを禁止します: - リモートでの root ログインを許可するには、n を入力します (オプションですが、安全性は低くなります)。
    • テスト データベースを削除します: - y と入力して、テスト データベースを削除し、それにアクセスします。 (保持したい場合は n を入力してください。)
  3. MariaDB クライアントにログインします

    sudo mysql
    
  4. MariaDB の root パスワードをセットアップします

    まず、データベース サーバーに付与テーブルをリロードするように指示する必要があります。

    MariaDB [(none)]> FLUSH PRIVILEGES;
    

    以下のクエリで root パスワードを変更します。

    MariaDB [(none)]> ALTER USER 'root'@'localhost' IDENTIFIED BY '<new_password>';
    

    を置き換えます。自分のパスワードを使用してください。

    exit コマンドを使用して MariaDB CLI を終了します。

    MariaDB [(none)]> exit;
    Bye
    
  5. root ユーザーで MariaDB クライアントにログインします

    ping <IP_ADDRESS_OF_RPI>
    

    root ユーザーのパスワードを入力します。

データベースとユーザーのセットアップ

新しいデータベースとユーザーを作成しましょう。作成した新しいデータベースに対するすべての権限を新しいユーザーに付与します。

  1. データベースを作成する

    ssh <username>@<IP_ADDRESS_OF_RPI>
    
  2. パスワードを使用して新しいユーザーを作成します

    sudo apt update && sudo apt upgrade
    
  3. 作成された新しいユーザーに権限を付与します

    sudo apt install git
    
  4. 特権テーブルをフラッシュします

    curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
    
  5. exit コマンドを使用して mysql クライアントを終了します。

  6. 新しいユーザーでログイン

    nvm --version
    

    ユーザーの作成時に使用したパスワードを入力します。

  7. ユーザーがデータベースをリストできることを確認します

    nvm install --lts
    

それだけです!このデータベースとユーザーをアプリケーションで使用します。


Node.js アプリケーションをセットアップする

  1. Github リポジトリのクローンを作成します

    node --version
    # v22.12.0
    
    npm --version
    # 10.9.0
    
  2. プロジェクト リポジトリに移動します

    sudo apt install mariadb-server
    
  3. プロジェクトの依存関係をインストールします

    sudo mysql_secure_installation
    
  4. TypeScript コードをコンパイルする

    sudo mysql
    

tsconfig.json ファイルで outDir プロパティが構成されていることを確認してください。これは、コンパイルされた JavaScript コードが生成されるディレクトリを指定します。デフォルトでは、通常 dist に設定されますが、プロジェクトの構造に基づいてカスタマイズできます。

環境変数の設定 (オプション)

プロジェクトで環境変数を使用している場合は、Raspberry Pi で環境変数を設定する必要があります。プロジェクトのルート ディレクトリに .env ファイルを作成して、すべての環境変数を保存できます。

  1. .env ファイルの作成

    MariaDB [(none)]> FLUSH PRIVILEGES;
    
  2. .env ファイルを更新

    MariaDB [(none)]> ALTER USER 'root'@'localhost' IDENTIFIED BY '<new_password>';
    
  3. 環境変数を入力してください

    MariaDB [(none)]> exit;
    Bye
    

    、を置き換えます。および <データベース名>前の手順で作成したものと置き換えます。

    Ctrl O を押してファイルを保存し、次に Enter を押し、Ctrl X を使用してエディタを終了します。

Prisma スキーマの移行

Prisma を使用している場合、すべてのスキーマ ファイルは prisma/schema ディレクトリ内に配置されます。次に、これらのスキーマをデータベースにデプロイします。

以下のコマンドを実行します

sudo mysql -u root -p

このコマンドは、.env ファイルで指定された DATABASE_URL を使用して、スキーマをデータベースにデプロイします。 MySQL クライアントにログインし、SHOW TABLES コマンドを使用してデプロイメントを確認できます。すべてのテーブルをリストします。


PM2 のセットアップ

PM2 は、Node.js アプリケーションの運用プロセス マネージャーであり、アプリケーションのオンライン管理と維持に役立ちます。 Node.js アプリケーションを管理するには、PM2 をインストールします。

ping <IP_ADDRESS_OF_RPI>

NGINXの構成

  1. NGINX をインストールします

    ssh <username>@<IP_ADDRESS_OF_RPI>
    
  2. サイト構成を作成する

    sudo apt update && sudo apt upgrade
    
  3. 以下のコードを追加します

    sudo apt install git
    

    各部分の内訳は次のとおりです:

    listen 80; このディレクティブは、HTTP トラフィックのデフォルト ポートであるポート 80 でリッスンするように NGINX に指示します。

    server_name ; これは、Raspberry Pi のドメイン名または IP アドレスを指定します。 Raspberry Pi の実際の IP アドレスに置き換えます。 NGINX は、このアドレスに送信されたリクエストに応答します。

    location / { ... } このブロックは、NGINX がルート URL (/) へのリクエストを処理する方法を定義します。基本的に、これは NGINX に対し、リクエストがルートに対して行われるたびに、指定されたポートで実行されているバックエンド (Node.js アプリケーション) に転送する必要があることを伝えます。

    proxy_pass http://localhost:YOUR_NODE_JS_PORT; これは、受信リクエストを Node.js アプリケーションに転送する重要な行です。 YOUR_NODE_JS_PORT を、Node.js アプリが実行されている実際のポート (たとえば、5000) に置き換えます。リクエストは、同じマシン (localhost) 上で実行されている Node.js アプリケーションに送信されます。

    proxy_http_version 1.1; これにより、プロキシ接続の HTTP バージョンが 1.1 に設定され、WebSocket などの特定の機能の処理が向上します。

    proxy_set_header Upgrade $http_upgrade; このヘッダーにより、WebSocket 接続をアップグレードできます。これはリアルタイム アプリケーションにとって重要です。

    proxy_set_header Connection 'upgrade'; このヘッダーは、WebSocket 接続を管理するために Upgrade ヘッダーと一緒に使用され、接続が HTTP から WebSocket に適切にアップグレードされるようにします。

    proxy_set_header Host $host; これにより、元の Host ヘッダーがクライアント リクエストからバックエンド サーバーに渡されます。これは、元の Host ヘッダーに依存するアプリケーション (ルーティングや仮想ホスティングなど) に役立ちます。

    proxy_cache_bypass $http_upgrade; これにより、WebSocket 接続がキャッシュ メカニズムをバイパスし、キャッシュによる干渉なしにリアルタイム通信が機能できるようになります。

    Ctrl O を押してファイルを保存し、次に Enter を押し、Ctrl X を使用してエディタを終了します。

  4. サイト構成を有効にする

    curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
    
  5. NGINX 構成のテスト

    nvm --version
    

    テストが成功すると、次のようなメッセージが表示されます:

    ping <IP_ADDRESS_OF_RPI>
    
  6. NGINX サーバーを再起動して変更を適用します

    ssh <username>@<IP_ADDRESS_OF_RPI>
    
  7. NGINX サーバーのステータスを確認する

    sudo apt update && sudo apt upgrade
    

アプリケーションの実行

  1. プロジェクトに移動します

  2. PM2 を使用してアプリケーションを開始する

    package.json でスクリプトを設定している場合は、以下のコマンドを使用します:

    sudo apt install git
    

    または、dist ディレクトリ内のindex.js ファイルを使用してアプリケーションを直接実行することもできます。

    curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
    

    以下のコマンドを使用してログを確認することもできます:

    nvm --version
    

次に、ローカル マシンのブラウザに Raspberry Pi の IP アドレスを入力して、アプリを確認します。うまくいくはずです。ローカル マシンと Raspberry Pi の両方が同じネットワークに接続されていることを確認してください。そうしないと機能しません。


Ngrok を使用してアプリを世界に公開する

アプリを Raspberry Pi にデプロイしたので、Raspberry Pi が実行されているのと同じネットワークからのみアプリにアクセスできます。これをインターネットに公開するには、ポート転送を使用する必要があります。

ルーターの設定を使用してポート転送を設定できますが、この場合は ngrok を使用します。 Ngrok は開発に役立ち、テスト目的でアプリを無料で実行できるようになります。

https://dashboard.ngrok.com/login にアクセスしてアカウントを作成してください。 Raspberry Pi で ngrok を構成するには、認証トークンが必要です。

  1. Ngrok をインストールします

    nvm install --lts
    
  2. 認証トークンを ngrok 構成ファイルに追加します

    node --version
    # v22.12.0
    
    npm --version
    # 10.9.0
    
  3. デフォルトの nginx 設定ファイルを無効にする

    sudo apt install mariadb-server
    
  4. NGINX 構成をテストする

    sudo mysql_secure_installation
    
  5. NGINX サーバーを再起動して変更を適用します

    sudo mysql
    
  6. アプリをオンラインで展開します

    MariaDB [(none)]> FLUSH PRIVILEGES;
    

    これにより、Node.js アプリにトラフィックを転送する https://xxxx-xxxx-xxxx-xxxx-xxxx-xxxx-xxxx-xxxx-xxxx.ngrok-free.app/ のような URL が提供されます。他のネットワークからこの URL に移動して、アプリケーションにアクセスできます。


まとめ

このガイドでは、MySQL と Prisma を使用して TypeScript Node.js アプリケーションを Raspberry Pi にデプロイすることに成功しました。 NGINX をリバース プロキシとして構成し、Ngrok を使用してインターネット経由でアプリケーションにアクセスできるようにしました。このセットアップを使用すると、コスト効率の高い独自のセルフホスト型開発サーバーを手に入れることができます。

このアプローチは、サーバー管理における貴重な経験を積みながら、フルスタック アプリケーションの展開を学習および実験するのに最適です。

このガイドを使用してアプリケーションをデプロイした場合は、ぜひお知らせください。その経験についてぜひお聞かせください。 ?

以上がMySQL と Prisma を使用して Raspberry Pi に Node.js アプリケーションをデプロイするの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。