www.9778.com 28

PhpStorm 2019.3 EAP #7 发布,开始支持 WSL

PhpStorm 2019.3 EAP build 193.4778.21 发布了,此版本最大的亮点是引入了对
WSL 的支持。

上一篇:编程入门17:Python环境管理

什么是Docker Compose

近日看到R语言中文社区上一篇关于Windows的Linux子系统搭建Python和R环境的文章,加上虾神也在宣传,于是我也动手来玩一玩。之前很早就了解过WSL,但一直没动手使用,趁机来学习一下。

WSL
是用于在 Windows 10 上运行 Linux 二进制可执行文件的兼容层,PhpStorm
现在支持在 WSL 环境中开发。开发者将能够在 WSL 中指定一个远程 PHP
解释器,并将其用于运行脚本、测试、Composer 命令和调试。

所谓“生产环境”是指应用程序正式上线运行所用的软硬件环境,多为安装了Linux操作系统的高性能计算机,集中放置在专用机房中,通过网络远程访问。开发者通常还会配置一个“模拟生产环境”来进行发布前的测试——Linux可以在实体机上安装,也可以在其他操作系统管理的虚拟机上安装(例如Win10自带的虚拟机工具Hyper-V),但最简便的方式则是打开Win10的微软应用商店直接安装——这种Linux是基于“适用于Linux的Windows子系统”(Windows
Subsystem for Linux,简称WSL),启动比虚拟机更快,性能也更好。

Docker
Compose是运行多容器Docker应用程序的工具。要使用Compose配置应用程序的服务,我们使用配置文件,然后执行单个命令,可以创建并启动配置中指定的所有服务。

1 Windows Subsystem for Linux简介

Windows Subsystem for Linux是一个为在Windows
10上能够原生运行Linux二进制可执行文件的兼容层。它是由微软与Canonical公司合作开发,目标是使纯正的Ubuntu
14.04 “Trusty
Tahr”映像能下载和解压到用户的本地计算机,并且映像内的工具和实用工具能在此子系统上原生运行。WSL提供了一个微软开发的Linux兼容内核接口(不包含Linux代码),来自Ubuntu的用户模式二进制文件在其上运行。该子系统不能运行所有Linux软件,例如那些图形用户界面,以及那些需要未实现的Linux内核服务的软件。不过,这可以用在外部X服务器上运行的图形X
Window系统缓解。此子系统起源于命运多舛的Astoria项目,其目的是允许Android应用运行在Windows
10 Mobile上。此功能组件从Windows 10 Insider Preview build
14316开始可用。——维基百科

更新说明中介绍了具体使用操作:

现在就让我们使用WSL来创建一个模拟生产环境,在Win10开始菜单中点击“Windows系统”>“控制面板”>“程序”>“启用或关闭Windows功能”,在项目列表中勾选“适用于Linux的Windows子系统”,点击“确定”并重启操作系统。进入微软应用商店搜索“Linux”即可找到多个Linux发行版,它们看起来风格各异,但都使用同样的Linux内核——推荐你安装Ubuntu,对新手来说更为友好。

Docker
Compose适用于许多不同的项目,如:

2 WSL安装

在开始菜单里搜索”Microsoft Store”。

www.9778.com 1

接着在”Microsoft Store”中搜索”Linux”。

www.9778.com 2

从中选择一个Linux的发行版安装即可。我选的是Ubuntu 18.04
LTS,个人比较熟悉Ubuntu,同时也想试一下18.04版本。点击获取后,”Microsoft
Store”就会自动下载安装。当然安装完后,你可以把它固定到开始屏幕比较方便。

www.9778.com 3

当然现在启动WSL是失败的,因为还得在Windows中启用该功能。依旧是在开始菜单搜索Windows功能。

www.9778.com 4

接着打钩”适用于Linux的Windows子系统”。

www.9778.com 5

这个时候就能愉快地开启Ubuntu系统了(当然一般上面勾选完需要重启系统,这类就跳过了)。

www.9778.com 6

