从外包到开发(第2部分)

В 以前的文章,我谈到了 Veliam 创建的背景以及通过 SaaS 系统分发它的决定。 在这篇文章中,我将讨论我必须做什么才能使产品不是本地的,而是公开的。 关于分发是如何开始的以及他们遇到了什么问题。

规划

当前用户的后端是在 Linux 上。 几乎每个组织都有Windows服务器,Linux就更不用说了。 Veliam 的主要优势是远程连接到 NAT 后面的服务器和网络设备。 但此功能与路由器必须是 Mikrotik 的事实紧密相关。 这显然不会令很多人满意。 我首先开始考虑添加对最常见供应商的路由器的支持。 但我明白,这是一场扩大支持公司名单的无休止的竞赛。 此外,那些已经支持的可能有一组不同的命令,用于根据模型更改 NAT 规则。 摆脱这种情况的唯一方法似乎是 VPN。

由于我们决定分发该产品,但不是开源的,因此不可能包含具有开放许可证(例如 GPL)的各种库。 这通常是一个单独的主题;在决定出售该产品后,我必须浏览一半的库,因为它们是 GPL。 当他们为自己写作时,这很正常。 但不适合分发。 第一个想到的VPN是OpenVPN。 但它是 GPL。 另一种选择是使用日本 SoftEther VPN。 他的许可证允许他将其包含在他的产品中。 经过几天关于如何以用户不需要配置任何东西并且了解 SoftEther VPN 的方式集成它的各种测试后,获得了一个原型。 一切都是理所应当的。 但由于某种原因,这个方案仍然让我们感到困惑,最终我们放弃了它。 但他们想出了另一个选择后,自然就拒绝了。 最后,一切都是在常规 TCP 连接上完成的。 有些连接通过协调器工作,有些直接通过 Nat Hole Punching (NHP) 技术工作,该技术也在 Free Pascal 中实现。 我必须说我以前从未听说过 NHP。 我从来没有想到可以连接 2 个网络设备,而这两个设备都直接位于 NAT 之后。 我研究了这个话题,了解了操作原理,然后坐下来写。 该计划已实现,用户通过 RDP、SSH 或 Winbox 一键连接到 NAT 后面的所需设备,无需输入密码或设置 VPN。 此外,大多数连接都会经过我们的协调器,这对 ping 和服务这些连接的成本有很好的影响。

将服务器端从Linux转移到Windows

切换到 Windows 时遇到了几个问题。 首先是windows中内置的wmic不允许你进行WQL查询。 在我们的系统中,一切都已经建立在它们之上。 还有别的东西,但现在我忘了为什么他们最终放弃了它的使用。 Windows 版本之间可能存在差异。 第二个问题是多线程。 由于找不到符合我们“可接受”许可证的良好第三方实用程序,我再次启动了 Lazarus IDE。 我编写了必要的实用程序。 输入是所需的对象列表以及需要进行哪些特定查询,作为响应,我收到数据。 而这一切都是在多线程模式下进行的。 伟大的。

当我为 PHP Windows 设置 pthreads 后,我以为一切都会立即开始,但事实并非如此。 经过一段时间的调试,我意识到 pthreads 似乎可以工作,但它在我们的系统上不起作用。 很明显,在 Windows 上使用 pthread 存在一些特殊性。 事实也是如此。 我阅读了文档,其中写道,对于 Windows,线程数量是有限的,而且据我所知,是隐含的。 这成了一个问题。 因为当我开始减少应用程序运行的线程数时,它的工作速度非常慢。 我再次打开 IDE,对象的多线程 ping 功能已添加到同一实用程序中。 嗯,那里也已经有很多端口扫描了。 实际上,在此之后,PHP 对 pthread 的需求就消失了,并且不再使用它。 此外,该实用程序还添加了更多功能,并且至今仍然有效。 之后,组装了 Windows 安装程序,其中包括 Apache、PHP、MariaDB、PHP 应用程序本身以及一组用 Free Pascal 编写的用于与系统交互的实用程序。 至于安装程序,我想我会很快解决这个问题,因为...... 这是很常见的事情,几乎对每个软件来说都是必需的。 要么是我找错地方了,要么是别的原因。 但我经常遇到要么不够灵活,要么昂贵且不灵活的产品。 然而,我找到了一个免费的安装程序,可以满足任何愿望。 这是InnoSetup。 我在这里写下这个是因为我必须查一下它,以防我节省某人的时间。

有利于您的客户而拒绝插件

