玩转 WSL 在 Win10 上打造 Ubuntu 开发环境
WSL 是 Windows Subsystem for Linux 的简称, 可让开发人员按原样运行 GNU/Linux 环境 - 包括大多数命令行工具、实用工具和应用程序 - 且不会产生虚拟机开销。
安装 WSL
1.开启 WSL
首先需要使用管理员权限打开 PowerShell 执行如下命令 Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
或者在程序和功能选打开 适用于 Linux 的 Windows 子系统
出现提示时,重启计算机。
2.下载 Linux 发行版
直接参考 WSL安装指南 使用 Microsoft Store 安装的方法无法将 Linux 安装到系统盘之外的分区,这里使用的是 手动下载 的方法。
单击以下链接下载您喜欢的 Linux 的发行版,这里选的是 Ubuntu 20.04
3.安装 Linux 发行版
使用 7-ZIP 或者其他工具解压下载的 appx 文件 ( 比如解压到 D:\WSL\Ubuntu
) 然后运行 ubuntu2004.exe
需要等待一两分钟时间来完成安装,安装完成后,系统会提示创建新的用户帐户(及其密码)。
如果需要使用 root 默认登录可以运行 ubuntu2004.exe config --default-user root
4.配置 Linux 环境
首先需要进行一些本地化操作
# 修改为国内软件源
sudo sed -Ei 's/\w+.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list
apt-get update
# 设置系统语言为中文
apt install -y language-pack-zh-hans
update-locale LANG=zh_CN.UTF-8
5.服务自启动配置
由于 WSL 并没有 Linux 内核的支持,仅在用户层实现了系统调用的翻译。因此诸如 systemd、cgroup 是无法工作的。
只能使用 start-stop-daemon
或其他进程守护工具实现服务管理
- 编辑
vim /etc/init.wsl
文件添加如下内容
#! /bin/sh
# Filename: /etc/init.wsl
service nginx start
- 开始 -> 运行 中输入 regedit 回车打开注册表编辑器
定位到 计算机\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
后新建一个 REG_SZ 类型的值,名称随意,数值数据填写以下内容
mshta vbscript:CreateObject("WScript.Shell").Run("wsl -d Ubuntu-20.04 -u root bash /etc/init.wsl",0,TRUE)(window.close)
以后就可以向 /etc/init.wsl 追加服务,实现开启自启动了
配置开发环境
Linux 环境搞好,下面就开始根据自己需要配置相应的开发环境
1.PHP Nignx MySQL 环境搭建
得益于 Wordpress 等平台的流行,PHP 仍是目前使用广泛 Web 开发语言,LNMP 环境
sudo apt-get install -y nginx php-fpm php-mysql php-curl mysql-server
# 开放端口
sudo sed -i 's/bind-address/#bind-address/' /etc/mysql/mysql.conf.d/mysqld.cnf
# 启动 MySQL
service mysql start
# 启动 fpm
service php-fpm start
# 启动 nginx
service nginx start
- 解决 nginx 超时的问题
在 /etc/nginx/nginx.conf
中的 http block 中加入
fastcgi_buffering off;
配置添加如下内容
server {
listen 80;
server_name domain.com;
location ~ \.php$ {
include snippets/fastcgi-php.conf;
# 设置监听端口
fastcgi_pass unix:/run/php/php7.4-fpm.sock;
}
# 用于伪静态
if (!-e $request_filename) {
rewrite ^/(.*) /index.php?r=$1 last;
}
}
- 配置 MySQL 密码
运行 sudo mysql -u root
进入命令行模式
-- 重设密码
UPDATE mysql.user SET host = '%', authentication_string = PASSWORD('123456') WHERE user = 'root';
FLUSH privileges;
-- 用户创建与授权
CREATE USER 'username'@'%' IDENTIFIED BY 'password';
CREATE DATABASE `database` CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci';
- 安装 Composer
Composer 是 PHP 用来管理依赖(dependency)关系的工具。你可以在自己的项目中声明所依赖的外部工具库(libraries),Composer 会帮你安装这些依赖的库文件。
# 安装 Composer
php -r "copy('https://install.phpcomposer.com/installer', 'composer-setup.php');"
sudo php composer-setup.php --install-dir=/usr/bin --filename=composer
php -r "unlink('composer-setup.php');"
# 配置 国内镜像
composer config -g repo.packagist composer https://packagist.phpcomposer.com
- PHP 扩展安装
除了 apt 中自带的 PHP 扩展,很多扩展需要通过 pecl 命令安装。
这里通过配置 php_ini
实现 php.ini 的自动配置
sudo apt install -y php-pear php-dev
sudo touch /etc/php/7.4/mods-available/pear.ini
sudo ln -s /etc/php/7.4/mods-available/pear.ini /etc/php/7.4/fpm/conf.d/20-pear.ini
sudo ln -s /etc/php/7.4/mods-available/pear.ini /etc/php/7.4/cli/conf.d/20-pear.ini
sudo pear config-set php_ini /etc/php/7.4/mods-available/pear.ini
pecl install yaf
2.配置 Golang + PostgreSQL 环境
# 安装必要依赖
sudo apt-get install -y git cmake
# 下载并解压
curl -o- https://golang.google.cn/dl/go1.21.5.linux-amd64.tar.gz | sudo tar zxf - -C /usr/local
sudo ln -s /usr/local/go/bin/go /usr/bin/go
# 配置环境变量
go env -w GOPROXY=goproxy.cn
# git 配置
git config --global core.editor nano
- 安装 postgres 数据库
apt-get install -y postgresql
# 数据库初始化
pg_dropcluster 12 main --stop
TZ=UTC pg_createcluster 12 main --start -d /opt/pgsql
# 服务启动
service postgresql start
# 修改数据库密码
su postgres -c psql
postgres=# \password
- 数据库备份还原
export PGPASSWORD=123456
# 导出
su postgres -c 'pg_dumpall -O -x -c --inserts --if-exists --quote-all-identifiers -f /tmp/db.sql'
# 导入
psql -h 127.0.0.1 -U postgres -f db.sql
- 安装 consul 服务
sudo apt install lsb-release
curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo apt-key add -
echo "deb [arch=amd64] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
sudo apt-get update && sudo apt-get install consul
编辑服务脚本
/etc/init.d/consul
#!/bin/sh
# Quick start-stop-daemon example, derived from Debian /etc/init.d/ssh
set -e
# Must be a valid filename
NAME=consul
PIDFILE=/var/run/$NAME.pid
#This is the command to be run, give the full pathname
DAEMON=/usr/bin/$NAME
DAEMON_ARGS="agent -server -bootstrap-expect=1 -bind=127.0.0.1 -data-dir=/var/lib/$NAME -ui -log-file=/var/log/$NAME"
case "$1" in
start)
echo -n "Starting daemon: "$NAME
start-stop-daemon --start --background --make-pidfile --pidfile $PIDFILE --exec $DAEMON -- $DAEMON_ARGS
echo "."
;;
stop)
echo -n "Stopping daemon: "$NAME
start-stop-daemon --stop --quiet --oknodo --pidfile $PIDFILE
echo "."
;;
restart)
echo -n "Restarting daemon: "$NAME
start-stop-daemon --stop --quiet --oknodo --retry 30 --pidfile $PIDFILE
start-stop-daemon --start --background --make-pidfile --pidfile $PIDFILE --exec $DAEMON -- $DAEMON_ARGS
echo "."
;;
*)
echo "Usage: "$1" {start|stop|restart}"
exit 1
esac
exit 0
3.安装 nodejs 环境
# 安装 Node Version Manager
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
# 安装 v10 的 Node
source ~/.bashrc
nvm install 10
# 解决 npm install 失败的问题
npm config set unsafe-perm=true
# 设置国内镜像
npm config set registry https://registry.npm.taobao.org
4. Python 环境
sudo apt install -y python3-distutils
curl -sSL https://bootstrap.pypa.io/get-pip.py | sudo python3
pip config --global set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
卸载 WSL
cmd 下输入 wslconfig /l,可以看到所有已安装的发行版
rem 卸载删除wsl
wslconfig /u <DistributionName>