LoginSignup
5
0

More than 1 year has passed since last update.

lxd+zerotierで自宅サーバ上にPHPの開発環境用のimageを作る

Last updated at Posted at 2021-12-11

この記事はビットスターのアドベントカレンダー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の開発環境も作ったので興味があればどうぞ

参考サイト

5
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
0