作为Write for DOnations计划的一部分,作者选择了免费和开源基金来接受捐赠。 介绍 Postfix 是一个邮件传输代理(MTA),一个用于发送和接收电子邮件的应用程序。它可以配置为仅用于通过本地应用程序发送电子邮件。当您需要定期从您的应用程序发送电子邮件通知或只是有大量第三方电子邮件服务提供商不允许的出站流量时,这很有用。它也是运行成熟的 SMTP 服务器的一种更轻松的替代方案,同时保留了所需的功能。 在本教程中,您将安装 Postfix 并将其配置为仅发送 SMTP 服务器。您还将从 Let’s Encrypt 为您的域请求免费的 TLS 证书,并使用它们加密出站电子邮件。 先决条件 一台 Ubuntu 18.04 服务器设置了 Ubuntu 18.04 的初始服务器设置,包括创建一个 sudo 非 root 用户。 完全注册的域名。本教程将your_domain贯穿始终。你可以购买一个域名Namecheap,免费获得一个在Freenom,或使用你选择的域名注册商。 your_domain指向您服务器的公共 IP 地址的 A DNS 记录。您可以按照此介绍给DigitalOcean DNS有关如何添加这些细节。 注意:您的服务器主机名和您的 Droplet 名称必须匹配your_domain,因为 DigitalOcean 会根据名称自动为 Droplet 的 IP 地址设置 PTR 记录。 您可以通过hostname在命令提示符下键入来验证服务器的主机名。输出应与您在创建 Droplet 时为其指定的名称相匹配。 步骤 1 — ..
Category : 教程系列
通常,Linux 是指围绕 Linux 内核构建的一组开源操作系统发行版。在最严格的意义上,Linux 仅指内核本身的存在。Linus Torvalds 于 1991 年首次发布 Linux 操作系统内核,作为 Unix 的替代品,Unix 是一种专有操作系统,也是 macOS 操作系统的基础。为了构建完整的操作系统,Linux 发行版通常包含来自 GNU 项目和其他来源的工具和库。 今天,软件开发人员使用 Linux 来构建和运行移动应用程序。Linux 在开发负担得起的设备(如 Chromebook)方面也发挥了关键作用,这些设备在内核上运行操作系统。在一般的云计算和服务器环境中,Linux 因其灵活性、社区驱动的维护和支持、低资源要求、高兼容性以及对免费和开源软件及其生态系统的承诺而成为流行的选择。 流行的 Linux 发行版包括 Debian、Fedora 和 Ubuntu。商业发行版包括 Red Hat Enterprise Linux 和 SUSE Linux Enterprise Server。 您可以使用以下资源更深入地了解 Linux: Linux 简史 Linux 基础标签 让服务器工作:Linux 系统管理实用指南免费电子书 如果您想了解有关云计算的更多信息,请继续学习我们的自学课程“云�..
作者选择了开放互联网/言论自由基金来接收 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 ..
作为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 不区分用户和组,而是更喜欢更灵活的术语“角色”。 ..