资讯动态

WSL里装宝塔面板实战:从Ubuntu 20.04到LNMP环境全记录

发布时间:2026/10/15 17:40:46 来源:尧图企业网站定制
说实话第一次决定在 WSL 里装宝塔面板的时候我身边好几个同事都表示不理解。你的 Windows 系统好好的装个 Linux 子系统已经很折腾了为什么还要往里面塞一个面向服务器的运维面板但实际做下来我发现这条路在特定场景下非常香你想在本地模拟一台服务器环境又不想装虚拟机吃内存更不想开一台云服务器只为做个演示项目。WSL 里的 Ubuntu 20.04 加上宝塔面板正好把这几个需求一次性满足。这篇文章我会完整记录 Windows 的 Linux 子系统WSL里安装 Ubuntu 20.04、部署宝塔面板的全过程包括常见到让人抓狂的坑比如 systemd 不支持、服务启动失败、面板地址无法访问等。标题说的“宝塔面板”是很多做网站的人熟悉的 Web 管理面板它能把 Nginx、Apache、MySQL、PHP 这些繁杂的软件安装和配置统一成一个浏览器界面来操作。对于习惯图形化操作的人来说比纯 Linux 命令行友好太多。这篇文章既有步骤也有教训适合想在 Windows 上做本地站开发、又不想被命令行劝退的朋友。1. 为什么偏偏是 WSL 宝塔面板1.1 宝塔面板是干什么的先对齐一下认知宝塔面板本质是一个服务器管理软件。装上它之后你不需要手动去编译 Nginx、配置 PHP-FPM、初始化 MySQL 数据库这些都可以在网页上点几下完成。它还自带文件管理、定时任务、数据库备份、网站日志查看这类功能对一个独立开发者或小团队来说效率提升不是一点半点。但宝塔面板默认面向的是云服务器和独立服务器官方文档也基本是围绕 CentOS、Ubuntu Server 这些来写的。Windows 下跑 Linux 子系统的场景官方没有专门做适配所以装起来会比裸机多出一些幺蛾子。这也是我写这篇文章的原因因为正常服务器上顺利的安装流程在 WSL 里可能会卡在某个特别不起眼的细节上。1.2 WSL、虚拟机、云服务器哪个更适合本地折腾先说说我为什么不推荐用虚拟机。VMware 或 VirtualBox 装一个 Ubuntu 20.04确实跟真实服务器非常接近但代价是内存占用常年好几个 G硬盘镜像越滚越大每次开机也要等半分钟。WSL 最大的优势是轻它不是一个完整的内核虚拟机而是直接在 Windows 上运行的 Linux 用户态环境启动只需要几秒钟和 Windows 文件系统之间还可以直接交互。比如你可以在 Windows 的资源管理器里直接打开 WSL 里的目录复制粘贴文件完全没有虚拟机那一层别扭的网络和磁盘操作。云服务器则适合真正要对外提供服务的场景。本地 WSL 不管怎么配都逃不掉一个事实它只是你的开发环境不是公网上的生产环境。如果你需要一个 7x24 小时运行、可以被外部访问的站点那就老老实实买云服务器。但如果你只是想在本地写代码、跑通一套网站、做前后端联调WSL 加宝塔的体验绝对比虚拟机舒服。1.3 你会遇到的第一个坑这是开发环境不是生产环境很多人在 WSL 里装宝塔失败是因为他们拿着生产服务器的思维来操作。生产服务器有完整的 systemd 初始化系统服务由 systemctl 管理WSL 默认情况下没有 systemd至少老版本的 WSL 没有。宝塔面板里的很多服务启动脚本会自动调用 systemctl一旦找不到这个命令安装脚本就可能报错或者装完了面板但 Nginx、MySQL 怎么都起不来。所以你要有心理准备在 WSL 里装宝塔不等于把它当成一台普通 Linux 服务器。装之前先搞清楚 WSL 的版本装完之后需要手动处理服务启动方式。这些我都会在后面一步步写清楚只要照着做基本不会有大问题。2. 安装前的准备把 Ubuntu 20.04 理顺2.1 确认 WSL 版本和 Ubuntu 20.04 能跑起来我默认你已经装好了 WSL并且用的是 WSL2。如果没有先在 Windows 的 PowerShell 里执行wsl --install装完默认会安装最新版 Ubuntu如果你要指定 20.04可以执行wsl --install Ubuntu-20.04安装完成后第一次启动会让你设置一个 Linux 用户名和密码。记住这一步创建的账号是普通用户安装宝塔时需要提升到 root 权限。启动 Ubuntu 20.04 后可以输入以下命令确认 WSL 版本wsl -l -v如果看到 VERSION 是 2说明跑的是 WSL2。WSL1 和 WSL2 在很多特性上不一样这里我不建议用 WSL1 安装宝塔因为文件系统性能和网络兼容性会差不少后续可能遇到莫名其妙的坑。小提示如果输出显示的是 WSL1可以用下面的命令转换wsl --set-version Ubuntu-20.04 22.2 换源和系统更新别让安装脚本卡在半路在 WSL 里Ubuntu 软件源如果使用默认源在国内网络环境下经常下载缓慢甚至超时。我自己第一次安装宝塔时就是因为 apt 更新卡了非常久才意识到要先换源。编辑软件源文件sudo sed -i s/archive.ubuntu.com/mirrors.aliyun.com/g /etc/apt/sources.list如果你没在国内或者访问国外源很快那这一步可以跳过。但不管换不换源我都建议先执行一次系统更新sudo apt update sudo apt upgrade -y更新之后确保基础命令都存在sudo apt install -y wget curl git unzip vim这些工具虽然很多人觉得装不装无所谓但在宝塔安装脚本里wget 和 curl 几乎是必需品。我曾经在一台精简版系统上安装宝塔脚本跑到一半报“curl 不存在”只能中断重来浪费时间。2.3 给 WSL 分配合理的内存和交换空间WSL2 默认会拿到当前 Windows 机器大约一半的内存看起来不少但宝塔面板的 LNMP 套装装完之后MySQL、PHP、Nginx 加在一起内存占用很容易上 2GB。如果你电脑本身只有 8GB 内存再开个浏览器、微信、编辑器WSL 里就随时可能 OOMMySQL 会毫无征兆地挂掉。此时可以在 Windows 用户目录下创建.wslconfig文件控制 WSL2 的资源占用。文件路径就是C:\Users\你的用户名\.wslconfig里面可以写[wsl2] memory4GB processors4 swap8GB我自己的机器是 16GB 内存一般给 WSL 分 4GB再配 8GB 的交换空间跑 LNMP 和两个测试站点基本没有压力。改完这个文件后需要在 Windows 的 PowerShell 里执行wsl --shutdown然后重新启动 Ubuntu配置才会生效。这里补充一句宝塔自带的面板设置里也能修改 MySQL、PHP 的内存限制但那是软件层面的WSL 层面的内存配额如果不够光靠软件调参是解决不了根本问题的。3. 宝塔面板安装全流程实录3.1 获取安装脚本现在到了关键一步。先切到 root 用户因为宝塔的安装脚本需要 root 权限sudo -i然后到宝塔官网找到 Linux 面板的安装命令。以常见的安装脚本方式为例它的形式大致是wget -O install.sh 安装脚本地址 bash install.sh官方脚本下载地址可能会随着版本更新变化所以我更建议你直接以官网显示的命令为准。很多人喜欢复制网上搜索到的旧命令结果下载的脚本版本太老安装到一半就报错这种情况我已经见过太多次了。执行安装之后终端会开始大量输出包括检查系统环境、下载依赖、安装软件包。整个过程一般需要几分钟到十几分钟取决于你的网络速度和机器性能。期间不要急着关闭终端也不要反复按回车耐心看着就好。安装完成的末尾终端里会显示三样关键信息面板地址通常是http://localhost:8888/随机安全入口用户名默认是随机生成的字母数字组合密码初始随机密码如果你在安装过程中没来得及记也可以稍后在 WSL 里用bt命令重新查看。3.2 安装过程中的收纳与改动宝塔安装脚本会在系统里创建/www目录这是它的默认根目录。面板程序、网站源码、数据库文件都会放在这里。在 WSL 里这个目录会在 Linux 文件系统内部而不是 Windows 的盘符目录所以不要用 Windows 资源管理器直接进去乱翻容易造成文件权限问题。我安装时曾经遇到的问题终端显示安装成功但 Windows 浏览器访问面板地址却打不开。最后排查发现宝塔默认监听的是8888端口WSL2 的 localhost 转发虽然默认支持但如果 Windows 上某个进程已经占了 8888面板就转不出来。遇到这种情形我会先换一个端口通过宝塔命令bt在菜单里选择“修改面板端口”改成8889或者18888然后重新启动面板。之后再访问http://localhost:18888/安全入口就正常了。3.3 首次访问面板第一次打开面板时会进入协议同意和绑定账号的流程。宝塔现在的版本会在首次使用时要求绑定手机号这个因人而异如果你不想绑定可以直接关掉页面下次打开它还是会提醒。有些老版本可以不绑定但新版本基本绕不开。绑定完成之后面板会展示一个软件商店在这里面可以安装 Nginx、Apache、MySQL、PHP 等运行环境。除非你只需要面板的文件管理功能否则我建议先安装一套 LNMP后续建站会顺畅很多。版本选择上如果你只是本地测试没有必要追求最新版。Nginx 用 1.22 或者 1.24 都行MySQL 用 5.7PHP 用 7.4 或 8.1兼容性和稳定性都够用。4. 绕开“Systemd 不支持”的老大难4.1 问题根源如果安装完成后你在 WSL 里执行systemctl status nginx大概率会看到这样的提示System has not been booted with systemd as init system (PID 1). Cant operate.这是因为 WSL2 默认由 Windows 侧的一个 init 进程来做初始化而不是系统里的 systemd。宝塔面板在软件商店里“启动”、“停止”、“重启”服务时底层可能调用的就是 systemctl一旦缺少 systemd按钮点了没反应日志里却显示命令执行失败。理解这个根因之后就明白解决方案有两个方向一是让 WSL 支持 systemd二是不依赖 systemd直接用 init.d 脚本操作服务。4.2 方案一开启 WSL 的 systemd 支持较新版本的 WSL 已经支持把 systemd 作为 WSL 内的初始化系统了。前提是 Windows 上的 WSL 版本比较新WSL2 的 kernel 版本也需要在 5.10 以上。开启方法是在/etc/wsl.conf中增加内容[boot] systemdtrue然后回到 Windows 的 PowerShell执行wsl --shutdown重新启动 Ubuntu 后检查一下 systemd 是否生效systemctl --version如果能看到 systemd 版本号说明已经切换成功。这时候再执行systemctl start nginx就会正常。但我建议在切换之前先确认自己的 WSL 版本支持否则改完配置后系统可能还是老样子。你可以在 Windows PowerShell 下执行wsl --version如果显示的 WSL 版本很低先通过微软商店把 Windows Terminal 和 WSL 更新到最新版。系统版本较旧的情况下与其折腾 systemd不如直接看下面的方案二。4.3 方案二直接使用 init.d/service 脚本宝塔面板在安装软件时除了生成 systemd 服务单元也会在/etc/init.d/目录下生成一套传统的服务脚本。在没有 systemd 的环境下你可以直接用这些脚本管理服务。比如service nginx start service mysqld start service php-fpm-74 start或者更明确地执行/etc/init.d/nginx start /etc/init.d/mysqld start这种方式不用 systemd 也能达到效果。宝塔面板的软件商店里虽然按钮可能没有反应但服务在底层已经被拉起来了所以你只需要通过命令行先把服务启动到位面板首页就能看到运行状态变成绿色。我个人在老一点的 WSL 版本上就是靠service命令管理服务的跑了几个月都没有问题。如果你只是本地开发使用完全没必要为了让面板按钮生效而强制开 systemd。4.4 面板后台操作和命令行之间的关系很多新手会纠结一个问题面板上显示“停止”但服务明明还活着。这其实不是面板坏了而是面板和 systemd 的通信状态不一致。在 WSL 这种半虚拟化环境里面板的状态同步本来就不够完美。所以我的建议是心态放平把宝塔面板当成“环境配置器和文件管理器”真正服务的启停如果面板不生效就回到命令行用service操作。这在本地开发场景下完全够用也不用担心伤到数据。生产服务器上当然不推荐这种混用方式但那是另一回事。5. 本地建一个网站验证功能5.1 安装 LNMP安装 LNMP 这个过程建议你在面板的软件商店里勾选 Nginx、MySQL 5.7、PHP 7.4然后点击安装。宝塔会自动下载并编译时间可能比较长尤其是低配机器。如果编译过程中内存不够WSL 会直接 OOM导致某个组件安装失败。所以第 2.3 节里的.wslconfig配置最好在装 LNMP 之前就设置好。装完之后你可以在这个页面确认 Nginx、MySQL、PHP 的端口和状态。默认情况下Nginx 监听 80 端口MySQL 监听 3306 端口。在 WSL 里这些端口只要能启动Windows 侧一般都能通过 localhost 直接访问不需要额外设置端口转发。5.2 创建站点面板左侧菜单有“网站”选项点击“添加站点”。域名一栏如果你本地没有 DNS 解析可以随便填一个带.test后缀的域名比如wsl.local.test。然后选择 PHP 版本创建数据库数据库名和密码可以自动生成。创建完成之后网站的根目录默认在/www/wwwroot/wsl.local.test你可以在 Windows 资源管理器里直接输入\\wsl$\Ubuntu-20.04\www\wwwroot\wsl.local.test把写好的 HTML 文件丢进去。这比在 WSL 里敲命令复制文件方便很多。在站点根目录里我一般先放一个简单的index.html确认整个链路是通的!DOCTYPE html html langzh-CN head meta charsetUTF-8 titleWSL Test/title /head body h1WSL 宝塔面板工作正常/h1 /body /html5.3 Windows 浏览器访问如果直接用http://localhost/访问某些情况下会因为 Nginx 默认站点配置而不生效。稳妥的办法是在 Windows 的 hosts 文件里加上域名映射。hosts 文件路径C:\Windows\System32\drivers\etc\hosts用管理员身份打开记事本在末尾添加一行127.0.0.1 wsl.local.test保存后在浏览器里访问http://wsl.local.test理论上就能看到刚才写的 HTML 页面了。如果页面打不开先回到 WSL 里确认 Nginx 和 PHP 服务确实处于运行状态再去排查端口占用。这一步走通之后整条链路就已经完整了Windows 浏览器 → WSL 里的 Nginx → PHP 或静态文件 → MySQL。后续不管是调试自己的项目还是给别人演示一个站点都能直接在本地完成。6. 常见问题速查表6.1 面板无法访问面板地址打不开的原因很多先按顺序排查现象可能原因解决办法localhost:8888 无法打开面板服务未启动在 WSL 里执行service bt start打开后提示拒绝连接端口被 Windows 进程占用用bt命令修改面板端口浏览器显示不安全连接面板安全入口错误用bt查看或重置安全入口面板首页白屏WSL 时间不同步执行sudo hwclock -s同步系统时间我遇到最多的是端口冲突。Windows 上的很多软件都会默认占用 8888比如某些代理工具的界面端口或者临时起了一个本地服务。遇到这种情况别纠结直接换端口。6.2 MySQL 反复启动失败或内存不足MySQL 在低内存环境下的安装和启动都比较脆弱。如果日志里出现Out of memory或者cant connect to server先检查 WSL 内存是否够用。在 WSL 里执行free -h看 available 这一列。剩余内存低于 500MBMySQL 大概率起不来。解决办法是先把.wslconfig里的内存调大然后wsl --shutdown重启如果还是紧张可以考虑用 MariaDB 替代 MySQL。在宝塔的软件商店里MySQL 5.7 和 MariaDB 10.5 功能上差异不是很大但 MariaDB 在配置较低时相对更轻。我自己的经验是1GB 内存跑 MariaDB 还算稳MySQL 5.7 则更容易触发 OOM。6.3 root 校验和权限问题宝塔安装脚本和面板服务都要求 root 权限。如果你在用普通用户操作安装脚本可能提示权限不足。安装前建议先sudo -i切换环境后再执行安装脚本。面板安装完成后服务和网站在运行时也会以 www 用户运行这是宝塔的正常设计不要去手动把网站目录改成 root 权限否则 Nginx 可能出现 permission denied。如果你在 WSL 里用service nginx start时看到权限错误也可以先确认是不是目录属主问题。执行chown -R www:www /www/wwwroot/你的站点目录这个命令比较有效但注意不要对整个/www目录乱改尤其是面板数据和数据库文件改了属主反而可能导致面板无法正常读取。6.4 系统重启后服务不自动启动WSL 和我们习惯的服务器不太一样它更多是“用到时才启动”。Windows 重启之后WSL 实例不会自动恢复里面的 Nginx、MySQL 也就不会自动跑起来。解决办法有两个。懒人办法是每次要用的时候手动进 Ubuntu 执行service nginx start service mysqld start service php-fpm-74 start或者更懒一点把这些命令写到一个脚本里比如/root/start_services.sh每次执行一句就行。想要更自动化可以在 Windows 的计划任务里加一个登录时触发任务执行wsl -d Ubuntu-20.04 -u root /root/start_services.sh。这个方案适合有频繁重启电脑需求的朋友我实测下来稳定性还算可以。最后分享一点个人体会这套环境我前前后后搭过好几次最初确实被 systemd 不支持和服务起不来这些坑折磨得够呛。后来习惯了“面板管配置命令行管服务”的混合玩法之后WSL 加宝塔就成了我本地做网站调试最顺手的组合比开虚拟机清爽太多也比在云服务器上反复折腾省钱省心。如果你也准备拿 WSL 当测试环境记住两个原则就够了第一把 WSL 的内存和交换空间配置到位这是所有麻烦的根源第二遇到面板操作没反应就切到命令行用service管理服务别死磕 systemd。按照上面的步骤走下来你应该能在半小时内跑起来一个能正常访问的本地站点后面再根据自己需求慢慢加功能就行。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