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 アプリケーションにルーティングするのに役立ちます。
ヌグロク
複雑なネットワーク構成を行わずに、ローカルでホストされているアプリケーションをインターネットに安全に公開するトンネリング ツールです。
前提条件
- 動作する Raspberry Pi - Raspberry Pi で SSH が有効になっていて、リモートからアクセスできることを確認します。
- Github リポジトリ - 簡単にデプロイできるように、Node.js TypeScript アプリケーションを GitHub リポジトリでホストする必要があります。
- Ngrok アカウント - Ngrok で無料アカウントを作成し、Raspberry Pi アプリをインターネットに公開するための認証トークンを取得します。
ラズベリーパイのセットアップ
-
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 のユーザー名と
IP アドレスを入力し、パスワードを入力します。 -
システムを更新します
sudo apt update && sudo apt upgrade
ログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピー -
Git をインストールします
git がインストールされているかどうかを確認します。そうでない場合は、以下のコマンドを実行して git
をインストールします。sudo apt install git
ログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピー
Node.jsのインストール
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
ログイン後にコピーログイン後にコピーログイン後にコピー
MySQL (MariaDB) のセットアップ
Raspberry Pi OS の場合は、MariaDB をインストールします。
-
MariaDB SQL Server をインストールします
sudo apt install mariadb-server
ログイン後にコピーログイン後にコピーログイン後にコピー -
MariaDB の安全なインストール
sudo mysql_secure_installation
ログイン後にコピーログイン後にコピーログイン後にコピープロンプトに従ってデータベースを保護します。
- 現在の root パスワードを入力してください: - root ユーザーの現在のパスワードの入力を求められたら、Enter キーを押します (まだ設定されていないため)。
- root パスワードを設定します: - root パスワードを設定するように求められたら、「n」と入力します (後で設定します)。
- 匿名ユーザーの削除: - 匿名ユーザーを削除してセキュリティを向上させるには、「Y」と入力します。 (テスト目的で、n を入力して匿名ユーザーを維持できます。)
- リモートでの root ログインを禁止します: - リモートでの root ログインを許可するには、n を入力します (オプションですが、安全性は低くなります)。
- テスト データベースを削除します: - y と入力して、テスト データベースを削除し、それにアクセスします。 (保持したい場合は n を入力してください。)
-
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
ログイン後にコピーログイン後にコピーログイン後にコピー
それだけです!このデータベースとユーザーをアプリケーションで使用します。
Node.js アプリケーションをセットアップする
-
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 を使用している場合、すべてのスキーマ ファイルは 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の構成
-
NGINX をインストールします
ssh <username>@<IP_ADDRESS_OF_RPI>
ログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピー -
サイト構成を作成する
sudo apt update && sudo apt upgrade
ログイン後にコピーログイン後にコピーログイン後にコピーログイン後にコピー -
以下のコードを追加します
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 を使用してエディタを終了します。
-
サイト構成を有効にする
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 の両方が同じネットワークに接続されていることを確認してください。そうしないと機能しません。
Ngrok を使用してアプリを世界に公開する
アプリを 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 サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











WebアプリケーションにおけるMySQLの主な役割は、データを保存および管理することです。 1.MYSQLは、ユーザー情報、製品カタログ、トランザクションレコード、その他のデータを効率的に処理します。 2。SQLクエリを介して、開発者はデータベースから情報を抽出して動的なコンテンツを生成できます。 3.MYSQLは、クライアントサーバーモデルに基づいて機能し、許容可能なクエリ速度を確保します。

INNODBは、レドログと非論的なものを使用して、データの一貫性と信頼性を確保しています。 1.レドログは、クラッシュの回復とトランザクションの持続性を確保するために、データページの変更を記録します。 2.Undologsは、元のデータ値を記録し、トランザクションロールバックとMVCCをサポートします。

他のプログラミング言語と比較して、MySQLは主にデータの保存と管理に使用されますが、Python、Java、Cなどの他の言語は論理処理とアプリケーション開発に使用されます。 MySQLは、データ管理のニーズに適した高性能、スケーラビリティ、およびクロスプラットフォームサポートで知られていますが、他の言語は、データ分析、エンタープライズアプリケーション、システムプログラミングなどのそれぞれの分野で利点があります。

MySQLインデックスのカーディナリティは、クエリパフォーマンスに大きな影響を及ぼします。1。高いカーディナリティインデックスは、データ範囲をより効果的に狭め、クエリ効率を向上させることができます。 2。低カーディナリティインデックスは、完全なテーブルスキャンにつながり、クエリのパフォーマンスを削減する可能性があります。 3。ジョイントインデックスでは、クエリを最適化するために、高いカーディナリティシーケンスを前に配置する必要があります。

MySQLの基本操作には、データベース、テーブルの作成、およびSQLを使用してデータのCRUD操作を実行することが含まれます。 1.データベースの作成:createdatabasemy_first_db; 2。テーブルの作成:createTableBooks(idintauto_incrementprimarykey、titlevarchary(100)notnull、authorvarchar(100)notnull、published_yearint); 3.データの挿入:InsertIntoBooks(タイトル、著者、公開_year)VA

MySQLは、Webアプリケーションやコンテンツ管理システムに適しており、オープンソース、高性能、使いやすさに人気があります。 1)PostgreSQLと比較して、MySQLは簡単なクエリと高い同時読み取り操作でパフォーマンスが向上します。 2)Oracleと比較して、MySQLは、オープンソースと低コストのため、中小企業の間でより一般的です。 3)Microsoft SQL Serverと比較して、MySQLはクロスプラットフォームアプリケーションにより適しています。 4)MongoDBとは異なり、MySQLは構造化されたデータおよびトランザクション処理により適しています。

Innodbbufferpoolは、データをキャッシュしてページをインデックス作成することにより、ディスクI/Oを削減し、データベースのパフォーマンスを改善します。その作業原則には次のものが含まれます。1。データ読み取り:Bufferpoolのデータを読む。 2。データの書き込み:データを変更した後、bufferpoolに書き込み、定期的にディスクに更新します。 3.キャッシュ管理:LRUアルゴリズムを使用して、キャッシュページを管理します。 4.読みメカニズム:隣接するデータページを事前にロードします。 BufferPoolのサイジングと複数のインスタンスを使用することにより、データベースのパフォーマンスを最適化できます。

MySQLは、テーブル構造とSQLクエリを介して構造化されたデータを効率的に管理し、外部キーを介してテーブル間関係を実装します。 1.テーブルを作成するときにデータ形式と入力を定義します。 2。外部キーを使用して、テーブル間の関係を確立します。 3。インデックス作成とクエリの最適化により、パフォーマンスを改善します。 4.データベースを定期的にバックアップおよび監視して、データのセキュリティとパフォーマンスの最適化を確保します。
