Windows开发环境搭建最佳实践
刚才卸 Docker 把电脑卸崩了, 连不上网, 重置一下电脑, 正好记录下 Windows 开发环境的最佳实践.
必备软件
-
OneDrive
- OneDrive 是微软官方云盘, 普通用户有 5G 容量, office365 用户可以升到 1T, 文件自带版本控制功能, 30 天以内的不同版本都可以还原
- 一个很重要的功能在于, OneDrive 在系统级别支持同步个人目录下的 Desktop/Document/Picture, 而我们所有个人文件(软件配置/数据库/工作代码)默认都在这三个目录里, 这三个文件夹放在云上, 即使系统重置, 我们也只要重装一遍软件, 装软件时一路 next, 其他啥都不用管(所有配置都在 Document 里(云上), 嗯哼)
- 常用的工具类软件都可以放在这里, 我自己的目录结构为
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24OneDrive
- 文档(对应于Document)
- 个人文档
- keepass
- password.kdbx 保存的keepass密码数据库, 所有密码均记录在这里
- Chinese_Simplified.lngx keepass中文语言包, 系统重装完直接往`C:/Program Files (x86)/KeePass Password Safe 2/Languages`拷一份
- 下载地址: https://downloads.sourceforge.net/keepass/KeePass-2.39-Chinese_Simplified.zip
- Program
- comder
- 最好用的PowerShell客户端
- 为了方便从comder中直接进入开发目录(F:/www), 可以给www目录在主目录下建个硬链接
- New-Item -Path C:\Users\yaoze\www -ItemType SymbolicLink -Value F:\www
- 当然也可以在设置里配置powershell的启动目录, 更省事
- ![配置powershell启动目录](./img/onedrive/cmder/配置启动目录.png)
- hosts
- 对应于Windows的host文件, 保存到云盘上, 这样即使切换到其他电脑也能同步过去
- 配置命令为(在管理员权限下的PowerShell中进行操作):
- 删除旧Hosts文件
- rm C:\Windows\System32\drivers\etc\hosts
- 在原有位置生成云盘hosts的硬链接
- New-Item -Path C:\Windows\System32\drivers\etc\hosts -ItemType SymbolicLink -Value F:\OneDrive\Documents\个人文档\Program\hosts
- shadowsocks
- 科学上网
- 把运行程序放到云盘里, 重置机器, 装完系统, 双击运行. over
-
Chrome
-
迅雷
- 广告虽然多, 但迅雷下载还是最快的
-
KeePass
- 密码管理程序
- 程序员会有各种各样的账号密码, 管理账号密码是个问题, 所以对应的最佳实践如下:
- 所有账户密码均使用 keepass 生成/管理, 只要记住数据文件的主密码即可
- KeePass 设定上每 15 分钟&锁屏自动锁定, 避免窥屏
- 密码数据库存放到云盘上(OneDrive), 避免丢失(OneDrive 有自动同步&版本管理功能, 5G 的免费空间, Mac/Windows 上都能用)
- 一共需要记住两个密码:
- Windows 账户密码(OneDrive/Office/Windows 登录/Microsoft 相关服务都是这个账号)
- Keepass 数据库主密码
- 然后其他密码用的时候去 KeePass 里找就行
- 所有账户密码均使用 keepass 生成/管理, 只要记住数据文件的主密码即可
-
VSCode
- 安装时记得勾上
-
jre-64 位
- java 运行环境, 肯定要装
-
Python3.7
- Docker Toolbox 需要这个
-
PHPStrom/WebStrom
- 连 IDE 都没用到, 怎么谈软件工程呢
-
XShell
- 专业的 SSH 客户端
-
WSL
-
运行在 Windows 上的 Ubuntu, 可能是世界上最好用的 Linux 发行版
-
首先打开 WSL 功能, 在控制面板-程序-启用或关闭 Windows 功能(需要重启)打开 WSL 功能
-
在应用商店(Microsoft Store)里, 搜索 ubuntu, 安装 ubuntu18.04安装 ubuntu18.04
-
然后进入开始菜单, 点击 Ubuntu 的图标, 就可以自动安装了
-
安装之后配置阿里云镜像
sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup
sudo vim /etc/apt/sources.list
-
deb https://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse deb-src https://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse deb https://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse deb-src https://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse deb https://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse deb-src https://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse deb https://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse deb-src https://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse deb https://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse deb-src https://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
- 目前, Ubuntu16.04 可以直接执行`sudo service rc 5`, 但是 Ubuntu18.04 只能手工指定启动服务, demo => `sudo service ssh restart && sudo service php7.2-fpm restart` 3. 截图示例 - ![开机自动启动WSL](./img/wsl/开机自动启动.png)1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
16. `sudo apt-get upate`
17. LAMP 环境
1. 安装 tasksel, `sudo apt-get install tasksel`
2. sudo tasksel, 上下左右选择需要安装的服务器, 比如 LAMP 啥的
1. ![tasksel](./img/wsl/tasksel.png)
18. 启动 ssh 服务
1. 命令窗口毕竟没有 XShell 好用, 所以最好还是用 SSH 登录
2. WSL 自带的 openssh-server 有点问题. 有的文件没有初始化, 所以需要先卸再装`sudo apt remove openssh-server && sudo apt install openssh-server`
3. 修改配置文件. Windows 因为历史上曾经有过 ssh-server, 所以子系统里不能使用 22 端口作为标准端口, 编辑`/etc/ssh/sshd_config`, Port 改成 2233, PasswordAuthentication 改成 yes, 允许账号密码登录
4. `sudo /etc/init.d/ssh restart` 启动子系统 ssh 服务
19. 开机自动启动 WSL& rc 5 服务
1. 配置 sudo 不需要密码
1. `sudo vim /etc/sudoers`, 添加上自己的用户名, 然后加上 NOPASSWD:
- ![sudo不输密码](./img/wsl/sudo不输密码.png)
1. 在启动文件夹(`C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp`)中添加启动脚本
```bat
"C:\Windows\System32\bash.exe" -c 'sudo service ssh restart'
-
建立文件夹快捷方式.
- WSL 会把硬盘挂载到/mnt 下边, 但是每次都 cd 进去很麻烦
- 所以可以直接
ln -s /mnt/f/www /home/yao/www
, 在主目录下给开发目录建个链接, over- 我的习惯是独立文件放在 F 盘里, OneDrive/www/微信&QQ 聊天记录
-
安装 nvm
- 毕竟是前端, 专业解决 node 版本问题,
wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash
- 然后
nvm install stable && nvm use stable
, over
-
vimrc
- 1000 个开发会有 1500 种 vimrc, 我的习惯是在保证可用性的情况下尽可能减少对 vimrc 的依赖. 所以有了这个对外部环境 0 依赖的版本
- 功能概述:
- vimrc 中自带使用说明, 对新人友好
- shift+t 打开文件夹浏览窗口, 再按一次关闭
- 使用 t 可以在新标签页中打开文件
- ctrl + w 切换浏览区域
- ctrl + b 切换到上个标签页
- ctrl + n 切换到下个标签页
- 不会生成 swp 交换文件
- 使用空格替换 tab
- 配置文件修改后可以自动加载
- 光标抵达行首/行尾可以继续向前
- 使用方法
- vim ~/.vimrc
- :set paest
- 粘贴以下内容:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58" 功能说明:
" 显示行号 => 可使用`set nonumber` 关闭行号显示
" 不生成swp交换文件
" 关闭粘贴代码时添加注释的功能
" 在行头/行尾使用左/右键时自动前往上一行/下一行
" 在插入模式下, 按 `ctrl+n` 自动补全单词(多个单词可选时使用`↑`、`↓`键选择, 回车确认)
"
" 使用方式:
" 将文件重命名为.vimrc ,置于用户的~目录下
"
autocmd! bufwritepost .vimrc source % " vimrc文件修改之后自动加载。 linux。
" 常规设定
"set number " 显示行号。
set ambiwidth=double " 将所有字符显示为全角宽度
set autoindent " 自动缩进
set wildmenu " 自动补全的时候,将补全内容使用一个漂亮的单行菜单形式显示出来。
set whichwrap=b,s,<,>,[,] " 光标从行首和行末时可以跳到另一行去
set nobackup " 取消备份
set noswapfile " 不生成交换文件
autocmd FileType * setl fo-=cro " 关闭自动添加注释的效果
" 支持鼠标滚动
" set mouse=a
colorscheme elflord " 设定颜色主题
" tab 空格
set expandtab " 将输入的tab自动转换为空格(默认4个空格)
set smarttab " 在行首输入tab时自动转换为空格
set shiftwidth=4 " 缩进时默认的缩进宽度(4个空格)
" netrw文件浏览器
set autochdir " 当打开一个文件时,自动切换到该文件所在的目录
let g:netrw_altv = 1 " 与preview项相配合,在右侧打开预览文件
let g:netrw_preview = 1 " 在一个垂直列表中打开预览文件
let g:netrw_liststyle = 3 " 列表模式-文件夹浏览模式
let g:netrw_winsize = 30 " 文件夹列表的宽度(30个字符)
let g:netrw_browse_split = 4 " 在当前窗口的新区域内预览文件(与P操作相同)
" 编写函数实现开关 Vexplore 文件夹列表的效果
function! ToggleVExplorer()
if exists("t:expl_buf_num")
let expl_win_num = bufwinnr(t:expl_buf_num)
if expl_win_num != -1
let cur_win_nr = winnr()
exec expl_win_num . 'wincmd w'
close
exec cur_win_nr . 'wincmd w'
unlet t:expl_buf_num
else
unlet t:expl_buf_num
endif
else
"exec '1wincmd w'
Vexplore
let t:expl_buf_num = bufnr("%")
endif
endfunction
" 按键 => 指令快捷方式
map <C-n> :tabn<CR>
map <C-b> :tabprevious<CR>
map <S-t> :call ToggleVExplorer()<CR>
set paste " 复制模式
-
Vbox
- For Docker
-
Docker Toolbox
- 如果考虑高可用的话, Dockerfile 其实才是最好的高可用开发环境
- 截止到目前为止(2018 年 7 月), 基于 Hyper-V 的 Docker for Windows 有兼容性问题(只有 Win10 专业版可用), 性能问题(一个页面触发 4 个异步请求, 稳定有 1~2 个请求 404), 所以 Windows 版本上选用的是 Docker Toolbox
- Docker 配置时需要注意三点
- 将 Docker 项目所在盘挂在为共享文件夹(避免找不到文件)
- 将 Docker 项目 expose 的端口在虚拟机上绑定好映射
- 需要用 docker-compose 官方最新版本的release替换掉 Toolbox 自带的 docker-compose.exe, 否则无法解析有中文注释的 yaml 文件(万恶的 Python 编码问题)
- 创建 docker-machine 并配置阿里镜像源
- 删除旧机器 =>
docker-machine rm default
- 添加新机器并配置阿里镜像源 =>
docker-machine create --engine-registry-mirror=https://ns0io9ia.mirror.aliyuncs.com -d virtualbox default
- 删除旧机器 =>
- 将 Docker 项目所在盘挂在为共享文件夹(避免找不到文件)
- 自动启动 vbox & docker
- 在启动文件夹(
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp
)中添加 bat 启动脚本1
2
3
4
5
6
7"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" startvm "default" --type "headless"
"C:\Program Files\Docker Toolbox\docker-machine.exe" start default
echo "等待vbox启动完毕(2分钟)"
ping 127.0.0.1 -n 120
echo "启动docker"
"C:\Program Files\Docker Toolbox\docker-compose.exe" -f "F:\www\ha_develope_env\docker-compose.yml" up -d
"C:\Program Files\Docker Toolbox\docker-compose.exe" -f "F:\www\docker\docker-compose.yml" up -d - 截图示例
- 在启动文件夹(
-
git/ssh
- 打开 PowerShell, 输入 ssh-keygen.exe, 然后把公钥填到 git 上就可以
- 公钥可以在 everything 上搜.ssh, 找到对应文件夹, 然后用 VSCode 打开 id_rsa.pub 即可
-
nvm for windows
- windows 上有时也需要跑 node
- 项目地址
-
Adobe XC
- 可以在 Windows 上查看 Sketch, 免费
-
2345 看图王 & 2345 好压 & QQ 影音
- 日常应用
- 好压的文件批量改名很好用
-
输入法
- 只留两种键盘模式, 中文&英文, 平常可以用 Win+空格来回切换
- 使用系统内置输入法
- Win10 内置的输入法是刘未鹏牵头开发的, 体验上不输搜狗, 而且永远没有广告
- 使用其他输入法的问题在于, 切换起来太麻烦, 带来的好处不足以覆盖广告导致的体验下降
- 在设置里, 配上中文模式下也使用英文标点, 可以减少 30%的 bug
-
动图捕捉
- 使用LICEcap即可
Windows开发环境搭建最佳实践
https://www.yaozeyuan.online/2018/06/17/2018/07/Windows开发环境搭建最佳实践/