如果第一次启动的话,会要求你创建一个Linux的账户和密码,熟悉Linux系统的同学应该很清楚了,这就不多说了,如果不熟悉的,建议去学习一下Linux的基础管理和操作。这样就愉快地可以开始在Windows上玩耍Linux系统了。另外这个系统其实是安装在如下的地址内,这样子后期管理时也可以快速上手使用。

C:Users你的用户名AppDataLocalPackagesCanonicalGroupLimited.Ubuntu18.04onWindows_79rhkp1fndgscLocalStaterootfs

同时WSL直接将你的其他磁盘挂载到了mnt文件夹下面,可以直接通过/mnt/d访问。

cd /mnt/fls -l

www.9778.com 7

如果觉得下载速度略慢的话,完全可以更新apt源文件来提速。可以看到在/etc/apt下面的sources.list

www.9778.com 8

我们这里在自己的F盘创建了一个WSL的工作空间,可以用来做各种相关的事情,譬如这里在更新apt源文件前,先备份到这个空间内。需要提醒下,我这里都先运行了sudo
su,以root账户执行。所以不需要在命令前加sudo,如果不是root账户,请加sudo。

mkdir /mnt/f/WSLworkspacecp /etc/apt/sources.list /mnt/f/WSLworkspace/sourcesbackup.list

www.9778.com 9

www.9778.com 10

而替换源通常使用vim或者gedit来操作,这个时候知道我们的系统安装路径的好处就来了。只需要在Windows上打开对应文件夹下的sources.list(建议用Notepad++),复制粘贴就可以。给出几个源。

deb bionic main
restricted universe multiversedeb-src
bionic main restricted
universe multiversedeb
bionic-updates main restricted universe multiversedeb-src
bionic-updates main
restricted universe multiversedeb
bionic-backports main
restricted universe multiversedeb-src
bionic-backports main
restricted universe multiversedeb
bionic-security main
restricted universe multiversedeb-src
bionic-security main
restricted universe multiversedeb
bionic-proposed main
restricted universe multiversedeb-src
bionic-proposed main
restricted universe multiverse

deb bionic main restricted universe
multiversedeb bionic-security main
restricted universe multiversedeb
bionic-updates main restricted universe multiversedeb
bionic-proposed main restricted
universe multiversedeb
bionic-backports main restricted universe multiversedeb-src
bionic main restricted universe
multiversedeb-src bionic-security
main restricted universe multiversedeb-src
bionic-updates main restricted
universe multiversedeb-src
bionic-proposed main restricted universe multiversedeb-src
PhpStorm 2019.3 EAP #7 发布,开始支持 WSL。 bionic-backports main restricted
universe multiverse

deb bionic main restricted
universe multiversedeb-src bionic
main restricted universe multiversedeb
bionic-updates main restricted
universe multiversedeb-src
bionic-updates main restricted universe multiversedeb
bionic-backports main restricted
universe multiversedeb-src
bionic-backports main restricted universe multiversedeb
bionic-security main restricted
universe multiversedeb-src
bionic-security main restricted universe multiversedeb
bionic-proposed main restricted
universe multiversedeb-src
bionic-proposed main restricted universe multiverse

接着就可以进行更新软件了。

sudo apt-get updatesudo apt-get upgrade

首先,确保已在 Windows 10 中安装了 WSL,并选择了 Linux 发行版。

www.9778.com 1118_linux.png

  • 开发:使用Compose命令行工具,我们创建(并交互)一个孤立的环境,这将承载正在开发的应用程序。
  • 通过使用Compose文件,开发人员将记录并配置所有应用程序的服务依赖关系。
  • 自动测试:此用例需要运行测试的环境。Compose提供了一种方便的方式来管理测试套件的隔离测试环境。完整的环境在Compose文件中定义。
  • Docker Compose是在Fig
    配置文件中创建的,这个社区项目现在没有使用。

3 WSL搭建数据科学环境

接下来就是搭建数据科学环境了。这里推荐安装Anaconda,当然如果想从头开始安装也是允许的。先去Anaconda
官网找到最新的版本。我Windows上基本都是Python2,因此在这个版本上主要以Python3为主,就是图中红框的。下载链接如下。

