简介:

或许我也应该迁移到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

  1. 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
  2.  
  3. # 设置默认时区为亚洲/上海 (没有北京可选)
    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
  4.  
  5. CMD /usr/sbin/sshd -D

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

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

2.build.sh

  1. #使用docker
    echo 停止容器
  2. docker stop ssh
  3. echo 删除容器
  4. docker rm ssh
  5. echo 临时禁用selinux
  6. setenforce
  7. echo 重建镜像
  8. docker build -t ssh .
  9. echo 恢复启用selinux
  10. setenforce
  11. echo 启动容器
  12. docker run -d -t --restart=always --privileged --name ssh -p : ssh
  13.  
  14. #下面使用docker-compose
  15. #!/bin/bash
  16. echo 暂停selinux
  17. setenforce
  18. echo 停止容器
  19. docker-compose -f ssh.yaml down
  20. echo 重建镜像
  21. docker-compose -f ssh.yaml build
  22. echo 启动容器
  23. docker-compose -f ssh.yaml up -d
  24. echo 重新打开selinux
  25. setenforce

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

反正用着方便。

更新使用docker-compose

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

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

安装python的命令是:apk add python3

二:安装python3

1.修改dockerfile

  1. from alpine:3.8
  2. MAINTAINER jackadam<jackadam@sina.com>
  3. #变更源
  4. # 安装包源切到中科大, 国内访问加速
  5. RUN { \
  6. echo 'http://mirrors.ustc.edu.cn/alpine/v3.8/main'; \
  7. echo 'http://mirrors.ustc.edu.cn/alpine/v3.8/community'; \
  8. echo 'http://mirrors.ustc.edu.cn/alpine/edge/main'; \
  9. echo 'http://mirrors.ustc.edu.cn/alpine/edge/community'; \
  10. echo 'http://mirrors.ustc.edu.cn/alpine/edge/testing'; \
  11. } > /etc/apk/repositories
  12.  
  13. # 设置默认时区为亚洲/上海 (没有北京可选)
  14. RUN apk upgrade && \
  15. apk add --no-cache apk-tools tzdata openssh && \
  16. cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
  17. apk del tzdata && \
  18. #修改root密码
  19. echo root: | chpasswd && \
  20. #生成KEY
  21. ssh-keygen -q -t rsa -b -f /etc/ssh/ssh_host_rsa_key -P '' -N '' && \
  22. #允许远程登录
  23. sed -i "s/#PermitRootLogin.*/PermitRootLogin yes/g" /etc/ssh/sshd_config
  24.  
  25. #这里增加python3
  26. RUN apk add python3 sudo &&\
  27. pip3 install -i http://pypi.douban.com/simple --upgrade --trusted-host pypi.douban.com pip setuptools
  28.  
  29. #开放22端口
  30. EXPOSE
  31.  
  32. 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.编写代码

  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

  1. from alpine:3.7
  2. MAINTAINER jackadam<jackadam@sina.com>
  3. #变更源
  4. # 安装包源切到中科大, 国内访问加速
  5. RUN { \
  6. echo 'http://mirrors.ustc.edu.cn/alpine/v3.7/main'; \
  7. echo 'http://mirrors.ustc.edu.cn/alpine/v3.7/community'; \
  8. echo 'http://mirrors.ustc.edu.cn/alpine/edge/main'; \
  9. echo 'http://mirrors.ustc.edu.cn/alpine/edge/community'; \
  10. echo 'http://mirrors.ustc.edu.cn/alpine/edge/testing'; \
  11. } > /etc/apk/repositories && \
  12.  
  13. # 设置默认时区为亚洲/上海 (没有北京可选)
  14. apk add --no-cache --upgrade apk-tools openssh tzdata&& \
  15. cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
  16. echo "Asia/Shanghai" > /etc/timezone && \
  17. apk del tzdata
  18. #修改root密码
  19. RUN echo root: | chpasswd
  20. #生成KEY
  21. RUN ssh-keygen -q -t rsa -b -f /etc/ssh/ssh_host_rsa_key -P '' -N ''
  22. #允许远程登录
  23. RUN sed -i "s/#PermitRootLogin.*/PermitRootLogin yes/g" /etc/ssh/sshd_config
  24. #开放22端口
  25. EXPOSE
  26.  
  27. #这里增加python3
  28. RUN apk add python3 && \
  29. pip3 install --upgrade pip && \
  30. pip3 install --upgrade setuptools &&\
  31. apk add sudo #sudo新增加
  32.  
  33. 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方便。

