ITPub博客

首页 > 应用开发 > IT综合 > Windows系统集成Linux开发:VSCode与WSL配置及内网穿透方案

Windows系统集成Linux开发:VSCode与WSL配置及内网穿透方案

投稿 IT综合 作者:bhluo 时间:2026-01-23 10:59:57 0 删除 编辑

# Windows系统集成Linux开发:VSCode与WSL配置及内网穿透方案


## 一、WSL2环境完整配置


### 1.1 WSL2安装与基础设置


```powershell

# 以管理员身份打开PowerShell

# 1. 启用WSL和虚拟机平台功能

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart


# 2. 重启系统后,设置WSL2为默认版本

wsl --set-default-version 2


# 3. 从Microsoft Store安装Ubuntu 24.04 LTS

# 或使用命令行安装

wsl --install -d Ubuntu-24.04


# 4. 验证安装

wsl --list --verbose

# 输出示例:

#   NAME            STATE           VERSION

# * Ubuntu-24.04    Running         2


# 5. 进入WSL环境

wsl

```


### 1.2 WSL2系统优化配置


```bash

# 在WSL终端中执行

# 更新系统并安装常用工具

sudo apt update && sudo apt upgrade -y

sudo apt install -y build-essential git curl wget zsh


# 配置SSH服务(用于远程连接)

sudo apt install -y openssh-server

sudo systemctl enable ssh --now


# 修改SSH配置允许密码登录

sudo sed -i 's/#PasswordAuthentication yes/PasswordAuthentication yes/' /etc/ssh/sshd_config

sudo systemctl restart ssh


# 设置WSL内存限制(编辑Windows配置文件)

# 创建或编辑 %USERPROFILE%\.wslconfig

notepad.exe "$env:USERPROFILE\.wslconfig"

```


`.wslconfig` 文件内容:

```ini

[wsl2]

memory=8GB       # 限制内存使用

processors=4     # CPU核心数

swap=2GB         # 交换空间

localhostForwarding=true

```


## 二、VSCode与WSL深度集成


### 2.1 必要扩展安装


在VSCode中安装以下关键扩展:

1. **Remote - WSL** - WSL远程开发支持

2. **Remote - SSH** - SSH远程连接

3. **C/C++** - C/C++语言支持

4. **Python** - Python开发支持

5. **Docker** - 容器开发支持


```json

// VSCode配置文件示例 settings.json

{

    "terminal.integrated.defaultProfile.windows": "Ubuntu-24.04 (WSL)",

    "terminal.integrated.profiles.windows": {

        "Ubuntu-24.04 (WSL)": {

            "path": "wsl.exe",

            "args": ["-d", "Ubuntu-24.04"]

        }

    },

    "remote.WSL2.connectionMethod": "docker",

    "git.path": "/usr/bin/git",

    "terminal.integrated.cwd": "~/projects",

    "files.eol": "\n",  // 统一使用Linux换行符

    "editor.formatOnSave": true

}

```


### 2.2 开发环境搭建示例


```bash

# 在WSL中创建项目结构

mkdir -p ~/projects/myapp/{src,include,test,build}

cd ~/projects/myapp


# 创建CMake配置

cat > CMakeLists.txt << 'EOF'

cmake_minimum_required(VERSION 3.10)

project(MyApp VERSION 1.0.0)


set(CMAKE_CXX_STANDARD 17)

set(CMAKE_CXX_STANDARD_REQUIRED ON)


add_executable(myapp src/main.cpp)

target_include_directories(myapp PRIVATE include)


if(WIN32)

    # Windows特定配置

else()

    # Linux/WSL特定配置

    target_link_libraries(myapp pthread)

endif()

EOF


# 创建示例代码

cat > src/main.cpp << 'EOF'

#include <iostream>

#include "config.h"


int main() {

    std::cout << "项目: " << PROJECT_NAME << std::endl;

    std::cout << "版本: " << PROJECT_VERSION << std::endl;

    std::cout << "运行在: ";

    

    #ifdef _WIN32

        std::cout << "Windows" << std::endl;

    #else

        std::cout << "Linux/WSL" << std::endl;

    #endif

    

    return 0;

}

EOF


cat > include/config.h << 'EOF'

#pragma once


#define PROJECT_NAME "MyApp"

#define PROJECT_VERSION "1.0.0"

EOF

```


