どうでもよい経緯
N100のミニPCを買って、外付けHDDをつけてNASっぽく使っていたのだが、
別件でWEBの開発環境と本番環境があまりにも違うので、趣味とはいえ大きめのリリース時は確認環境あったほうが良いなと思って、一度EC2で立ち上げたのだが、
使わないときは落とそうと思うとIPが変わって面倒だし、IP変えないようするとお金かかるし、落としている状態でもストレージ的にお金がかかっていて微妙だなと思っていた。
(なおかかるお金は月数百円とか)
そういやミニPCあるし、つけっぱなしだしこいつを確認環境にすれば楽じゃね?と思って、やってみました。
ちなみにこれ:https://www.amazon.co.jp/gp/product/B0C6T2T4JH/
WSL(Linux 用 Windows サブシステム)のインストール
入れるだけなら公式のドキュメントで困ることはないでしょう
今回はUbuntu22をいれました。
ほぼそのままですが、下記のことでハマったりましたね
SSHの設定
下の記事に書いてあるのがほとんど
sudo ssh-keygen -A
sudo service ssh restart
あとは、鍵で入りたいなら接続元で作った公開鍵を設置したり、パスワードログインOKにしたりの設定が必要です。
ポートの開放系
ここが少し厄介で、Windowsのファイヤーウォール、Windows自身のポートの捌き、Ubuntuのファイヤーウォールあたりが影響します。
外から繋ぐ場合はルーターのファイヤーウォールなどもあるかもしれませんが、今回は同一ネットワーク内からのみなので行いません。
Windowsのファイヤーウォール
自分の場合はセキュリティソフトを入れているため、Windowsのファイヤーウォールの設定はそこを変える感じになりました。
ESET:https://eset-support.canon-its.jp/faq/show/235?site_domain=default
今回はSSHの22、HTTP80、HTTPS443を
LANからしか繋がないので、
192.168.0.0/21
くらいから許可するようにしました(サブネットマスクは適当)
外部セキュリティソフトを使ってない場合もWindows自身のファイヤーウォールがあるので、ポート開放は必要です。
New-NetFireWallRule -DisplayName 'WSL 2 Firewall Unlock' -Direction Outbound -LocalPort 22 -Action Allow -Protocol TCP
New-NetFireWallRule -DisplayName 'WSL 2 Firewall Unlock' -Direction Inbound -LocalPort 22 -Action Allow -Protocol TCP
Windowsのポートフォワーディング
Windowsにたどり着いても、WSLにたどり着けないのでポートフォワーディングします。
WSLのIP確認
netsh.exe interface portproxy add v4tov4 listenport=22 connectaddress=<WSLのIP>
netsh.exe interface portproxy add v4tov4 listenport=80 connectaddress=<WSLのIP>
netsh.exe interface portproxy add v4tov4 listenport=443 connectaddress=<WSLのIP>
# 確認
netsh.exe interface portproxy show v4tov4
ipv4 をリッスンする: ipv4 に接続する:
Address Port Address Port
--------------- ---------- --------------- ----------
* 22 <WSLのIP> 22
* 443 <WSLのIP> 443
* 80 <WSLのIP> 80
powershellから実行する場合は .exe
不要です。
Windows再起動でWSLのIPが変わるようで、
確認時の参考に
Ubuntuのファイヤーウォール
そもそもWSL内ならファイヤーウォール自体を設定してなくても良いかもしれませんが、一応本番と揃えて。
sudo ufw enable
sudo ufw allow 22
sudo ufw allow 80
sudo ufw allow 443
接続
別PCから接続してみます。接続先PCのIPは、
Powershellから ipconfig
とかでわかると思います。
$ ssh <接続先WindowsIP>
コマンドで繋いでますが、Teratermとかお好きに
繋がらない場合は、ファイヤーウォールがおかしいか、ポートフォワーディングがうまくいってないか、WSLのSSH設定がおかしいか、接続認証の問題でしょう。
接続エラーメッセージから推測するしかないと思います。
(そもそも繋がらないのか、拒否されるのか、認証エラーかなど)
WEBサーバーの用意
ポート類は開けたので、あとはサーバーを立てるのみです。
初期時点でapacheが入ってました。もしかしたら
http://<接続先WindowsIP>
でこの時点でつながるかもしれません
nginxを使いたいのでapacheを消してnginxを入れます(ポートの利用が重複するので)
sudo apt-get remove apache2
sudo apt install nginx
これで、デフォルトページが出るようになるはずです。
SSH(ポート22)が繋がっていればHTTP(ポート80)は、同様の設定を一緒に行っているので、繋がらないことはないと思います。
繋がらない場合はサーバーが立ち上がってないとかでしょう
ミニPCの動作の軽快さ
N100で正直どうかというと、さすがにVPSなどとは比較にならないほど快適です
EC2の雑魚スペックだとyarn buildするとCPUが死ぬとかあり、結局mediumとか多少コストが掛かるものにする必要があったりするがそんなこともなく、重いと感じることもなくさくさく動いてる
上記以外に、node、PHP、Solr(Java)、MariaDBなどぶっ込んでますが、スペック的になにも困ることはないです。
そういう点では逆に本番VPSでは重くて動かなかった的なことは有り得ることですが(笑
WSL動かすならメモリは多めの方が良いかもしれないですね。デフォルト設定だとメモリ利用量は100%近いです。
(多少高くなっても8GBより多めを選んでよかった。値段次第では16GBを選んでも良さそう)
ちなみに私はミニPCはダミーのHDMIプラグを挿して、GoogleRemotedDesktopから操作しています。
なので、今回ルーターなどは設定してなくて外からは入れないはずですが、SSH的なところだけで言えば、RemotedDesktop上でいじることができます。