
Zfort Group公司已决定不再续订Habré的公司订阅。
但是有个好消息:
我们想宣布更新网站zfort.com.ua的启动,简要介绍创建该网站的一些技术功能,并告知将摘要发布从Habr转移到新网站博客的决定。 在我们新站点的博客中,我们将继续发布摘要,文章并宣布专业会议。 您可以订阅所有更新和出版物,以随时了解最新信息,而不会错过任何内容。
摘要的简短版本也将保留在Habré上,但不会在Zfort Group公司博客上发布,而是在alexzfort帐户上发布。
我们为自己设定的目标之一是针对本地受众更新我们的网站,使其变得既快捷又容易。 在站点上补充一些部分,以显示最新的公司新闻,正在进行的事件的公告,并在短时间内以最大的灵活性和扩展能力发布摘要/文章。
现在,更多有关创建更新的网站zfort.com.ua的详细信息
最初,考虑了更新站点的三个主要开发领域:
- 建立一个基于WordPress的网站;
- 根据我们自己的经验从头开始在LAMP堆栈上开发一个网站;
- 基于非常规的JAMstack方法实现站点。 这是一种替代方法,可提供许多工具来创建静态网站,但这些工具具有动态添加和管理的内容。 该选项意味着基于现有服务的使用来开发站点,并将其组合为一个用于管理和发布内容的生态系统。
在权衡了可能的选项之后,决定采取第三种方式,放弃Symfony或WordPress上的自定义服务器端,转而使用无服务器技术,这将获得以下优势:
- 减少开发,测试,进一步支持和修复错误的时间;
- 减少部署环境,配置和服务器支持的时间;
- 获得云原生项目基础架构,而不是拥有内部部署/自托管解决方案;
- 以交互微服务生态系统的形式而不是经典的整体架构来构建整个项目;
- 获得一个灵活的内容管理系统,能够结构化内容,将内容移植到另一个系统,等等。
开发网站zfort.com.ua所选择的选项暗含着避免传统Web服务器的最大可能性(有一些限制),而是基于无服务器技术构建整个系统,该系统涉及多种交互服务。
此外,在规划和开发过程中,我们追求了目标-获得一个解决方案,在该解决方案中,前端将与站点的后端最大化。
该网站的主要组成部分:
- 基于无头API的CMS(SaaS),用于管理网站内容;
- 静态网站生成器;
- 表格处理服务或功能;
- 源代码存储库和版本控制系统;
- 部署和托管平台-一个能够侦听Webhook通知,开始构建并将站点部署到生产环境的平台;
- 电子邮件传递平台。
根据每个组件,决定使用:
- Contentful.com-作为基于Headless API的CMS
- GatsbyJS-作为生成静态HTML网站页面的框架;
- PHP(Symfony)自定义功能作为站点表单处理程序;
- GitLab作为项目源代码和版本控制系统的存储库;
- Rackspace-作为托管服务提供商;
- SendGrid-作为用于发送电子邮件的系统以及用于存储和管理电子邮件模板的系统。
同样,显示在站点页面上的空缺的管理直接在Zoho Recruit系统中进行。
选择作为zfort.com.ua的内容管理的定制开发管理部分的替代服务是ontentful.com 。 该产品是带有管理面板的内容管理平台。 类似于云CMS,但没有用户界面。 只有一个管理面板。


通过Contentful API获得要显示在网站页面上的内容。 在我们的案例中,我们使用gatsby-source-contentful插件从内容空间获取Gatsby中的内容类型,条目和资产。
除了内容管理基础结构之外,Contentful还可以通过Images API调整图像大小,裁剪和压缩图像。
所选方法的优点:
在浏览器中显示站点的性能和速度。 由于未生成运行时页面,因此HTML被缓存并几乎立即显示给用户。 另外,可以将站点完全转移到CDN,这不仅可以提高工作速度,还可以使用CDN工具进行扩展。
分布式体系结构使您可以以相对最小的工作量随时替换站点的任何组件。 所有服务都是彼此分离的,其中每个服务都是具有自己逻辑的应用程序。 逻辑并没有混淆,每个模块的开发团队几乎可以彼此独立地工作;
安全性 实际上,站点是预先生成的静态文件的集合。 总的来说,站点的所有动态功能都分配给单独的第三方服务,与之的交互通过API进行,并且仅在生成或更新内容时进行。 因此,没有可以找到该漏洞的插件。 这种方法还降低了通过SQL注入被黑客入侵的风险。
现象的可移植性 。 生成站点的托管要求最低。 静态站点可以托管在允许存储静态文件的任何托管站点上。
开发速度快 ,无需持续的代码支持。 用于生成站点页面的所有必需配置文件以及用于生成HTML页面的模板都存储在GitLab中。 基于将现成的解决方案重用为相互交互的某些微服务的机会。 如上所述,作为填充内容的管理部分,我们使用Contentful,在Zoho Recruit系统中进行空缺工作。
但是,这种方法存在一些困难:
从第三方系统同步和更新站点内容的复杂性。 通过正确设置webhook,部署程序并仔细处理,可以解决该问题。
服务器端在站点上生成HTML页面时,连接第三方JS库可能会出现问题。 这个问题已经解决,尽管有些细微差别。
缺少传统的服务器端会带来其自身的困难,并且在例如需要执行搜索的情况下会施加限制。 但是,也可以使用第三方服务(例如Algolia等)解决搜索问题。
下图示意性地显示了zfort.com.ua网站的体系结构以及主要组件的交互。

GatsbyJS使用GraphQL协议处理数据-构建时,我们从第三方服务的API获取数据并创建GraphQL节点的本地基础。
此外,将GraphQL查询写入组件中以获取特定位置所需的数据,并基于jsx模板构建HTML。
为了与Zoho Recruit一起工作,编写了一个自定义的Gatsby插件,该插件通过API接收数据并将必要的数据添加到GraphQL数据库。
通常,如果需要,可以通过更改直接位于托管静态文件的站点文件夹中的.md文件来拒绝使用内容管理系统和管理站点的内容。 所有数据都已预先添加到GraphQL中,因此,您可以搜索,排序以及大多数其他最简单的聚合和搜索操作。
为了处理来自表单的请求,使用Symfony 4创建了一个单独的自定义服务。为了能够查看从多个站点表单接收的数据,使用Symfony 4(SonataAdminBundle)创建了一个应用程序。
很快,该站点将在ZDay上展示更新的部分-基于Zfort Group公司的一系列常规专业会议。
非常感谢多年来与我们一起在Habré工作的每个人,以及所有阅读,积极评论并提出问题的人。
访问我们的网站以继续接收您习惯的新鲜内容,并订阅您感兴趣的领域的电子邮件新闻通讯。