自己的云计算,把Linux当成你的云计算平台
现在网上有很多云计算平台. 是不是也想着拥有一个自己的云计算平台? 其实只要你手中有两台电脑, 你就能自己给搭建出一个云计算平台. 其中的原理是什么呢? 无非就是自己在一台电脑上开发, 然后将开发好的代码放在云端运算. 其实也就是一种远程控制的原理.
比如我有一台 Mac, 但我不想让我的 Mac 进行大规模运算, 原因如下:
- Mac 本来计算能力就弱
- 用 Mac 运算的时候肯定会卡, 但是我又想做其他东西, 太卡了不方便
手边若有一个计算能力强的 Linux, 大喜. 立马把它转成一个云计算平台~
1、搭建 Linux 系统
手动搭建一个以 Linux 为中心的云计算系统可以选择以下几种方式.
- 底层 SSH 操控 (MacOS/Linux)
- 底层 SSH 操控 (Windows)
- VNC / TeamViewer 远程桌面
对于接下来的内容, 会基于 SSH 的方法, 因为如果你有了 VNC 或者 Teamviewer, 你能看见发生了什么, 这会很好办. 不过用 SSH 的好处就是, 快! 运行快! 传文件快!
2、云端运行
接下来我们举例来讲解, 假如我在操控端 (如 Mac) 写代码. 在我的 Desktop 文件夹下写好了一个 Python 脚本 machine_learning.py
. 但是我想拿 Mac 来做点其他事, 不想让这个脚本在我的 Mac 上”发光发热”, 那么我们就 ssh 远程推送到旁边空闲的 Linux 去运算吧.
比如这个 Python 脚本是这样的.
import platform
a = 0
for i in range(9999):
a += i
print("Finish job, result=%i" % a)
print("This is", platform.system())
然后这个教程一样, 在云端的 Linux 的 terminal 中输入 ifconfig, 找到我的 IP 是 192.168.0.114. 然后确定你的云端 Linux 的用户名, 也就是你 Terminal 中 @ 字符前面的名字. 我的是 morvan. 这个文件在我 Mac 的 Desktop 上. 我要在 Linux 云端运行的话, 就是下面这个命令.
$ ssh morvan@192.168.0.114 python3 < ~/Desktop/machine_learning.py
Finish job, result=49985001
This is Linux
注意这和我们之前用 SSH 类似, 不过这次我们加了一个 python 文件给服务器端. 这个文件的转换方式就用 <
来代替. 而且因为这是一个 Python3
文件, 所以我在 ip 后面写的是用 python3
在云端执行本地的这个文件.
3、文件传输
如果是有很多的 Python 文件怎么办呢? 有时候 Python 文件是一环扣一环, 这个文件里调用了那个文件的东西. 这时我们就能先全部复制所有必须文件去 Linux 的缓存区 或者 桌面, 然后再使用 ssh 在 Linux 云端的运行传送过去的文件.
比如我现在需要两个 Python 文件才能运行, b.py 如下:
# This is b.py
def inner_func():
print("This is a function in b")
还有一个 a.py 需要调用 b.py 才能运行.
# This is a.py
from b import inner_func
inner_func()
接着我们要做的就是将这两个文件先复制去 Linux 云端, 然后在云端运行 a.py.
下面所有的操作都是在本地执行的, 我们没有跑去云端打代码. 输入 scp
(secure copy), 加密传输复制 ~/Desktop/{a,b}.py
在我桌面上的 a.py 和 b.py 两个文件到 云端morvan@192.168.0.114的桌面 ~/Desktop
$ scp ~/Desktop/{a,b}.py morvan@192.168.0.114:~/Desktop
a.py 100% 37 6.3KB/s 00:00
b.py 100% 54 8.9KB/s 00:00
执行的话, 和上面的步骤有点不一样, 在本地用 ssh 去云端, 但是 ssh 的时候同时发送一条指令去执行 a.py. 这条指令我们用 ""
给框起来, 说明是要发送去云端再执行的指令.
$ ssh morvan@192.168.0.114 "python3 ~/Desktop/a.py"
This is a function in b
同样, 如果你在云端的程序会产生一些结果文件, 我假设 b.py 是在云端运行完 a.py 而产生的新文件, 而我在本地电脑需要这个产生的文件. 我可以直接用 scp
的方式将这个 b.py 复制回来. 所以你会发现, scp 前一个参数是从哪开始复制, 后一个参数是复制去哪. 这样完了以后, 在我的 Mac 桌面上就产生了一个 result 文件.
$ scp morvan@192.168.0.114:~/Desktop/b.py ~/Desktop/result
这样一来一回, 我们总结一下走过的流程.
- 本地有要运行的文件
- 单个文件的话可以直接 ssh 去云端运行
- 多个文件可以先复制去云端, 然后在 ssh 运行
- 如果在云端有产生文件, 可以用 scp 复制回来## 自己的云计算,多电脑共享你的云端文件
*如果你云计算的是强化学习, 而且有时候会要使用 gym 模块来模拟, 有一个事情需要注意. 如果不注意, 你有可能运行 python 会出错.
这个问题是, 如果你 ssh 在云端执行一个会打开窗口程序的指令, 比如用 ssh 在云端打开浏览器等, 默认是不允许的. 你必须设置一下这个参数. 比如我要打开 Firefox 浏览器窗口. 那么在 firefox
指令前, 需要加上 export DISPLAY=:0
, 并用 ;
隔开, 标明执行的先后顺序.*
$ ssh morvan@192.168.0.114 "export DISPLAY=:0; firefox"
自己的云计算,多电脑共享你的云端文件
云端计算固然方便, 如果让你的电脑上直接显示云端的文件, 是不是更方便呢?
假设你的情况是这样:
- 有两台电脑(其中一台是 Linux)
- 电脑们都在同一个局域网 (LAN, 同一个路由器下)
- 想把那台 Linux 当做云端, 做云计算, 又不想来回复制文件
- 能不能把云端的某个文件夹分享到我的本地, 在本地及时修改这个共享文件夹的文件
- 不是云计算也行, 只是想在几台电脑中共享文件
1、设置分享文件夹
我们可以单独创建一个要分享的文件夹, 这样你就知道自己要将哪个文件夹里的文件分享给大家了. 比如说, 在 Linux 的 Home 目录下创建一个 Shared 文件夹. 你可以用鼠标来创建或者直接在 terminal 中输入指令.$ mkdir ~/Shared/
有了这个 Shared 文件夹以后, 我们来对这个文件夹动手脚. 右键选择 Local Network Share
, 之后你会跳出来一个 Folder Sharing
的窗口, 在这个窗口中, 勾选 Share this folder.
如果你第一次做这件事, 当你选定的时候, 应该会出现要求安装东西的窗口, 点击 install 就好, 他会帮你安装必要组建. 安装好之后, 还会弹出一个重启 session 的窗口, 重启它. 然后给你的这个文件夹起一个 “响亮” 的名字, 这个名字会出现在其它的电脑上. 所以, 我就起了一个名字叫 “Shared”.
最后如果你会在其它电脑上编辑这个 “Shared” 里的文件, 那你就需要勾选 “Allow others to create and delete files in this folder”. 我觉得最下面那个选项不要选比较好, 如果选了, 任何在这个局域网内的人都能”玩弄”你的文件. 你肯定不想这样.
这还不够, 在 terminal 中, 我们最好给这个分享文件设置一个密码. 如果有人想要登录这个分享文件, 就需要密码登录. 设置密码的步骤很容易, 你只要在云端的 terminal 中输入下面内容, 将分享文件夹的账号密码设置成你 linux 用户的账号密码就好了, 好记又方便.
$ sudo smbpasswd -a 用户名 # 比如下面我的用户名是 morvan
$ sudo smbpasswd -a morvan
之后它会要求你输入用户名的密码, 然后再设置分享的密码 New SMB password,
再 Retype new SMB password
. 完了以后就大功告成, 你就能在其它电脑上找到这个文件夹, 使用这个用户名和密码查看文件啦.
2、Mac 找到云端的分享文件夹
我们已经设置好的云端的共享文件. 接着就是在其他电脑上找到这个共享文件. 我用 MacOS 来演示一遍. 首先你需要找到这个共享的地方. 打开你的 Finder
文件管理器, 然后在上面的菜单中找到 Go
, 点击 Network
然后找到你的计算机名, 我这里是 MORVAN-LINUX
, 之后点击 connect as,
这个意思是说要登录上之前设置好的账号密码. 如果没有经过这一步, 是无法打开 “Shared” 文件夹的.
点击 connect as
之后, 我们就按要求填写刚刚的你在 Linux 上设置的账号密码就好.
最后成功登录上, 你就能用这个云端文件夹的内容啦.
现在我就能直接在我的 Mac 上编辑云端的文件, 比如做一个 Python 的项目, 然后 SSH 去 Linux 云端运行这个写好的文件. 方便又不占你 Mac 的空间.
3、Windows 找到云端的分享文件
Windows 找到共享的文件也非常简单, 只需要找到你的局域网电脑们就好了. 当你打开文件浏览器. 找到 “网络”, 或者是”网上邻居” 然后找到你的 Linux 电脑, 输入之前设置的账号密码. 就能查看你共享的 Linux 文件夹啦.