我之前写过,客户端部分是带有“插件”的浏览器。 所以有时候Chrome更新了,布局有点歪,然后Windows更新了,自定义uri方案消失了。 我真的不想在产品的公开版本中出现这种惊喜。 而且,每次 Windows 更新后,自定义 uri 就开始消失。 微软只是删除了所需部分中所有非其分支。 此外,Google Chrome 现在不允许您记住从自定义 uri 打开或不打开应用程序的选择,并且每次单击监控对象时都会询问此问题。 嗯,一般来说,与用户本地系统的正常交互是必要的,而浏览器不提供这种交互。 这个方案中最简单的选择似乎就是简单地制作自己的浏览器,就像许多人现在通过 Electron 所做的那样。 但是很多东西已经用 Free Pascal 写好了,包括服务器部分,所以我们决定用同样的语言来制作客户端,而不是创建一个动物园。 这就是带有 Chromium 的客户端的编写方式。 之后,它开始获得各种捆扎带。

释放

最后我们为系统选择了一个名称。 在从本地版本转换为 SaaS 的过程中,我们不断地进行各种选择。 由于我们最初计划不仅进入国内市场,因此选择名称的主要标准是“.com”区域中是否存在未占用或不是很昂贵的域名。 某些功能/模块尚未从本地版本移植到 Veliam,但我们决定将其与当前功能一起发布,并以更新形式完成其余部分。 在第一个版本中,没有 HelpDesk、Veliam Connector,无法更改通知触发器的阈值等等。 我们购买了代码签名证书并签署了客户端和服务器部分。 我们为该产品编写了一个网站,开始注册软件、商标等程序。 总的来说,我们已经准备好开始了。 尽管我们对此毫不怀疑,但由于所做的工作以及也许有人会使用您的产品这一事实而感到一丝欣喜。 然后停下来。 该合作伙伴表示,没有消息通知,就不可能进入市场。 没有很多其他的东西是可能的,但没有这个就不行。 经过一番争论后,添加了与 Telegram 的集成,这对我们来说很合适。 在当前所有即时通讯工具中,这是唯一一款免费提供 API 访问且无需任何复杂审批程序的即时通讯工具。 同一个 WhatsApp 建议联系那些收取高额服务费用的提供商;所有要求不带垫圈访问的信件都被忽略了。 好吧,Viber...我不知道现在谁在用它,因为... 那里的垃圾邮件和广告都超乎想象。 XNUMX月底,经过一系列的内部测试和朋友们的测试,开放给大家注册,并提供软件下载。

开始分发

从一开始,我们就明白我们需要少量的系统用户,以便他们可以在战斗模式下测试产品并提供一些初步反馈。 在 VK 上购买的一些帖子取得了成果。 第一批注册已经到来。

这里必须要说的是,当您的公司没有知名品牌时进入市场,同时提供需要从服务器和工作站输入帐户的无代理监控功能,是非常困难的。 这让很多人感到害怕。 我们从一开始就明白这样做会出现问题,并在技术和道德上都做好了准备。 尽管 RDP 和 SSH 默认情况下已加密,但所有远程连接均由我们的软件使用 AES 标准进行额外加密。 来自本地服务器的所有数据都通过 HTTPS 传输到云端。 帐户以加密形式存储。 所有子系统的加密密钥对于所有客户端都是单独的。 对于远程连接,通常使用会话加密密钥。

在这种情况下,我们能做的就是尽可能开放、做好安全工作、不厌其烦地回答人们的问题,让人们感到平静。

对于许多人来说,该软件的便利性和功能性超过了恐惧,他们注册了。 有些人在 VK 上发表的帖子中写道,该软件无法使用,因为这是他们的密码的集合,通常是一家无名公司。 必须说,持这种观点的人不止一个。 许多人根本不明白,当他们在作为服务运行的服务器上安装其他专有软件时,它也拥有系统的完全权限,并且他们不需要帐户来执行非法操作(很明显,您可以更改启动服务的用户,但在这里,您也可以输入任何帐户)。 其实,人们的担心是可以理解的。 在服务器上安装软件是很常见的事情,但输入帐户有点可怕和亲密,因为一半的人对所有服务都使用相同的密码,即使是为了测试而创建单独的帐户也很懒。 但目前,人们信任大量的服务,并提供凭证等。 我们努力成为其中一员。

有很多评论说我们从某个地方偷了它。 这让我们有点惊讶。 好吧,这是一个人的意见,但这样的评论可以在不同人的各种出版物中找到。 起初他们不知道该如何应对。 要么为有些人认为在俄罗斯没有人可以自己做任何事情而只能偷窃而感到悲伤,要么为他们认为这只能被偷窃而感到高兴。

我们现已完成获取 EV 代码签名证书的程序。 要获得它,您需要经过一系列检查并发送大量有关该公司的文件,其中一些文件必须经过律师认证。 在大流行期间获取 EV 代码签名证书是一篇文章的单独主题。 整个过程花了一个月的时间。 这并不是一个月的等待,而是不断要求提供更多文件。 也许与疫情无关,整个过程对每个人来说都花了这么长时间? 分享。

