随处的软件开发(我的分布式远程工作场所)

本文概述

  • 我自己的个人迷你服务器
  • 随处资料
  • SSHFS的” 魔力”
  • 一些高级SSH技巧
  • 远程办公室随处
担任远程自由职业者有很多好处, 但是建立有效的分布式工作环境可能是一个真正的挑战。当然, 有许多方法可以采用, 没有一种” 最佳” 方法适合所有人。远程数字工作场所组织确实是一件非常个人的事情, 对于一个开发人员来说行之有效的事情对于其他人可能根本行不通。
考虑到这一点, 我在这里介绍的设置对我个人来说很有效, 特别是在涉及开发和系统管理的远程项目上。我确实相信这种方法有许多优点, 但是每个读者都应该根据他们的运营需求和个人喜好, 考虑如何以最适合他们的方式对其进行调整。
我的方法主要基于SSH提供的功能以及Linux上的相关工具。注意, MacOS和其他类似Unix的系统的用户也可以利用所描述的过程, 只要他们的系统支持所描述的工具。
随处的软件开发(我的分布式远程工作场所)

文章图片
我自己的个人迷你服务器 安装过程中重要的第一步是在家中安装Raspberry Pi 2驱动的服务器, 该服务器用于托管从我的源代码存储库到演示站点的所有内容。
尽管我确实旅行, 但我的公寓确实是我的远程” 固定操作基地” , 具有良好的Internet连接(100 Mbit /秒), 几乎没有额外的延迟。这意味着从我的公寓开始, 我基本上只受到目标网络速度的限制。我要介绍的设置最适合这种连接方式, 尽管这不是必需的。实际上, 当我具有相对较低带宽的ADSL连接时, 我也使用了这种方法, 大多数情况下都可以正常工作。根据我的经验, 唯一真正的要求是带宽不计量或便宜。
作为住宅用户, 我拥有ISP可以买到的最便宜的家庭网络路由器, 这根本无法满足我的需要。因此, 我要求ISP将路由器置于” 桥接模式” , 在该模式下, 它仅用作连接终结器, 为恰好一个连接的系统提供PPPoE端点。这意味着该设备将停止作为WiFi接入点或什至是普通家用路由器的工作。所有这些任务均由专业的小型Mikrotik路由器RB951G-2HnD处理。它为我的本地网络(编号为10.10.10.0/24)执行NAT服务, 并为与其连接的有线和无线设备提供DHCP。 Mikrotik和Raspberry Pi具有静态地址, 因为它们用于需要已知地址的上下文中。就我而言, 分别是10.10.10.1和10.10.10.10。
我的家庭连接没有静态IP地址。对我而言, 这只是远程操作带来的轻微不便, 因为目标是创建个人或SOHO工作环境, 而不是24/7站点。 (对于那些确实需要为其服务器提供静态IP地址的用户, 值得注意的是, 静态IP地址的成本一直在下降, 并且提供了相当便宜的静态VPN IP选项。)我使用的DNS代理, Joker.com , 与所有其他服务一起提供免费的动态DNS服务, 因此我的个人域的一个子域作为动态名称存在。我使用此名称从外部连接到我自己的网络, 并且Mikrotik配置为通过NAT将SSH和HTTP传递到Raspberry Pi。我只需要键入ssh mydomain.example.com的等效项即可登录我的个人家庭服务器。
随处资料 Raspberry Pi不提供的一项重要功能是冗余。我已经为它配备了32 GB的存储卡, 如果发生某些情况, 丢失的数据仍然很多。为了解决这个问题, 并确保在住宅Internet访问出现问题时可以访问我的数据, 我将所有数据镜像到一个外部的, 类似云的服务器。由于我在欧洲, 所以从Online.net获得最小的专用裸机(即非虚拟化)服务器对我来说是有意义的, 该服务器配有低端VIA CPU, 提供2 GB RAM和500 GB SSHD。与Raspberry Pi小型服务器一样, 我不需要很高的CPU性能甚至不需要内存, 因此这是完美的选择。 (顺便说一句, 我记得我的第一台” 大型” 服务器具有两个Pentium 3 CPU和1 GB RAM, 可能是Raspberry Pi 2的一半速度, 以及我们如何使用它来完成出色的工作, 这影响了我对优化的兴趣。)
我使用rdiff-backup将Raspberry Pi备份到类似云的远程服务器上。从系统的相对大小来看, 这些备份将使我获得几乎无限的历史记录。我在类似云的服务器上的另一件事是ownCloud的安装, 这使我可以运行私有的类似Dropbox的服务。 ownCloud作为一种产品正在朝着组件和协作的方向发展, 因此, 如果更多的人使用它, 它将变得更加有用。自从我开始使用它以来, 我几乎没有任何本地数据没有备份到Raspberry Pi或类似云的服务器上, 并且大多数数据都备份了两次。如果你珍视数据, 那么可以做的任何其他备份冗余总是一件好事。
SSHFS的” 魔力” 这几天我的大部分工作都涉及开发与Web不直接相关的内容(我知道, 这令人震惊!), 因此我的工作流程通常遵循经典的编辑-编译-运行周期。根据项目的具体情况, 我可以将其文件本地保存在笔记本电脑上, 也可以将它们放置在ownCloud同步目录中, 或者更有趣的是, 我可以将它们直接放置在Raspberry Pi上并从那里使用。
借助SSHFS, 后一个选项成为可能, 它使我能够从Raspberry Pi本地安装远程目录。这几乎就像是一小块魔术:你可以在具有SSH访问权限的任何服务器上(在用户对服务器具有的权限下工作)在其本地目录上安装一个远程目录。
有一个远程项目目录吗?本地安装并继续使用。如果你需要功能强大的服务器来进行开发或测试, 并且(出于某种原因)不能选择在控制台中使用vim, 则可以在本地安装该服务器并执行所需的任何操作。当我使用低带宽连接到Internet时, 这种方法特别有效:即使我确实在控制台文本编辑器中工作, 但如果我在本地运行该编辑器然后仅通过SSHFS传输文件, 则体验会更好。而不是通过远程SSH会话进行工作。
需要在不同的远程服务器上比较几个/ etc目录吗?没问题。只需使用SSHFS在本地安装它们, 然后使用diff(或其他适用的工具)进行比较即可。
或者, 也许你需要处理大型日志文件, 但又不想在服务器上安装日志解析工具(因为它具有庞大的依赖关系), 并且由于任何原因, 复制日志都不方便。再一次, 不是问题。只需通过SSHFS在本地挂载远程日志目录, 然后运行所需的任何工具即可, 即使它庞大, 笨重且受GUI驱动。 SSH支持动态压缩, 并且SSHFS可以使用它, 因此使用文本文件相当带宽友好。
出于我的目的, 我在sshfs命令行上使用以下选项:
sshfs -o重新连接-o idmap =用户-o follow_symlinks -C server.example.com :。服务器
这些命令行选项的作用如下:
  • -o reconnect-告诉sshfs断开SSH端点的连接。这非常重要, 因为默认情况下, 当连接断开时, 挂载点将突然失败或挂起(我发现这很常见)。在我看来, 这真的是默认选项。
  • -o idmap = user-告诉sshfs映射远程用户(即我们连接的用户)与本地用户相同。由于你可以使用任意用户名通过SSH连接, 因此可以” 修复” 问题, 因此本地系统认为该用户是同一用户。远程系统上的访问权限与往常一样适用于远程用户。
  • -o follow_symlinks-尽管可以具有任意数量的已安装远程文件系统, 但我发现仅安装一个远程目录(即我的主目录)更为方便, 并且可以在其中(在远程SSH会话中)创建指向重要目录的符号链接远程系统上的其他位置, 例如/ srv或/ etc或/ var / log。此选项使sshfs将远程符号链接解析为文件和目录, 从而使你可以继续浏览链接的目录。
  • -C-打开SSH压缩。这对文件元数据和文本文件特别有效, 因此似乎应该将其作为默认选项是另一回事。
  • server.example.com :。 -这是远程端点。第一部分(在此示例中为server.example.com)是主机名, 第二部分(在冒号之后)是要安装的远程目录。在这种情况下, 我添加了” 。” 指示SSH登录后我的用户所在的默认目录, 即我的主目录。
  • 服务器-远程文件系统将安装到的本地目录。
