230 lines
6.7 KiB
Markdown
230 lines
6.7 KiB
Markdown
|
---
|
|||
|
title: wsl2
|
|||
|
categories:
|
|||
|
- Front-End
|
|||
|
status: done
|
|||
|
---
|
|||
|
|
|||
|
# 安装 wsl
|
|||
|
|
|||
|
前置条件,主板 bios 开启 `intel 虚拟化`
|
|||
|
|
|||
|
> ms app store如果打不开、转圈 -> 关闭小飞机,也可以试试 改 ipv4 host 4.2.2.2
|
|||
|
|
|||
|
- windows terminal 必备,ms store 下载
|
|||
|
|
|||
|
[巨硬官方文档](https://docs.microsoft.com/en-us/windows/wsl/install)
|
|||
|
|
|||
|
# ubuntu软件源
|
|||
|
|
|||
|
[阿里开源镜像站](https://developer.aliyun.com/mirror/)
|
|||
|
|
|||
|
下面是 ubuntu20.04 用的
|
|||
|
|
|||
|
```bash
|
|||
|
# 备份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`搞混了
|
|||
|
|
|||
|
```bash
|
|||
|
# 安装
|
|||
|
sudo apt install zsh
|
|||
|
# 将 zsh 设置为默认 shell
|
|||
|
chsh -s /bin/zsh
|
|||
|
# 检查,若没成功,重启试试看
|
|||
|
echo $SHELL
|
|||
|
```
|
|||
|
|
|||
|
# 安装 oh-my-zsh
|
|||
|
|
|||
|
```bash
|
|||
|
# 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
|
|||
|
|
|||
|
安装插件
|
|||
|
|
|||
|
- 自动补全:
|
|||
|
|
|||
|
```bash
|
|||
|
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
|
|||
|
```
|
|||
|
|
|||
|
- 代码高亮:
|
|||
|
|
|||
|
```bash
|
|||
|
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
|
|||
|
```
|
|||
|
|
|||
|
修改`当前用户`目录下的 `.zshrc`
|
|||
|
|
|||
|
```bash
|
|||
|
# 主题
|
|||
|
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
|
|||
|
|
|||
|
[巨硬文档赛高](https://docs.microsoft.com/en-us/windows/dev-environment/javascript/nodejs-on-wsl)
|
|||
|
|
|||
|
安装完注意文字提示
|
|||
|
|
|||
|
```bash
|
|||
|
# =>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:
|
|||
|
```
|
|||
|
照它说的做
|
|||
|
|
|||
|
```bash
|
|||
|
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`,会看见类似
|
|||
|
|
|||
|
```bash
|
|||
|
iojs -> N/A (default)
|
|||
|
node -> stable (-> N/A) (default)
|
|||
|
unstable -> N/A (default)
|
|||
|
```
|
|||
|
|
|||
|
安装 `nodejs stable`
|
|||
|
|
|||
|
```bash
|
|||
|
nvm install node
|
|||
|
# node -v | npm -v 验证安装版本
|
|||
|
```
|
|||
|
|
|||
|
# 外网/LAN 访问 wsl2 服务
|
|||
|
|
|||
|
[巨硬官方解释](https://docs.microsoft.com/en-us/windows/wsl/networking)
|
|||
|
|
|||
|
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
|
|||
|
|
|||
|
```bash
|
|||
|
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 端口
|
|||
|
|
|||
|
```bash
|
|||
|
# 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 容器
|
|||
|
|
|||
|
```bash
|
|||
|
# 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 容器
|
|||
|
|
|||
|
```bash
|
|||
|
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 用户登录
|
|||
|
|
|||
|
```bash
|
|||
|
# wsl -l 查看 ubuntu版本,例如 Ubuntu-20.04
|
|||
|
Ubuntu2004 config --default-user root
|
|||
|
```
|