## 三、cpolar内网穿透配置


### 3.1 cpolar安装与隧道建立


```bash

# 在WSL中安装cpolar

curl -L https://www.cpolar.com/static/downloads/cpolar-stable-linux-amd64.tar.gz | tar xz

sudo mv cpolar /usr/local/bin/


# 验证安装

cpolar version


# 配置认证(需要注册账户获取authtoken)

cpolar authtoken YOUR_AUTH_TOKEN_HERE


# 创建SSH隧道

cpolar tcp 22 --region=cn

# 输出示例:

# tcp://3.tcp.cpolar.cn:11022

# 公网地址:3.tcp.cpolar.cn:11022


# 创建HTTP隧道(Web服务)

cpolar http 8080 --region=cn

```


### 3.2 自动化隧道管理脚本


```bash

#!/bin/bash

# tunnel_manager.sh


CONFIG_FILE="$HOME/.cpolar/tunnels.json"

LOG_FILE="$HOME/.cpolar/cpolar.log"


start_ssh_tunnel() {

    echo "启动SSH隧道..."

    nohup cpolar tcp 22 --region=cn > "$LOG_FILE" 2>&1 &

    echo $! > /tmp/cpolar_ssh.pid

    

    # 等待隧道建立

    sleep 3

    grep -o "tcp://[^ ]*" "$LOG_FILE" | tail -1

}


start_web_tunnel() {

    local port=${1:-8080}

    echo "启动Web隧道 (端口: $port)..."

    nohup cpolar http "$port" --region=cn >> "$LOG_FILE" 2>&1 &

    echo $! > /tmp/cpolar_web.pid

    

    sleep 3

    grep -o "https://[^ ]*" "$LOG_FILE" | tail -1

}


stop_tunnel() {

    local type=$1

    local pid_file="/tmp/cpolar_${type}.pid"

    

    if [ -f "$pid_file" ]; then

        echo "停止${type}隧道..."

        kill $(cat "$pid_file") 2>/dev/null

        rm -f "$pid_file"

    fi

}


monitor_tunnels() {

    echo "隧道状态监控..."

    while true; do

        clear

        echo "=== 隧道状态 ==="

        echo "时间: $(date)"

        echo

        

        # 检查SSH隧道

        if [ -f "/tmp/cpolar_ssh.pid" ]; then

            if kill -0 $(cat /tmp/cpolar_ssh.pid) 2>/dev/null; then

                echo "✓ SSH隧道运行中"

                grep "tcp://" "$LOG_FILE" | tail -1

            else

                echo "✗ SSH隧道已停止"

            fi

        fi

        

        # 检查Web隧道

        if [ -f "/tmp/cpolar_web.pid" ]; then

            if kill -0 $(cat /tmp/cpolar_web.pid) 2>/dev/null; then

                echo "✓ Web隧道运行中"

                grep "https://" "$LOG_FILE" | tail -1

            else

                echo "✗ Web隧道已停止"

            fi

        fi

        

        echo

        echo "按 Ctrl+C 退出监控"

        sleep 10

    done

}


case "${1:-}" in

    start-ssh)

        start_ssh_tunnel

        ;;

    start-web)

        start_web_tunnel "${2:-8080}"

        ;;

    stop)

        stop_tunnel "${2:-all}"

        ;;

    monitor)

        monitor_tunnels

        ;;

    *)

        echo "用法: $0 {start-ssh|start-web [port]|stop [type]|monitor}"

        exit 1

        ;;

esac

```


## 四、完整开发工作流配置


### 4.1 自动化开发环境脚本