www.9778.com 12

接着用wget下载,可以改变路径。

wget -P /mnt/f/WSLworkspace https://repo.continuum.io/archive/Anaconda3-2018.12-Linux-x86_64.sh

接下来就是安装Anaconda3。

bash /mnt/f/WSLworkspace/Anaconda3-2018.12-Linux-x86_64.sh

中间可以选择安装位置,这里默认安装在/root/Anaconda3,接着就等待安装结束了。安装过程中会提示是否将Anaconda3添加到环境变量,选yes。安装完会提示是否要安装Microsoft
VS code,我建议可以不装。接着再Linux命令行里敲入。

jupyter lab --allow-root

关于这个的配置有一些参考的内容见后面的链接,这里不详细展开,如果以root账户运行的话必须加上—allow
-root。

接着在Windows浏览器里访问

www.9778.com 13

除了Python3,我们还推荐装个R,用于混合编程。这个时候毕竟本机已经安装了原生R,我决定在Linux上搭建一个Microsoft
R Open。同样是打开MRO官网

www.9778.com 14

利用wget下载MRO。

wget -P /mnt/f/WSLworkspace https://mran.blob.core.windows.net/install/mro/3.5.1/microsoft-r-open-3.5.1.tar.gz

由于我用的Ubuntu18.04,还需要安装libpng12库。

wget -P /mnt/f/WSLworkspace https://mirrors.kernel.org/ubuntu/pool/main/libp/libpng/libpng12-0_1.2.54-1ubuntu1_amd64.debdpkg -i libpng12-01_1.2.54-1ubuntu1_amd64.deb

定位到MRO下载路径。

cd /mnt/f/WSLworkspacetar -xf microsoft-r-open-3.5.1.tar.gzcd microsoft-r-open./install.sh

接着需要看MRO和MKL的许可,先按回车看许可,接着按q键退出,按y进行安装。

www.9778.com 15

R安装好后,还需要配置到jupyter中。首先需要先安装devtools,Ubuntu
18.04还需要先安装libssl。

apt-get install libssl-dev

install.packages('devtools')libraryinstall_github('IRKernel/IRkernel')

这边发现IRkernel装不上,还需要装libcurl。

apt-get install libcurl4-openssl-dev

最后发现github连接老有问题。

www.9778.com 16

Github也有一个相同的issues,可以安装离线包,在github上点击clone or
download,下载到文件夹中。

devtools::install('/mnt/f/WSLworkspacre/IRkernel-master')

终于安装成功。最后在R里,再敲入如下命令。

IRkernel::installspec(name = 'ir35', displayname = 'MRO')

www.9778.com 17

www.9778.com 18

www.9778.com 19

www.9778.com 20

虽然R语言中文社区给出了比较完整的教程,但是具体搭建过程中,还是无数的坑。希望大家也是动手实践为主。最近发现好多需要在Linux系统上安装的包和库,因此有这个环境非常地好。

windows10 Linux子系统文件目录

再见虚拟机!在Win10中使用Linux版本的R和Python

Ubuntu 18.04 软件源修改成国内源

设置 jupyter notebook 可远程访问

Running as root is not recommended. Use —allow-root to bypass

Running as root is not recommended. Use —allow-root to bypass

Github Issues:Installation of packages using Devtools Fails – error
setting certificate

error setting certificate verify locations, install_github

无法安装github上的R包:error setting certificate verify

Github Issues:Installation failed: Timeout was reached during
installation of IRkernel

根据发行版的不同,可能已经预装了
PHP。如果没有,则必须通过命令行手动安装。例如,在 Ubuntu
中,可以运行以下命令:

首次启动Ubuntu终端需要花点时间安装组件,随后要输入用户名和密码来创建一个账号,接下来就会显示命令提示符“$”等待你输入命令:

在本教程中,我们将看到如何在Ubuntu
16.04机器上安装Docker Compose。

sudo apt update

