概要
この文書では、小規模なプライベートクラウドをIBM Cloudを使い、Node-REDによるPaaSを構築します。
環境構築には、LXDを使います。LXDと同じものとしてIncusがありますが、Incusは別の資料として作成します。
また、IBM Cloud Virtual Server for VPCで仮想マシンを作成する手順の確認もあります。
IBM Cloud Virtual Server for VPCで仮想マシン作成
IBM Cloud上でIaaSにあたるサービスは、次のようなものがあります。
仮想サーバーの作成と運用
- Virtual server for VPC <-- この文書で使います。
前世代の仮想サーバーの作成と運用(一時利用契約で、安く使えるが、2025年12月31日で購入ができなくなる。関連ニュース)
Power Systemsの仮想環境(正確にはLPAR環境, AIXやIBM i をサポート)
ベアメタルサーバーの作成と運用
VPCの作成
VPCは仮想プライベートクラウドのことです。パブリッククラウド内に独立したネットワークをつくることができます。
仮想サーバーを作成するために、VPCを作成します。
IBM Cloudにログインします。ログイン後、画面左上の「Ⲷ」をクリックします。

「Infrastructure」-->「Network」-->「VPCs」の順にクリックします。

「Virtual private clouds」の画面で、「Create +」をクリックします。

作成したVPCは、「Virtual private clouds」の画面に表示されます。

「Default security group」に表示されている、セキュリティグループ名をクリックすることで、インバウンドやアウトバウンドのルールを設定することができます。

インバウンドルートとアウトバウンドルール、それぞれに「Create +」をクリックすることで、追加することができます。今回は、インバウンドルールに下記を追加します。
| 区分 | Protocol | Port | Port min | Port max | Source type | Destination type |
|---|---|---|---|---|---|---|
| Inbound rules | TCP | Port range | 22 | 22 | Any | Any |
| Inbound rules | TCP | Port range | 8443 | 8443 | Any | Any |
| Inbound rules | TCP | Port range | 8080 | 8080 | Any | Any |
仮想マシンの作成
IBM Cloud Catalogで、「Virtual Server for VPC」にアクセスします。直接アクセスしたい場合は、こちらをクリックします。

小規模なプライベートクラウド環境として、この文書では「LXD」を使います。「LXD」を使うため、「Image」に「Ubuntu Linux」を指定、「Profile」に「vCPUs 2 , RAM 8GB」を指定します。「Ubuntu」以外を選ぶ場合は、「LXD」ではなく、「Incus」を使います。

「SSH keys」にて「Create a SSH key」をクリックし、SSH鍵を作成します。秘密鍵と公開鍵の両方を同時に作成します。秘密鍵がダウンロードされるので、保存しておきます。仮想サーバーに接続する際に、ダウンロードした秘密鍵を使用します。

画面右側に表示される「Summary」を確認します。「Create virtual server」をクリックします。これで仮想サーバーを作成することができます。

仮想サーバーを表示する方法は、画面左上の「Ⲷ」をクリックし、「Infrastructure」-->「Compute」-->「Virtual server instances」の順にクリックすることで、IBM Cloud Virtual Server for VPCで作成した仮想サーバーの一覧を表示することができます。

floating IPの割り当て
作成した仮想サーバーで、下図のように「⁝」をクリックし、「Edit floating IPs」をクリックします。

「Attach +」をクリックして「Floating IP」を作成します。「Floating IP」には、月額 1.05ドルが生じます(25年9月現在)。

仮想サーバーに、「Floating IP」が割り当てされていることがわかります。割り当てされた「Floating IP」にSSH接続します。

仮想サーバーにSSH接続
仮想サーバーに接続します。ここでは「TeraTerm」を使っています。他のアプリで構いません。ユーザー名に「ubuntu」とし、認証方式に秘密鍵を使用します。秘密鍵は、先ほどダウンロードしたものを使います。

