この記事はビットスターのアドベントカレンダー12日目です。
要件
- vscodeからSSH接続して開発できること
- gitが利用できること
- ubuntuを利用すること
- VPNサービスzerotierのネットワークに追加すること
- mysqlの利用ができること
- composerが利用できること
環境
どこのご家庭にも2~3台はある普通の自宅サーバ
-
Ubuntu 20.04.3 LTS
-
LXD 4.20
image用コンテナを作成
ホストからコンテナを作成する。
ホストに登録している鍵がそのまま利用できるようにコンテナに転送する。
lxc launch ubuntu:20.04 test
lxc file push ~/.ssh/authorized_keys test/root/.ssh/authorized_keys
lxc exec test -- bash
PHP、mysqlのインストール
コンテナに必要なパッケージをインストールする。
今回はPHP7.4、mysql8
apt install composer php-fpm mysql-server git openssh-server
zerotierのインストール
コンテナにzerotierのクライアントをインストールする。
zerotierのネットワークを通じてssh接続やhttpの通信を行なう
自分のネットワークにJoinする。
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のdevice-IDが重複してしまうので対策を講じる。
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からコンテナ作成
aliasで名前を付けておくphp7.4、mysql8のimageなので'p74m80'とした
lxc stop test
lxc publish test --alias p74m80
lxc image list
+--------+--------------+--------+---------------------------------------------+--------------+-----------+----------+-------------------------------+
| ALIAS | FINGERPRINT | PUBLIC | DESCRIPTION | ARCHITECTURE | TYPE | SIZE | UPLOAD DATE |
+--------+--------------+--------+---------------------------------------------+--------------+-----------+----------+-------------------------------+
| nodejs | 22**** | no | Ubuntu 20.04 LTS server (20210415) | x86_64 | CONTAINER | 509.76MB | Apr 17, 2021 at 1:57am (UTC) |
+--------+--------------+--------+---------------------------------------------+--------------+-----------+----------+-------------------------------+
| p74m80 | 97**** | no | Ubuntu 20.04 LTS server (20211118) | x86_64 | CONTAINER | 573.91MB | Nov 27, 2021 at 11:59am (UTC) |
+--------+--------------+--------+---------------------------------------------+--------------+-----------+----------+-------------------------------+
| | a8**** | no | ubuntu 20.04 LTS amd64 (release) (20211129) | x86_64 | CONTAINER | 380.57MB | Nov 30, 2021 at 6:00am (UTC) |
+--------+--------------+--------+---------------------------------------------+--------------+-----------+----------+-------------------------------+
lxc launch p74m80 develop
lxc exec develop -- zerotier-cli info
200 info 0e**** 1.x.x ONLINE
zerotierのコンパネから登録するとIPが割り当てられる
+--------------+---------+----------------------------+------+-----------+-----------+
| develop | RUNNING | 10.52.xx.x (eth0) | | CONTAINER | 0 |
| | | 10.xx.xx.x (ztyqbuv6lb) | | | |
+--------------+---------+----------------------------+------+-----------+-----------+
お負け
zerotierのAPIを利用してコマンドライン上から許可できるようにした。
#!/usr/bin/env bash
AUTH="*******"
NETWORK="8b*******"
MEMBER=$1
NAME=$2
curl -X POST -H "Authorization: bearer ${AUTH}" -d '{"name":"'${NAME}'","config":{"authorized":true}}' https://my.zerotier.com/api/v1/network/${NETWORK}/member/${MEMBER}
./zerotier-authorizer.sh 0e**** develop
一応動作しますが例外処理してないので使用はおすすめしません。
そのうちしっかりしたツールにしたい。
あとがき
開発環境が簡単にデプロイできるようになるのでなにか作ろうと思った時のハードルが少しだけ下がる気がする。
サーバーコンテナは1つのコンテナで必要なプロセス動かすことができるので私は管理しやすい。
自宅サーバだがzerotierをつかってVPNで接続することでポート開放することなくどこからでもサーバーにつなぐことができる。
ぜひlxd+zerotierで快適な開発ライフを
以前nodejsの開発環境も作ったので興味があればどうぞ
参考サイト