昭和の時代は、会社には、ラボがあって、ある程度機材が会社にあったが、今はラボを持っている会社はあまりないのではと思う。そう、クラウドがあるからいらない。
昭和時代を知っている人は、「会社にラボがないのはおかしい」というが、会社にラボをおくって、
- 専用の部屋でセキュリティで入室管理
- 冷却は、エアコンではなく、そこそこの冷却設備(エアコンでもいいが。)
- 電源は壁コンセントではなく、専用電源(電源管理をしないと火事になる。壁コンセントでサーバ機材を動かすなんてもってのほか。)
- 火災報知器の設置
- ネットワーク機器の設定(ラボのDHCPが漏れて、全社員ラボのIPアドレスとかしゃれにならない。)
まぁ、すべてではないが、これらがあって初めてラボ機材が置ける。一体、いくらかかるんだろうか。。。では、自分の席におくと考えるが、会社の席にサーバ機材置いて、夜中にリモートで入って、マシンをぶん回したら、テーブルタップから煙が出た。という話もある。なので、会社のITの人間は、電源入れっぱなしの機材が自席に置いてあると電源を抜いてしまうとか。(実話)
一方、ホームラボって、上記のようなことは必須ではないが、自分でやらなければならない。一番、痛い思いをするのが電気代。電気代がバカにならない。夏はエアコンもかけっぱなしになる。いくらお金(電気)があっても足りない。そこで、Wake On LANの出番になる。昔のBuffaloの一部のルータには、Wake on LANの機能が付いていたが、今は見当たらない。
自分の場合、EdgeRouterにsshでログインをして、
sudo etherwake -i ethX MAC_address
少し待って
ping IP_address
めんどくさい。
閑話休題
Radditで以下を発見
https://www.reddit.com/r/selfhosted/comments/121pxol/wake_on_lan_gui_on_docker_container/?rdt=57500
https://github.com/Misterbabou/gptwol
これを使うとWeb GUIで電源ONができる。QnapのDockerで動かしてみた。QNAPは、電源入れっぱなしなのでちょうどいい。
動作条件としては、
- Docker環境と同じネットワークセグメントに電源オンにするサーバが存在(別ネットワークはだめ)
- BIOS設定でWake On Lanパケットで電源がオンになるようになっている。
- 電源がオンになると固定IPアドレスが付与される。(DHCPの場合は、静的なアドレスを振る必要がある)
- Pingあるいは、ポートが開いている
のが条件になる。
以下のDocker Composeで起動。
ネットワークは、NATではダメで、Bridgeじゃないと動作しない。設置パス、ポートなどは自分の構成で書き換えること。
mkdir -p /PATH/TO/gptwol
cd /PATH/TO/gptwol
cat << EOF > docker-compose.yml
services:
gptwol:
container_name: gptwol
image: misterbabou/gptwol:latest
network_mode: host
restart: always
environment:
- PORT=18081 #Free Port on Your host; default is 5000
- TZ=Asia/Tokyo #Set your timezone for Cron; default is UTC
#- SCRIPT_NAME=/my-app #Uncomment this line to run the app under a prefix
#- DISABLE_ADD_DEL=1 #Uncomment this line to disable Add or delete Computers; default is to allow
#- DISABLE_REFRESH=1 #Uncomment this line to prevent your browser to refresh Computer status; default is to allow
#- REFRESH_INTERVAL=15 # Uncomment this line to change status check for icmp ou tcp, can be 15 or 60 (seconds); default value is 30 seconds
#- PING_TIMEOUT=200 #Uncomment this line to change the time to wait for a ping answer in (in ms); default value is 300 milliseconds
#- TCP_TIMEOUT=5 #Uncomment this line to change the time to wait for a tcp check (in s); default value 1 second
volumes:
- ./computers.txt:/app/computers.txt
- ./appdata/cron:/etc/cron.d
EOF
touch computers.txt
docker compose up -d