ネットにはいくつも解説があるので今更のような気もしますが、Google CloudでVMインスタンスを立ててUbuntu 24.04 LTSをインストールする手順のメモです。
無料枠内で収まるよう慎重に設定しているつもりでも、いかなる理由で課金が始まるか分からないため参考程度としてください。
個人的な都合でプロジェクト名をBudibaseと命名していますが、今回の手順とは無関係ですので無視してください・・・
としていたのですが、試行錯誤したところ条件付きでBudibaseが動作しましたのでおまけとして追記します!
プロジェクトを作成する
プロジェクト名をBudibaseとしてプロジェクトを作成し、プロジェクト選択ツールでプロジェクトをBudibaseに切り替えます。
プロジェクトを作成すると、ユーザーに仮想プライベートクラウドVPCが与えられます。
VPCのファイアウォール ルールは仮想ネットワーク空間、つまりユーザーが立てるインスタンス全体で設定が共有されます。ここでポートを設定しただけではどのインスタンスにも影響しません。
ファイアウォール ルールには任意の名称のターゲットタグを命名することができ、設定を反映させたいインスタンスにこのタグを貼り付けることでポートを個別に制御します。
インスタンス内で稼働しているUbuntuのファイアウォールUFWは無効となっており、ポートの開閉はVPC側で管理されていることが分かります。
インスタンスを作成する
[ナビゲーションメニュー]-[Cloudの概要]-[ようこそ]に移動し、[VMを作成]をクリックします。
Compute Engine APIを有効にします。
マシンの構成は以下の設定とします。
- 名前:ins1
- リージョン:us-west1(オレゴン)
- Series:E2
- マシンタイプ:e2-micro(2 vCPU、1コア、1GBメモリ)
OSとストレージは以下の設定とします。
- オペレーティングシステム:Ubuntu
- バージョン:Ubuntu 24.04 LTS x86/64, amd64 noble image
- ブートディスクの種類:標準永続ディスク
- サイズ(GB):30
データ保護は以下の設定とします。
- バックアップなし
ネットワーキングは以下の設定とします。
- HTTPトラフィックを許可する にチェック
- HTTPSトラフィックを許可する にチェック
外部 IPv4 アドレスを 静的外部IPアドレスを予約 に設定します。ネットワーク サービス ティアが プレミアム となっていることを確認のうえ、[完了]ボタンを押して設定を終了してください。
名前はとりあえず ins1-nic として予約します。これで外部からの安定したアクセスに必要な静的IPアドレスを貸してもらえます。
以上でインスタンスの仕様が決定しました。画面下に表示されている[作成]ボタンを押すとVMインスタンスが作成されます。以下のように料金がかかるように表示されていますが、全ての設定項目が無料枠内での利用となっていれば課金はありません。
VMインスタンスの一覧にins1が表示されたらサーバーにアクセスできるようになります。
SSH接続の準備
SSHの設定をおこなうため、メニュー右上にあるCloud Shellを立ち上げます。
以下のコマンドでSSHキーを生成します。usernameは任意のユーザ名を設定してください。途中で訊かれるパスフレーズとともにSSH接続の際に必要となります。
$ ssh-keygen -t rsa -f ~/.ssh/my-ssh-key -C username
生成された秘密鍵の確認をします。
$ sudo cat ~/.ssh/my-ssh-key
表示された暗号テキストは、メモ帳などに貼付け、my-ssh-keyというファイル名で保存しておきます。ファイルを保存する際、-----END OPENSSH PRIVATE KEY-----の後ろは改行しておく必要があります。
生成された公開鍵の確認をします。
$ cat ~/.ssh/my-ssh-key.pub
表示された短めの暗号テキストは、メモ帳などに貼付け、my-ssh-key.pubというファイル名で保存しておきます。
公開鍵を登録します。VMインスタンスを編集します。
SSH認証鍵を登録します。
my-ssh-key.pub の中身をペーストして保存します。
以上でSSH接続の準備が整いました。
SSH接続のテスト
筆者のPCはWindowsベースのシステムなので、使い慣れたTeraTermを使います。ホストには割り当てられた静的IPアドレス、TCPポートは22番、サービスはSSHを選択します。
SSH認証鍵の生成中に決めたユーザ名、パスフレーズを入力し、認証方式ではあらかじめ保存しておいた秘密鍵ファイル my-ssh-key を指定します。
無事に接続できると以下のコンソール画面が現れます。
以上で、無事にローカルから米国オレゴン州のサーバーにSSH接続できるようになりました。
22番ポートを閉鎖する
22番ポートは管理用アクセスポートとしてよく知られているため、攻撃を受けないよう対策する必要があります。ここでは普段は22222番ポートからアクセスすることとして、22番ポートは閉鎖します。
ネットワーク インターフェースのdefaultを選択します。
続いて、ファイアウォールタブを選択します。
[+VPCファイアウォール ルールを作成]をクリックし、ルールを2つ作成します。
ルール①
名前:allow-ssh-22222
一致したときのアクション:許可
ターゲットタグ:allow-ssh-22222
送信元IPv4範囲:0.0.0.0/0
プロトコルとポート:指定したプロトコル > TCPにチェック > ポート:22222
ルール②
名前:deny-ssh-22
一致したときのアクション:拒否
ターゲットタグ:deny-ssh-22
送信元IPv4範囲:0.0.0.0/0
プロトコルとポート:指定したプロトコル > TCPにチェック > ポート:22
この記事ではインスタンスが1つしかないので、ルール名とターゲットタグ名を同じにしています。
これら2つを作成したらいったんVMインスタンス画面まで戻り、編集をクリックします。
ネットワークタグに先ほど作ったタグallow-ssh-2222とdeny-ssh-22を追加して保存します。
TeraTermを立ち上げ、22番ポートを使ってログインします。ログインできたら以下のコマンドでファイル sshd_config を編集します。テキストエディタVimの使い方は省略します。
$ sudo vim /etc/ssh/sshd_config
22番ポートをコメントアウトし、代わりに22222番ポートを指定し、ファイルを保存します。
#Port 22
Port 22222
以上の設定を反映させるため、インスタンスを停止し、再起動します。
$ sudo shutdown -r now
再起動したら、TeraTermのTCPポート番号を22222に変更してログインできることを確認してください。これで、22222番ポート経由でSSH接続できるようになりました。
最後に、使用しないルールを無効化します。VPCファイアウォール ルールにある default-allow-ssh を選択してください。
ファイアウォール ルールの詳細に入ったら、編集ボタンを押して編集モードに入ります。
[∨ルールを無効にする]を展開すると、以下のメニューが現れるので無効に切り替えて保存します。
VPCファイアウォール ルール一覧を確認すると、default-allow-sshの行が無効となっていることが分かります。
以上で22222番ポートでのSSH接続を許可し、危険な22番ポートを閉鎖しました。その他セキュリティ周りはおいおい設定していくと良いでしょう。
インスタンスを削除するときの注意点
静的IPアドレスは貴重な資源ですので、インスタンスを削除して使っていなくても保持しているだけで課金対象となります。
不要なインスタンスを削除したときは、同時にナビゲーションメニューのVPCネットワークメニューにて静的IPアドレスを解放しましょう。
(おまけ)Budibaseをインストールしてみた
元はといえば、GCEの無料枠でBudibaseが動けば完全無料でWebアプリが運用できるんじゃないか?という安易な考えでVMインスタンスを立てたわけですが、当初はBudibaseをインストールしてもなぜか動作しませんでした。
試行錯誤の末、メモリ容量を2GBに拡張すれば正しく動作することが判明しました。原因はメモリ不足――GCEの有料枠でないとBudibaseは動かない――ということです。せっかくここまでGCEを使いこなしてきたわけですから、有料枠に昇格してでもBudibaseを運用できればそれで良いかなと思うようになりました。
無料枠だけ食い逃げしようと思っていたのに、まんまとGoogleの罠にかかってしまいました (^_^;)
というわけで、無料枠で作ったインスタンスを削除して仕切り直します。インスタンスに割り当てていた静的IPアドレスもいったん解放します。
今回のマシンの構成は以下の設定とします。
- 名前:ins1
- リージョン:us-west1(オレゴン)
- Series:E2
- マシンタイプ:e2-small(2 vCPU、1コア、2GBメモリ)有料枠です
ルール③
名前:allow-budibase-10000
一致したときのアクション:許可
ターゲットタグ:allow-budibase-10000
送信元IPv4範囲:0.0.0.0/0
プロトコルとポート:指定したプロトコル > TCPにチェック > ポート:10000
allow-budibase-10000が登録されたことを確認します。
動的ネットワーク インターフェースのネットワーク タグにルール①、ルール②、ルール③を追加します。
続いて、SSH公開鍵は無料枠で作ったときのものを登録します。SSH認証鍵を新たに生成する必要はありません。TeraTermでログインするためのユーザ名、パスフレーズも使い回せます。
一時的にファイアウォール22番ポートdefault-allow-sshを有効に、deny-ssh-22を無効とします。
続いてTeraTermから22番ポートでログインします。ログインできたら以下のコマンドでファイル sshd_config を編集します。
$ sudo vim /etc/ssh/sshd_config
22番ポートをコメントアウトし、代わりに22222番ポートを指定し、ファイルを保存して一旦TeraTerm接続を終了します。
#Port 22
Port 22222
22222番ポートで無事ログインできたら、deny-ssh-22を有効に、default-allow-sshを無効に戻してください。以上で再び22番ポートを閉鎖できました。
Budibaseをインストールする
インストールコマンドを以下に示します。コマンド中のusernameは自分が決めたユーザ名に差し替えてください。
$ sudo apt update
$ sudo curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - && sudo apt-get install -y nodejs
$ sudo mkdir -p /etc/apt/keyrings
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
$ echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
$ sudo apt update
$ sudo apt install -y docker.io
$ sudo apt install -y docker-ce docker-ce-cli containerd.io
$ docker -v
$ docker compose version
$ sudo systemctl start docker
$ sudo systemctl enable docker
$ sudo npm install -g @budibase/cli
$ budi --version
$ budi hosting --init
この初期化プロセスで2つ確認が入りますが、特にこだわりがなければyと改行で進めてください。これによりサーバーの10000番ポートでBudibaseの初期画面にアクセスすることが決まります。
$ cat .env
$ sudo usermod -aG docker username
$ sudo reboot
~再起動~
$ budi hosting --start
この起動プロセスは少し時間がかかりますが、最後にWebページ公開の許可を求められますのでyを入力してください。Budibaseが起動します。
ブラウザに http://ipaddress:10000 を入力すると、すぐさまhttp://ipaddress:10000/builder/adminに転送され、管理者登録画面が表示されます。
もし502 Bad Gatewayエラーが表示されたときは、しばらく時間をあけて再度アクセスを試みてください。
それでもだめな場合は、以下のコマンドでローカルから問い合わせて応答があるか確認してください。
curl -I http://localhost:10000
ローカルで応答があれば、続いて外部IPアドレスでも応答があるか確認してください。
curl -I http://ipaddress:10000
これによりサーバー設定のどこに問題があるか、ある程度切り分けができます。
管理者の登録が完了すると、次回のログインからは単純なログイン画面になります。
以上で、GCEのVMインスタンスを構築してBudibaseを稼働させることができました。残念ながら無料枠のスペックではBudibaseは動かせなかったのですが、有料枠はコマンドの応答も軽く、きびきびとした動作になりました。


























