Windows+WSL2自建专属个人服务器

通过启用Windows10或者Windows11中的WSL2的Ubuntu,在Ubuntu中构建一个属于自己的Linux服务器。

宿主计算机配置

开启WSL2

  1. 通过Windows的“启用或关闭Windows功能”开启Linux子系统功能:
  • 勾选“适用于Linux的Windows子系统”
  • 勾选“虚拟机平台”
    启用或关闭Windows功能
  1. 配置WSL使用的版本为WSL2。
  • 安装WSL2内核
  • 在PowerShell中运行命令:
    1
    wsl --set-default-version 2
  1. 通过Windows的“应用商店”安装如下内容:
  • 安装“Ubuntu”
    应用商店

WSL自启动

  1. 在Windows用户开机启动目录中添加C:\Users\用户名\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup文件linux-start.vbs,文件内容如下:
    1
    2
    Set ws = WScript.CreateObject("WScript.Shell")        
    ws.run "wsl -d Ubuntu -u root /etc/init.wsl"
  • 上述文件内容包含如下信息:
    • 指定linux-start.vbs为Windows启动时运行的程序;
    • vbs中运行Ubuntu的WSL内的/etc/init.wsl,指定-u root执行运行的用户。
    • vbs中运行Ubuntu的WSL内的/etc/init.wsl,所以,我们需要提前在WSL2中创建好该文件,内容为需要开机启动的项目)。

端口监听

  1. 通过Windows自带的netsh工具的端口代理功能,可以讲将WSL2的内部监听端口作用在宿主计算机上,达到端口转发的效果。
    1
    2
    3
    4
    5
    6
    7
    8
    # 查看所有端口代理
    netsh interface portproxy show all
    # 增加一个IPV4到IPV4的端口代理
    netsh interface portproxy add v4tov4 listenport=外部端口 connectaddress=localhost connectport=内部端口
    # 增加一个IPV4到IPV6的端口代理
    netsh interface portproxy add v4tov6 listenport=外部端口 connectaddress=localhost connectport=内部端口
    # 删除指定的端口代理
    netsh interface portproxy delete v4tov4 listenport=外部端口

释放磁盘

  1. 由于WSL2的特殊设计,其使用过的磁盘空间需要宿主计算机中通过如下命令才可以真正释放。
    1
    2
    # 关闭虚拟机
    wsl --terminate Ubuntu
  2. 通过Powershell运行diskpart进入磁盘管理工具命令行内,再输入如下内容进行磁盘压缩
    1
    2
    select vdisk file="C:\Users\【用户名】\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu_79rhkp1fndgsc\LocalState\ext4.vhdx"
    compact vdisk

(可选)显卡驱动(NVIDIA + CUDA)

  1. 下载并安装英伟达官方显卡驱动

WSL配置

SSH

  1. 安装OpenSSH
    1
    2
    sudo apt autoremove openssh-server
    sudo apt install openssh-server
  2. 配置OpenSSH
  • 编辑文件/etc/ssh/sshd_config的如下配置:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    # 将监听端口定在222用于将22预留给宿主计算机暴露给外部网络
    Port 222
    # 在IPV4上进行监听
    ListenAddress 0.0.0.0
    # 允许公钥进行登录
    PubkeyAuthentication yes
    # 允许密码进行登录
    PasswordAuthentication yes
    # 指定公钥存储目录
    AuthorizedKeysFile .ssh/authorized_keys
  • 重新启动服务。
    1
    sudo service ssh restart
  • (可选)在可信设备中,通过ssh-copy-id将公钥传入WSL配置免密登录。
    1
    ssh-copy-id 用户名@地址 -p 端口
  • 编辑/etc/init.wsl,将启动SSH作添加到Windows开机自启动脚本中。
    1
    2
    #! /bin/sh
    /etc/init.d/ssh start

Java

  1. 下载OpenJDK11并解压。
  2. 添加环境变量到.bashrc
    1
    2
    # OpenJDK11
    export PATH=$PATH:/home/zsj/Desktop/00-DevBuild/jdk-11.0.14.1+1/bin
  3. 修改 Mavensetting.xml依赖源为阿里云镜像
    1
    2
    3
    4
    5
    6
    <mirror>
    <id>nexus-aliyun</id>
    <mirrorOf>*</mirrorOf>
    <name>Nexus aliyun</name>
    <url>http://maven.aliyun.com/nexus/content/groups/public</url>
    </mirror>

Anaconda(Python)

  1. 下载Anaconda3运行安装,在安装阶段已经包含添加环境变量的配置。

NodeJS

  1. 下载NodeJS16并解压。
  2. 添加环境变量到.bashrc
    1
    2
    # NodeJS16
    export PATH=$PATH:/home/zsj/Desktop/00-DevBuild/node-v16.14.2-linux-x64/bin
  3. 修改npm的依赖源为淘宝镜像
    1
    npm config set registry http://registry.npm.taobao.org/

Github

  1. 通过ssh-keygen-t生成密钥对
    1
    ssh-keygen -t rsa
  2. 读出~/.ssh/id_rsa.pub内的公钥,将其添加到Github账户中
    Github公钥
  3. 配置Git本地作者信息
    1
    2
    git config --global user.name "zhongshijie"
    git config --global user.email "zhongshijie1995@outlook.com"

运行exe在宿主计算机上

  1. WSL2在执行.exe文件时会自动使用宿主计算机Windows来运行,所以要想运行宿主计算机的应用程序,直接运行它即可:
    1
    2
    3
    4
    # 创建一个快捷方式在WSL中
    ln -s '/mnt/c/Program Files (x86)/ToDesk/ToDesk.exe' /home/zsj/WindowsApp/ToDesk.exe
    # 直接运行快捷方式
    /home/zsj/WindowsApp/ToDesk.exe

Windows+WSL2自建专属个人服务器
https://zhongshijie1995.github.io/posts/20003/
作者
钟世杰
发布于
2022年3月11日
许可协议
BY BY-SA