zoukankan      html  css  js  c++  java
  • PyCharm进行远程开发和调试linux服务器

    简介:

    或许我也应该迁移到linux环境去开发。

    最近写的一些小东西,在wnidows上开发,在windows上调试,都很正常。可是一旦放进linux服务器,就歇菜了。

    那么我们有什么办法处理这个windows和linux的兼容问题呢?在linux开发,或者在linux环境下开发。看着差不多,但是意思真不一样。

    在linux开发,那就是用linux操作系统进行开发。

    在linux环境下开发,那就不限于在linux操作系统进行开发,我们可以在windows下写代码,放在linux环境中执行。

    不去换操作系统了,直接在windows下写代码,用linux环境执行吧。

    查着开放了docker的2375,2376,使用了SSL证书,结果发现只是用pycharm管理docker服务,还没我用daocloud管理方便,废弃了。

    一:创建linux环境镜像

    虽然我有个NUC跑着fedora(linux),但是我喜欢部署到alpine-docker里面去,而且也不希望任何开发环境再把我的nuc搞乱,那么还是用docker创建一个可以用来执行python解析的环境吧。

    1.docerfile

    from alpine:3.8
    MAINTAINER jackadam<jackadam@sina.com>
    #变更源
    # 安装包源切到中科大, 国内访问加速
    RUN {
            echo 'http://mirrors.ustc.edu.cn/alpine/v3.8/main';
            echo 'http://mirrors.ustc.edu.cn/alpine/v3.8/community';
            echo 'http://mirrors.ustc.edu.cn/alpine/edge/main';
            echo 'http://mirrors.ustc.edu.cn/alpine/edge/community';
            echo 'http://mirrors.ustc.edu.cn/alpine/edge/testing';
        } > /etc/apk/repositories

    # 设置默认时区为亚洲/上海 (没有北京可选)
    RUN apk upgrade   &&
        apk add --no-cache apk-tools tzdata openssh &&
        cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime &&
        apk del tzdata  &&
    #修改root密码
        echo root:123456 | chpasswd  &&
    #生成KEY
        ssh-keygen -q -t rsa -b 2048 -f /etc/ssh/ssh_host_rsa_key -P '' -N '' &&
    #允许远程登录
        sed -i "s/#PermitRootLogin.*/PermitRootLogin yes/g" /etc/ssh/sshd_config
    #开放22端口
    EXPOSE 22

    CMD /usr/sbin/sshd -D

    使用这个dockerfile创建一个docker镜像。

    2019-10-24更新,添加  apk upgrade,解决部分库版本不兼容的问题。

    2.build.sh

    #使用docker
    echo
    停止容器 docker stop ssh echo 删除容器 docker rm ssh echo 临时禁用selinux setenforce 0 echo 重建镜像 docker build -t ssh . echo 恢复启用selinux setenforce 1 echo 启动容器 docker run -d -t --restart=always --privileged --name ssh -p 2222:22 ssh #下面使用docker-compose #!/bin/bash echo 暂停selinux setenforce 0 echo 停止容器 docker-compose -f ssh.yaml down echo 重建镜像 docker-compose -f ssh.yaml build echo 启动容器 docker-compose -f ssh.yaml up -d echo 重新打开selinux setenforce 1

    使用这个脚本来创建镜像,并启动容器。因为我老忘记selinux,重启,删除……

    反正用着方便。

    更新使用docker-compose

    3.尝试远程登录,并安装python

    Winscp,putty,都可以正常登录这个2222端口的容器即可。

    安装python的命令是:apk add python3

    二:安装python3

    1.修改dockerfile

    from alpine:3.8
    MAINTAINER jackadam<jackadam@sina.com>
    #变更源
    # 安装包源切到中科大, 国内访问加速
    RUN { 
            echo 'http://mirrors.ustc.edu.cn/alpine/v3.8/main'; 
            echo 'http://mirrors.ustc.edu.cn/alpine/v3.8/community'; 
            echo 'http://mirrors.ustc.edu.cn/alpine/edge/main'; 
            echo 'http://mirrors.ustc.edu.cn/alpine/edge/community'; 
            echo 'http://mirrors.ustc.edu.cn/alpine/edge/testing'; 
        } > /etc/apk/repositories
    
    # 设置默认时区为亚洲/上海 (没有北京可选)
    RUN apk upgrade   && 
        apk add --no-cache apk-tools tzdata openssh && 
        cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && 
        apk del tzdata  && 
    #修改root密码
        echo root:123456 | chpasswd  && 
    #生成KEY
        ssh-keygen -q -t rsa -b 2048 -f /etc/ssh/ssh_host_rsa_key -P '' -N '' && 
    #允许远程登录
        sed -i "s/#PermitRootLogin.*/PermitRootLogin yes/g" /etc/ssh/sshd_config
        
    #这里增加python3
    RUN apk add python3 sudo &&
        pip3 install -i http://pypi.douban.com/simple  --upgrade   --trusted-host pypi.douban.com  pip setuptools 

    #开放22端口 EXPOSE 22 CMD /usr/sbin/sshd -D

    更新使用豆瓣源安装python库

    2.重新生成镜像

    还用上一节的rebuild

    3.测试远程登录

    就用winscp或putty测试

    三:配置pycharm部署

    1.配置Deployment-Connection

     

    和WINSCP的一样,就是SFTP的ssh配置。Test SFTP connecton,测试通过就可以了。

    2.配置Deployment-Mappings

    这个是映射关系。Loacl path,就是项目的本地路径。Deployment path,就是在服务器上的路径。不过要加上第一个图中connection中的Root path。

    如果

    Root path : /PythonPorject 

    Deployment path: /test01

    那么在服务器上的路径为:/PythonPorject/test01

    四:配置pycharm解释器

    使用 deployment configuration,选择刚才命名的部署配置名,设置python解释器地址,因为我用的python3,默认的没有python,所以改一下解释器路径,选择到python3就可以了。

    五:hello world

    1.编写代码

    print('hello world.')

    2.部署

     pycharm中  Tools--Deployment--Upload to test,

    上传完成,一个文件传输完成,那个test是我的部署配置名,你的可能会不一样。

    Automatic Upload(always)自动上传,我勾选了。

    改代码,不用再手动上传

    3.run一下,跑起来

    好了,可以看到输出框是远程执行的,在ssh连接的192.168.1.3上执行的。

    六:python包管理

    1.python包管理

    尝试使用pycharm对这个远程环境安装python包,结果报错。

    其实也简单,因为这个alpine linux docker镜像没有sudo。

    2.安装sudo

    编辑dockerfile

    from alpine:3.7
    MAINTAINER jackadam<jackadam@sina.com>
    #变更源
    # 安装包源切到中科大, 国内访问加速
    RUN { 
            echo 'http://mirrors.ustc.edu.cn/alpine/v3.7/main'; 
            echo 'http://mirrors.ustc.edu.cn/alpine/v3.7/community'; 
            echo 'http://mirrors.ustc.edu.cn/alpine/edge/main'; 
            echo 'http://mirrors.ustc.edu.cn/alpine/edge/community'; 
            echo 'http://mirrors.ustc.edu.cn/alpine/edge/testing'; 
        } > /etc/apk/repositories && 
    
    # 设置默认时区为亚洲/上海 (没有北京可选)
            apk add --no-cache --upgrade apk-tools  openssh  tzdata&& 
        cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && 
        echo "Asia/Shanghai" > /etc/timezone && 
        apk del tzdata 
    #修改root密码
    RUN echo root:123456 | chpasswd
    #生成KEY
    RUN ssh-keygen -q -t rsa -b 2048 -f /etc/ssh/ssh_host_rsa_key -P '' -N ''
    #允许远程登录
    RUN sed -i "s/#PermitRootLogin.*/PermitRootLogin yes/g" /etc/ssh/sshd_config
    #开放22端口
    EXPOSE 22
    
    #这里增加python3
    RUN apk add python3 && 
        pip3 install --upgrade pip && 
        pip3 install --upgrade setuptools &&
        apk add sudo  #sudo新增加
    
    
    CMD /usr/sbin/sshd -D

    3.测试

    rebuild一下

    再试试。现在应该可以在pycharm中管理远程docker中的python环境,并安装python包了。

    4.另一种解决方法

    不更新dockerfiler也可以解决,因为开放了ssh连接,你也可以直接ssh登录,然后安装sudo。效果一样的。

    七:注意事项

    1.部署路径是合并的,如果上传失败,可能是远程没有这个目录,手动去创建一下,或dockerfile 中 mkdir一下。

    2.pycharm可以通过sudo来给远程环境安装pythan包,但是不能安装linux系统软件,系统软件要在dockerfile中安装,如安装sudo。

    八:总结

    从家里淘到NUC以后,就一直想着怎么最大化利用它,自己写的一些软件,在windows下运行良好,转去linux,还要重新调整。直接使用pycharm的远程解释器,远程部署功能,我可以在windows上写代码,跑在linux下,环境也在linux下。方便以后开发linux下的python程序。

    而且家里的NUC也就是作为家庭服务器来用的。开发一些24小时在线的,或者未来面向服务器部署的软件。还不影响我的windows笔记本。

    也就有了这篇文章。

    不过也走了一些弯路,因为pycharm支持管理docker,为了docker的安全,整那几个证书密钥,整了好几天,发现pycharm管理docker还真不如daocloud方便。

  • 相关阅读:
    java.lang.NoClassDefFoundError:org/apache/commons/lang/exception/NestableRuntimeException错误的解决
    json转换成对象
    16年4月20号 个人总结
    sql between and
    sql 中的运算符级别 如and or not
    mybatis int 类型判断<if>
    iOS地址编码解析
    iosiOS 地图 自定义以及添加锚点
    ios如何获取位置权限
    如何初始化一个iOS原生地图
  • 原文地址:https://www.cnblogs.com/jackadam/p/8976873.html
Copyright © 2011-2022 走看看