【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 



お疲れさまでした。^^




このブログを検索

ブログをよくする

自己紹介

自分の写真
はじめまして。はるはるです。 中2の息子と小5の娘を抱える2児の父です。今はゲーム会社で働いています。 子供のプログラミング学習に協力できるように教え方を勉強中です。 このブログでは簡単なゲームを作りながら自分が学んだことを少しずつ共有していきます。 情報処理の試験をたまに受けます。 第二種情報処理技術者 ソフトウェア開発技術者 基本情報処理技術者 応用情報処理技術者 twitter: https://twitter.com/amaruchan007

連絡フォーム

名前

メール *

メッセージ *

ブログ アーカイブ

QooQ