有人说我们不会使用它,因为没有 FSTEC 证书。 我们必须解释一下,我们无法也不会获得它,因为要获得此证书,加密必须符合 GOST,并且我们计划不仅在俄罗斯分发该软件,而且还使用 AES。

所有这些评论都让人怀疑是否有可能推广一种要求您在不公开的情况下输入帐户的产品。 尽管我们知道会有人对此持非常消极的态度。 注册人数过千之后,我们就不再想了。 尤其是之后,除了那些甚至没有尝试过该产品的人的负面评价之外,还开始出现非常愉快的评论。 不得不说,这些正面评价是产品研发的最大动力。

为员工添加远程访问功能

客户经常执行的任务之一是“让 Vanya 在家中访问他的计算机”。 我们在 Mikrotik 上推出了 VPN 并为用户创建了帐户。 但这是一个真正的问题。 用户无法观看说明并按照说明一步步通过 VPN 连接。 不同版本的 Windows。 在一个Windows中一切都连接良好,在另一个Windows中则需要不同的协议。 一般来说,这总是与网络设备的重新配置有关,网络设备充当VPN服务器,并且并非所有员工都可以访问它,这很不方便。

但我们已经有了到服务器和网络设备的远程连接。 为什么不使用现成的传输并制作一个单独的小型实用程序,您可以简单地将其提供给用户进行连接。 我只是想确保用户没有在那里输入任何深奥的内容。 只需一键“连接”。 但是,如果该实用程序只有一个按钮,它将如何了解连接位置? 有一个想法是在我们的服务器上在线构建所需的应用程序。 系统管理员单击“下载快捷方式”按钮,命令会发送到我们的云端,以构建带有硬连线信息的单独二进制文件,以便通过 RDP 连接到所需的服务器/计算机。 一般来说,这是可以做到的。 但这需要很长时间;管理员必须先等待二进制文件编译完成,然后再下载。 当然,可以简单地添加第二个文件和配置,但这已经是 2 个文件了,为了简单起见,用户需要一个。 一个文件,一键,无需安装程序。 在谷歌上阅读了一些内容后,我得出的结论是,如果你在编译后的“.exe”末尾添加一些信息,那么它就不会恶化(好吧,几乎)。 你至少可以在那里添加战争与和平,它会像以前一样工作。 不利用这一点将是一种罪过。 现在,您可以在客户端中直接解压该应用程序(称为 Veliam 连接器),并在最后添加连接所需的信息。 并且应用程序本身知道如何处理它。 为什么我把“差不多”写在括号里高一点? 因为您必须为这种便利付出代价,因为应用程序会丢失其数字签名。 但在现阶段,我们认为为了这种便利而付出的代价很小。

第三方模块许可证

我在上面已经写过,在决定将产品公开,而不仅仅是供我们自己使用之后,我们必须努力工作,寻找一些不允许我们包含在我们的产品中的模块的替代品。 但发布之后,却意外发现了一件非常不愉快的事情。 Veliam 服务器位于客户端,包含 MariaDB DBMS。 而且它是 GPL 许可的。 GPL许可证意味着该软件必须是开源的,如果我们的产品包含具有此许可证的MariaDB,那么我们的产品必须受此许可证约束。 但幸运的是,这个许可证的目的是开源,而不是惩罚那些在法庭上不小心犯错的人。 如果版权所有者提出索赔,他会书面通知侵权者,并必须在 30 天内消除侵权行为。 我们自己发现了错误,没有收到任何信件,并立即开始考虑如何解决问题。 事实证明,解决方案很明显——切换到 SQLite。 该数据库没有许可限制。 大多数现代浏览器都使用 SQLite 和许多其他程序。 我在互联网上找到信息说SQLite被认为是世界上最广泛使用的DBMS,正是因为浏览器,但我没有寻找证据,所以这是不准确的信息。 我开始研究改用 SQLite 的危险。

当客户端有数百台安装了 MariaDB 和数据的服务器时,这将成为一项不简单的任务。 某些 MariaDB 功能在 SQLite 中不可用。 嗯,例如,在代码中我们使用了类似的查询

Select * FROM `table` WHERE `id`>1000 FOR UPDATE

这种构造不仅从表中进行选择,而且还锁定行数据。 还有几个设计也必须重写。 但除了我们必须重写大量查询之外,我们还必须提出一种机制,在更新客户端的 Veliam 服务器时,将所有数据移植到新的 DBMS 并删除旧的 DBMS。 此外,SQLite 中的事务不起作用,这是一个真正的问题。 但在阅读了浩瀚的万维网后,我发现在连接时通过传递一个简单的命令就可以启用 SQLite 中的事务,没有任何问题

PRAGMA journal_mode=WAL;