$ cat /etc/issue # 显示发行版本,例如Ubuntu 18.04.1$ uname -a # 显示内核版本,例如Linux 4.4.0$ pwd # 显示当前路径$ cd / # 切换目录路径$ ls # 列出目录内容$ df -h # 显示文件系统$ python3 # 运行Python3解释器

安装Docker

sudo apt install php php-mbstring php-dom php-xml php-zip php-curl
php-xdebug

www.9778.com 2118_shell.png

为了安装Docker
Compose,我们需要Docker。首先,为官方Docker存储库添加公钥:

WSL 环境中安装了 PHP 后就可以开始配置 PhpStorm 了:

你可以看到Ubuntu已经自带了Python3.6.5解释器(注意对应命令为python3,在Linux中python命令默认指Python2)。与Windows不同,Linux的文件系统使用正斜杠作为路径分隔符,所有路径都以根目录“/”为起点组成树形结构,例如leo用户目录路径为“/home/leo”,输入时可以按TAB键自动补全命令和路径。注意:如果需要改变用户目录以外的东西,例如进行系统配置和软件安装,请在命令前加上“sudo”即以系统用户身份运行——Ubuntu使用apt命令管理软件包,我们首先要做的事是修改apt源列表文件:

$ curl -fsSL | sudo apt-key
add-

在 File | Settings | Languages & Frameworks | PHP 下添加 CLI
解释器

$ sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak$ sudo vim /etc/apt/sources.list

接下来,将Docker存储库添加到apt源列表中:

www.9778.com 22

以上命令先对apt源列表文件做复制备份,再用文本编辑器vim打开。请先输入“:%d”清空内容,再按“i”进入插入模式,复制以下文本并在窗口中右击粘贴,设置从中国大陆的镜像源下载软件包:

$ sudo add-apt-repository “deb
[arch=amd64] $(lsb_release
-cs) stable”

如果在此对话框中没有看到 WSL
选项,则意味着还没有安装 WSL,需要检查前面的步骤。

deb http://mirrors.cloud.tencent.com/ubuntu/ bionic main restricteddeb http://mirrors.cloud.tencent.com/ubuntu/ bionic-updates main restricteddeb http://mirrors.cloud.tencent.com/ubuntu/ bionic universedeb http://mirrors.cloud.tencent.com/ubuntu/ bionic-updates universedeb http://mirrors.cloud.tencent.com/ubuntu/ bionic multiversedeb http://mirrors.cloud.tencent.com/ubuntu/ bionic-updates multiverse#deb http://mirrors.cloud.tencent.com/ubuntu/ bionic-backports main restricted universe multiversedeb http://mirrors.cloud.tencent.com/ubuntu/ bionic-security main restricted universe multiverse

更新数据库包,使用用apt安装Docker:

www.9778.com 23

按“ESC”退出插入模式,再输入“:wq”保存并退出,接下来就可以执行apt命令更新和安装Ubuntu软件包了:

$ sudo apt-get update
$ sudo apt install docker-ce

将看到已安装的 WSL
发行版列表,并且可以根据需要添加任意数量的解释器。

$ sudo apt update # 更新软件包列表$ sudo apt list --upgradable # 查看哪些软件包可更新$ sudo apt upgrade python3.6 # 更新Python3.6,不指定名字则更新全部软件包$ sudo apt install python3-pip # 安装Pyhon3.6的pip$ python3 -m pip list # 查看Python3.6的第三方包列表$ sudo apt install python3.7 # 安装Python3.7$ sudo apt install python3.7-venv # 安装Python3.7的venv$ python3.7 -m venv vTest # 基于Python3.7创建一个虚拟环境$ source vTest/bin/activate # 激活一个虚拟环境

在安装过程结束时,Docker守护程序应该启动,以便在引导时加载。
我们可以使用以下命令检查其状态:

之后可以指定此解释器运行测试、Composer
或其它运行配置。

以上命令把Python3.6.5更新到3.6.6,并安装了Python3.7.0。你可以看到Ubuntu把Python分成多个模块,例如pip和venv都是需要额外安装的——另外也要记得修改Python软件包的镜像源,Ubuntu下的配置文件是/etc/pip.conf。

