或許我也應該遷移到linux環境去開發。python
最近寫的一些小東西,在wnidows上開發,在windows上調試,都很正常。但是一旦放進linux服務器,就歇菜了。linux
那麼咱們有什麼辦法處理這個windows和linux的兼容問題呢?在linux開發,或者在linux環境下開發。看着差很少,可是意思真不同。docker
在linux開發,那就是用linux操做系統進行開發。windows
在linux環境下開發,那就不限於在linux操做系統進行開發,咱們能夠在windows下寫代碼,放在linux環境中執行。安全
不去換操做系統了,直接在windows下寫代碼,用linux環境執行吧。bash
查着開放了docker的2375,2376,使用了SSL證書,結果發現只是用pycharm管理docker服務,還沒我用daocloud管理方便,廢棄了。服務器
雖然我有個NUC跑着fedora(linux),可是我喜歡部署到alpine-docker裏面去,並且也不但願任何開發環境再把個人nuc搞亂,那麼仍是用docker建立一個能夠用來執行python解析的環境吧。app
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鏡像。ssh
2019-10-24更新,添加 apk upgrade,解決部分庫版本不兼容的問題。測試
#使用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
Winscp,putty,均可以正常登陸這個2222端口的容器便可。
安裝python的命令是:apk add python3
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庫
還用上一節的rebuild
就用winscp或putty測試
和WINSCP的同樣,就是SFTP的ssh配置。Test SFTP connecton,測試經過就能夠了。
這個是映射關係。Loacl path,就是項目的本地路徑。Deployment path,就是在服務器上的路徑。不過要加上第一個圖中connection中的Root path。
若是
Root path : /PythonPorject
Deployment path: /test01
那麼在服務器上的路徑爲:/PythonPorject/test01
使用 deployment configuration,選擇剛纔命名的部署配置名,設置python解釋器地址,由於我用的python3,默認的沒有python,因此改一下解釋器路徑,選擇到python3就能夠了。
print('hello world.')
pycharm中 Tools--Deployment--Upload to test,
上傳完成,一個文件傳輸完成,那個test是個人部署配置名,你的可能會不同。
Automatic Upload(always)自動上傳,我勾選了。
改代碼,不用再手動上傳
好了,能夠看到輸出框是遠程執行的,在ssh鏈接的192.168.1.3上執行的。
嘗試使用pycharm對這個遠程環境安裝python包,結果報錯。
其實也簡單,由於這個alpine linux docker鏡像沒有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
rebuild一下
再試試。如今應該能夠在pycharm中管理遠程docker中的python環境,並安裝python包了。
不更新dockerfiler也能夠解決,由於開放了ssh鏈接,你也能夠直接ssh登陸,而後安裝sudo。效果同樣的。
從家裏淘到NUC之後,就一直想着怎麼最大化利用它,本身寫的一些軟件,在windows下運行良好,轉去linux,還要從新調整。直接使用pycharm的遠程解釋器,遠程部署功能,我能夠在windows上寫代碼,跑在linux下,環境也在linux下。方便之後開發linux下的python程序。
並且家裏的NUC也就是做爲家庭服務器來用的。開發一些24小時在線的,或者將來面向服務器部署的軟件。還不影響個人windows筆記本。
也就有了這篇文章。
不過也走了一些彎路,由於pycharm支持管理docker,爲了docker的安全,整那幾個證書密鑰,整了好幾天,發現pycharm管理docker還真不如daocloud方便。