[TOC]
install python
$ wget <https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tgz>
$ tar xvf Python-3.6.5.tgz
$ cd python3.6.5
$ ./configure --prefix=/usr/local/python3.6.5
$ make && make install
$ ln -sv /usr/local/bin/python3.5 /usr/bin/python
$ ln -sv /usr/local/bin/python3.5/bin/pip3 /usr/bin/pip
pycharm + docker
<https://docs.qq.com/doc/p/4fbfea0beb191645a086647fd1cb14f119006530?dver=3.0.27505696>
docker 配置
- 创建容器
- sudo docker run -it -d -v ~/Desktop/:/work --cpus 11 -p 8022:22 -m 15g --shm-size 10G --memory-swappiness 90 --name npss 38aa4c5a68c8
- 一定要留一个端口映射到容器22端口,因为SFTP默认使用22端口
- 配置ssh
- apt update
- apt install -y openssh-server
- 创建配置文件夹并进行配置
- mkdir /var/run/sshd
- echo 'root:passwd' | chpasswd # 这里使用你自己想设置的用户名和密码,但是一定要记住!
- sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
- sed 's@session\srequired\spam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd
- echo "export VISIBLE=now" >> /etc/profile
- service ssh restart
- 开机启动:systemctl enable ssh
- 测试容器映射的端口
- sudo docker port npss 22
- 应该会输出 0.0.0.0:8022
- 登陆ssh测试
- 出现权限问题
- vim /etc/ssh/sshd_config
- 注释掉:PermitRootLogin yes
- service ssh restart
pycharm 配置
-
打开PyCharmTools > Deployment > Configuration, 新建一个SFTP服务器,名字自己取:


-
最后在Mappings中配置路径,这里的路径是你本地存放代码的路径,与刚刚配置的Root Path相互映射(意思是Mapping里本机的路径映射到远程的Root Path),方便以后在本地和远程docker中进行代码和其他文件同步。
-
在PyCharm里配置远程解释器
-
点击PyCharm的File > Setting > Project > Project Interpreter右边的设置按钮新建一个项目的远程解释器:

-
配置完成以后在项目解释器界面就会出现如下图所示,可以看到此时已经完成远程解释器的本地化

-
左边是本地的文件,修改之后可以随时右键deployment->upload到远程主机,或者直接在本地调试运行;最右边是远程主机的文件,假如直接在远程修改了文件刷新一下同样可以右键下载到本地,但是我不建议这样做,因为这样很容易带来冲突(毕竟没有很好的版本控制)。目前最好的实践是在局域网的服务器上,时延低,同步速度快。

常见问题
- 最常见的问题就是docker容器停了以后里面的SSH服务也会相应停止,因此当你发现自己某一天连不上的时候,记得去docker里重启一下ssh服务:
$ service ssh restart
- 可以在run的时候加上--restart=always,同时ssh启动的写到dockerfile里去。
pycharm + 服务器
基础设置
- 1.假设服务器 IP 地址为 90.0.0.50,已经开启 SSH 服务,并且安装了 Python,本地 Project 名为 ML-Project。
- 2.首先配置 Pycharm 服务器的代码同步,打开 Tools -> Deployment -> Configuration,点击左边的 + 添加一个部署配置,输入配置名 Name,Type 选择 SFTP,然后确认。