如何在Windows中体验极致的Linux开发环境
1. 背景
相当长的一段时间,我的工作平台都是MAC,清爽干净的界面,没有广告烦扰,方便的快捷键,好用的触摸板等等。但是换了工作之后,公司配备的是一台Windows台式机,虽然可以带自己的笔记本工作,但是总有些不便。于是一直在折腾Windows下的Linux开发环境。
之前一直是用 vm 搭建,也没有觉得不方便的地方。但是最近一直被安利 wsl2 。于是就安装试用了一番。发现在我的开发环境下完全可以抛弃 vm 了。那么对比 vm 有哪些优势劣势呢。
优势
- 不用每次点击启动vm,然后点开机或者恢复。直接在终端中选择打开。
- 不用配置网络,实际上wsl2 你也没有机会配置。wsl2深度融合Windows环境,在wsl启动的服务,在Windows 可以直接
localhost:port访问 - 挂载了本地磁盘,虽然vm也可以共享,但是没有这个方便。
劣势
- 只有Ubuntu可以选择
- 没有systemd,需要自己些reload脚本
- 启用hyper v之后,影响vm和模拟器运行
2. 安装WSL2
- 从
启用或关闭 Windows 功能里勾选适用于 Linux 的 Windows 子系统和虚拟机平台,重启电脑 - 以管理员身份启动
powershell,输入下面指令wsl --set-default-version 2 - 如果提示要升级内核,按照提示走
- 从 Microsoft Store 下载最新 Linux 分发版, 下载完后点击启动,安装
- [ 可选 ] 换源,使用阿里Ubuntu镜像。 换完之后执行
sudo apt update - [ 可选 ] 从 Microsoft Store 安装 Windows Terminal
3. 搭建开发环境
nginx,php,fpm,mariadb,redis,golang,openssh 等软件均可以通过 apt install 来安装。
通过 service xxx start|restart|stop 来控制状态
- 特别说明
mariadb安装完后需要配置root账号密码,参考文章
# 第一次设置密码
sudo mysql_secure_installation
# 控制台登录, 如果有报错,记得使用sudo
sudo mysql -u root -p
# 修改mysqld 绑定IP
sudo vim /etc/mysql/my.cnf
# 注释下面的语句
bind-address = 127.0.0.1
# php连mysql需要安装扩展
sudo apt install php-mysql
# fastcgi listen字段,需要跟nginx.conf 对应
sudo vim /etc/php/7.4/fpm/pool.d/www.conf
- Ubuntu20.04
apt install的服务配置文件目录整理
| 服务 | 默认路径 | 默认配置文件名 |
|---|---|---|
nginx |
/etc/nginx/nginx.conf |
nginx.conf |
maraiadb |
/etc/mysql/mariadb.conf.d/50-server.cnf |
my.conf |
redis |
/etc/redis/redis.conf |
redis.conf |
php-fpm |
/etc/php/7.4/fpm/php-fpm.conf/etc/php/7.4/fpm/pool.d/www.conf |
php-fpm.conf |
php |
/etc/php/7.4/cli/php.ini |
php.ini |
sshd |
/etc/ssh/ssh_config |
ssh_config |
4. 总结唠嗑
关于wsl2的使用说明,建议阅读官方文档
在 windows 宿主机使用 localhost 就能登录wsl2,不要被国内博客误导!!! 前提是重新安装 openssh 服务。
最后两个安装步骤虽然是可选,但是强烈建议做完,能很大程度的提升使用体验。
换源的好处自然是加快包安装速度
使用 windows Terminal 时让我有点在 MAC 下工作的感觉。总结下有几点:
– 支持多标签页
– 能快捷进入wsl,下拉菜单中点选进入
– 界面重新设计,很清爽,有 Linux 终端的味道,离 MAC 还差点
– 支持 Ctrl C 复制,Ctrl V 粘贴,我很喜欢这个设定。并且 Ctrl C原本的中断功能不受影响
wsl 不支持 systemd ,所以不用折腾开机启动了。需要的服务建议通过 sudo service 服务启动,或者写一个 shell 脚本。
wsl把 windows 磁盘挂载在 /mnt/ 目录下,可以对该目录下文件进行读写操作。
配合 VS CODE 敲代码,只需要安装一个Remote - WSL插件。在 远程资源管理器里选择 WSL Targets 一键连接。 本地开发,即在服务器上开发。NICE
测试过 php 项目 和 golang 的 web 项目,目前没有发现任何功能上的问题。
5. 目前遇到的?坑?
由于我装 ohmyzsh 了,它在git的目录会有额外的操作,所以进入到挂载在 /mnt/ 下面的目录时,会有一段时间读取过程,耗时较长。不用 ohmyzsh 不会有问题。
