作者选择了开放互联网/言论自由基金来接收 100 美元的捐款,作为Write for DOnations计划的一部分。 介绍 许多软件都需要 Java 和 JVM(Java 的虚拟机),包括Tomcat、Jetty、Glassfish、Cassandra和Jenkins。 在本指南中,您将使用apt. 您将安装 OpenJDK 以及来自 Oracle 的官方软件包。然后,您将选择要用于项目的版本。完成后,您将能够使用 JDK 开发软件或使用 Java Runtime 运行软件。 先决条件 要学习本教程,您需要: 按照 Ubuntu 18.04 初始服务器设置指南教程设置了一台 Ubuntu 18.04 服务器,包括 sudo 非 root 用户和防火墙。 安装默认的 JRE/JDK 安装 Java 的最简单选择是使用 Ubuntu 打包的版本。默认情况下,Ubuntu 18.04 包含 OpenJDK 版本 11,它是 JRE 和 JDK 的开源变体。 要安装这个版本,首先更新包索引: sudo apt update ..
Category : 教程系列
作为Write for DOnations计划的一部分,作者选择了免费和开源基金来接受捐赠。 介绍 WebDAV是 HTTP 协议的扩展,允许用户管理远程服务器上的文件。有多种使用 WebDAV 服务器的方法,例如,您可以通过将 Word 或 Excel 文档上传到您的 WebDAV 服务器与同事共享它们。您还可以通过简单地给他们一个 URL 与您的家人和朋友分享您的音乐收藏。所有这一切都可以在他们不安装任何额外软件的情况下实现,因为一切都内置在他们的操作系统中。 在本文中,您将配置一个 Apache Web 服务器,以通过 SSL 和密码身份验证从 Windows、Mac 和 Linux 启用 WebDAV 访问。 先决条件 在开始本指南之前,您需要具备以下条件: 一个 Ubuntu 18.04 服务器。按照Ubuntu 18.04的初始服务器设置创建一个启用 sudo 的非 root 用户。 解析为您服务器的公共 IP 地址的域名。该域名和DNS介绍如何设置此。 一个 Apache 网络服务器。按照如何在 Ubuntu 18.04 上设置 Apache 虚拟主机指南获取有关如何使用您的域名配置 Apache 的说明。 您的域名的 SSL ..
介绍 Docker是一个应用程序,它简化了在容器中管理应用程序进程的过程。容器让您可以在资源隔离的进程中运行您的应用程序。它们类似于虚拟机,但容器更便携、更资源友好,并且更依赖于主机操作系统。 有关 Docker 容器不同组件的详细介绍,请查看Docker 生态系统:通用组件简介。 在本教程中,您将在 Ubuntu 20.04 上安装和使用 Docker 社区版 (CE)。您将安装 Docker 本身,使用容器和映像,并将映像推送到 Docker 存储库。 先决条件 要遵循本教程,您将需要以下内容: 按照Ubuntu 20.04 初始服务器设置指南设置一台 Ubuntu 20.04 服务器,包括一个 sudo 非 root 用户和一个防火墙。 Docker Hub上的帐户,如果您希望创建自己的映像并将它们推送到 Docker Hub,如步骤 7 和 8 所示。 第 1 步 – 安装 Docker Ubuntu 官方仓库中提供的 Docker 安装包可能不是最新版本。为确保获得最新版本,我们将从官方 Docker 存储库安装 Docker。为此,我们将添加一个新的包源,添加来自 Docker 的 GPG 密钥以确保下载有效,然后安装包。 首先,更新您现有的软件包列表: ..
介绍 自动完成是一项功能,其中输入字段根据用户输入建议单词。这有助于改善应用程序中的用户体验,例如需要进行搜索的情况。 在本文中,您将研究如何在 React 中构建自动完成组件。您将使用固定的建议列表、事件绑定、理解键盘代码和操作状态管理。 先决条件 要完成本教程,您将需要以下内容: 需要了解 React。要了解有关 React 的更多信息,请查看如何在 React系列中编码。 第 1 步 – 构建您的Autocomplete组件 该Autocomplete组件是您在自动完成功能中制作功能的地方。 创建一个Autocomplete.js文件,导入 React 并实例化一个Autocomplete类: 自动完成.js import React, { Component, Fragment } from “react”; import ‘./styles.css’ class Autocomplete extends Component { constructor(props) { super(props); this.state = { activeSuggestion: 0, filteredSuggestions: [], showSuggestions: false, userInput: “” }; } 在您的州,该activeSuggestion属性定义了所选建议的索引。filteredSuggestions设置为空数组的属性与用户的输入相匹配。该showSuggestions属性将决定是否出现建议列表,并且该userInput属性为自己分配一个空字符串以接受来自用户输入的单词。 启动类并设置状态后,让我们看看要在组件中应用的方法。 ..
虽然我相信我们都同意队列是自切片面包以来最酷的东西,但我们实际上可以通过将它们与称为堆的树的变体混合来做得更好。使用堆,我们可以将我们的数据构建到一个更智能的队列中,该队列按重要性而不是顺序排序。 概念 与二叉搜索树不同,我们在兄弟姐妹之间比较和组织我们的值,而堆我们只在父母和他们的孩子之间工作。这为我们提供了两种堆的可能性,themax heap和 the min heap,无论您是从最高值移动到最低值,反之亦然。为简单起见,我们只关注最大堆,因为将其转换为最小堆非常容易。 与二叉搜索树一样,二叉堆只允许一个父节点有两个或更少的子节点。它们也很特别,因为它们总是平衡的,因为每个新节点都会从左到右添加到一个级别,直到满为止。 遗憾的是,链表通常不是二叉堆的最佳方法,尽管它通常被概念化为具有左右孩子的树,尽管它仍然是可能的。 大多数情况下,将其作为数组处理会更好,所以这就是我们将在这里介绍的内容。顺序与您所期望的一样,在移动到下一个级别之前,所有内容都在一个级别上从左到右。 这样,我们创建了一个非常一致的模式来查找节点的子节点。节点的所有左子节点都将正好位于2n + 1远离其父节点的位置,n作为其父节点的索引,所有右子节点都为2n + 2。 添加节点 看起来添加一个新节点就像推入我们的数组一样简单,但棘手的部分是我们需要将它与自身和最大值之间的父节点进行比较,然后相应地对它们重新排序。 图形/动画感谢VisuAlgo.net 在我们将我们的新项目推到数组的末尾之后,我们需要“冒泡”我们更大的值。首先,我们需要获取数组末尾的新项,我们将分解为索引和该索引处的新项。 每次我们添加一个项目时,我们将使用我们的等式的逆来查找子项,(n-1)/2,以找到其父项。如果它的父节点小于当前节点,交换它们然后保存它的索引,这将是下一个current. 这将一直持续到没有父母离开。 由于它将逐渐index从末尾向上移动,只要它大于零,就继续交换。 class BH { constructor() { this.values = []; } add(element) { this.values.push(element); let index = this.values.length – 1; const current = this.values[index]; while (index > 0) { let parentIndex = Math.floor((index – 1) ..
以下是如何完成滚动进度条,该进度条会随着您滚动浏览站点页面而前进。这是传达进度指示器的好方法,让读者了解他们在帖子中的进展情况。 它利用了CSS Variables的强大功能,该解决方案改编自Lea Verou 的精彩演讲的一部分。 首先,在打开 body 标签之后添加以下标记: <div class=”progress”></div> 然后用这样的东西来设计这个.progress元素: .progress { background: linear-gradient(to right, #F9EC31 var(–scroll), transparent 0); background-repeat: no-repeat; position: fixed; width: 100%; height: 4px; z-index: 1; } 注意在线性渐变中我们如何引用一个名为 的 CSS 变量–scroll,它将在滚动时被赋予一个值。 这意味着剩下要做的就是侦听文档的滚动事件并–scroll使用滚动百分比设置自定义属性的值。我们为此使用element.style.setProperty。该.progress元素将得到一个内联价值–scroll,一旦它被设定。 感谢Phil Ricketts和他对这个StackOverflow 问题的解决方案,提供了一种计算文档滚动百分比的准确方法: var h = document.documentElement, b = document.body, st = ‘scrollTop’, sh = ‘scrollHeight’, progress = document.querySelector(‘.progress’), ..
作为Write for DOnations计划的一部分,作者选择了免费和开源基金来接受捐赠。 介绍 基础设施即代码 (IAC)的主要好处之一是重用已定义基础设施的部分内容。在 Terraform 中,您可以使用模块将逻辑连接的组件封装到一个实体中,并使用您定义的输入变量对其进行自定义。通过使用模块在高层定义您的基础设施,您可以通过仅将不同的值传递给相同的模块来分离开发、暂存和生产环境,从而最大限度地减少代码重复并最大限度地提高简洁性。 您不仅限于使用自定义模块。Terraform Registry集成到 Terraform 中,并列出了您可以通过在required_providers部分定义它们立即合并到项目中的模块和提供程序。引用公共模块可以加快您的工作流程并减少代码重复。如果您有一个有用的模块并希望与全世界分享,您可以考虑将其发布到注册表上以供其他开发人员使用。 在本教程中,我们将考虑在 Terraform 项目中定义和重用代码的一些方法。您将引用 Terraform Registry 中的模块,使用模块分离开发和生产环境,了解模板及其使用方式,以及如何使用depends_onmeta 参数显式指定资源依赖关系。 先决条件 DigitalOcean 个人访问令牌,您可以通过 DigitalOcean 控制面板创建。您可以在以下位置找到相关说明:如何生成个人访问令牌。 Terraform 安装在您的本地计算机上,并使用DigitalOcean provider设置了一个项目。完成如何在 DigitalOcean 中使用 Terraform教程的第 1 步和第 2 步,并确保将项目文件夹命名为. 在步骤 2 中,不要包含变量和 SSH 密钥资源。terraform-reusabilityloadbalancepvt_key 该droplet-lb下可用的模块modules在terraform-reusability。遵循如何构建自定义模块教程并完成它,直到droplet-lb模块在功能上完成。(也就是说,直到“创建模块”部分中的cd ../..命令。) 了解 Terraform 项目结构方法。有关详细信息,请参阅如何构建 Terraform 项目。 (可选)两个单独的域,其名称服务器在您的注册商处指向 DigitalOcean。请参阅如何从公共域注册商指向 DigitalOcean 域名服务器教程进行设置。请注意,如果您不打算部署将通过本教程创建的项目,则无需执行此操作。 注意:我们已经使用 Terraform 专门测试了本教程0.13。 分离开发和生产环境 在本节中,您将使用模块来实现目标部署环境之间的分离。您将根据更复杂项目的结构来安排这些。您将首先创建一个包含两个模块的项目,其中一个将定义 ..
介绍 关系数据库管理系统是许多网站和应用程序的关键组件。它们提供了一种结构化的方式来存储、组织和访问信息。 PostgreSQL或 Postgres 是一种关系数据库管理系统,它提供了SQL查询语言的实现。它符合标准并具有许多高级功能,例如可靠的事务和没有读锁的并发。 本指南演示了如何在 Ubuntu 20.04 服务器上安装 Postgres。它还提供了一些关于一般数据库管理的说明。 先决条件 要学习本教程,您需要一台 Ubuntu 20.04 服务器,该服务器已按照我们的 Ubuntu 20.04 初始服务器设置指南进行配置。完成本必备教程后,您的服务器应该有一个具有 sudo 权限的非root用户和一个基本防火墙。 第 1 步 – 安装 PostgreSQL Ubuntu 的默认存储库包含 Postgres 包,因此您可以使用apt打包系统安装这些包。 如果您最近没有这样做,请刷新服务器的本地包索引: sudo apt update 然后,安装 Postgres 包以及-contrib添加一些附加实用程序和功能的包: sudo apt install postgresql postgresql-contrib 安装软件后,我们可以了解它的工作原理以及它与您可能使用过的其他关系数据库管理系统有何不同。 步骤 2 — 使用 PostgreSQL 角色和数据库 默认情况下,Postgres 使用称为“角色”的概念来处理身份验证和授权。在某些方面,它们类似于常规的 Unix 样式帐户,但 Postgres 不区分用户和组,而是更喜欢更灵活的术语“角色”。 ..
本教程的早期版本由Melissa Anderson编写。 介绍 MongoDB,也称为Mongo,是许多现代 Web 应用程序中使用的开源文档数据库。它被归类为NoSQL 数据库,因为它不依赖于传统的基于表的关系数据库结构。相反,它使用具有动态模式的类似 JSON 的文档。 MongoDB 默认不启用身份验证,这意味着任何有权访问安装数据库的服务器的用户都可以不受限制地添加和删除数据。为了保护此漏洞,本教程将引导您创建管理用户并启用身份验证。然后,您将进行测试以确认只有该管理用户有权访问数据库。 先决条件 要完成本教程,您将需要以下内容: 运行 Ubuntu 18.04 的服务器。此服务器应具有非 root 管理用户和使用 UFW 配置的防火墙。按照我们针对 Ubuntu 18.04 的初始服务器设置指南进行设置。 MongoDB 安装在您的服务器上。本教程使用 MongoDB 版本4.4进行了验证,但它通常也适用于旧版本的 MongoDB。要在您的服务器上安装 Mongo,请按照我们关于如何在 Ubuntu 18.04 上安装 MongoDB 的教程进行操作。 第 1 步 – 添加管理用户 自3.0版本发布以来,MongoDB 守护进程被配置为仅接受来自本地 Unix 套接字的连接,并且不会自动向更广泛的 Internet 开放。但是,默认情况下仍禁用身份验证。这意味着可以访问安装了 MongoDB 的服务器的任何用户也可以完全访问数据库。 作为保护此漏洞的第一步,您将创建一个管理用户。稍后,您将启用身份验证并以此管理用户身份连接以访问数据库。 要添加管理用户,您必须首先连接到 Mongo shell。因为身份验证被禁用,您可以使用该mongo命令执行此操作,而无需任何其他选项: mongo Mongo shell ..
Next.js是构建在 React 之上的独一无二的框架。它可以让你建立快速反应的应用程序,因为自带的功能,像图像优化,零配置,增量产生静电,文件系统路径,代码分裂和捆绑等。 Next.js 部署的独特之处在于它允许您以几种不同的方式部署: 静态导出:您可以为您的站点创建所有 HTML 页面。通过生成所有 HTML 页面,您可以提供静态文件,从而保证整个站点的快速体验。如果您的页面较少并且不担心将页面导出为 HTML 的构建时间,那么这是一个很好的解决方案。 自定义服务器:您可以部署一个节点服务器,它将动态生成页面或提供静态页面。在较大的站点中,创建每个页面的静态导出可能是一个耗时的过程。当您有数千个页面并且不想在静态导出期间等待很长的构建时间时,动态方法非常有用。 对于大型站点,静态导出可能不是最佳解决方案。对于拥有数千个页面的网站(如电子商务网站或大型博客),静态导出可能需要很长时间。Node.js 自定义服务器可让您进行静态增量再生。您可以即时生成页面,而不是一次生成整个站点的 HTML。这是有益的,因为您不必等待构建/导出整个站点;您可以在用户访问每个页面时生成它。 在本教程中,您将使用静态导出和自定义服务器将 Next.js 应用程序部署到 DigitalOcean 的应用程序平台。App Platform 是一种平台即服务 (PaaS),可让您从 GitHub 存储库部署应用程序。 先决条件 要完成本教程,您需要: 一个DigitalOcean帐户才能使用应用程序平台。 一个GitHub帐户,以便您可以推送您的存储库并将您的帐户连接到 DigitalOcean。 Node.js 的本地开发环境。遵循如何安装 Node.js 并创建本地开发环境。 文本编辑器,如Visual Studio Code或Atom。 熟悉 JavaScript。您可以查看如何在 JavaScript 中编码系列以了解更多信息。 创建一个基本的 Next.js 应用程序 您需要将 Next.js 应用程序部署到 App Platform,因此在此步骤中,您将使用create-next-app 创建一个应用程序,该 CLI 工具用于生成新的入门 Next.js 应用程序。您还可以在DigitalOcean ..