PyCharm进行远程开发和调试linux服务器的更多相关文章

  1. 使用pycharm进行远程开发部署调试设置 与 远程部署调试是否必须使用远程主机的解释器?

    远程开发部署调试目的: 配置pycharm远程部署调试主要用于本地代码与远程服务器上的代码进行同步,使得本地代码经过修改后,可以很容易的同步到远程服务器上.同时设置pycharm的解释器为远程服务器的 ...

  2. PyCharm远程开发和调试

    PyCharm进行远程开发 1.背景 在Windows开发Python或Web应用程序,但是它们最后需要在linux上面来运行 2.解决办法 2.1 使用PyCharm内置支持的Vagrant 2.2 ...

  3. 使用PyCharm实现远程编写并调试代码

    使用PyCharm实现远程编写并调试代码 版权声明:本文为博主原创文章,转载请注明出https://www.cnblogs.com/wenqiangit/p/9771947.html 因为工作中使用的 ...

  4. 工具系列 | VScode Remote 远程开发与调试(告别SSH)

    简介 最近VScode发布了远程编程与调试的插件Remote Development,使用这个插件可以在很多情况下代替vim直接远程修改与调试服务器上的代码,同时具备代码高亮与补全功能,就和在本地使用 ...

  5. 【技术博客】使用PhpStorm和Xdebug实现Laravel工程的远程开发及调试

    目录 使用PhpStorm和Xdebug实现Laravel工程的远程开发及调试 简介 PhpStorm中的远程开发 1. 配置服务器 2. 配置路径对应 3. 配置同步 4. 进行代码同步 5. 优点 ...

  6. PyCharm Django项目开发的调试方法

    下面介绍两种PyCharm Django项目开发的调试方法: 方法一: 1. 使用PyCharm 自带的django项目Debug工具, 当然前提条件是django项目环境已经搭建好了. 2. 在代码 ...

  7. 使用GDB在远程开发机上调试

    由于一些环境限制,很多学生很可能需要在开发机器上调试.但是,由于对计算机资源的开发限制.在本地的直接机的发展GDB环境配置问题已经成为,其实,我们可以利用这段时间GDB自带gdbserver工具将能够 ...

  8. Xshell(远程)连接不上linux服务器(防火墙介绍)

    一.原因 远程(ssh)连接不上linux服务器的大多数原因都是因为本地服务器的防火墙策略导致的,因此我们想ssh远程能够连接上服务器,有两种方法: 修改防火墙策略 关闭防火墙 二.防火墙服务介绍 1 ...

  9. 远程连接你的linux服务器

    为什么要远程连接linux 在实际的工作场景中,虚拟机界面或者物理服务器本地的终端都是很少接触的,因为服务器装完系统之后,都要拉倒IDC机房托管,如果是购买的云主机,那更碰不到服务器本体了,只能通过远 ...

随机推荐

  1. Java中 Tomcat 是干什么的?

    Tomcat是web容器.它的作用稍后给你解释. 你在做web项目时,多数需要http协议,也就是基于请求和响应,比如你在百度输入一行内容搜索, 那么百度服务器如何处理这个请求呢,他需要创建servl ...

  2. maven ----> 子工程中引入父工程

    创建父工程,打包方式指定为 pom <groupId>com.example</groupId> <artifactId>SleuthMain</artifa ...

  3. 6.5 开始进入设计 … Transition to Design

    开始进入设计 … Transition to Design  从需求分析到设计  逻辑架构与子系统 Logical Architecture and sub-system 5.1 向设计过程切换 ...

  4. Javascript的常见数据类型以及相应操作

    JavaScript概述 1 ECMAScript和JavaScript的关系 1996年11月,JavaScript的创造者--Netscape公司,决定将JavaScript提交给国际标准化组织E ...

  5. Fox And Dinner CodeForces - 510E (最大流)

    大意: n只狐狸, 要求分成若干个环, 每个环的狐狸不少于三只, 相邻狐狸年龄和为素数. 狐狸年龄都>=2, 那么素数一定为奇数, 相邻必须是一奇一偶, 也就是一个二分图, 源点向奇数点连容量为 ...

  6. Tanya and Password CodeForces - 508D (欧拉回路)

    大意:给定n个长为3的子串, 求一个长为n+2的字符串包含所有子串. 相邻两个字符开一个节点, 建图跑欧拉回路, 若存在的话长度一定是$\le n+2$.

  7. MongoDB存储

    mongo DB #定义数据库,文件为config.py mongo_url='loclhost'//数据库地址 mongo_DB='DB_name'//数据库名称 mongo_TABEL='tabe ...

  8. 精华 selenium_webdriver(python)调用js脚本

    #coding=utf-8 from selenium import webdriver import time driver = webdriver.Firefox() driver.get(&qu ...

  9. list排序,顺序,倒序

    Collections.sort(list); // 顺序排列 Collections.reverse(list); // 倒序排列 Collections.shuffle(list); // 无序

  10. oracle having sum group by 详解

    Aggregate functions (like SUM) often need an added GROUP BY functionality. 集合函数(类似SUM)经常需要用GROUP BY来 ...