【非エンジニアが挑む】VPSにNode.jsを導入|24時間動くのか、ついに検証してみた

【非エンジニアが挑む】VPSにNode.jsを導入|24時間連続稼働は?ついに検証してみた!のサムネイル構成
Tomoya

いよいよ実践編です。

今回は、Node.jsを使った簡単なプログラムを実際に動かし、パッケージを使いながら「本当に24時間動くのか」を検証していきます。

動かせた瞬間、24時間稼働するシステムを自分の手で作れるかもしれない、というワクワクが溢れてきました。意外なことに、前回のセキュリティ設定よりもスムーズに進めることができました。

24時間、自分だけのシステムで何かを自動化する」という目標を持ちながら、まずは基礎・基本の学習から進めていきます。

目次

今回のゴール

今回のゴールは、「ブラウザから自分のプログラムにアクセスできる状態を作ること」です。

ターミナルから必要な準備を整え、開発環境を作り、実際にブラウザからアクセスできるところまで検証していきます。


STEP

nvmを導入する

まずはnvmというパッケージマネージャーを、GitHub経由でインストールしていきました。

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash ※nvmのインストール
source ~/.bashrc ※設定の反映
nvm --version ※nvmのバージョン確認

余談ですが、開発を進めていく上ではGitHubのアカウントを作っておくのがおすすめです。書いたコードを保存しておいたり、そこからそのままデプロイ(公開)したりすることもできます。

Tomoya

nvm自体は、VPSに限らず普段のローカルPCでの開発でもよく使うものなので、実は今回が初めてではありませんでした。

勝手がわかっている分、理解しながらスムーズに進められたのは良かったです。

STEP

Node.js(LTS版)を導入する

続けて、先ほど入れたnvm経由でNode.jsの安定版(LTS)をインストールします。

nvm install --lts ※nvmでlts版を指定してインストール
node -v ※Node.js本体の確認
npm -v ※Node.js用のパッケージ管理ツールの確認

ここもスムーズに導入できました。ここまでの2ステップは、まっさらな状態のVPSに「プログラミング言語を動かすための土台」を用意する準備段階です。これを済ませることで、この先のシステム開発やツールの導入ができるようになります。

フレームワークやツールを載せていくための【地ならし】のようなものだと捉えてもらえればいいと思います。

ターミナルで node -v および npm -v コマンドを実行しバージョン(v24.18.0、11.16.0)を確認した画面
コマンドプロンプトやターミナルで「node -v」および「npm -v」を実行し、インストールされているNode.jsとnpmのバージョンを表示させた画面です。
STEP

ファイルを作り、コードを書いてみる

VPSの中に新しくファイルを作り、そこに実際のコードを書いていきます。

mkdir ~/first-app ※作業用フォルダの作成
cd ~/first-app ※作業用フォルダへの移動
nano index.js ※nanoを使って新しいファイルの作成

以下の内容を入力しました。

const http = require('http');

const server = http.createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain; charset=utf-8');
  res.end('Node.js、動いています!\n');
});

const PORT = 3000;
server.listen(PORT, () => {
  console.log(`サーバーが起動しました: http://localhost:${PORT}`);
});
テキストエディタでNode.jsのHTTPサーバープログラムコードを入力・編集している画面
テキストエディタを開き、HTTPモジュールの読み込みやレスポンス処理、ポート番号の設定を含むNode.jsの簡単なサーバープログラムを記述している状態です。
ターミナルでの体験で思った事

ターミナルだけですべてを行う経験は初めてだったので、多少の戸惑いはありました。ただ、中身自体は普段ローカルPCで使っている統合開発環境(VSCodeやCursorなど)と同じなので、思ったよりスムーズに書くことができました。

逆に、普段使っているIDEがいかにユーザー目線で作られていたかがよくわかる体験でもありました。

見やすさ・視認性が良いと、何がどうなっているのかを理解しやすいのだと、比較して初めて実感できたのは良い経験でした。

ターミナルからもnanoエディタを使えば、メモ帳のような感覚でコードを書けるので、その点ではやりやすかったです。てっきりターミナルに直接コードを打ち込むものだと思っていたので、nanoエディタが開いたときは少し安心しました。

