{
"$type": "site.standard.document",
"canonicalUrl": "https://blog.nove-b.dev//posts/node-google-cloud",
"path": "/posts/node-google-cloud",
"publishedAt": "2025-02-23T00:00:00.000Z",
"site": "at://did:plc:2atly2y5kfyjcj5zap6pv4wd/site.standard.publication/3mmxeqr2tcb2k",
"tags": [
"Google Cloud",
"Node.js",
"Compute Engine"
],
"textContent": "Node.jsをできる限り安く動かしたいという思いでクラウドサービスを探していたところ、Google\nCloudで特定の条件であれば無料利用できそうということを知ったので、サーバーの立ち上げからNode.jsの実行までを行った。\n\nGoogle Cloudの無料枠\n\nコンピューティングエンジンの無料枠は下記の通り。\n\n> - e2-micro 以下の米国リージョンのいずれかで、毎月 1 つの非プリエンプティブVM インスタンス:\n> - オレゴン:us-west1\n> - アイオワ州:us-central1\n> - サウスカロライナ州:us-east1\n> - 30 GB/月の標準永続ディスク\n> - 北米からすべての地域(中国とオーストラリアを除く)への毎月1GBの送信データ転送\n\n詳細はここ。\n\nコンピューティングエンジン\n\nそもそもコンピューティングエンジンがなんなのかというと、公式には下記のように書かれている。\n\n> Compute\n> Engine は、Google のインフラストラクチャ上で仮想マシンを作成して実行できる、コンピューティングおよびホスティング サービスです。\n\nみんな大好きAWSでいうところのES2と同じ。\n\nGoogle Cloudのコンピューティングエンジンでインスタンスを立ち上げる\n\nGoogle Cloudにログインし、サイドメニューからCompute Engineを選択する。\n\nVM インスタンスを選択し、インスタンスの作成をする。\n\nで、前述した無料枠の条件に適するように選択する。\n\n次にネットワーキングタブでファイアウォールの\n\n- [x] HTTP トラフィックを許可する\n- [x] HTTPS トラフィックを許可する\n\nにチェックを入れる。\n\nここにチェックを入れずに作成したせいで接続ができずに苦労した。\n\nこれでインスタンスの立ち上げが完了。\n\n~~この方法で立ち上げて2日間経つけど請求が来ていないので無料枠での運用は問題がなさそうだった。~~\n\nなんか請求発生している気がするので、しっかり確認する必要がありそう。\n\nブラウザからアクセスできるようにする\n\nVM インスタンスのSSHをクリックすればブラウザ上でコンソールが起動するので、そこでコマンドを実行していく。\n\nnginxをインストール\n\nnginxをインストールして起動する。\n\nこれでインスタンスの外部 IPに訪問すれば下記のような画面が表示される。\n\nnodeアプリを立ち上げる\n\nGitをインストール\n\nGit上のNode.jsアプリを動かしたいのでまずはGitをインストールする。\n\nAdvanced Package Toolを最新にし、Gitをインストール。\n\n次にNode.jsをインストールしたいんだけど、パッケージツールにVoltaを使用しているので先にVoltaをインストールする。\n\nVoltaはpackage.jsonに記載しているNode.jsを自動でインストールしてくれるので、結果的にNode.jsのインストールは完了したことになる。\n\n最後にGit上のNode.jsアプリをCloneする。\n\nNode.jsを起動する\n\n次に、Nginxをリバースプロキシとして設定し、HTTPリクエストをNode.jsアプリ(ポート3000)に転送する設定をする。\n\n/etc/nginx/sites-available/defaultを下記に変更する。\n\n理解が追い付かなかったとのでChat GPTにコメントアウトを書いてもらった。\n\nよくわからないけど、/にアクセスが来た時、http://localhost:3000に転送してくれるらしい。\n\nそういうわけなので、Nginxを再起動して設定を適用しNode.jsを起動したら、アプリが表示された。\n\n独自ドメインとLet's Encrypt の無料SSL証明書を取得する\n\n独自ドメインの取得と設定は省略する。\n\n上記は下記のプラグインをインストールする。\n\ncertbot → Let's Encrypt の無料SSL証明書を取得・更新するためのツール。\npython3-certbot-nginx → CertbotがNginxと統合できるようにするプラグイン。\n\n次にLet's Encrypt の無料SSL証明書を取得する。\n\n最後に、自動更新を設定する。\n\nNginx の設定で HTTP から HTTPS へリダイレクト\n\nsudo nano /etc/nginx/sites-available/defaultで\n\nのように修正してsudo systemctl restart nginxで再起動する。\n\nこれも理解しきれていないので、コメントアウトを書いもらった。\n\nNode.jsを常時起動したい\n\nPM2を使ってMastodonのBotを作成したでPM2を使いアプリケーションの永続化をしたところ、systemd のほうが良いと思うと言われたので、今回はsystemdを使ってみた。\n\nまずはサービスファイルを作成する。\n\nsystemctl コマンド一覧\n\n| コマンド | 役割 |\n| ----------------------------------------------- | ------------------------------- |\n| sudo systemctl daemon-reload | systemd の設定を再読み込み |\n| sudo systemctl enable node | OS 起動時に node を自動起動する |\n| sudo systemctl disable node | OS 起動時の自動起動を無効にする |\n| sudo systemctl start node | node を今すぐ起動 |\n| sudo systemctl stop node | node を今すぐ停止 |\n| sudo systemctl restart node | node を再起動 |\n| sudo systemctl reload node | 設定を変更してプロセスを再読込 |\n| sudo systemctl status node | node の現在の状態を確認 |\n| sudo systemctl list-units --type=service | 起動中のサービス一覧を表示 |\n| sudo systemctl list-unit-files --type=service | すべてのサービス一覧を表示 |\n| sudo systemctl is-active node | node が動作中か確認 |\n| sudo systemctl is-enabled node | node の自動起動設定を確認 |\n| sudo systemctl kill node | node のプロセスを強制終了 |\n| sudo journalctl -u node --no-pager | node のログを確認 |\n\n上記のようなコマンドがあるので、サービスを登録 して起動する。",
"title": "Google CloudでNode.jsを起動する"
}