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看看。

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 4

可惜还没用上 win 10

5年前 评论
wenqingzzz

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

5年前 评论

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

file

5年前 评论

server nginx start 只能在NGINX的配置目录下执行,你们也是么,server php-fpm start 不生效。。

4年前 评论
tomlee (楼主) 4年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!