保存して動かしてみます。《保存(Ctrl+O )→ Enter → 閉じる(Ctrl+X)》

node index.js ※実行

「サーバーが起動しました」と表示され、画面はそのまま止まった状態になります。別のウィンドウから確認してみます。

curl http://localhost:3000 ※別ターミナルで確認

Node.js、動いています!」と返ってくれば成功です。

ターミナルでNode.jsサーバー(node index.js)を起動し別ターミナルからcurlコマンドで動作確認を行った画面
ターミナルでNode.jsのWebサーバーを起動させた後、別ウィンドウからcurlコマンドを実行して応答を確認した結果です。
STEP

ファイアウォールとパケットフィルターでポートを開放する

ここで、前回のセキュリティ編の知識がまさかこんな場面で活きるとは思っていませんでした。

①ufw(サーバー内のファイアウォール)で許可
sudo ufw allow 3000/tcp ※ufw(サーバー内のファイアウォール)でPortの許可
sudo ufw status ※確認
②Xserverの管理画面からも、パケットフィルターに3000番ポートを追加します。

実際にVPSをネットワークに繋げようとすると、ファイアウォールで許可を出し、パケットフィルターでもポートを解放しない限り接続できない、ということを身をもって体験できました。

思った事

普段何気なくPCでネットを使っていましたが、その裏側ではこうしたセキュリティの関門・関所のような構造が何重にもバリアを張っていて、接続を試みてくる通信を一つひとつ厳しくチェックしているのだと理解できました。

①ファイアウォール設定(ufwで3000/tcp許可)と②パケットフィルター設定(ポート3000追加)の作業画面比較
OS内部のUFW設定と管理パネル上のパケットフィルター設定の両方で3000番ポートを許可することで、外部からのアクセスが可能になります。

設定できたら、ブラウザで確認します。

http://サーバーのIPアドレス:3000

Node.js、動いています!」が表示されれば成功です。

STEP

あえてSSHを切ってみる

Tomoya

気になったことがあったので、実験してみました。

今、SSH接続中のターミナルを、雑に×ボタンで切ってしまったらどうなるのか?

結果、普通にサーバーも一緒に止まってしまいました。

これでは、PCの電源を切ったら終わってしまう普段のパソコンと同じ状態で、24時間動かし続けることはできません。そこで、次の段階に進みます。

ブラウザで「このサイトにアクセスできません ERR_CONNECTION_TIMED_OUT」と表示された接続タイムアウトエラー画面
サーバーやポートの接続設定に問題がある場合、ブラウザには応答時間オーバーを示す「ERR_CONNECTION_TIMED_OUT」エラーが表示されます。
STEP

pm2を導入する

pm2というツールを導入します。

npm install -g pm2 ※pm2をインストールする
cd ~/first-app 
pm2 start index.js ※pm2経由でプログラムを起動する
Tomoya

pm2という名前は今回初めて聞きました。

Node.jsの世界にはまだまだ自分の知らないツールがたくさんあるのだと思うと、興味が湧いてきます。

pm2を知って思った事

「今の自分にはできないかもしれない」と思っていたことが、実は既に誰かが作ったツールで解決できたりする——これは面白い発見でした。

今までなら自分でひたすら調べるしかなかったことも、今はAIが知るきっかけを与えてくれるので、世界中の人の学習の視野そのものが広がっているのだと感じます。

pm2 start index.js コマンドを実行し、PM2プロセス管理下でNode.jsアプリがonline状態になったターミナル画面
pm2 startコマンドを実行すると、PM2のログメッセージが表示された後、最下部のプロセス一覧でステータスがonlineになったことを確認できます。
STEP

サーバーを再起動しても動き続けるか確認する

手順通りに進めます。

pm2 save ※今のプロセス状況を保存する
pm2 startup ※起動時にpm2自体も自動で立ち上がるようにする

表示されたコマンドをそのままコピーして実行し、サーバーを再起動します。

sudo reboot ※サーバーの再起動

再接続して確認します。

pm2 list ※pm2の状態を確認する

