WSL下配置AlpineLinux作为PHP开发环境

Alpine Linux 占用空间少,可定制性高,除了很适合跑 docker 容器外,也很适合跑在 wsl 中。

下载 WSL 版 Alpine Linux

打开链接 https://github.com/yuk7/AlpineWSL/releases 找到系统对应的 Alpine 版本,如 Alpine.zip,解压到你想要存放的位置,点击 Alpine.exe 文件即可安装好。

安装好后,将在 Alpine.exe 所在文件夹中创建 ext4.vhdx 虚拟磁盘文件,作为 AlpineLinux 的磁盘。控制台执行命令 wsl -l -v,将看到新安装的 wsl 发行版 Alpine

启动 Alpine

命令 wsl -d Alpine

使用国内镜像源

打开源配置:

1
vi /etc/apk/repositories

注释掉默认源:

1
2
#https://dl-cdn.alpinelinux.org/alpine/v3.18/main
#https://dl-cdn.alpinelinux.org/alpine/v3.18/community

加入阿里源配置:

1
2
http://mirrors.aliyun.com/alpine/v3.19/main
http://mirrors.aliyun.com/alpine/v3.19/community

或 加入腾讯源配置:

1
2
https://mirrors.cloud.tencent.com/alpine/v3.19/main
https://mirrors.cloud.tencent.com/alpine/v3.19/community

执行更新命令更新源数据和已安装的apk包:

1
apk -U upgrade

部署PHP 8.2

1
2
3
4
5
apk add php82 php82-pear php82-dev php82-pdo_mysql \
php82-iconv php82-mbstring php82-tokenizer \
php82-session php82-dom curl php82-curl \
php82-xmlwriter php82-fileinfo php82-posix \
redis php82-pecl-redis

82 改为 8183 即为安装 php-8.1 或 php-8.3
如果出现错误,apk add gcc,``

如果安装 php-8.1 出现一下错误:

1
2
3
4
5
6
7
ERROR: unable to select packages:
php81-pecl-msgpack-2.2.0-r0:
conflicts: php82-pecl-msgpack-2.2.0-r0[php-msgpack=2.2.0-r0]
satisfies: php81-pecl-redis-6.0.2-r0[php81-pecl-msgpack]
php82-pecl-msgpack-2.2.0-r0:
conflicts: php81-pecl-msgpack-2.2.0-r0[php-msgpack=2.2.0-r0]
satisfies: php82-pecl-redis-6.0.2-r0[php82-pecl-msgpack]

安装脚本中去掉 php82-pecl-redis再执行。

php8 版本切换

如果同时安装多个 php 版本,可通过脚本来更换默认版本php。

创建脚本 vi /usr/php-switch,输入以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/bin/bash
cd /usr/bin

rm -f php php-config phpize pecl phar phar.phar

v=${1:-82}

ln -s php${v} php
ln -s php-config${v} php-config
ln -s phpize${v} phpize
ln -s pecl${v} pecl
ln -s phar.phar${v} phar
ln -s phar.phar${v} phar.phar

echo '已切换到php'$v

设置权限为可执行 chmod +x /usr/php-switch

1
2
3
4
5
6
7
8
# 默认切换到php 8.2
php-switch

# 切换到php 8.1
php-switch 81

# 切换到php 8.3
php-switch 83

安装 Nodejs

1
apk add icu-data-full nodejs npm

WSL使用指南

常用命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 查看已安装发行版
wsl -l -v

# 设置默认发行版
wsl --set-default <Distribution Name>

# 启动默认发行版
wsl

# 启动指定发行版
wsl -d <Distribution Name>

# 指定登录用户启动 wsl
wsl -u <User Name>

# 更改发行版的默认用户
<DistributionName> config --default-user <Username>

# 关闭 wsl 的运行
wsl --shutdown

# 关闭指定发行版
wsl --terminate <Distribution Name>

更多命令见 WSL 官网

访问宿主机网络服务

在 wsl 中,可使用虚拟宿主机IP访问宿主机服务。使用以下命令查询宿主机IP:

1
ip route show | grep -i default | awk '{ print $3}'

打开 WSL Hyper-V 防火墙时,得到的是WSL虚拟防火墙的IP,没打开是 WSL 虚拟的IP,可使用 powershell 命令 ipconfig 查看。

宿主机访问 wsl 网络服务

默认情况下(即WSL 配置 localhostForwarding=true),wsl 映射端口到宿主机,可直接用 localhost 访问 wsl 网络服务。

注:WSL2 配置 networkingMode=mirrored 时,localhostForwarding 配置无效,可在 wsl 中用 localhost 访问宿主网络服务。

压缩 WSL2 的 vhdx 文件

vhdx文件

vhdx文件是虚拟机的虚拟磁盘文件,随着使用时间变长,vhdx 内会产生冗余文件,可以使用 diskpart 工具进行压缩。

操作步骤

1、关掉使用vhdx文件的进程。
cmd 命令:

1
wsl --shutdown

2、命令行启动 diskpart 工具,cmd命令:

1
diskpart

3、选择vhdx文件

cmd 命令:

1
select vdisk file = "D:\WSL\Debian-12-ext4.vhdx"

4、执行压缩命令:

cmd 命令:

1
compact vdisk

等待压缩进度到100即可。

参考:

https://learn.microsoft.com/zh-cn/windows/wsl/disk-space