```bash

#!/bin/bash

# dev_setup.sh - 一键开发环境配置


setup_development() {

    echo "配置开发环境..."

    

    # 1. 安装编程语言环境

    install_languages() {

        # Python

        sudo apt install -y python3 python3-pip python3-venv

        pip3 install --upgrade pip

        

        # Node.js

        curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -

        sudo apt install -y nodejs

        

        # Go

        wget https://go.dev/dl/go1.22.0.linux-amd64.tar.gz

        sudo tar -C /usr/local -xzf go1.22.0.linux-amd64.tar.gz

        echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bashrc

        

        # Rust

        curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y

    }

    

    # 2. 安装开发工具

    install_tools() {

        # 构建工具

        sudo apt install -y cmake ninja-build

        

        # 数据库

        sudo apt install -y sqlite3 postgresql-client

        

        # 容器工具

        sudo apt install -y docker.io

        sudo usermod -aG docker $USER

        

        # 网络工具

        sudo apt install -y net-tools nmap ngrok

    }

    

    # 3. 配置Git

    setup_git() {

        git config --global user.name "Your Name"

        git config --global user.email "your.email@example.com"

        git config --global core.autocrlf input

        git config --global core.eol lf

    }

    

    # 4. 创建项目模板

    create_templates() {

        mkdir -p ~/templates/{python,web,cpp}

        

        # Python项目模板

        cat > ~/templates/python/.env << 'EOF'

PYTHONPATH=src

FLASK_APP=app.py

FLASK_ENV=development

EOF

        

        # Web项目模板

        cat > ~/templates/web/package.json << 'EOF'

{

  "name": "web-project",

  "version": "1.0.0",

  "scripts": {

    "dev": "vite",

    "build": "vite build"

  }

}

EOF

    }

    

    # 执行所有步骤

    install_languages

    install_tools

    setup_git

    create_templates

    

    echo "开发环境配置完成"

}


# VSCode远程配置函数

setup_vscode_remote() {

    echo "配置VSCode远程开发..."

    

    # 生成SSH密钥

    ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519 -N ""

    

    # 添加到WSL的authorized_keys

    cat ~/.ssh/id_ed25519.pub >> ~/.ssh/authorized_keys

    chmod 600 ~/.ssh/authorized_keys

<"fan.jsnjz.cn"><"dyabld.csxthr.com"><"dybzq.zhaiLimao.com">

    

    # 获取WSL IP地址

    WSL_IP=$(ip addr show eth0 | grep -oP '(?<=inet\s)\d+(\.\d+){3}')

    

    echo "WSL IP地址: $WSL_IP"

    echo "SSH连接命令: ssh $USER@$WSL_IP"

    echo

    echo "VSCode SSH配置:"

    echo "Host wsl-dev"

    echo "  HostName $WSL_IP"

    echo "  User $USER"

    echo "  IdentityFile ~/.ssh/id_ed25519"

}


main() {

    setup_development

    setup_vscode_remote

    

    echo "=== 环境信息 ==="

    echo "Python: $(python3 --version)"

    echo "Node.js: $(node --version)"

    echo "Git: $(git --version)"

    echo "================"

}


main

```


### 4.2 VSCode任务与调试配置


```json

// .vscode/tasks.json

{

    "version": "2.0.0",

    "tasks": [

        {

            "label": "Build Project",

            "type": "shell",

            "command": "cd ${workspaceFolder}/build && cmake .. && make",

            "group": {

                "kind": "build",

                "isDefault": true

            },

            "problemMatcher": ["$gcc"]

        },

        {

            "label": "Start cpolar SSH Tunnel",

            "type": "shell",

            "command": "${workspaceFolder}/scripts/tunnel_manager.sh start-ssh",

            "problemMatcher": []

        },

        {

            "label": "Start Development Server",

            "type": "shell",

            "command": "python3 -m http.server 8080",

            "isBackground": true,

            "problemMatcher": []

        }

    ]

}


// .vscode/launch.json - C++调试配置

{

    "version": "0.2.0",

    "configurations": [

        {

            "name": "C++ Debug (WSL)",

            "type": "cppdbg",

            "request": "launch",

            "program": "${workspaceFolder}/build/myapp",

            "args": [],

            "stopAtEntry": false,

            "cwd": "${workspaceFolder}",

            "environment": [],

            "externalConsole": false,

            "MIMode": "gdb",

            "setupCommands": [

                {

                    "description": "为gdb启用整齐打印",

                    "text": "-enable-pretty-printing",

                    "ignoreFailures": true

                }

            ],

            "preLaunchTask": "Build Project",

            "miDebuggerPath": "/usr/bin/gdb"

        }

    ]

}

```