先ほどはSSHを切ったらサーバーも切れてしまう、という当たり前の状態でした。

今回はこの仕組みを使うことで、VPSとの接続を切っても、なんなら再起動しても、ブラウザ側では動き続けているかを検証しました。

Tomoya

結果、再起動後もブラウザでちゃんと動いていることを確認できた瞬間は、とても嬉しかったです。

つまり、VPSへの接続を切っても、公開しているシステムはそのまま動き続けてくれる、ということです。

これができれば、24時間常駐するシステムを作れば、自分が寝ている間も絶え間なく動かし続けることができる——そう考えると、可能性が広がってワクワクしてきます。


よくある疑問

Q. これはホスティングのようなものですか?

はい、その理解で合っています。ただし、レンタルサーバーのような「ホームページを置くためのホスティング」とは少し性質が違います。

今回やったのは、自分でサーバーの中身(OS・実行環境・プロセス管理)を全部管理する「セルフホスティング」です。VercelやNetlifyのようなサービスは、こうした管理を代行してくれる分、自由度は下がります。

VPSは「何でもできる代わりに、何でも自分でやる必要がある」というのが一番の違いです。

Q. pm2は誰でも使える?無料?

はい、無料で誰でも使えます。オープンソースのツールで、npm install -g pm2だけで導入できます。

より高度な監視ダッシュボードなど一部の追加機能は有料プランもありますが、今回使ったような「常駐させる・自動起動させる」という基本機能は無料の範囲で十分です。

Q. ずっとサーバーが立ち上がっているということは、システムも動き続けることが可能ということ?

その理解で正しいです。むしろこれこそがVPSを使う一番の理由です。

定期的に何かをチェックするbot、常に待ち構えているAPI、決まった時間に処理を行うプログラムなど、「人が操作していない時間も動き続けてほしいもの」を実現できます。

次回作る予定の価格監視システムも、この仕組みの上に成り立ちます。

Q. 普通のローカルPCでも可能?

技術的には可能ですが、現実的ではありません。PCの電源を24時間つけっぱなしにする必要があることに加え、多くの家庭のネット回線は外部から直接アクセスできない構造になっており、VPSより複雑な準備が必要になります。

VPSは最初から「外部から直接アクセスできる住所(固定IP)」を持っている点が、学習コストの面でも大きなアドバンテージです。

Q. メリットとデメリットを教えて
内容
メリット・自分のPCの電源に左右されず24時間稼働する
・rootとして自由に何でも構築できる
・比較的安価に始められる
デメリット・セキュリティ対策・アップデートなど、すべて自分で管理する責任が発生する
・単純なサイト公開だけならFirebase Hostingなどの方が簡単な場合もある
・設定を誤ると自分自身がアクセスできなくなるリスクがある

まとめ・次回予告

これで、シリーズ最初の記事で残していた「本当に24時間動くのか」という宿題に、自分の手を動かして答えを出すことができました。

次回は、いよいよこの土台の上に「仮想通貨の価格変動を監視し、条件を満たしたらDiscordに通知するシステム」を作っていきます。

仮想通貨についてはほとんど触れたことがありませんが、これも新しく知るきっかけとして挑戦していこうと思います。もちろん、その過程はこのブログで正直に共有していくので、シェアやコメントで広めてもらえると嬉しいです。

次回予告 仮想通貨監視システム編「【非・エンジニアが挑む】監視システムB VPSで完全自動化!」の案内

また、今回使っているVPSはXserver VPSです。この記事を読んで、実際に自分のPCからも試してみたいと思った方は、以下にリンクを貼っておきます。

「VPSとは」から「導入編」、「セキュリティ設定編」までの記事も公開しているのでこちらも合わせてご覧ください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

始めまして。このブログを運営するTomoyaです。
未経験個人開発者。AI×個人開発(Vibe Cording)で学習して参入してくれる人が増えて広がっていくと良いなと思って始めました。

実際に作成→デプロイ(公開)→運営を行ってそれについての問題や疑問を記録していきます。
また行っていく上で内容(セキュリティ・制限など)にもこだわっていきたいなと思っています。

コメント

コメントする

目次