ザ・ ラズベリーパイ は、5米ドルという低価格で入手でき、さまざまな種類のソフトウェアを実行できる小さなコンピューターです。 多くの異なるプロジェクトを構築する 。
この記事では、ホーム開発サーバーとしてセットアップし、ネットワークの外部からアクセスできるフルスタックJavaScriptアプリケーションをデプロイするプロセスについて説明します。これは、独自の設定に最適です リモートデジタルワークスペース 、または単に開発に使用するハードウェアを制御するため。
これは特にRaspberryPi 3チュートリアルになりましたが、 すべき に戻ってモデルで引き続き動作します 初代 —古いモデルまたはRaspberry Pi Zeroをお持ちの場合は、以下のコメントで経験をお知らせください。
Raspberry Piボード自体に加えて、次のものが必要になります。
これらは、初期設定時にも役立ちます。
RaspberryPiへのオペレーティングシステムのインストールは簡単です。まず、コンピューターを使用して、ブートイメージをmicroSDカードにインストールします。次に、カードをRaspberry Piに挿入し、そこから起動します。
ラズビアン から移植されたLinuxディストリビューションです Debian 7.0( Wheezy ) 、およびは、デバイスのアーキテクチャ用に最適化されたRaspberryPiの公式OSです。 Piでお気に入りのOSを実行するための他のオプションがありますが、その単純さからRaspbianを使用します。
このチュートリアルは、このバージョン(またはそれ以降)のRaspbianで動作するように更新されています。
Kernel version : #1 SMP Debian 4.9.110-3+deb9u4 (2018-08-21) Kernel release : 4.9.0-8-amd64
Raspbianをインストールするには、 公式ダウンロードページ 最新のRaspbianバージョンを含むzipファイルをダウンロードします。
次に、microSDカードをコンピューターのSDカードスロットまたはアダプターに挿入します。コンピュータのオペレーティングシステムに応じて、ラズベリーのWebサイトに記載されている手順に従ってください。 Linux 、 マックOS 、または ウィンドウズ 。
プロセスが終了したら、SDカードをコンピューターから取り出し、RaspberryPiに挿入します。イーサネットケーブルを使用してRaspberryPiをルーターに接続し、MicroUSB充電器を接続します。これによりRaspberryPiの起動が開始されます。
初期構成には、次の2つのオプションがあります。
raspi-config
が実行されます。最初の起動後、sudo raspi-config
を実行する必要がありますデバイスを構成するために自分で。nmap
などのネットワークツールを使用します 。pi
で、デフォルトのパスワードはraspberry
です。したがって、たとえば、IPアドレスが192.168.1.16の場合、ssh [email protected]
を実行します。プロンプトが表示されたらパスワードを入力します。sudo raspi-config
を実行します。raspi-config
最終的なセットアップについて説明します。すべてのオプションを構成できますが、最も重要なのは最初の2つです。ファイルシステムを拡張し、すべてのSDカードストレージがOSで使用できるようにすることと、デフォルトのPiユーザーのパスワードを変更してサーバーが侵入者から保護されています。
次に、ウェブサーバーをインストールします。 Nginxはメモリフットプリントが小さく、Node.js(後で設定します)とうまく連携するため、私はNginxを好みます。などの他のWebサーバー Apache または lighttpd 、も機能しますが、このデモではNginxを使用します。
何かのインストールを開始する前に、Piで次のコマンドを実行して、すべてが最新であることを確認する必要があります。
sudo apt-get update sudo apt-get upgrade
次に、apt-get
を使用してNginxをインストールできます。
sudo apt-get install nginx
インストールが完了したら、次のコマンドを実行してサーバーを起動します。
不和ボットにコマンドを追加する方法
sudo service nginx start
前の手順でRaspberryPiのローカルIPを把握する必要がなかった場合は、ifconfig
を実行して確認します。イーサネットアダプタの出力はeth0
の下にあり、ローカルIPアドレスにはinet addr
というラベルが付いています。
IPアドレスがわかれば、コンピュータのブラウザでIPアドレスを指定すると、デフォルトの「WelcometoNginx」メッセージが表示されます。
ローカルネットワークの外部からRaspberryPiにアクセスする予定がない場合は、この手順をスキップできます。ただし、他の場所からサーバーにアクセスしたい場合は、それが可能であることを確認しましょう。
一般的なホームネットワークでは、ルーターに接続されているデバイスは外の世界からは見えません。ネットワークを使用して、外部からルーターにのみアクセスできます 外部 IPアドレス。ルーターは、ネットワークへの着信トラフィックと、それを送信するデバイスを決定する責任があります。
ローカルネットワーク上のデバイスが接続を開始すると(たとえば、ブラウザでWebサイトを開いたとき)、ルーターは着信応答トラフィックをこの接続の一部として認識し、通過を許可します。ただし、ルーターが開いている接続の一部ではない着信トラフィックを受信した場合(たとえば、外部デバイスが内部デバイスとの接続を開始しようとした場合)、ルーターは着信トラフィックがネットワークに侵入するのをブロックします。これは、ネットワークを保護するための重要なセキュリティ機能です。
では、どのようにして外部からPiに接続できますか?答えは ポートフォワーディング 。ルーターは、特定のポートの着信接続が通過し、正しいデバイスに送信されるように構成する必要があります。デフォルトでは、HTTPプロトコルはポート80を使用し、SSHはポート22を使用します。したがって、これらはWebアプリケーションにアクセスし、サーバーを管理するための安全な接続を可能にするためにルーターで開く必要がある2つのポートです。
ポートを開いて転送するようにルーターを構成する手順は、インターネットプロバイダーとルーターのブランドによって異なる場合がありますが、いずれの場合も、ルーターの管理ページの高度な構成オプションを使用して実行できるはずです。 「転送」、「ポート転送」、「ネットワークアドレス変換」などの名前のオプションを探すだけです。
HTTP接続用のポートとSSH用のポートを開く必要があります。基本的な考え方は、これら2つの外部ポート宛てのデータをRaspberry Piに転送し、WebトラフィックはNginxがリッスンしているポート80に送信し、SSHトラフィックはポート22に送信してSSHサーバーが外部コンピューターからの接続を受け入れることで構成されます。これがルーターの構成ページでどのように表示されるかの例を次に示します。
192.168.1.16
の場合のポート転送構成。ポート80または22に向かうすべての着信トラフィックは、この内部アドレスに転送されます。ルーターの外部IPアドレスは簡単に確認できます Googleに「私のIPアドレスは何ですか」と入力します 。その後、ルーターのネットワークの外部に移動する場合は、ssh [email protected] {external IP address}
でSSH接続を開くことにより、ポート転送が機能していることをテストできます。同様に、HTTPポート転送は、ブラウザのアドレスバーに外部IPアドレスを入力することでテストできます。ポートフォワーディングでは、ルーターの外部IPを知っていれば、外部から誰でもこれらのポートのデバイスにアクセスできることに注意してください。
静的IPがない場合は、動的DNSを設定できます。とてもシンプルで簡単なステップです。ルーターからダイナミックDNSを設定することも、RaspberryPiを設定することもできます。ここではDDNSの構成方法については説明しませんが、 BitPi.coには、このテーマに関する優れたチュートリアルがあります 必要に応じて。
ほとんどのWebフレームワークはNginx上で実行できますが、JavaScriptを使用してフルスタックにする方法を見てみましょう。これを行うには、インストールする必要があります Node.js そして MongoDB 。
現在、Node.jsは次の方法でRaspberryPiに簡単にインストールできます。
sudo apt-get install nodejs
インストールが完了したら、node -v
を実行して機能しているかどうかを確認できます。
これで、次のように入力するだけでMongoDBをインストールできます。
sudo apt-get install mongodb
Raspberry Piをオフにする必要がある場合は、データベースの破損を防ぐために、最初にサービスをシャットダウンする必要があることに注意してください。
sudo service mongodb stop
ローカルマシンで開発してから、変更をBitBucketのGitリポジトリにプッシュできます。 RaspbianにはGitがプリインストールされているため、最新のアプリケーションコードをデバイスにプルして実行できます。
まず、いくつかのアプリケーションコードを設定し、それをGitリポジトリにプッシュしましょう。アプリケーションを起動する方法はたくさんありますが、私のお気に入りの1つは ジェネレーター-角度-フルスタック 、サーバーコードとクライアントコードの両方の足場。
C ++のプログラミングを学ぶ
インストールgenerator-angular-fullstack
コンピューター上:
npm install -g generator-angular-fullstack
アプリケーションの新しいディレクトリを作成します。
mkdir my-app cd my-app
そして、アプリケーションの足場:
yo angular-fullstack my-app
次に、BitBucketにリポジトリを作成します。 ここで説明されているように 。次に、ローカルディレクトリを設定します。
git init git remote add origin [email protected] :USER/REPO.git
したがって、コードをコミットしてプッシュできます。
git add . git commit -m 'Initial commit' git push -u origin master
ジェネレーターには grunt-build-control プラグイン。これにより、ビルドコードをリポジトリ内の特定のブランチにコミットできます。 BitBucketの設定をGruntfile.js
に追加するだけですアプリケーションのルートディレクトリ:
buildcontrol: { options: { dir: 'dist', commit: true, push: true, connectCommits: false, message: 'Built %sourceName% from commit %sourceCommit% on branch %sourceBranch%' }, bitbucket: { options: { remote: ' [email protected] :USER/REPO.git', branch: 'build' } } }, // ...
今すぐ実行:
grunt build
…配布フォルダを作成するには、次のようにします。
grunt buildcontrol:bitbucket
…コードをコミットして、リポジトリのビルドブランチにプッシュします。
これで、コードがホストされました。 Raspberry Piにデプロイする前に、Raspberry PiのSSHキーを生成し、BitBucketアカウントに追加する必要があります。この手順はすぐに実行しますが、問題が発生した場合は、 BitBucketガイド 。したがって、Raspberry Piターミナルに再度ログインして、公開鍵と秘密鍵のペアを生成します。
ssh-keygen
次に、エージェントを起動します。
ssh-agent /bin/bash
そして、エージェントにキーを追加します。
ssh-add /home/pi/.ssh/id_rsa
ここで、公開鍵の内容を出力する必要があります。
cat /home/pi/.ssh/id_rsa.pub
…コピーしてBitBucketに貼り付けることができます。
BitBucketで、プロフィール写真をクリックして、 アカウントを管理する 。下 セキュリティ 、検索 SSHキー 、ボタンをクリックします キーを追加 。
化粧品業界の大きさ
アプリのコードを配置する場所に関する規則はありませんが、/var/www
を作成できます。ディレクトリを作成し、すべてのプロジェクトをそこに配置します。
cd /var sudo mkdir www
sudo
の使用を避けるためWebルートにファイルを配置する場合は、所有者をPiユーザーに変更し、グループをwww-data
に変更できます。これは、Nginxで使用されます。
sudo chown -R pi:www-data www cd www
これで、リポジトリのビルドブランチのクローンを作成し、依存関係をインストールできます。
git clone [email protected] :USER/REPO.git --branch build --single-branch cd REPO npm install --production
完了したら、アプリを起動して、環境を本番環境に設定できます。
export NODE_ENV=production; node server/app.js &
次に、コンピューターのブラウザーでデバイスのIPアドレスを指定して、機能するかどうかを確認します。
自分で呼び出すことができる開発サーバーがあればいいのにと思いませんか? #RaspberryPiでできます。 つぶやきアプリケーションを外部からアクセスできるようにするためのもう1つのステップが残っています。 NginxはPiのHTTPリクエストを受信するポート80でリッスンしていますが、ノードアプリケーション自体は別のポート(たとえば、ポート8080)でリッスンしています。したがって、Nginxを構成して リバースプロキシ 、アプリケーション向けのリクエストを認識し、それらをノードに渡します。
Nginxは、サービスを提供する各アプリケーションの構成ファイルをsites-available
に保持します。フォルダ:
cd /etc/nginx/sites-available/
ここで、default
をコピーできます構成ファイルとあなたの都合の良いときに編集:
sudo cp default my-app sudo nano my-app
最終的な構成ファイルは次のようになり、NginxがNode.jsサーバーのプロキシとして機能します。
server { listen 80; root /var/www/my-app/; # identifies the location of the application you are configuring server_name my-app.dev; # identifies the hostname used by this application's traffic location / { proxy_pass http://localhost:8080/; # configures the back-end destination for this traffic } }
この構成を有効にするには、sites-enabled
にシンボリックリンクを作成する必要があります。 Nginxが実行時にアクティブな構成を検索するフォルダー:
sudo ln -s /etc/nginx/sites-available/my-app /etc/nginx/sites-enabled/my-app
そして、サービスをリロードして、これらの変更をアクティブにします。
sudo service nginx reload
この時点で、アプリケーションはmy-app.dev
向けのHTTPトラフィックを受信する準備ができています。ドメイン(上記で構成したserver_name my-app.dev
ディレクティブに感謝します)。解決する必要がある最後の問題は、外部から送信するトラフィックをこのドメイン名と一致させる方法です。ドメイン名を購入してIPを指すこともできますが、hosts
ファイルが助けになり、それを不要にします。
サイトにアクセスするワークステーションで、ルーターの外部IPアドレスを追加し、それをホスト名my-app.dev
と照合するだけです。 my-app.dev
用に生成するHTTPトラフィックその後、Host
に正しいホスト名を付けて、ルーターに直接送信されます。 HTTPヘッダー。
Windowsでは、管理者権限で、c:windowssystem32driversetchosts
にあるファイルを編集できます。メモ帳で。 LinuxおよびMacでは、ターミナルをsudo nano /etc/hosts
で使用できます。およびsudo nano /private/etc/hosts
それぞれ。
## # Host Database # # localhost is used to configure the loopback interface # when the system is booting. Do not change this entry. ## 127.0.0.1 localhost 255.255.255.255 broadcasthost ::1 localhost 212.124.126.242 my-app.dev # add your host name to the list
すべての設定が完了したので、RaspberryPiに必要な数のアプリケーションをデプロイしてインストールできます 永遠に または pm2 Node.jsサーバーを存続させるため。
また、問題が発生した場合は、SDカードをワイプして、最初からやり直すことができることを忘れないでください。
正しいケーブルとアダプターを備えたモニター。マイクロUSB電源;有線キーボードとマウス、またはBluetoothアダプター付きのワイヤレスキーボードとマウス。マイクロSDカード;そしてもちろん、ラズベリーパイ。
RaspberryPi用の直接のWindowsデスクトップOSはありません。 Windowsには、モノのインターネット(IoT)デバイス向けのスリム化バージョンがあります。これは主に、IoTアプライアンスのプロトタイプを作成したい開発者やハードウェアハッカー向けに設計されています。
RaspberryPiを使用できるものはたくさんあります。ホームオートメーションサーバー、リモート制御ロボット、ネットワーク接続ストレージ(NAS)デバイス、ミニWebサーバー、メディアセンター、オルゴール、レトロゲームコンソール、ラズベリークラスターサーバー、VPNサーバーなどを構築できます。
そのようなことはありません。 IoTは、電話やラップトップなどの汎用デバイスとは対照的に、専用のin-situインターネット接続デバイスで構成されています。 IoTの主要なプラットフォームの1つは、RaspberryPiです。非常に低コストで小さな組み込みパッケージで完全なLinuxサーバーを提供するため、人気のあるプラットフォームです。
それはシングルボードコンピューターであるか、ミニコンピューターと呼ばれることもあります。デスクトップやサーバーマシンで想像できるほとんどすべてのことを、それで何でもできます。
Arduinoはマイクロコントローラーであり、セルフホストチップです。完全なコンピューターではないため、コードを作成するには別のコンピューターが必要です。 Raspberry Piは真正なコンピューターです。CPU、GPU、HDMI、サウンド、ディスプレイ、LAN用のポートを備えています。それを保存するには、OS(Linuxなど)とハードドライブ(またはSDカード)が必要です。
Raspberry Piは、マルチメディアストレージなどの複数の目的のホームサーバーとして、またはバックアップワークステーション、電子メールサーバー、監視カメラ、テストサイト、Jenkinsホスト、Subversionサーバー、Wikiホストなどとして使用できます。
はい、RaspberryPiではほとんどすべてのタイプのサーバーを実行できます。