尤其是在带宽较低或Internet连接不稳定的情况下, 需要将SSHFS与SSH公/私钥身份验证以及本地SSH代理一起使用。这样, 当你使用SSHFS时, 不会提示你输入密码(系统密码或SSH密钥密码), 并且重新连接功能将按公布的方式工作。请注意, 如果你没有设置SSH代理, 以便它在会话中根据需要提供解锁密钥, 则重新连接功能通常会失败。网络上充斥着SSH密钥教程, 我尝试过的大多数基于GTK的桌面环境都会自动启动自己的代理(或” 钱包” , 或他们选择的任何方式)。
一些高级SSH技巧 在Internet上有一个固定点, 该点可以从世界任何地方远程访问, 并且具有高带宽连接-对我来说, 这是我的Raspberry Pi系统, 它实际上可以是任何通用VPS-减轻了压力并允许你做交换和传输数据的各种事情。
需要快速的nmap, 你已经通过手机网络连接了吗?只需从该服务器执行。是否需要快速复制一些数据, 而SSHFS是一个大材小用?只需使用普通的SCP。
你可能会遇到另一种情况, 你可以通过SSH访问服务器, 但其端口80(或任何其他端口)被防火墙隔离到与你连接的外部网络上。要解决此问题, 你可以使用SSH将端口转发到本地计算机, 然后通过localhost访问它。一种更有趣的方法是使用通过SSH连接到的主机来转发另一台计算机上的端口, 该端口可能位于同一防火墙后面。例如, 如果你具有以下主机:
  • 192.168.77.15-远程本地网络中位于防火墙后面的主机, 你需要将其连接到其端口80
  • foo.example.com-具有SSH访问权限的主机, 可以连接到上述主机
  • 你的本地系统localhost
