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