全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:15805121342

初创企业建立可靠的IT基础架构的一种方法

发布时间:2019-10-31 13:16 作者:宿迁永泰网络公司
plapadoo是一家来自德国汉诺威的软件创业公司,为客户提供量身定制的高质量软件工程。他们为我们提供了有关如何为其IT基础架构选择解决方案的信息,包括通信,备份,CI / CD等。
我们最近成立了公司,因此要做的第一件事就是使我们的基础架构正常运行。作为软件初创公司,我们的技术基础架构是公司的心脏。它影响我们的生产力,影响我们的成本,并提供了一个极好的机会使我们在竞争中脱颖而出。拥有良好的基础架构也是节省资金和提高开发速度的关键。
在规划基础结构的设置时,我们牢记两件事:首先,我们希望尽可能运行开源软件,其次,我们想对通信和数据存储使用强加密。另外,我们更喜欢轻量级的软件,而该软件几乎没有依赖性。在下面,您可以找到重要用例的简短列表,以及我们用来覆盖这些用例的软件:
  • 聊天(Matrix / Riot Web应用程序+ Android应用程序)
  • 电子邮件(自托管的鸽舍 + 后缀 + 筛子 + SpamAssasin)
  • 日历和联系人(Radicale)
  • 语音会议(uMurmur / Mumble)
  • 跨多个设备同步文件(Syncthing)
  • Git和持续集成(GitLab和GitLab CI)
  • 备份和可跟踪性(borgmatic&etckeeper)除此之外,我们还运行着其他服务(例如VPN或HTTP服务器),这些服务不是很特别,因此不在本文中介绍。

基本设置

一切始于选择运行软件的平台。我们决定使用Arch Linux作为我们服务器的操作系统。我们选择Arch Linux的主要原因是其活跃的社区,良好的文档,具有重要软件最新版本的最新存储库,对磁盘加密的良好支持以及最后,Arch Linux具有滚动更新方案而不是滚动更新方案基于发行版的。最后一点对我们尤为重要,因为我们不想经历将操作系统从一个版本升级到隔年升级的痛苦,这通常会带来很多麻烦。此外,基于发行版的发行版在其存储库中往往具有过时的软件。相反,我们希望使系统始终保持最新状态,并随时可以使用任何软件的最新版本。
我们的大多数软件都是使用Arch Linux的软件包管理器安装的。但是,在某些情况下,Docker使用运行软件也是一个好主意。当软件引入您不希望在主机系统上使用的依赖项,或者对软件的安全性有疑问时,尤其是这种情况。由于Docker提供了一定程度的隔离,因此安全漏洞不会像在主机系统上直接运行易受攻击的软件时那样严重。但是,应记住存在所谓的容器突破的风险。这基本上意味着,即使易受攻击的软件在Docker容器中运行,您的主机系统也可能受到攻击。使用Docker的其他原因可能是想要尝试一些事情而不会弄乱您的主机系统,或者您的Linux发行版可能根本不提供软件。当然,

通讯

从一开始,沟通和使用适当的沟通渠道就一直是我们的中心。我们想要一种安全,快速,可靠并且可以从任何设备轻松访问的通信方式。这适用于聊天,电子邮件,联系人和日历条目。

为了聊天,我们需要一种支持“房间”或“通道”概念的解决方案,以使讨论保持清晰和彼此分开。我们发现Matrix / Synapse和Riot是一个完美的解决方案。尽管我们也尝试了其他替代方法,例如Rocket.Chat和Mattermost,但我们最喜欢Riot / Matrix的原因是它的原生Android应用程序,活跃的开发和开放的API。
我们正在使用Matrix API运行自定义聊天机器人。这些机器人已成为我们公司的重要因素,因为它们极大地提高了团队之间的透明度和信息分配。例如,我们有机器人通知我们有关将新提交推送到GitLab服务器,在共享日历中创建新日历条目,构建成功或失败等信息。我们将在下一篇文章中详细介绍这些机器人。

电子邮件