仮想サーバーの時刻設定や最新のアップデート適用を行うため、次のコマンドを実行します。
sudo timedatectl set-timezone Asia/Tokyo
sudo apt update -y
sudo apt upgrade -y
これで、IBM Cloud Virtual Server for VPCで、LXDをインストールするための準備が終わりました。
管理者1人の小規模なプライベートクラウドの構築
LXD-UIはプライベートクラウドの仕組みを提供します。ログインには証明書を使うので、管理者が1人で運用する小規模なプライベートクラウドになります。
LXDとLXD-UIのインストール
LXDの公式ドキュメントは、こちらです。
次のコマンドを実行するとことで、LXDとLXDをWebブラウザで管理するLXD-UIをインストールします。
$ sudo snap install lxd
Webブラウザで接続するためのコマンドを実行します。8443番ポートで接続できるようにします。
$ lxc config set core.https_address :8443
実行結果
If this is your first time running LXD on this machine, you should also run: lxd init
To start your first container, try: lxc launch ubuntu:24.04
Or for a virtual machine: lxc launch ubuntu:24.04 --vm
lxd init を実行するように指示がでます。lxd initを実行します。公式ドキュメントにlxd initについての説明があります。
$ lxd init
次のように指示がでますので、指示にしたがって設定します。「Size in GiB of the new loop device (1GiB minimum) 」を5GiB(5GB)に指定しています。loop device上で、VMやコンテナが動きます。LXD上で動くコンテナは、システムコンテナです。
Would you like to use LXD clustering? (yes/no) [default=no]:
Do you want to configure a new storage pool? (yes/no) [default=yes]:
Name of the new storage pool [default=default]:
Name of the storage backend to use (btrfs, ceph, dir, lvm, powerflex, pure, zfs) [default=zfs]:
Create a new ZFS pool? (yes/no) [default=yes]:
Would you like to use an existing empty block device (e.g. a disk or partition)? (yes/no) [default=no]:
Size in GiB of the new loop device (1GiB minimum) [default=19GiB]: 5GiB
Would you like to connect to a MAAS server? (yes/no) [default=no]:
Would you like to create a new local network bridge? (yes/no) [default=yes]:
What should the new bridge be called? [default=lxdbr0]:
What IPv4 address should be used? (CIDR subnet notation, “auto” or “none”) [default=auto]:
What IPv6 address should be used? (CIDR subnet notation, “auto” or “none”) [default=auto]:
Would you like the LXD server to be available over the network? (yes/no) [default=no]:
Would you like stale cached images to be updated automatically? (yes/no) [default=yes]:
Would you like a YAML "lxd init" preseed to be printed? (yes/no) [default=no]:
LXD-UIのセットアップ
Webブラウザで、https://仮想サーバーのFloating IP:8443 にアクセスします。LXD-UIにログインする証明書を作成するため、まずは「キャンセル」をクリックします。

LXD-UIにアクセスするための証明書を作成
「Generate certificate」をクリックします。

「Create Certificate」の画面が表示されます。
証明書にパスワードを指定したい場合は、「Password protected」のトグルスイッチをオンにします。パスワードの指定は任意です。「Generate and download」をクリックします。

ダウンロードした証明書をダブルクリックし、インポートします。

Webブラウザで、https://仮想サーバーのFloating IP:8443 にアクセスします。インポートした証明書を選び、「OK」をクリックします。

コマンドを実行します。
$ lxc auth identity create tls/lxd-ui --group admins
実行結果(token:の後の文字列は、実行毎に異なるので、生成されたトークンを使ってください。)
TLS identity "tls/lxd-ui" (dc9116e8-bee8-427e-9227-9f65b2a8b9eb) pending identity token:
eyJjbGllbnRfbmFtZSI6Imx4ZC11aSIsImZpbmdlcnByaW50IjoiNTRlZTA2ZGVhNDdjZGRkZDJkNDJiMDA1MmUzODI3NTQ4MmVjZjU1YjUzZjEyNTIxMmE3MjU0M2Q5ZGY5MzExZiIsImFkZHJlc3NlcyI6WyIxMC4yNDQuMC40Ojg0NDMiLCIxMC4zOS4zMy4xOjg0NDMiLCJbZmQ0Mjo5ZjA3OjlmYjc6NzYyYzo6MV06ODQ0MyJdLCJzZWNyZXQiOiI5OWMwODY1MTEzYzIyNTc1M2IyZGQyMjNlMGQ4ZDZlNDc1ZDFlMTQ2YTlkMzMzZjhjYzhkMTU0YzI2NjgzOGRkIiwiZXhwaXJlc19hdCI6IjAwMDEtMDEtMDFUMDA6MDA6MDBaIiwidHlwZSI6IkNsaWVudCBjZXJ0aWZpY2F0ZSJ9
token:の後の文字列をコピーし、貼り付けます。その後、「Connect」をクリックします。

