ホームページ >データベース >mysql チュートリアル >MySQL と Prisma を使用して Raspberry Pi に Node.js アプリケーションをデプロイする
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 アプリケーションにルーティングするのに役立ちます。
ヌグロク
複雑なネットワーク構成を行わずに、ローカルでホストされているアプリケーションをインターネットに安全に公開するトンネリング ツールです。
OS をインストールします
Raspberry Pi OS などの OS を使用して Raspberry Pi をセットアップします。 Raspberry Pi Imager を使用して、Raspberry Pi と互換性のある他の OS を見つけます。
IP アドレスを見つける
Angry IP Scanner などのツールを使用して、Raspberry Pi の IP アドレスを検出します。 Raspberry Pi がローカル マシンと同じネットワークに接続されていることを確認してください。
Raspberry Pi のステータスを確認する
ping <IP_ADDRESS_OF_RPI>
Raspberry Pi に SSH で接続します
ssh <username>@<IP_ADDRESS_OF_RPI>
を置き換えます。 Raspberry Pi のユーザー名と
システムを更新します
sudo apt update && sudo apt upgrade
Git をインストールします
git がインストールされているかどうかを確認します。そうでない場合は、以下のコマンドを実行して git
をインストールします。
sudo apt install git
node js をインストールするには、nvm (Node Version Manager) を使用します。コマンドライン経由で、異なるバージョンのノードを素早くインストールして使用することができます。
NVM をインストールします
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
インストールの確認
nvm --version
Node.js の最新の LTS バージョンをインストールします
nvm install --lts
Node.js と npm のインストールを確認する
node --version # v22.12.0 npm --version # 10.9.0
Raspberry Pi OS の場合は、MariaDB をインストールします。
MariaDB SQL Server をインストールします
sudo apt install mariadb-server
MariaDB の安全なインストール
sudo mysql_secure_installation
プロンプトに従ってデータベースを保護します。
MariaDB クライアントにログインします
sudo mysql
MariaDB の root パスワードをセットアップします
まず、データベース サーバーに付与テーブルをリロードするように指示する必要があります。
MariaDB [(none)]> FLUSH PRIVILEGES;
以下のクエリで root パスワードを変更します。
MariaDB [(none)]> ALTER USER 'root'@'localhost' IDENTIFIED BY '<new_password>';
を置き換えます。自分のパスワードを使用してください。
exit コマンドを使用して MariaDB CLI を終了します。
MariaDB [(none)]> exit; Bye
root ユーザーで MariaDB クライアントにログインします
ping <IP_ADDRESS_OF_RPI>
root ユーザーのパスワードを入力します。
新しいデータベースとユーザーを作成しましょう。作成した新しいデータベースに対するすべての権限を新しいユーザーに付与します。
データベースを作成する
ssh <username>@<IP_ADDRESS_OF_RPI>
パスワードを使用して新しいユーザーを作成します
sudo apt update && sudo apt upgrade
作成された新しいユーザーに権限を付与します
sudo apt install git
特権テーブルをフラッシュします
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
exit コマンドを使用して mysql クライアントを終了します。
新しいユーザーでログイン
nvm --version
ユーザーの作成時に使用したパスワードを入力します。
ユーザーがデータベースをリストできることを確認します
nvm install --lts
それだけです!このデータベースとユーザーをアプリケーションで使用します。
Github リポジトリのクローンを作成します
node --version # v22.12.0 npm --version # 10.9.0
プロジェクト リポジトリに移動します
sudo apt install mariadb-server
プロジェクトの依存関係をインストールします
sudo mysql_secure_installation
TypeScript コードをコンパイルする
sudo mysql
tsconfig.json ファイルで outDir プロパティが構成されていることを確認してください。これは、コンパイルされた JavaScript コードが生成されるディレクトリを指定します。デフォルトでは、通常 dist に設定されますが、プロジェクトの構造に基づいてカスタマイズできます。
プロジェクトで環境変数を使用している場合は、Raspberry Pi で環境変数を設定する必要があります。プロジェクトのルート ディレクトリに .env ファイルを作成して、すべての環境変数を保存できます。
.env ファイルの作成
MariaDB [(none)]> FLUSH PRIVILEGES;
.env ファイルを更新
MariaDB [(none)]> ALTER USER 'root'@'localhost' IDENTIFIED BY '<new_password>';
環境変数を入力してください
MariaDB [(none)]> exit; Bye
、を置き換えます。および <データベース名>前の手順で作成したものと置き換えます。
Ctrl O を押してファイルを保存し、次に Enter を押し、Ctrl X を使用してエディタを終了します。
Prisma を使用している場合、すべてのスキーマ ファイルは prisma/schema ディレクトリ内に配置されます。次に、これらのスキーマをデータベースにデプロイします。
以下のコマンドを実行します
sudo mysql -u root -p
このコマンドは、.env ファイルで指定された DATABASE_URL を使用して、スキーマをデータベースにデプロイします。 MySQL クライアントにログインし、SHOW TABLES コマンドを使用してデプロイメントを確認できます。すべてのテーブルをリストします。
PM2 は、Node.js アプリケーションの運用プロセス マネージャーであり、アプリケーションのオンライン管理と維持に役立ちます。 Node.js アプリケーションを管理するには、PM2 をインストールします。
ping <IP_ADDRESS_OF_RPI>
NGINX をインストールします
ssh <username>@<IP_ADDRESS_OF_RPI>
サイト構成を作成する
sudo apt update && sudo apt upgrade
以下のコードを追加します
sudo apt install git
各部分の内訳は次のとおりです:
listen 80; このディレクティブは、HTTP トラフィックのデフォルト ポートであるポート 80 でリッスンするように NGINX に指示します。
server_name
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 を使用してエディタを終了します。
サイト構成を有効にする
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
NGINX 構成のテスト
nvm --version
テストが成功すると、次のようなメッセージが表示されます:
ping <IP_ADDRESS_OF_RPI>
NGINX サーバーを再起動して変更を適用します
ssh <username>@<IP_ADDRESS_OF_RPI>
NGINX サーバーのステータスを確認する
sudo apt update && sudo apt upgrade
プロジェクトに移動します
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 の両方が同じネットワークに接続されていることを確認してください。そうしないと機能しません。
アプリを Raspberry Pi にデプロイしたので、Raspberry Pi が実行されているのと同じネットワークからのみアプリにアクセスできます。これをインターネットに公開するには、ポート転送を使用する必要があります。
ルーターの設定を使用してポート転送を設定できますが、この場合は ngrok を使用します。 Ngrok は開発に役立ち、テスト目的でアプリを無料で実行できるようになります。
https://dashboard.ngrok.com/login にアクセスしてアカウントを作成してください。 Raspberry Pi で ngrok を構成するには、認証トークンが必要です。
Ngrok をインストールします
nvm install --lts
認証トークンを ngrok 構成ファイルに追加します
node --version # v22.12.0 npm --version # 10.9.0
デフォルトの nginx 設定ファイルを無効にする
sudo apt install mariadb-server
NGINX 構成をテストする
sudo mysql_secure_installation
NGINX サーバーを再起動して変更を適用します
sudo mysql
アプリをオンラインで展開します
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 サイトの他の関連記事を参照してください。