はじめに
multipassをサーバアプリ開発に利用するには、クライアントからアクセスできるようにネットワークをbridgeする必要がある。そして、bridgeを使用する前提条件として、同じサブネットにDHCPサーバが稼動している必要がある。1
ここでは、bridge設定したmultipassのインスタンス化と、そのインスタンスでのWebサーバの起動手順を説明する。
Windowsターミナルの起動
スタートメニューからWindowsターミナルを起動する。
Windowsのネットワークの確認
bridgeに使用するネットワークを確認するため、Windowsターミナルから次のコマンドを実行する。
multipass networks
以下に実行例を示す。
bridgeの使用時に指定するネットワークは、出力結果のNameカラムの値となる。
PCに複数のネットワークI/Fがある場合、複数のネットワークが表示される。
この場合、DHCPと同じサブネットに接続されているネットワークを選ぶこと。
multipassインスタンスの起動
Windowsターミナルから次のコマンドを実行する。
network-name には、上記のNameカラムの値を指定すること。
multipass launch -n
instance-name --network
network-name
以下に、CPU:2つ、メモリ:2G、名前:vscodeのmultipassインスタンスの起動例を示す。
multipassインスタンスのIPアドレスの確認
Windowsターミナルから次のコマンドを実行する。
multipass info
instance-name
以下に、上記で起動したmultipassインスタンスの確認例を示す。
出力結果から、今回作成したmultipassインスタンス:vscodeにIPアドレスに192.168.0.27が割当てられていることが確認できる。
windowsユーザの認証鍵の生成
デフォルト状態のmultipassインスタンスは、SSHサーバは公開鍵認証を許可している。そこで、Windowsユーザの公開鍵を作成して、それをmultipassインスタンスとの認証に使用する。公開鍵の作成には、Windowsターミナルでssh-keygen
コマンドを実行する。
以下に、RSA 2048ビットの公開鍵を作成するコマンドを示す。Nオプションの引数は、Powershellで実行する場合とcmdプロンプトで実行する場合で異なるので注意されたい。詳細は、Automated ssh-keygen without passphrase, how?を参照されたい。
ssh-keygen -q -t rsa -b 2048 -N '""'
上記のコマンドを実行すると、鍵の保存場所を聞いてくるで、デフォルトのままとする。
PS C:\Users\takus> ssh-keygen -t rsa -b 2048 -N '""' -q
Enter file in which to save the key (C:\Users\takus/.ssh/id_rsa):
もし、既にRSAの公開鍵を持っている場合、次のような上書きの警告が出る。
この場合、既存の鍵を破壊してしまうので、必ず n を押下して公開鍵生成を中止することを勧める。
PS C:\Users\takus> ssh-keygen -t rsa -b 2048 -N '""' -q
Enter file in which to save the key (C:\Users\takus/.ssh/id_rsa):
C:\Users\takus/.ssh/id_rsa already exists.
Overwrite (y/n)? n
PS C:\Users\takus>
multipassインタンスへの公開鍵のコピー
上記で作成した公開鍵は、 ${env:homepath}\.ssh\id_rsa.pub
に保存される。この公開鍵をmultipassインスタンスの/home/ubuntu/.ssh/authorized_keys
に追記することで、公開認証でのログインが可能となる。
/home/ubuntu/.ssh/authorized_keys
の追記方法は種々あるが、ここでは1stepでの追記方法を示す。
multipass exec vscode -- sh -c "cat <<EOF >>~/.ssh/authorized_keys
$(get-content ${env:homepath}\.ssh\id_rsa.pub)
EOF
"
multipassインスタンスへのログインとWebサーバ起動
multipassインスタンスへのSSHログインのコマンドを示す。
ssh
ubuntu@上記のmultipass info
で確認したIPアドレス
以下に、sshでログインする例を示す。
Webサーバのインストール
次に、httpサーバをインストールする例を示す。
sudo apt install apache2
mDNS/DNS-SDのインストール
mDNS/DNS-SDであるavahi-daemonをインストールして、instance-name.local でアクセスできるようにする。
sudo apt install avahi-daemon
WindowからのWebサーバのアクセス
1 multipassインスタンスでstaticにIPアドレスを設定する場合を除く