Win10 下 Laravel 开发方法一:WSL+Valet

我大概发现了两种 Win10 下正常开发的方法,各有所长,也各有所短。 我自己 Windows 系统是英文的,所有如果有那里不对,请务必告诉我。

WSL#

WSL 就是一个寄生于 Win10 的 Linux 系统,它有被砍的七七八八的 Linux 内核,和你放在上面的 Distro 容器。一般大家都是用 Ubuntu,因为其他的 Distro 跑的不太完美。

WSL 的大问题是,没有 dbus,没有 systemd , 而且不是随开机启动,也就是说你要开机开 service,需要另外想办法。但是,毕竟还是 Linux,所有 Linux 有的,它都有,所以 PHP 可以跑的比较顺。

安装 WSL#

怎么装啊?网上教程一箩筐,都可以参考。我没有中文版的 Win10,所以,步骤如下,抄自: ,没截图:
Win10 控制面板被藏住了,所以 Win+R , 然后输入:control

  1. 需要到 控制面板 \ 所有控制面板项 \ 程序和功能 中选择 启用或者关闭 Windows 功能
  2. 找到 适用于 Linux 的 Windows 子系统 并勾选,然后 确定 选择 立即重新启动
    1a. 或者,你找得到 Powershell 的话,右键点击 powershell,以管理员身份启动 (求大神告诉我这个选项中文到底是什么),然后跑:
    Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
  3. 去 Windows 商店,搜索 Ubuntu, 然后安装上去。
  4. ctrl+r , 然后输入:ubuntu, 等待安装完毕,如果看到卡了超过一分钟,按按 enter 键(嗯,自带 terminal 会卡)。

这里我必须要吐槽 Windows10 自带的两个 Terminal,这都 9102 年了…… 所以,推荐大家安装 Hyper 或者 Terminus ,大家选个自己觉得好看的吧。虽然这俩都是英文的,但是 Terminal,有没有中文真的无所谓。尤其是 Hyper,配置就是个 js 文件。 不然,接下来的步骤等的时候无法喝茶,需要坐在电脑前面按回车。

等你的 Ubuntu 弄好了以后,切换到刚安装的 Terminal,接下来的,装 Valet,都是从这里翻译的 (我貌似改了一点?)

