wsl2
更新: 2023-11-17 16:12:08
安装 wsl
前置条件,主板 bios 开启 intel 虚拟化
ms app store如果打不开、转圈 -> 关闭小飞机,也可以试试 改 ipv4 host 4.2.2.2
- windows terminal 必备,ms store 下载
ubuntu软件源
下面是 ubuntu20.04 用的
# 备份apt默认源
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
sudo vim /etc/apt/sources.list
# 替换 /srouces.list
deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
# deb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
# deb-src http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
# 更新apt
sudo apt upgrade
sudo apt update
安装 zsh
注意
.zshrc
在安装的用户
目录下,别和root
搞混了
# 安装
sudo apt install zsh
# 将 zsh 设置为默认 shell
chsh -s /bin/zsh
# 检查,若没成功,重启试试看
echo $SHELL
安装 oh-my-zsh
# 443 confused 手动 vim oh-my-zsh.sh 然后 bash ./oh-my-zsh.sh
sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
配置 oh-my-zsh 主题/插件/alias
安装插件
- 自动补全:
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
- 代码高亮:
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
修改当前用户
目录下的 .zshrc
# 主题
ZSH_THEME="ys"
# 引入插件
plugins=(git zsh-autosuggestions zsh-syntax-highlighting)
# alias
alias cls='clear'
alias ga='git add'
alias gc='git commit -m'
alias gp='git push'
alias gf='git fetch'
alias update='sudo apt update'
alias upgrade='sudo apt upgrade'
alias install='sudo apt install'
# windows文件管理器打开wsl文件
alias open='explorer.exe'
安装 Nodejs
安装完注意文字提示
# =>Appending nvm source string to /home/mozzie/.zshrc
# => Appending bash_completion source string to /home/mozzie/.zshrc
# => Close and reopen your terminal to start using nvm or run the following to use it now:
照它说的做
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion
验证nvm
安装 nvm ls
,会看见类似
iojs -> N/A (default)
node -> stable (-> N/A) (default)
unstable -> N/A (default)
安装 nodejs stable
nvm install node
# node -v | npm -v 验证安装版本
外网/LAN 访问 wsl2 服务
When using a WSL 1 distribution, if your computer was set up to be accessed by your LAN, then applications run in WSL could be accessed on your LAN as well.
This isn’t the default case in WSL 2. WSL 2 has a virtualized ethernet adapter with its own unique IP address. Currently, to enable this workflow you will need to go through the same steps as you would for a regular virtual machine. (We are looking into ways to improve this experience.)
Here’s an example PowerShell command to add a port proxy that listens on port 4000 on the host and connects it to port 4000 to the WSL 2 VM with IP address 192.168.101.100
netsh interface portproxy add v4tov4 listenport=4000 listenaddress=0.0.0.0 connectport=4000 connectaddress=192.168.101.100
注意端口覆盖的问题,避免 windows 端口和端口 wsl2 冲突
netsh 端口映射
listenaddress: 监听地址, 0.0.0.0 表示匹配所有地址
listenport: 监听的 windows 端口
connectaddress: 转发到 wsl2 的 ip地址, 这里设置为localhost,默认从 windows 可以通过localhost 访问 wsl2
connectport: 转发到 wsl2 的端口
例如 windows 的 ip 为 192.168.1.100
,监听 windows 的 3000 端口,转发到 wsl2 ip localhost 的 3000 端口
# windows-terminal 管理员权限执行
netsh interface portproxy add v4tov4 listenport=3000 listenaddress=0.0.0.0 connectport=3000 connectaddress=localhost
# 删除端口监听
netsh interface portproxy delete v4tov4 listenaddress=0.0.0.0 listenport=3000
配置 windows defender 防火墙入站规则
新建规则 -> 端口 -> TCP / 特定本地端口(3000) -> 允许链接 -> 下一步 -> 取个名字 -> Done
docker
windows 宿主机安装 docker desktop
,设置 -> 资源 -> WSL INTEGRATION
打开 对应的 linux发行版,即使用
mysql 容器
# brdige
docker network create --driver bridge --subnet=172.21.0.0/16 wsl2
# pull
docker pull mysql:5.7.38
# 生产 mysql 5.7.38 容器
docker run --restart=always --privileged=true -p 3306:3306 --name mysql --net wsl2 --ip 172.21.0.5 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7.38
mongo 容器
docker pull mongo:5.0
# 宿主机 /mongo/data
docker run --restart=always -d -p 27017:27017 -v /mongo/data:/data --name mongo --net wsl2 --ip 172.21.0.6 mongo:5.0 --auth
# 初始化
docker exec -it mongo /bin/bash
# 进入 mongo shell
mongo
# admin
use admin
# 创建root用户,管理全部数据库的权限,这会可以navicat等gui链接数据库,用户名密码root,验证数据库admin
db.createUser({
user: "root",
pwd: "root",
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
})
# 退出
exit
# 再次进入
mongo
# 使用root登录授权,正确返回 1
db.auth("root","root")
# 创建 testDB 数据库
use testDB
# 创建 test 用户 管理 testDB
db.createUser({user:'test',pwd:'test',roles:[{role:'dbOwner',db:'testDB'}]})
使用 navicat 登录,验证数据库 admin
,用户名密码 test
默认 wsl root 用户登录
# wsl -l 查看 ubuntu版本,例如 Ubuntu-20.04
Ubuntu2004 config --default-user root