$ sudo systemctl status docker
---------------------------------

● docker.service - Docker Application Container Engine
 Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
 Active: active (running) 

www.9778.com 24

下面的示例程序在终端中输出彩色文本,这种语法是Unix或Linux特有的:

安装Docker Compose

此时可以安装Docker Compose。 通过执行以下命令下载当前版本:

# curl -L https://github.com/docker/compose/releases/download/1.14.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

去除执行权限:

# chmod +x /usr/local/bin/docker-compose

检查Docker Compose版本:

$ docker-compose -v

输出应该是这样的:

docker-compose version 1.14.0, build c7bdf9e

www.9778.com 25

"""xtextcolor.py 在*nix终端中输出彩色文本(使用第三方包colorama也可以在Windows中实现此效果)"""# from colorama import init# init()print("33[1;30m灰色文本33[0m")print("33[1;31m红色文本33[0m")print("33[1;32m绿色文本33[0m")print("33[1;33m黄色文本33[0m")print("33[1;34m蓝色文本33[0m")print("33[1;35m品红色文本33[0m")print("33[1;36m青色文本33[0m")print("33[1;37m白色文本33[0m")print("33[1;37;40m白色文本黑色背景33[0m")print("33[1;36;41m青色文本红色背景33[0m")print("33[1;35;42m品红色文本绿色背景33[0m")print("33[1;34;43m蓝色文本黄色背景33[0m")print("33[1;33;44m黄色文本蓝色背景33[0m")print("33[1;32;45m绿色文本品红色背景33[0m")print("33[1;31;46m红色文本青色背景33[0m")print("33[1;30;47m灰色文本灰色背景33[0m")

测试 Docker Compose

Docker Hub包含用于演示的Hello World镜像,说明了使用Docker
Compose运行容器所需的配置。

创建一个新的目录并进入它:

$ mkdir hello-world
$ cd hello-world

创建一个新的YAML文件:

$ $EDITOR docker-compose.yml

在此文件中粘贴以下内容:

unixmen-compose-test:
 image: hello-world

注意:第一行用作容器名称的一部分。

保存并退出。

此外此版本还有针对 PHP 的修复与 WebStorm、DataGrip 团队以及 IntelliJ
平台的最新更新。详情查看:

接下来我们练习通过网络访问Linux主机,这需要在Ubuntu上配置SSH服务:

运行容器 接下来,在hello-world目录中执行以下命令:

$ sudo docker-compose up

如果一切正确,这应该是Compose所显示的输出:

 

Pulling unixmen-compose-test (hello-world:latest)...
latest: Pulling from library/hello-world
b04784fba78d: Pull complete
Digest: sha256:f3b3b28a45160805bb16542c9531888519430e9e6d6ffc09d72261b0d26ff74f
Status: Downloaded newer image for hello-world:latest
Creating helloworld_unixmen-compose-test_1 ... 
Creating helloworld_unixmen-compose-test_1 ... done
Attaching to helloworld_unixmen-compose-test_1
unixmen-compose-test_1 | 
unixmen-compose-test_1 | Hello from Docker!
unixmen-compose-test_1 | This message shows that your installation appears to be working correctly.
unixmen-compose-test_1 | 
unixmen-compose-test_1 | To generate this message, Docker took the following steps:
unixmen-compose-test_1 | 1. The Docker client contacted the Docker daemon.
unixmen-compose-test_1 | 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
unixmen-compose-test_1 | 3. The Docker daemon created a new container from that image which runs the
unixmen-compose-test_1 | executable that produces the output you are currently reading.
unixmen-compose-test_1 | 4. The Docker daemon streamed that output to the Docker client, which sent it
unixmen-compose-test_1 | to your terminal.
unixmen-compose-test_1 | 
unixmen-compose-test_1 | To try something more ambitious, you can run an Ubuntu container with:
unixmen-compose-test_1 | $ docker run -it ubuntu bash
unixmen-compose-test_1 | 
unixmen-compose-test_1 | Share images, automate workflows, and more with a free Docker ID:
unixmen-compose-test_1 | https://cloud.docker.com/
unixmen-compose-test_1 | 
unixmen-compose-test_1 | For more examples and ideas, visit:
unixmen-compose-test_1 | https://docs.docker.com/engine/userguide/
unixmen-compose-test_1 | 
helloworld_unixmen-compose-test_1 exited with code 0

