執筆者: あんどう
最終更新: 2023/03/05
RAMちゃん「〽ああ〜〜
男の人って〜〜〜
いくつも〜〜〜
RAMを持って〜いるのね〜〜〜」
→持ってねえよ!
だが無駄にPCが複数ある!!!
DockerのRAM消費をケチるため、PCを2台使って分担する。
---
以下、2台のPCと3種類のターミナルが登場する。
ルータをいじって、WSLのマシンのIPを固定する。
Buffaloだったら「詳細設定→LAN→DHCPリース」から設定できる。
以下、このIPは 固定したIP
とするが、流石にスクリプトにハードコーディングはしない。
前提として以下を済ませる。
なおRDP(リモートデスクトップ)やOpenSSHサーバーは不要。まあ画面がしょぼいとかの理由で、RDPがあればベターだが、Proライセンスいるんよな。wsl.exe -l -v
してWSL1だった場合、以下のようにアップグレードする
wsl.exe --set-version ディストロ 2
wsl.exe --set-default-version 2
あと不確実性排除のためにディストロ固定する。お使いのディストロに合わせて適宜調整すること。
wsl --set-default ディストロ
以下、ホストのexe叩くだけなので、任意のディストロで動くはず。
sudo vi /bin/port_forward.sh
ユーザ関係ないのでbinに置いたが、適宜変えてくれ!ベターな場所があるはず
#!/bin/bash
# ポート開放の自動化
# Usage: ログオン時にやれ!
# ゲストのIP
IP=$(ip route | grep 'eth0 proto' | cut -d ' ' -f9)
function forward() {
PORT=$1
# 2つめのポート指定なければ同じポートを使う
PORT2=${2:-$PORT}
# まず削除
netsh.exe interface portproxy delete v4tov4 listenaddress=0.0.0.0 listenport=$PORT2
netsh.exe interface portproxy add v4tov4 connectaddress=$IP connectport=$PORT listenaddress=0.0.0.0 listenport=$PORT2
}
forward 22 2222 # SSHは2222に転送
# 以下はLaravel Sail用なので適宜変更
forward 3306 # mysql
forward 6379 # redis
forward 7700 # meilisearch
forward 8025 # mailhog
forward 8000 # web
# 自動起動
sc.exe config iphlpsvc start=auto
sc.exe start iphlpsvc
sudo service restart ssh
上記のスクリプトを書く。以下のことをしている
ipconfig.exe
を叩いてIPを取る。先程固定したが念の為。netsh.exe
でポートフォワードを設定する。ドキュメントはこちら22
→ 2222
)reset by peer
と怒られるnetsh.exe interface portproxy show v4tov4
ipv4 をリッスンする: ipv4 に接続する:
Address Port Address Port
--------------- ---------- --------------- ----------
0.0.0.0 2222 WSLのIP 22
# 後略
こんな感じになるはず。この場合 2222
番ポートにSSHすればWSLに入れる。
netsh.exe interface portproxy delete v4tov4 listenport=ポート
なんか間違えたときはこれで削除。
次に、ログオン時にポート開放するタスク設定と、ファイアウォール。
タスクスケジューラで以下のタスクを定義する。
wsl -u root --exec /bin/port_forward.sh
操作は上記のコマンド。
多分これでいいはず。
control firewall.cpl
ファイアウォールを開ける。「詳細設定」→「受信の規則」から新しいルールを追加し、
2222,3306
という風に必要なポートを開ける。
あとは、リモート開発をする。
開けたポートを使うようなコンテナを動かしていく。
cd 任意の開発用ディレクトリ
curl -s https://laravel.build/laravel-sandbox | bash
面倒なので一発で立ち上がるやつ。これをやらかすと laravel-sandbox
にLaravel一式がクローンされ、勝手にdocker-compose.ymlに書いてあるコンテナのビルドや、.envのコピーまで始めてくれる。一式というと、PHPもComposerもDBもここでビルドするので、割と時間がかかる。
cd laravel-sandbox
sed -i 's/APP_URL=http:\/\/localhost/APP_URL=http:\/\/localhost\nAPP_PORT=8000/' .env
./vendor/bin/sail up
80番になっているので APP_PORT=8000
に変えて起動。
vi ~/.ssh/config
Host wsl
HostName WSLマシンのIP
Port 2222
User WSLのユーザ名
ssh wsl
これでWSLに入って開発できるはず。VSCodeやJetBrainsのSSH機能も使える。
SSHだけじゃなく、8000番台とかも開放したのでWebアプリの動作確認もできる。
JetBrains系IDEはみんなこうなのか試してないが、PhpStormは4GM要求してきた。
俺のWSLマシンのRAMが4GBしかなく、フルにWSLに割り振る必要が出てきた。
wsl --exec vi /mnt/c/Users/ユーザー/.wslconfig
[wsl2]
memory=4GB
wsl --shutdown
まあ実際は4GB割り振れないんだが、誤魔化せる
▲passwordはpasswordではない(多分翻訳ミス)
この人が書いた記事