如何使用 Linode StackScripts 部署预配置的 Linux 服务器

部署新的 Linux 服务器后总是有一些事情要做。 它可能是更改 SSH 配置、创建非 root 用户或安装和配置 Docker。

这些都是重复的任务,当您测试某些东西并且必须部署具有相同配置的服务器时,这些任务可能会特别令人沮丧。

为了 example,我使用反向代理设置来测试不同类型的 Web 服务和应用程序。 在所有新服务器上一次又一次地执行所有这些步骤可能会非常痛苦。

谢天谢地, 锂节点,我们的基础设施提供商以 StackScripts 的形式提供了一个方便的解决方案。

在本教程中,我将告诉您以下内容:

  • 什么是 Linode StackScripts?
  • 在使用 Linode 部署服务器时如何使用这些 StackScript?
  • 创建自己的 StackScript 的提示
  • 使用 Linux Handbook 团队(即我们)创建的 StackScripts 部署反向代理设置

本教程仅适用于 Linode 云服务器提供商。 如果你不使用它,你可以 使用此链接注册 获得两个月 60 美元的免费积分。

什么是 StackScript?

它是在成功部署服务器后运行的脚本。 这个脚本不一定是 shell 脚本,它可以用 Python 或 Perl 编写,只要有解释器,你只需要确保使用正确的 shebang!

带一个 堆栈脚本,您可以自动化一些部署后必需品的更单调的任务。 下面列出了其中一些:

  • 创建非 root 用户。
  • 更改 SSH 服务器配置(例如禁用密码验证)。
  • 安装一些你想要的包,比如 Python、Docker、Ruby 等。
  • 更新并重新启动服务器。

听起来像 Dockerfile 提供的功能,对吧? 这里是类似的概念。

StackScript 的类型

好吧,它们不完全是“类型”。 这取决于您如何解释类​​型的概念。 如果您通过编写它的语言(即解释器)来区分两个脚本,那么 StackScript 的类型与在特定分布图像(如 Python、Perl、Bash、Csh、Fish、Ksh 等)中找到的解释器一样多。

在这里,我通过可用性来区分 StackScripts。 根据可用性,有两种 StackScript:

  1. 帐户堆栈脚本
  2. 社区 StackScripts

帐户堆栈脚本

这些是您自己创建但尚未公开的私有脚本。

如果您登录到您的 Linode 帐户,您会在左侧面板的“StackScripts”下的“Account StackScripts”选项卡中找到它。

社区 StackScripts

您和其他人通过 Linode 门户公开提供的脚本。

您可以在“Account StackScripts”旁边的相同位置找到它。

Linode 社区 StackScripts

动手 1:创建一个简单的 StackScript 并用它部署一个新服务器

要继续进行,您首先需要做几件事:

  • 一种 Linode 账户. 如果您是组织的一员,并且其中一位管理员为您创建了帐户,请确保您的帐户具有使用 StackScripts 操作的必要权限。
  • 一些命令行或shell脚本知识。 你可以一直关注我们的 Bash 初学者系列。

创建一个简单的 StackScript

在这个 example,您将创建一个 bash 该脚本将创建一个非 root 用户并将 SSH 密钥详细信息复制到该用户。 它做的不多,但足以理解基础知识。

用户名和密码将在此硬编码 example 我不建议在任何环境中这样做。 我创建了一个 stackscript 来实现类似的功能,稍后我将分享。

转到 StackScript 窗口,然后单击“创建 StackScript”按钮。

在 Linode 中创建 StackScript

您现在将看到几个文本字段。 这是您需要做的:-

  • 首先,给你的脚本一个标签。 确保这对于您的帐户 StackScript 列表是唯一的。
  • 接下来,描述脚本的用途。 这是可选的。
  • “目标图像”基本上是您制作此 StackScript 的发行版。 您将要使用的命令或解释器默认情况下可能不存在于一个发行版中,但存在于另一个发行版中。 确保选择正确的图像[s] 这里。 现在,选择 Ubuntu 20.04

最后是脚本部分。 这里复制并粘贴以下代码

#!/bin/sh