## 五、网络服务与远程访问


### 5.1 Web服务开发与暴露


```python

# app.py - Flask Web应用示例

from flask import Flask, jsonify

import socket


app = Flask(__name__)


@app.route('/')

def home():

    hostname = socket.gethostname()

    ip_address = socket.gethostbyname(hostname)

    

    return jsonify({

        'service': 'WSL Development Server',

        'hostname': hostname,

        'ip_address': ip_address,

        'status': 'running',

        'environment': 'WSL2 + VSCode'

    })


@app.route('/api/health')

def health_check():

    return jsonify({'status': 'healthy'})


@app.route('/api/tunnels')

def tunnel_info():

    """返回当前隧道信息"""

    import subprocess

    result = subprocess.run(['cpolar', 'list'], 

                          capture_output=True, text=True)

    

    return jsonify({

        'tunnels': result.stdout.split('\n')

    })


if __name__ == '__main__':

    # 在WSL中绑定到所有接口

    app.run(host='0.0.0.0', port=8080, debug=True)


# 启动脚本 start_dev_server.sh

#!/bin/bash

# 启动开发服务器并建立隧道


echo "启动开发服务器..."

python3 app.py &

SERVER_PID=$!


echo "服务器PID: $SERVER_PID"


# 等待服务器启动

sleep 2


echo "建立内网穿透隧道..."

TUNNEL_URL=$(cpolar http 8080 --region=cn 2>&1 | grep -o "https://[^ ]*")


echo "公网访问地址: $TUNNEL_URL"


# 保持脚本运行

trap "kill $SERVER_PID; exit" SIGINT SIGTERM

wait $SERVER_PID

```


### 5.2 数据库服务配置


```bash

# 安装和配置MySQL

sudo apt install -y mysql-server

sudo systemctl start mysql

sudo systemctl enable mysql


# 安全配置

sudo mysql_secure_installation


# 创建开发数据库

mysql -u root -p << 'EOF'

CREATE DATABASE dev_db;

CREATE USER 'dev_user'@'%' IDENTIFIED BY 'secure_password';

GRANT ALL PRIVILEGES ON dev_db.* TO 'dev_user'@'%';

FLUSH PRIVILEGES;

EOF


# 暴露数据库到公网(谨慎使用)

cpolar tcp 3306 --region=cn

# 输出公网地址供远程连接

```


## 六、性能优化与问题解决


### 6.1 WSL性能优化配置


```powershell

# Windows PowerShell中的优化脚本

# Optimize-WSL.ps1


# 1. 配置WSL资源限制

$wslconfig = @"

[wsl2]

memory=12GB

processors=6

swap=4GB

localhostForwarding=true


# 磁盘优化

[experimental]

autoMemoryReclaim=gradual

sparseVhd=true

"@


$wslconfig | Out-File -FilePath "$env:USERPROFILE\.wslconfig" -Encoding UTF8


# 2. 配置Windows防火墙规则

New-NetFirewallRule -DisplayName "WSL Development" `

    -Direction Inbound `

    -LocalPort 8080,3000,3306,5432 `

    -Protocol TCP `

    -Action Allow


# 3. 配置VSCode性能优化

$vscodeSettings = @"

{

    "editor.cursorBlinking": "solid",

    "editor.fontSize": 14,

    "files.watcherExclude": {

        "**/.git/objects/**": true,

        "**/node_modules/**": true,

        "**/build/**": true

    },

    "search.exclude": {

        "**/node_modules": true,

        "**/bower_components": true,

        "**/*.code-search": true

    }

}

"@


# 4. 重启WSL应用配置

wsl --shutdown

Start-Sleep -Seconds 5

wsl

```


### 6.2 常见问题解决脚本


