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方便。

原文地址:https://www.cnblogs.com/jackadam/p/8976873.html