只要命令处于活动状态,Docker容器就会运行,因此当测试完成运行时,容器将停止。

总结

本文介绍了关于在Ubuntu 16.04机器上安装Docker
Compose的教程。
我们还看到了如何通过YAML格式的Compose文件创建一个简单的项目。

更多Docker相关教程见以下内容

Docker安装应用(CentOS
6.5_x64)
http://www.linuxidc.com/Linux/2014-07/104595.htm

Ubuntu 16.04 服务器上配置使用 Docker 
http://www.linuxidc.com/Linux/2017-06/145176.htm

Ubuntu 15.04下安装Docker 
http://www.linuxidc.com/Linux/2015-07/120444.htm

Docker 安装实例
http://www.linuxidc.com/Linux/2017-04/142666.htm

Docker 创建基础镜像 
http://www.linuxidc.com/Linux/2017-05/144112.htm

在 Ubuntu 15.04 上如何安装Docker及基本用法
http://www.linuxidc.com/Linux/2015-09/122885.htm

Ubuntu 16.04上Docker使用手记
http://www.linuxidc.com/Linux/2016-12/138490.htm

使用Docker分分钟启动常用应用 
http://www.linuxidc.com/Linux/2017-04/142649.htm

Ubuntu 16.04下Docker修改配置文件不生效解决办法 
http://www.linuxidc.com/Linux/2017-05/143862.htm 

Docker
的详细介绍
:请点这里
Docker
的下载地址
:请点这里

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-07/145555.htm

www.9778.com 26

https://blog.jetbrains.com/phpstorm/2019/10/phpstorm-2019-3-eap-7

$ sudo /usr/bin/ssh-keygen -A # 生成主机密钥$ sudo vim /etc/ssh/sshd_config # 编辑SSH服务配置

将配置文件中的PasswordAuthentication改为yes,允许使用密码登录(默认只允许密钥文件),然后启动SSH服务:

$ sudo service ssh start

现在打开Windows命令提示符输入以下命令,作为指定用户登录指定IP地址的主机(“127.0.0.1”是个指向本机的特殊IP地址):

ssh leo@127.0.0.1

你也可以安装其他更专业的SSH客户端,例如PuTTY和Bitvise SSH Client
SSH
Client登录Ubuntu运行示例程序的效果如下:

www.9778.com 2718_ssh.png

WSL是个好东西,不过只适用于学习和测试。如果你想要真正的生产环境,还是得有自己的机房,或者去买现成的云主机。

——编程原来是这样……

Linux系统也可以安装桌面环境,虽然WSL的终端窗口不支持图形界面,但是可以通过远程桌面服务来使用——推荐桌面环境Xfce,这据说是Linux的创造者Linus
Torvalds本人的选择哦:

$ sudo apt install xfce4 xrdp fonts-wqy-microhei

www.9778.com,Xfce大概要占用600MB空间,相对于GNOME和KDE等其他桌面环境来说算是相当小巧轻便。下载安装完成后需要编辑远程桌面服务配置文件/etc/xrdp/xrdp.ini,将默认端口3389改为13389,免得WSL和Windows的远程桌面服务互相冲突。然后执行以下命令启动远程桌面服务:

$ echo "xfce4-session" > ~/.xsession$ sudo service xrdp start

现在就可以使用远程桌面客户端例如Win10自带的mstsc连接127.0.0.1:13389,登录到Xfce桌面环境了:

www.9778.com 2818_xfce.png

在桌面环境中也可以打开终端窗口执行命令,例如安装Firefox浏览器:

$ sudo apt install firefox

今后你也可以选择在实体机上安装Linux作为日常主力系统,推荐Xubuntu——就是集成了Xfce桌面环境的Ubuntu