```bash

#!/bin/bash

# wsl_troubleshoot.sh


echo "=== WSL问题诊断工具 ==="


check_wsl_status() {

    echo "1. 检查WSL状态..."

    wsl --list --verbose

    wsl --status

}


check_network() {

    echo "2. 检查网络连接..."

    

    # 检查WSL网络

    ip addr show eth0

    

    # 测试与Windows主机的连接

    windows_ip=$(grep nameserver /etc/resolv.conf | awk '{print $2}')

<"migu.yunruiwater.cn"><"iqiy.sxyicheng.cn"><"basa.jsnjz.cn">

    echo "Windows主机IP: $windows_ip"

    ping -c 3 $windows_ip

    

    # 测试外网连接

    ping -c 3 google.com

}


check_disk_space() {

    echo "3. 检查磁盘空间..."

    df -h /

    

    # 检查Windows磁盘映射

    ls -la /mnt/c/Users/

}


fix_resolv_conf() {

    echo "4. 修复DNS解析..."

    

    # 备份原配置

    sudo cp /etc/resolv.conf /etc/resolv.conf.backup

    

    # 创建新配置

    cat << EOF | sudo tee /etc/resolv.conf

nameserver 8.8.8.8

nameserver 8.8.4.4

EOF

    

    sudo chattr +i /etc/resolv.conf

}


fix_permissions() {

    echo "5. 修复文件权限..."

    

    # 修复Windows挂载目录的权限

    sudo umount /mnt/c

    sudo mount -t drvfs C: /mnt/c -o metadata,uid=1000,gid=1000

    

    # 修复项目目录权限

    find ~/projects -type d -exec chmod 755 {} \;

    find ~/projects -type f -exec chmod 644 {} \;

}


case "${1:-}" in

    network)

        check_network

        ;;

    disk)

        check_disk_space

        ;;

    fix-dns)

        fix_resolv_conf

        ;;

    fix-perms)

        fix_permissions

        ;;

    full)

        check_wsl_status

        check_network

        check_disk_space

        ;;

    *)

        echo "用法: $0 {network|disk|fix-dns|fix-perms|full}"

        exit 1

        ;;

esac

```


## 七、自动化部署脚本


```bash

#!/bin/bash

# deploy_project.sh


DEPLOY_ENV=${1:-development}

PROJECT_DIR="$HOME/projects/myapp"

DEPLOY_LOG="$PROJECT_DIR/deploy.log"


deploy_development() {

    echo "部署到开发环境..." | tee -a "$DEPLOY_LOG"

    

    cd "$PROJECT_DIR"

    

    # 更新代码

    git pull origin main

    

    # 安装依赖

    npm install  # 或 pip install -r requirements.txt

    

    # 构建项目

    npm run build  # 或 python setup.py build

    

    # 重启服务

    pm2 restart myapp || pm2 start ecosystem.config.js

    

    # 建立隧道

    ./scripts/tunnel_manager.sh start-web 8080

    

    echo "开发部署完成" | tee -a "$DEPLOY_LOG"

}


deploy_production() {

    echo "警告:生产环境部署需要谨慎操作"

    read -p "确认部署到生产环境?(yes/no): " confirm

    

    if [ "$confirm" != "yes" ]; then

        echo "部署取消"

        return 1

    fi

    

    # 生产环境部署逻辑

    # 这里可以添加自动化部署到云服务器的代码

    echo "生产环境部署流程..."

}


# 主部署流程

main() {

    echo "开始部署: $DEPLOY_ENV" | tee -a "$DEPLOY_LOG"

    echo "时间: $(date)" | tee -a "$DEPLOY_LOG"

    

    case "$DEPLOY_ENV" in

        development)

            deploy_development

            ;;

        production)

            deploy_production

            ;;

        staging)

            echo "暂存环境部署..."

            # 类似生产环境但有不同的配置

            ;;

        *)

            echo "未知环境: $DEPLOY_ENV"

            exit 1

            ;;

    esac

    

    echo "部署完成" | tee -a "$DEPLOY_LOG"

}


main

```


通过整合VSCode、WSL2和cpolar,可以在Windows系统上构建完整的Linux开发环境,实现本地开发、远程访问和团队协作的无缝体验。这种配置既保留了Windows的易用性,又获得了Linux开发环境的强大功能。


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/19545/viewspace-3108747/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2015-11-01

  • 博文量
    895
  • 访问量
    934028