基于Pycharm和Docker的开发环境代码加密

如何使用Pycharm和Docker实现开发环境自定义

引言

在工作中经常存在这样一种状态,当同时开发多个项目的时候,如果每个项目的环境配置是不一样的,则当需要进行项目切换开发时,是比较痛苦的。

虽说存在各种环境隔离工具,但是仅仅是服务于一种语言的特定开发。项目开发中使用的环境还是蛮多的,有时候还是需要像独立机器那样的环境来进行项目隔离开发。为此以前采用虚拟机方式进行环境隔离。不过使用laptop进行开发,虚拟机解决方案还是不够轻量。

解决思路

其实业界已经成熟的方案来进行环境隔离了,那就是Docker方式。但是目前体验到的Docker最强大的地方还是环境隔离。在开发效率上的提升其实并没有什么直接的促进作用。

为了提高开发效率,还是要进行IDE的扩展和强化。因此,从这两点上来说,如果能够在Pycharm上熟练使用Docker的相关功能,就能够实现轻量级的环境和优雅高效的开发方式。

痛点定义

在日常的工作中,由于开发人员多采用windows和mac系统进行开发,而服务侧则通常使用linux系统进行部署。在通用性满足前提的情况下,问题不大。但当有一定严苛的开发需求出现时,就存在比较大的困扰了。
现在的一个痛点是,需要在本地开发环境对代码进行加密,然后提交到服务器上进行部署,实现源代码的加密部署。由于加密过程中需要打包编译器的相关组件,所以加密后的代码要在相同的系统类型和编译器版本上才能运行。因此在使用Docker隔离的基础上,还需要使用完全一致的开发基础组件。

痛点解决思路

现阶段服务端部署时通常采用直接部署的方式,未采用docker进行部署,所有直接线上线下采用相同版本的Docker镜像行不通,但是由于加密涉及到的仅仅是操作系统类型,编译器类型和语言包,所以保持这三者一致即可。

实施思路

上述思路其实比较简单,不过实现细节的探索过程还是比较曲折的。下面介绍下具体的实现细节(mac版)

  1. 安装好Pycharm Professional 版本,普通社区版不具备Docker插件,远程编译和远程部署功能。

  2. 安装好Docker,mac这里选择docker for mac进行安装。

  3. 启动Docker服务

  4. 配置Pycharm连接Docker服务
    Pycharm->Perferences->Build,Execution,Deployment ->Docker

  5. 选择右边的+号添加Docker服务,填写好对应的本地和容器内部的映射路径对,apply应用即可。
    image

  6. 点击Pycharm的services标签页(点击pycharm最左下角的那个博士帽图标,调出services标签页),如下图所示。
    image
    image

  7. 右击Docker图标,选择Connect,连接Docker服务,连接成功后,可以看到Docker的管理页,可以看到有具体的容器和镜像。可以对容器和镜像进行相应的增删改查操作。
    image

  8. 由于已经下载过对应的Python3.5.4的镜像了,所有这里能够看到,如果想要对应的镜像,可以在下载后再来这里查看。公司线上系统统一的镜像地址请联系运维获取。

  9. 这里选择Python3.5.4对应的镜像进行右击,即可进入到容器的配置创建页,默认命名为Docker Image。 设置好容器名称,容器的映射端口,卷映射,和一些执行命令等,即可创建对应的容器了。我这里创建一个名为python_test的容器
    image

  1. 创建完成后,点击该容器,即可进行该容器的具体管理页。上图中左边红框是新建的容器,右边红框是该容器的对应配置,可以查看和修改,不过修改都是要重启容器的,不建议在容器创建后进行配置修改。
    image
  1. 当容器按照定义的配置创建好以后,就需要部署了,对的,容器部署,其实就是容器创建时自定义的那个操作,这边部署的时候执行一下,有点惰性执行的味道。

  2. 右键容器名进行部署,即可完成容器的部署操作。部署完之后可以进行验证,比如做了代码映射,可以点击Files查看对应的目录有没有映射成功。
    image

  3. 当我们创建好容器,现在就可以进行加密操作了,右击容器名,通过attach进行容器内部,在映射目录中根据requirements.txt安装对应的Python包后,即可运行加密脚本进行加密了。

  4. 加密完后,在本地电脑的对应目录中即可看到对应的加密后的文件,此时提交本地修改后,再checkout一份新分支后删除对应的源码即可实现加密提交了。

15.提交完后,停止容器即可。下次再使用时启动容器即可。

思考

其实,这个方案本质上是使用了Pycharm提供的Docker客户端,然后使用命令行的方式进行代码代码。不过因为有了GUI,所以使用起来可能更加便捷。

当然这是一种最基础的方式,有可以通过使用Docker内的远程编译器和远程部署方案来实现。另外,创建Docker的方式也可以使用Dockerfile和yaml脚本的形式,这里暂时用不上,就留待以后说明。