【GCP】Node.jsをインストールしてブラウザで「Hello World!」

2021年1月27日水曜日

GCP nodejs サーバ

t f B! P L

 


その9.Node.jsで「Hello World!」







今回は、JavaScript をサーバ側で実行できる Node.js を使ってURLでアクセスしたブラウザに「Hello World!」を表示したいと思います。


ブラウザでの表示は、

node.js + express + forever  です。




今までのGCP関連記事はこちら↓





環境情報


Debian GNU/Linux 9 (stretch)
Apache/2.4.25 (Debian)


※ファイアウォールの tcp接続 3000ポートを開けています(設定方法は本文中)




無料枠サーバにNode.js をインストールする


Node.jsの最新バージョンを下記Webページで確認します。



現時点のLTS(推奨版)最新バージョンは、14.15.4 のようです。





LTS(推奨版)の最新バージョンをインストールするコマンド

$ curl -sL https://deb.nodesource.com/setup_lts.x | sudo -E bash -
$ sudo apt-get install -y nodejs



もし、最新版をインストールしたい場合は、
setup_lts.x  →  setup_current.x   に指定します。



コマンドの詳細はこちら↓




■バージョン確認

$ sudo nodejs -v
v14.15.4
$ sudo npm -v
6.14.10




バージョンを指定してインストールするコマンド  ※今回は未使用

$ curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash -
$ sudo apt-get install -y nodejs




もし違うバージョンをインストールしちゃった場合の対処方法


※アップグレードする場合は普通にインストールで大丈夫です

■ npm の n をインストールする


$ sudo npm install -g n




■ 他のnpmパッケージに影響が無いことを確認する

次のコマンドを実行してインストール済みのnpmパッケージをリスト表示します。

$ npm list -g

nnpm  以外のパッケージがある場合は、ダウングレードによる影響を調査してください。


node.js を始めてインストールした場合は、npm と 先ほどインストールした n だけになります。



■ダウングレード可能なバージョンの一覧を確認する

$ n ls-remote --all



ずらーっと出てきます。

今回は仮に 12.20.1 にしてみます。




■ダウングレードを実行する

$ sudo n 12.20.1
  installing : node-v12.20.1
       mkdir : /usr/local/n/versions/node/12.20.1
       fetch : https://nodejs.org/dist/v12.20.1/node-v12.20.1-linux-x64.tar.xz
   installed : v12.20.1 (with npm 6.14.10)


変更後のバージョンを確認します。

$ sudo nodejs -v
v12.20.1
$ sudo npm -v
6.14.10

バージョンが変わりました。



もし、インストール結果の出力に /usr/local/bin へディレクトリを変更したというメッセージが出た場合は nodejsシンボリックリンクのリンク先を変更する必要があります。


注意:シンボリックリンクのリンク先変更は慎重に行ってください



私の場合は、/usr/bin /usr/local/bin へ変わったので下記コマンドでシンボリックリンクを変更しました。

※自分の環境に合わせて行ってください。


$ cd /usr/bin
$ sudo rm -rf node

ここにある node を一旦削除


$ sudo ln -s /usr/local/bin/node node

シンボリックリンクとして新規作成


$ sudo ln -nfs /usr/local/bin/npm npm

npmリンク先を変更。


$ sudo ln -nfs /usr/local/bin/npx npx

npxリンク先を変更。





ブラウザで「Hello World!」を表示する


express と forever をインストールして起動コードを書いていきます。


express と forever をインストールする


インストールするフォルダを作成

$ cd ~
$ mkdir express-api
$ cd express-api



npm 初期化

$ npm init -y



express をインストール

$ npm i --save express



forever をインストール

$ npm i --save-dev forever





起動コードとコマンドを作成


index.js を作成して編集

$ vi index.js

index.jsの中身
const express = require('express');
const app = express();

app.get('/', (req, res) => res.send('Hello World!'));