下図のように、「Canonical LXD」の画面が表示されます。「Instances」の画面で、「Create instance」で、Vmやコンテナ(システムコンテナ)を作成することができます。

インスタンスの作成と起動
VMとコンテナ(システムコンテナ)を作成することができます。LXDでは、どちらもインスタンスと言います。
- IBM Cloud Virtual Server for VPCでは、仮想サーバーを動かしていますので、Nested VMができず、コンテナ(システムコンテナ)を動かすことができます。LXDでVMを動かすには、ベアメタルサーバーの方が良いでしょう。
- システムコンテナは、VMのように操作することができ、SSHやsystemdなどを使うことができます。
「Canonical LXD」の画面の画面左側で「Instances」をクリックします。
「Instances」の画面で、「Create instance」をクリックします。

「Create an instance」の画面で、「Browse images」をクリックします。

今回は「Ubuntu 24.04 LTS」を探し、「Select」をクリックします。

「Create an instance」の画面に戻ります。「Main configuration」のタブで、「Instance name」に、インスタンス名を入力します。「Instance type」に「Container」を指定します。
割り当てるディスク等を指定する場合は、画面左側で「Devices」の項目で設定します。
「Create and start」をクリックします。

エラーがなく作成することができれば、「Success」のメッセージが表示されます。

「Instances」の画面で、インスタンスが表示されます。

インスタンス名をクリックします。「Overview」タブにインスタンス情報が表示されます。

「Terminal」タブから、インスタンスにコマンドを入力し実行することができます。

PaaSに仕立てる
「Canonical LXD」の画面で作成したインスタンスのターミナルに、PaaSで定番プラットフォームの「Node-RED」をインストールします。Node-REDは、IoTやAI分野、API連携を行うプラットフォームとして定番です。
Node-REDのインストール
インスタンスの「Terminal」タブで、次のコマンドを実行します。
$ bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/master/deb/update-nodejs-and-nodered)
インスタンスの「Terminal」タブで、Node-REDの起動コマンドを実行します。Node-REDは、1880番ポートで起動します。
systemctl enable nodered.service
systemctl start nodered.service
Proxyを使って、外部からアクセス可能にする
LXDの「Proxy」を使って、インスタンスとホスト(仮想サーバー)間でネットワーク接続を転送します。
$ lxc config device add LXD-UIで起動したインスタンス名 任意のプロキシ名 proxy listen=tcp:ホストのIPアドレス:ポート番号 connect=tcp:インスタンスのIPアドレス:ポート番号
インスタンス名:今回は、ubuntu-demo
プロキシ名:今回は、nodered-proxy
ホストのIPアドレス:今回は、仮想サーバーのIPアドレスとして、10.244.x.x
実行例
$ lxc config device add ubuntu-demo nodered-proxy proxy listen=tcp:10.244.x.x:8080 connect=tcp:127.0.0.1:1880
このコマンドでは、ubuntu-demo 内で実行しているNode-RED(127.0.0.1:1880)と、ホスト(10.244.x.x:8080)を接続します。
Webブラウザで、https://仮想サーバーのFloating IP:8080にアクセスすることで、インスタンスで実行中のNode-REDにアクセスすることができます。

次のお題はIncus
LXDを使うために、仮想サーバーでUbuntuを使っています。Ubuntu以外でLXDと同じことを行うために「Incus」を使う必要があります。次は「Incus」を使ってみます。