通过foo.example.com SSH服务器将192.168.77.15上的端口80转发到localhost:8080的命令是:
ssh -L 8080:192.168.77.15:80 -C foo.example.com
-L的参数指定本地端口以及目标地址和端口。 -C参数启用压缩, 因此你可以再次节省带宽, 最后, 你只需键入SSH主机名即可。该命令将打开与主机的纯SSH Shell会话, 除此之外, 还可以侦听可以连接到的localhost端口8080。
SSH最近几年发展起来的最令人印象深刻的技巧之一就是其创建真实VPN隧道的能力。它们在连接的两端都表现为虚拟网络设备(假设它们设置了适当的IP地址), 并且可以允许你像访问物理网络一样访问远程网络(绕过防火墙)。出于技术和安全方面的考虑, 这要求在与隧道连接的两台计算机上都具有root用户访问权限, 因此比仅使用端口转发或SSHFS或SCP方便得多。这是针对高级用户的, 他们可以随时找到有关如何执行此操作的教程。
远程办公室随处
随处的软件开发(我的分布式远程工作场所)

文章图片
即使在技工等车时, 你也可以继续工作。
【随处的软件开发(我的分布式远程工作场所)】无需在单个位置进行工作, 就可以使用我概述的技术和技巧(包括在等待汽车修理师的情况下), 在具有良好的Internet连接的任何地方进行工作。在SSH上安装外部系统, 转发端口, 钻探隧道, 以远程访问你的私有服务器或基于云的数据, 同时可以俯瞰日光浴的海滩或在有雾的城市里喝时髦的环保咖啡。去做就对了!

    推荐阅读