Windows 子系统 (WSL) 安装使用及问题

预览

安装

  1. win+x 打开powershell(管理员):
    Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
    (可能需重启)
  2. 打开商店搜索 ubuntu,(本文以18.04为例),点击安装,会出现一个终端等待几分钟输入帐号与密码。(一般几分钟即可,极小几率会出现终端一直卡住的情况,可以按下enter试试.)
  3. exit(ctrl+d)退出,在命令行下(推荐使用cmder)输入wsl或者bash来进入子系统.

ps. 可用 lxrun /setdefaultuser root (windows下命令) 来设置子系统的默认使用帐号.

环境

  1. 将此脚本保存执行: https://github.com/muliuyun/wsl-ubuntu/blo... (sudo bash 18.04-init.sh)
  2. 配置 nginx, 举例:

    $sudo nano /etc/nginx/conf.d/blog.conf;

    server {
        listen 80;
        server_name blog.test;
        root "/mnt/d/project/blog/public/";
    
        index index.html index.htm index.php;
    
        location / {
            try_files $uri $uri/ /index.php?$query_string; #laravel 框架需要此行
        }
    
        location ~ \.php$ {
            include snippets/fastcgi-php.conf;
            fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
        }
    }
  3. 设置host

    ps. cmder在子系统中使用vim光标不能左右动(此bug有能解决的人,请指教)

启动

使用 service start nginx,service start redis-server启动各个服务即可。
因wsl不支持服务自启动,每次开机后都打稍有些麻烦,这里采用github issues上的一个办法。将下面脚本保存,并将路径加入到home下的.bashrc里即可在进入子系统时自动开启服务。

例子:

root@DESKTOP-K67IOON:~# pwd
/root
root@DESKTOP-K67IOON:~# cat startservers.sh
#!/bin/bash
# Edit this for your relevant services.
services=(php7.2-fpm nginx redis-server mysql)
for service in "${services[@]}"
do
         if (( $(ps -ef | grep -v grep | grep $service | wc -l) == 0 ))
         then
         # Uncomment to get messages. #
         #echo "Starting service ${service}"
         (sudo service $service start > /dev/null &)
         fi
done
root@DESKTOP-K67IOON:~# cat .bashrc |grep startservers.sh
~/startservers.sh

如使用此方案,非root用户将需要每次都输入密码,可以通过下面一行命令来解决

$sudo sed -i '$atom ALL=(ALL:ALL) NOPASSWD: ALL' /etc/sudoers # $a后的tom换成你的用户名

问题

  1. php-fpm不能使用tcp只能使用unixsocket方式。
  2. git clone后会导致,两边文件系统不一致,最好在windows下使用git 拉取代码. 或者统一换行设置:git config --global core.autocrlf true
  3. 将mysql的datadir指定到windows下(mnt)的路径,会出错.
  4. 无法支持服务自启动.

代理

  1. 可以使用 export http_proxy 来设置。
  2. 不过我用的是proxychains4,感觉不错。

卸载

lxrun /uninstall /full    # 多个子系统会一起清除.

使用总结

Vagrant、dokcer、Phpstudy、Laragon基本上都尝试过,感觉各有各的问题和麻烦吧。经过一段时间的使用,感觉WSL基本上满足开发的需求,还有好多有意思的功能,几个bug影响也不大。而且更新速度快,之后可能还会有更多的功能上线,还是推荐使用的^_^.

more

大家有什么好玩的、想问的欢迎留言。感兴趣的话也可以去windows wsl看看。

tomlee
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 3

可惜还没用上 win 10

7个月前 评论
wenqingzzz

win下我还要用虚拟机,wsl开机启动、还有些软件装不了。自启动怎么搞定?

3个月前 评论

cmder现在没问题了。wsl装个环境问题一大堆,整的头疼

file

2个月前 评论

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!