由于我们希望完全控制属于我们核心业务的数据,因此我们使用私人邮件服务器。安全地建立确实具有挑战性,但是由于安全和私密通信对我们来说非常重要,因此我们仍然决定继续使用它。在设置之前,我们必须阅读许多文档,最重要的是要防止系统中的安全漏洞。不这样做可能意味着最终被列入垃圾邮件发送者黑名单,因为有人可能在滥用我们的邮件服务器,或者攻击者获得了对我们邮件的访问权限。这是一项繁重的工作,但我们绝对建议您花一些时间来了解流程的每个步骤,并避免出现任何错误。在客户端,我们会尽可能使用PGP加密电子邮件。

日历和通讯录

为了拥有共享的日历和共享的通讯录,我们正在运行Radicale,这是一种轻型的CalDAV和CardDAV服务器。尽管配置起来并不容易,但是它附带了对Git的支持,只是在后台悄悄地完成了工作。到目前为止,我们从未遇到过该软件有任何问题,并且由于其可靠性而喜欢它。对于Android和iOS,有CalDAV和CardDAV适配器可用于将所有内容与手机同步。

语音会议

对于语音会议,拥有一个值得信赖的开源解决方案对我们非常重要。专有解决方案始终面临与后门一同运送的风险。我们决定尝试一下Mumble。Mumble是一个开源语音客户端,需要中央服务器来处理所有流量。官方服务器实现称为Murmur。安装Murmur时,我们了解到它引入了大量依赖关系。
在这些依赖项中,有诸如X11之类的东西,大多数人都不希望在服务器上使用。这种依赖关系的问题在于,它们会引入潜在的攻击面,并花费时间,金钱和其他资源来维护和更新它们。因此,您通常希望尽可能少地依赖。仅此一项将使其对我们不适合,但我们仍然决定尝试一下。一种选择是在Docker容器中运行Murmur,其中提到的依赖关系不会给我们带来太多麻烦。在配置Murmur时,我们必须选择服务器密码。与往常一样,我们生成了一个长而强壮的密码,其中包含约60个随机字符(包括特殊字符)。当我们启动服务器并尝试连接客户端时,我们完全感到震惊。Murmur让客户无需密码即可进入。
我们发现,Murmur似乎使用长密码存在问题,然后将其忽略。因此,如果您以强大的安全性为目标配置Murmur,则根本没有安全性。不用说,我们立即卸载了Murmur及其引入的所有疯狂依赖。在寻找替代方案时,我们很快发现了uMurmur,这是针对嵌入式系统的替代性Mumble服务器实现。它带有很少的依赖关系,并且通常似乎很好地实现了。我们安装了它,使用长密码没有遇到任何问题,并且从那时起一直在使用它,没有任何问题。通信使用TLS证书加密。

数据存储

盒子文件
除了沟通,公司内部的另一个重要方面是需要在不同的利益相关者之间存储和分发文档。共享数据时,大多数程序员通常都会使用Git。但是,Git并不是共享二进制数据(如文档,照片,视频等)的最佳选择,因为通常不需要保留这些文件的不同版本。一种常见的方法是使用ownCloud / NextCloud进行数据共享,但是由于我们真的不喜欢PHP,因此我们不使用这两个应用程序。
相反,我们发现了Syncthing。一旦了解了Syncthing的概念,它就很容易设置,非常易于使用,并且开箱即用。同步可以描述为一种在多个节点之间同步数据的软件。尽管并没有明确需要一个主节点,但在服务器上运行的一个Syncthing实例却充当一种主节点-Syncthing是完全分散的。我们还在台式机和手机上运行Syncthing。每个Syncthing节点都有一个唯一的ID,必须使用主节点的Web界面添加该ID,以便与它们共享数据。对于本地节点,必须相应地添加主节点的唯一ID。使用主节点的这一概念,我们不必将所有设备相互连接-只需将每个设备连接至主节点就足够了。
然后,您可以选择使用Syncthing共享哪些文件夹。然后,同步将自动将您放入这些文件夹中的所有新数据上传到远程节点。由其他用户添加的数据将即时下载到客户端,文件的删除,更改等也将在本地应用。对于Android,有一个本机Syncthing应用程序可用,其功能完全相同。通过使用Syncthing,我们所有设备始终在主节点上的Syncthing共享中始终存储有最新版本的数据。

