💻

lxdでnodejsの開発環境用のimageを作る
April 17, 2021February 19, 2024
#Develop#LXD#Nodejs

開発環境に docker を使っていたけど サーバーコンテナのほうが性に合ってるかなと思いなおし nodejs 用の開発環境を作った記録

要件

  • vscode で ssh 接続して開発できること
  • nodejs のバージョンを選択できること
  • git が利用できること
  • ubuntu を利用すること
  • zerotier のネットワークに追加すること

開発環境用コンテナ作成

コンテナの作成

ホストからコンテナ作成、ホストと同様の鍵で入れるようにホストの authorized_keys をコンテナに転送する。

 lxc launch ubuntu:20.04 test
 lxc exec test -- bash
 lxc file push ~/.ssh/authorized_keys test/root/.ssh/authorized_keys

コンテナに必要な git と ssh server をインストールする。(すでに入っていた)

apt install git openssh-server

nodejs のインストール

コンテナに必要な nvm をインストールする。 デフォルトで 14.x が利用できるようにした。

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash
source ~/.bashrc
nvm install Fermium
nvm alias default stable

zerotier のインストール

コンテナに zerotier のクライアントをインストールする。 このネットワークを通じてコンテナに ssh することになる。

curl -s 'https://raw.githubusercontent.com/zerotier/ZeroTierOne/master/doc/contact%40zerotier.com.gpg' | gpg --import && \
if z=$(curl -s 'https://install.zerotier.com/' | gpg); then echo "$z" | sudo bash; fi
zerotier-ctl join <NetworkID>

image 化の準備

zerotier の image 化の準備

zerotier をインストールした状態で image 化したところ、zerotier の deviceID が変化せず。 作成した image を使ってコンテナを作るとすべてのインスタンスの zerotier の IP が重複してしまった。 サーバー作成した際に zerotier をインストールするのは面倒くさいので解決策を探った。

zerotier の作業ディレクトリは”/var/lib/zerotier-one”

man zerotier-one

The  zerotier-one service keeps its state and other files in a working directory. If this directory is not specified at launch it defaults to "/var/lib/zerotier-one" on Linux, "/Li‐
       brary/Application Support/ZeroTier/One" on Mac, and "/var/db/zerotier-one" on FreeBSD and other similar BSDs. The working directory should persist.  It  shouldn't  be  automatically
       cleaned by system cleanup daemons or stored in a volatile location. Loss of its identity.secret file results in loss of this system's unique 10-digit ZeroTier address and key.

作業ディレクトリを確認する。

ls -l /var/lib/zerotier-one/
total 36
-rw------- 1 zerotier-one zerotier-one   24 Apr 17 01:26 authtoken.secret
drwx------ 4 zerotier-one zerotier-one 4096 Apr 17 01:26 controller.d
-rw-r--r-- 1 zerotier-one zerotier-one  141 Apr 17 02:07 identity.public
-rw------- 1 zerotier-one zerotier-one  270 Apr 17 02:07 identity.secret
drwxr-xr-x 2 zerotier-one zerotier-one 4096 Apr 17 01:32 networks.d
drwxr-xr-x 2 zerotier-one zerotier-one 4096 Apr 17 02:32 peers.d
-rw-r--r-- 1 zerotier-one zerotier-one  570 Apr 17 01:26 planet
lrwxrwxrwx 1 zerotier-one zerotier-one   22 Feb 15 08:00 zerotier-cli -> /usr/sbin/zerotier-one
lrwxrwxrwx 1 zerotier-one zerotier-one   22 Feb 15 08:00 zerotier-idtool -> /usr/sbin/zerotier-one
lrwxrwxrwx 1 zerotier-one zerotier-one   22 Feb 15 08:00 zerotier-one -> /usr/sbin/zerotier-one
-rw-r--r-- 1 zerotier-one zerotier-one    3 Apr 17 02:07 zerotier-one.pid
-rw-r--r-- 1 zerotier-one zerotier-one    4 Apr 17 02:07 zerotier-one.port

identity.public identity.secret 上記 2 つがデバイス ID のようだ。 この 2 つのファイルを削除し、zerotier を再起動すると 2 つのファイルが再作成されて中身が変わった。 image 化する前に必ず削除する必要がある。

cd /var/lib/zerotier-one
rm -rf identity.*

コンテナの image 化

ホストからコンテナを image に変換する。

lxc publish test --alias nodejs
lxc image list
+--------+--------------+--------+---------------------------------------------+--------------+-----------+----------+------------------------------+
| ALIAS  | FINGERPRINT  | PUBLIC |                 DESCRIPTION                 | ARCHITECTURE |   TYPE    |   SIZE   |         UPLOAD DATE          |
+--------+--------------+--------+---------------------------------------------+--------------+-----------+----------+------------------------------+
| nodejs | 226********* | no     | Ubuntu 20.04 LTS server (20210415)          | x86_64       | CONTAINER | 509.76MB | Apr 17, 2021 at 1:57am (UTC) |
+--------+--------------+--------+---------------------------------------------+--------------+-----------+----------+------------------------------+
|        | 9f1********* | no     | ubuntu 20.04 LTS amd64 (release) (20210415) | x86_64       | CONTAINER | 361.05MB | Apr 16, 2021 at 1:54pm (UTC) |
+--------+--------------+--------+---------------------------------------------+--------------+-----------+----------+------------------------------+

作った image からコンテナを作成

lxc launch nodejs <container name>
lxc exec <container name> -- zerotier-cli info
200 info d2d***** 1.x.x ONLINE

Deviceid をウェブサイトから登録すると IP が払い出されて通信可能になる。 わざわざウェブサイトから登録するのは面倒なので api を叩いて登録できるようにしたい。

参考サイト

Download

Download ZeroTier

https://www.zerotier.com/download/

https://www.digitalocean.com/community/tutorials/how-to-install-node-js-on-ubuntu-20-04-ja

おしまい



sakakinox

Written by sakakinox
Server enginier

Copyright © sakakinox.net 2021-2024.