useradd 
    -mG sudo 
    -s /bin/bash 
    -p $(awk -F: '$1 ~ /^root$/ {print $2}' /etc/shadow) 
    noroot

if test -d /root/.ssh; then
    cp -r /root/.ssh /home/noroot && 
        chown -R noroot:noroot /home/noroot/.ssh && 
        chmod 700 /home/noroot/.ssh
fi

rm -f /root/StackScript

该脚本执行以下操作

  • 创建一个非root用户,命名为 noroot密码与 root 用户相同。
  • 如果您已将 SSH 密钥添加到您的 Linode,该脚本将复制 .ssh 目录到非root用户的家,并配置所需的所有权和权限。
  • StackScripts 存储在 /root 以…之名 StackScript,最后一行从磁盘中删除脚本。

一切完成后,点击“Save”。

Save  Linode 中的 StackScript

使用 StackScript 部署服务器

您现在应该在您的帐户 StackScript 列表中看到 StackScript。 如果没有,请重新加载页面。

帐户 StackScript 列表

在这里,在最右侧,单击“部署新 Linode”。

使用 StackScript 部署

另一种方法是在 Linode 创建页面上选择 StackScripts 作为部署方法,如下图所示。

从 Linode 创建窗口

之后,按照您的习惯继续创建 Linode。 一旦 Linode 的状态在仪表板上显示为“正在运行”,请等待几秒钟,然后使用 SSH 登录服务器,但不能以 root 身份登录,因为 noroot 用户。

ssh [email protected]

您应该能够以这个新用户身份登录。

实践 2:使用 Linux 手册创建的 StackScripts 部署服务器

在 Linux 手册中,我们进行了大量的测试和配置。 您可以在我们的部署教程中看到这一点。 为了帮助像您这样的读者,我们最近开始创建 StackScripts。

使用我们的 StackScripts,您可以部署具有相当复杂配置的服务器。 以使用 Docker 设置 Nginx 反向代理为例 example. 如果你想使用这个很棒的设置,只需使用 StackScript 并节省大量时间。

您可以在以下位置找到 LHB StackScripts 我们的 GitHub 存储库.

在这里,我将引导您使用反向代理部署 reverse-proxy-jwilder 堆栈脚本。

这些脚本目前仅在不同的 Ubuntu 版本中进行测试。

首先前往社区 StackScript 部分,然后搜索“reverse-proxy-jwilder”。 您应该看到一个名为“another_debdut/reverse-proxy-jwilder”的脚本。

像以前一样,单击“部署新 Linode”按钮。 现在,您应该会看到比以往更多的输入字段。

反向代理 StackScript

让我解释一下选项:

创建非root用户

使用 root 用户总是在生产环境中并不是最好的主意。 但是 Linode 在部署服务器时没有创建非 root 用户的选项。 这个脚本会处理这个问题。

用户创建是可选的,因为有时需要执行一个小测试,并且使用起来更容易 root 用户暂时。

非root用户密码

这又是可选的。 如果将此留空,则非 root 用户将重新使用 root 密码。

升级系统

有时您可能不想升级系统,因为这可能需要一段时间。

SSH 端口

首先,它要求 SSH 守护程序运行的端口号,默认为端口 22。我建议将其设置为不同的值,并记住这一点 此更改不会反映在您的仪表板上.

根据其他信息,该脚本还配置了 SSH 的其他部分。 为了 example,如果你添加一个用户, root 无法通过 SSH 访问,如果提供了至少一个公钥,则禁用密码登录。

锁定根帐户

您还可以锁定 root 部署屏幕上的用户权限。 这是标准的 SSH 加固技巧之一。

码头工人组

由于要安装 docker,您可以将非 root 用户添加到 docker 从这里自动分组。

就是这样。 完成后,按照您通常部署服务器的方式进行操作。

您需要等待很长时间才能完成整个过程。 同时,登录后可以使用tail命令查看日志:

tail -f /var/log/stackscript.log

如果您看到这些 StackScripts 的一些错误或希望看到正在制作的一些自定义脚本, 在 Linux 手册 GitHub 存储库上打开一个问题. 贡献总是受欢迎的。

要了解有关 StackScripts 的更多信息,您可以阅读他们的官方文档 这里.