这样,任务就完成了,现在客户端的服务器部分运行在SQLite上。 我们没有注意到系统操作有任何变化。

新服务台

有必要将 HelpDesk 系统从内部版本移植到 SaaS 版本,但需要进行一些更改。 我想做的第一件事是在系统中透明的用户授权方面与客户的域集成。 现在,为了登录 HelpDesk 并在系统中留下请求,用户只需单击桌面上的快捷方式即可打开浏览器。 用户不输入任何凭据。 Apache SSPI 模块是 Veliam Server 的一部分,会自动在域帐户下对用户进行授权。 当用户在公司网络之外时,要在系统中留下请求,他只需单击一个按钮,他就会在电子邮件中收到一个链接,通过该链接,他无需密码即可登录 HelpDesk 系统。 如果用户在域中被禁用或删除,则 HelpDesk 帐户也将停止工作。 因此,系统管理员不需要同时监控域和 HelpDesk 中的帐户。 一名员工辞职 - 他断开了域中的帐户,仅此而已,他不会通过公司网络或链接登录系统。 为了使这种集成发挥作用,系统管理员需要创建一个 GPO, 将内部站点添加到 Intranet 区域 и 向桌面上的所有用户分发快捷方式.

我们认为对于 HelpDesk 系统(至少对我们自己而言)极其必要的第二件事是,一键直接从应用程序连接到申请人。 此外,如果系统管理员位于不同的网络上,则连接必须通过。 对于外包来说这是强制性的,对于全职系统管理员来说这通常也是非常必要的。 已经有几种产品在远程连接方面做得非常出色。 我们决定为他们进行整合。 我们现在已经集成了 VNC,将来我们计划添加 Radmin 和 TeamViewer。 使用我们的网络传输进行远程基础设施连接,我们使 VNC 连接到 NAT 后面的远程工作站。 Radmin 也会发生同样的情况。 现在,为了连接到用户,您只需单击应用程序本身中的“连接到申请人”按钮即可。 VNC客户端打开并连接到申请人,无论您是在同一个网络上还是穿着拖鞋坐在家里。 首先,系统管理员必须使用 GPO 在每个人的工作站上安装 VNC 服务器。

现在我们自己正在切换到新的 HelpDesk 并使用与域和 VNC 的集成。 这对我们来说非常方便。 现在,我们可以避免为 TeamViewer 付费,我们已经使用它来运行我们的支持服务三年多了。

接下来我们打算做什么?

我们发布产品的时候,没有做任何有偿关税,只是简单地将免费关税限制在50个监控对象内。 我们认为,五打网络设备和服务器应该足以满足每个人的需求。 然后开始请求增加限制。 说我们有点震惊,其实没什么可说的。 拥有这么多服务器的公司真的对我们的软件感兴趣吗? 对于提出此类请求的人,我们免费延长了限制。 针对他们的要求,我们询问了一些人为什么需要这么多,他们是否真的有这么多的服务器和网络设备。 事实证明,系统管理员开始以我们完全没有计划的方式使用系统。 一切都变得简单 - 我们的软件开始不仅监控服务器,还监控工作站。 因此,有许多扩大限制的要求。 现在我们已经推出了有偿关税,限额可以自主扩大。

服务器几乎总是使用存储系统或 RAID 阵列中的本地磁盘。 我们最初是为他们制造产品的。 智能监控对于这项任务来说并不有趣。 但考虑到人们已经采用了监控工作站软件,因此出现了实施SMART监控的要求。 我们将尽快实施。

随着 Veliam Connector 的出现,不再需要在企业网络中部署 VPN 服务器,或者执行 RDGW,或者只是将端口转发到必要的计算机以通过 RDP 连接。 许多人仅将我们的系统用于这些远程连接。 Veliam Connector 仅适用于 Windows,一些公司用户从运行 MacOS 的家用笔记本电脑连接到公司网络上的工作站或终端。 事实证明,由于用户数量较多,系统管理员被迫再次回到转发或 VPN 问题上。 因此,我们现在正在完成 MacOS 版 Veliam Connector 的制作。 使用他们喜爱的 Apple 技术的用户还将有机会一键连接到公司基础设施。

我真的很喜欢这样一个事实:拥有大量的系统用户,你不必绞尽脑汁思考人们需要什么以及什么会更方便。 他们自己写下自己的愿望,所以近期的发展计划有很多。

与此同时,我们现在计划开始将该系统翻译成英文并在国外分发。 我们还不知道如何将产品分销到国外,我们正在寻找选择。 也许稍后会有一篇单独的文章来讨论这个问题。 也许读过这篇文章的人能够建议所需的向量,或者他自己知道并知道如何做到这一点并会提供他的服务。 我们将感谢您的帮助。

来源: habr.com

添加评论