Windows 设置的先决条件#

  1. 安装 Acrylic DNS Proxy.
  2. 下载 WSL Startup Scripts. (此步骤,我命名为步骤 0

WSL 设置#

  1. 打开某个 terminal.
  2. 运行 sudo visudo.
  3. 把这两行加入(如果已经存在,就覆盖),如果不会 vi,找到相应的行,按 i,然后编辑,然后 esc > :wq'> 回车:
    ALL ALL = (root) NOPASSWD: /usr/sbin/serviceusername ALL=(ALL) NOPASSWD: ALL
  4. 运行 sudo add-apt-repository ppa:ondrej/php.
  5. 运行 sudo apt-get update && sudo apt-get upgrade
  6. 运行 sudo apt-get install network-manager libnss3-tools jq xsel build-essential libssl-dev dnsmasq nginx php-fpm php-cli php-mysql php-sqlite3 php-intl php-zip php-xml php-curl php-mbstring redis-server php-redis php-pear php7.2-dev pkg-config libz-dev libzip-dev libmemcached-dev libmemcached11 libmemcachedutil2 libmagickwand-dev imagemagick memcached mysql-server

如果需要装 MariaDB
把上面的 mysql-server 去掉,然后:

  1. sudo apt-get install software-properties-common
  2. sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8
  3. sudo add-apt-repository "deb [arch=amd64,arm64,ppc64el] http://mariadb.mirror.liquidtelecom.com/repo/10.4/ubuntu $(lsb_release -cs) main"
  4. sudo apt update && sudo apt -y install mariadb-server mariadb-client

MySql#

mysql_secure_installation 无法正常运行,所以:

  1. 运行 sudo usermod -d /var/lib/mysql/ mysql
  2. 运行 sudo mysqladmin -u root -h localhost password examplepass
  3. 运行 sudo service mysql start

Node#

  1. 运行 curl -sL https://deb.nodesource.com/setup_10.x -o nodesource_setup.sh.
  2. 运行 sudo bash nodesource_setup.sh.
  3. 运行 sudo apt-get install nodejs.

Yarn#

  1. 运行 curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -.
  2. 运行 echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list.
  3. 运行 sudo apt-get update && sudo apt-get install yarn.

Composer#

  1. 运行 wget https://getcomposer.org/installer.
  2. 运行 php installer.
  3. 运行 sudo mv composer.phar /usr/local/bin/composer.

Valet WSL#

  1. 运行 composer global require valeryan/valet-wsl.

Bash Config#

  1. 运行 vi ~/.bash_aliases.
  2. 运行 export PATH=~/.composer/vendor/bin:$PATH.
  3. 运行 source ~/.bashrc.

Acrylic 设置 (回 Windows)#

  1. 在 Windows 内,按下 windows 键 ,输入 Acrylic, 打开 Acrylic UI
  2. 找到 Edit Acrylic Host File, 把 127.0.0.1 *.test 放到最后一行,并保存
  3. 菜单,找到 Actions(第二个), 按 Restart Acrylic Service

Valet 设置 (WSL)#

  1. 运行 valet install.
  2. 找到你 Laravel 目录, 然后运行 valet park, valet link.
  3. 看好不好使,去 Chrome 输入 folder.test. (此处 folder 是你目录的名字)
  4. 如果需要 SSL,运行 valet secure.

Valet 设置 (Windows)#

  1. ctrl+r, 输入 C:/tools/valet/certs/, 双击 install_certs.cmd 文件。这个会安装一个 root ca,所以你可以用自己的 cert
  2. 去 chrome 试试 https?

WSL 设置 (Windows 内)#

  1. 把你从步骤 0 下载到的文件放进: C:/tools/wsl-startup/.
  2. 调整你的 services.sh, 这个里面包括了你所有需要的服务
  3. win+r > taskschd.msc , 建立一个新的任务,登录时运行 bash-start.vbs
  4. 重启试试,你现在可以直接进入 Chrome ,

设置 Cron#

1 运行 sudo crontab -e.

栗子#

*/5 * * * * php /mnt/c/username/Projects/folder/artisan schedule:run >> /dev/null 2>&1

后言#

这个方法,简单暴力,我觉得是蛮方便的,而且你想要多少格域名,就多少个域名。而且对于我这种 Ubuntu 小白,及其友好(Fedora 里面 Service 没法用)。感觉和 Linux 原生差不多了。这里提几点:

  1. Composer,PHP, Artisan 一定要在 WSL 内跑,千万不能用 Windows 跑,那个路径会冲突。
  2. Ubuntu 进去,默认的目录,是你 Windows 用户目录,而非你的 home 目录。你的 home 目录还在,你的 ssh 密匙,.bashrc 什么的都在那里。
  3. 建议把项目放在 Windows 用户目录内(不然 Windows 打开和读写有困难),建议目录改成区分大小写的,需要管理员权限运行 cmd ,然后 fsutil.exe file setCaseSensitiveInfo “C:\my folder” enable , “C:\my folder” 改成你自己的目录。

下一篇,我们转战 Docker。嘿嘿……

本作品采用《CC 协议》,转载必须注明作者和本文链接
Software Engineer Practices above all 软件开发标准高于一切
Shuyi
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 8

file
请问一下 wsl 安装完后 发现这个是怎么回事?127.0.0.1 能正常打开 nginx 欢迎页面。

5年前 评论
Shuyi

@轻描淡写 这是哪一步出的错?

5年前 评论

@Shuyi 重载 nginx 的时候 我用的是 lnmp.org 上面的一键安装包安装 lnmp 环境 ,可能是安装包的问题。

5年前 评论

valet 现在有 windows 版本了,直接用也不错。

5年前 评论
Shuyi

@dreamfish 有是有,但是,PHP 支持还是不完美,比如说 Composer 的路径会依然很混乱,而且 Windows 下别想用 php-pcntl, php-posix,所以 Laravel Horizon 用不了。你 Composer 的 Repo 如果是 Path,就呵呵了……

5年前 评论
Shuyi

@轻描淡写 建议还是按照这个步骤跑,反正我也不懂 Ubuntu,你就复制粘贴就完事了…… 你说的那个安装包,估计无法用在 WSL……

5年前 评论

@Shuyi windows 下搞什么都是有很多问题,wsl 也是局限很多。最好还是换电脑 :grin:

5年前 评论
Shuyi

@dreamfish 我一般是用 Fedora 的,不过微软的电脑太好用了,所以就要处理在 Win 下开发,不过 WSL 的限制现在已经不影响 PHP 开发…… 反正,也是闲暇时候没事乱掰,哈哈哈,工作用的肯定是 Fedora

5年前 评论