建立并持续整合

对于Git和持续集成,我们使用GitLab,它已经集成了CI功能。尽管GitLab占用大量资源,但它提供了许多非常好的功能,例如集成的问题跟踪器和“代码段”区域,您可以在其中粘贴代码段并共享它们。GitLab有充分的文档证明,并具有开放的API。它具有Web钩子,您可以使用它们在推送提交,CI管道启动等时触发HTTP请求。我们使用它来在与Git存储库相对应的矩阵房间中生成通知。因此,例如,如果有人向项目“ foo”提交了提交,则我们会在与该项目相关联的Matrix房间“关于foo的房间”中收到通知。
GitLab提供了许多非常好的功能,例如集成的问题跟踪器和“代码段”区域,您可以在其中粘贴代码段并进行共享
我们正在使用官方的GitLab Docker映像,该映像已经包括Prometheus进行监视。我们正在从主机系统访问该Prometheus实例,并将其数据绘制在专用的Grafana仪表板上。这样,我们可以轻松监控GitLab服务器内部。
为了使用GitLab CI构建项目,您需要一个所谓的“ gitlab-runner”作为构建代理。也有适合那些跑步者的官方Docker映像,但是我们创建了自己的Docker基本映像,其中包含我们不断需要的一些基本工具。我们使用自定义基础图像在其顶部为每个项目构建单独的运行器。这样,我们就可以根据项目需求量身定制跑步者。由于Docker套接字已映射到我们的运行器中,因此我们甚至可以从它们内部构建和部署Docker映像。
我们喜欢这样的事实,构建作业是通过每个项目版本化的“ .gitlab-ci.yml”文件定义的。这样,即使您签出项目的旧版本,也可以跟踪对构建过程的更改并始终保持运行状态。

备份和可追溯性

备份数据非常重要。尤其是在当今SSD广泛使用的情况下,致命的磁盘故障很可能会发生。数据丢失的其他原因可能是意外删除或攻击。我们将BorgBackup与borgmatic一起使用,这是一个不错的,简单的,增量的,高度自动化的备份解决方案。您可以轻松地指定要从备份中排除的文件,还可以选择希望Borg保留的每日,每周,每月和每年的备份数量。通过设置Cron作业或systemd计时器,您可以完全自动化备份过程。我们每天晚上都创建备份,并将其存储在NFS存储中,该存储仅在备份过程运行时才挂载。这样,我们避免了备份被意外删除的情况。rm -rf /或其他一些不幸的事。Borg会对备份进行加密,并支持压缩,以确保备份的大小和安全性。我们希望跟踪对系统所做的任何更改,尤其是对配置文件所做的更改。
对于Linux,有一个名为etckeeper的有用小工具,它将您的/etc目录转换为Git存储库。它还向程序包管理器添加了挂钩,以自动提交在系统更新期间执行的任何配置更改。使用etckeeper,每个配置更改都对应一个Git提交,并带有作者,时间戳和消息。这提供了更大的透明度,尤其是当一个人管理一台服务器时。而且,通过Git的工作方式,可以检测到意外更改,并且可以轻松地还原错误的配置。

摘要

我们解释说,在plapadoo,我们更喜欢轻量级(就依赖关系而言),专注于软件而不是肿的解决方案,并且更喜欢开源软件。我们的自定义聊天机器人为我们提供了高度的透明度和知名度,还提高了我们的生产力,因为即使在远程工作时我们也始终知道发生了什么。最后,我们解释了针对哪些用例选择了哪些软件解决方案以及原因。
如果您喜欢这篇文章,请通过分享帮助我们吸引更多的读者。如果您对该主题有任何疑问,想法或建议,请随时发表评论。您为启动选择了哪些软件解决方案?

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。