app.listen(3000, function(){
	console.log('Server is running.');
});

※ポート番号3000を使用しています




package.json を編集

$ vi package.json

6行目あたりに "scripts"  の記述があるのでそれを下記内容に変更します。

  "scripts": {
    "start": "forever start index.js",
    "stop": "forever stop index.js",
    "test": "echo \"Error: no test specified\" && exit 1"
  },





の中身は↓のようになってます。






使用するポートを開く


GCPコンソールで接続するサーバのファイアウォール設定を修正します。


まずは、対象サーバに設定されているファイアウォール ルールを確認する。



VMインスタンスの詳細から、対象サーバに設定されているネットワークタグを確認。



左上のメニューから VPCネットワークファイアウォール  を選択する。




ターゲットネットワークタグが確認したものと同じものを選択して編集画面を開く




プロトコルとポートの項目の tcp 3000 を追加する



設定したら保存して終了します。





コードを起動して処理を常駐させてURLでアクセスする


サーバ側のプログラムを起動する(常駐)


先ほど作った index.js を起動します(常駐します)

$ npm run start
> express-api@1.0.0 start /home/user/express-api
> forever start index.js

warn:    --minUptime not set. Defaulting to: 1000ms
warn:    --spinSleepTime not set. Your script will exit if it does not stay up for at least 1000ms
info:    Forever processing file: index.js


↑ のような出力が出てコンソールが戻ってきます。(常駐してる)



ブラウザからhttpアクセスする


ブラウザのアドレスに下記URLを入力します。

http://(外部IP):3000


Hello World!」と表示されれば成功です。




常駐プログラムを止める


確認が終わったら、下記コマンドで常駐プログラムを終了します。

$ npm run stop
> express-api@1.0.0 stop /home/user/express-api
> forever stop index.js

info:    Forever stopped process:
    uid  command             script   forever pid  id logfile                                uptime                  
[0] wKlZ /usr/local/bin/node index.js 1457    1464    /home/user/.forever/wKlZ.log 0:0:7:9.567999999999984 



お疲れさまでした。^^




ラベル

3DCG AdSense AI Amazon Echo Blender Blogger cron Cursor DNS Fire TV GCP Github Copilot Google Cloud HTTP iOS IPA iPad iPhone16e iPhone5 JavaScript Kindle Fire laravel mySQL nodejs PhotoShop PHP Python Redis Scratch SSH Unity vue.js Webサーバ Windows10 WinSCP イヤーカフ型 イラスト おかし おやつ オリンピック お文具 カイワレ大根 ガチャ きのこ ギフト キャラ弁 クリスマス クレジットカード ゲーミング ゲーミングキーボード ゲーミングマウス ゲーミングマウスパッド ゲーミングモニター ゲームパッド ゴーヤー栽培 コナン サーバ サイクリング サイバーセキュリティ サイバー攻撃 サブスクリプション しりとり すイエんサー スクラッチ スマートウォッチ スライム セキュリティ ゼロトラスト ダイエット タブレット ドズル社 なわとび バーテープ パズル パンダ ぷよぷよ ふるさと納税 プログラミング プロトコル番号 マイクラ マイクロソフト マリオ マンガ メモ モニターライト ランニングウォッチ ランニングゲーム ワイヤレスイヤホン ワイヤレスヘッドホン 異世界 絵本 株関連 鬼滅の刃 健康診断 工作 磁石 自転車 自動化 収益化 書き初め 小学校 松屋 情報処理 情報処理安全確保支援士 辛辛魚 水泳 生成AI 折り紙 川渡し問題 銭天堂 体脂肪計 誕生日 段ボール 知育菓子 中学受験 冬鳥 動画 動画編集 日常 認定試験 粘土 布団乾燥機 福袋 便利な雑貨 母の日 銘酒 料理

このブログを検索

ブログをよくする

連絡フォーム

名前

メール *

メッセージ *

ブログ アーカイブ

QooQ