Linux服务器基础管理知识

现在我想起来了,要是我在职业生涯的早期就掌握了 Linux 服务器管理的基础知识就好了。其中最有价值的一项是网络托管技能,这肯定会将我自己编写或直接从技术社区获取的网络应用程序和 API 提升到一个新的水平。

现在很多人觉得服务器管理已经过时了,老土了——不用学习设置VPS、设置远程访问、部署防火墙,我们还是合格的软件开发人员……真的吗?

如果我们不知道如何自主管理我们的基础架构,我发现很难选择正确的工具。今天的文章将从多个维度讨论这个非常实际的问题。

首先最直观的二元维度,新的还是旧的,外购的还是自建的?由此引发的真正问题是,我们应该选择托管服务还是非托管服务——这是本文的核心。

一方面,我们当然可以像千年前一样自己管理一切:自己设置主机、安装和管理依赖项、设置备份等。另一方面,我们可以看到支持者引用轻从 Amazon RDS 等管理元素,到充分利用云的 AWS Amplify 或 Google App Engine 等功能齐全的应用程序框架,甚至是 Heroku 等 Baas/PaaS 服务提供商。解决方案。

结合我的工作经验,我发现大部分人都会默认选择托管方案来保存项目工作。但回到十年前,在所有便捷选项都不存在的情况下,开发者是如何让项目顺利上线的呢?

事实上,在那个时候,小团队甚至个人开发者都可以成功构建高流量的 Web 服务。 Marco Arment 在文章中回忆了 2010 年左右建立和运营 Tumblr 的经历,那时他基本上可以依靠自己:

我在 Tumblr 项目中的经验教会了我如何在人力和资金稀缺的早期开发阶段更便宜、更轻松、更合理地开发和托管高流量的 Web 服务。我不得不想办法降低服务器的维护需求,因为我实在没办法在管理上投入太多精力——最初几年,我们甚至没有专门的服务器管理员,所以我不得不想办法让系统具有免管理功能。

好消息是,所提到的工具和技术今天仍然可用且适用。所以我建议你改变主意——不要默认使用高度托管的服务,而是更喜欢自我管理的服务。除非有明确的理由,否则不要急于交出控制权。

服务器管理的衰落

如果每个人都和我一样,认为基础服务器维护已经是一门濒临失传的“秘术”,那么这个秘术是如何发展并逐渐衰落的?有的朋友肯定会把矛头指向大的云服务商,“他们只会想出一个傻瓜式的计划,让我们越来越傻!”这有点阴谋论,所以这不是不可能的。其实答案很简单。 AWS、GCP 和 Azure 已经打破了数十亿美元的营销预算。我们的概念怎么能经受住这样的银弹。他们的开发布道者团队强大,再加上大家都有的“货物崇拜”和急切的迭代心态,现实变成了现在这样。

在深入了解学习 Linux 管理基础知识的好处之前,我想澄清一下——这绝对不是一个非黑即白的二元命题。工程挑战的本质始终是取舍。比如在之前推荐的文章中,我们可以看到很多开发者为了适应自己的计划,自己构建硬件,比较复杂。除非你真的需要性能,否则最好不要入物理硬件的坑。选择信誉好的托管服务商,直接使用Linux VPS应该更可靠。

但不要过头,有“云是邪恶的”的想法。我知道你们有多少人看过这种文章,喜欢用棍子杀死云服务提供商。别傻了,大型云服务商在过去十年里给我们带来了实实在在的帮助和创新,这是不争的事实。总之,分清你的实际需求,比如我肯定不想建实时数据库,然后学习如何自托管MySQL。

受益于 Linux 管理知识

无论如何,现在许多开发人员都不知道如何运行自己的服务器。我们为什么要改变这个现实?以下是我认为它更重要的几个原因。

摆脱供应商锁定。如果您在 Linux VPS 上运行整个系统,则您选择将计算层商品化。如果当前服务提供商出现问题,我们可以随时将其打包并将工作负载转移到另一个平台。

无限计算。 Netlify 只能托管一个 repo,而 Lambda 只能运行一个函数。 Linux 管理确实是一件苦差事,但作为回报,我们的计算空间可以无限扩展。我们可以安装我们需要的任何软件并按照我们认为合适的方式进行设置。有时我们还可以在同一个基础架构上运行我们自己的所有应用程序,并通过避免按应用计费来节省资金。

图片[1]-Linux服务器基础管理知识-老王博客

一种永恒的基础技能。科技行业发展迅速,但在整个旅程中,我们总能找到一些永恒的基础技术。 Bash、SSH、Nginx/Apache 以及 Linux 本身。因此,毫无疑问,这些基础技能将伴随我们的整个职业生涯。在科技行业,有些技能是有用的,应该学习。无论角色如何,掌握 Bash 脚本的速度都是一件好事。相比之下,云服务技能似乎相对“便宜”——我没有别的意思,但这些技能确实很快就过时了,它们的形态总是在变化,早期版本很快就过时了。

工具的速度和乐趣。这是给我印象最深的一个。请注意,这里我区分“工具”和“服务”。锤子是一种典型的工具,我可以随心所欲地使用它,因此它成为我身体的延伸。相反,服务会反过来约束我,包围我,与我竞争主体的地位。今天的开发人员服务使用得太多了,以至于他们忘记了使用工具的感觉。 Linux 是工具,Bash 是工具,它们安静听话,对用户的唯一要求就是做出应有的贡献。并且当巧妙地使用时,它们也非常有效。所以我的理论是:学习这些工具可以提高开发人员的灵活性以及我们通过自托管释放生产潜力的能力。

如何开始

开始并不难,但我们也需要一个计划。和学习编程类似,我建议大家把想学的Linux管理员技能整理成一个项目。为了推进项目,我们自然会完成学习。管理 Linux 服务器实际上并不需要太多的编程技能。如果您已经是一名程序员,那么整个学习过程就像决定在 Linux VPS 上运行自己的软件一样简单。如果你完全不懂编程,也可以从各种具有强大技术社区背景的开源项目中进行选择。实在不了解的朋友,这里推荐Home Assistant,Pi-hole加参考物品清单。

我还建议您选择并提交一个“默认管理堆栈”,其中包括操作系统、Bash、脚本语言、网络服务器和数据存储。就像 MacOS 或 Windows 上的个人计算一样,您还需要选择特定的 Linux 发行版作为您的默认服务器操作系统。每个系统的高效运行都需要一段时间的熟悉,所以最好慎重选择并坚持下去。例如,我选择的个人操作系统是 Ubuntu——它有一个庞大的技术社区,初学者更容易上手,而且我想托管的几乎所有东西都有相应的官方 Ubuntu 支持。

至于脚本,我建议先获取 Bash。 Bash 是大多数 Linux 发行版的默认“shell”。有的朋友可能不太清楚,shell是负责运行其他程序的程序,所以玩shell层真的很重要。

Bash 是命令行终端的主要界面,它本身就是一种脚本语言。将终端命令保存在文件中以供以后使用是个好主意,这样您就可以设置一次并随时运行它们。这个好习惯不仅可以清楚地记录我们的设置选项,还可以大大提高操作自动化水平。总之,一定要学好Bash,用好脚本!还有一个我建议你做的课堂作业:尝试用一个 Bash 脚本重建整个主机。

在 Bash 中,我只想强调一个功能:here 文档。在服务器上,我们需要设置的大部分内容都是通过文本文件配置的。这里的文档允许我们在脚本文件中指定“内联文件”。大家应该明白什么是字符串字面量,这里的文档可以理解为“文件字面量”。这是设置远程 SSH 访问的示例,您也可以单击此处查看为 MySQL 创建数据库和管理员用户的另一个示例。在掌握了这里的文档之后,我从一个普通的 Bash 用户成长为一个初出茅庐的系统管理员。希望几年前我就掌握了这些知识。

Bash 历史悠久,与其他现代编程环境相比,它的许多设计都非常粗糙。例如,如果您是一名程序员,您可能理所当然地认为每种脚本语言都应该有一个字典/哈希图,对吧?但是这种关联数组直到 Bash 4 才正式出现。一些较旧的系统将 Bash 3 作为默认版本,因此除非安装了较新版本的 Bash,否则没有可用的字典。

关于 Bash 的优点,我特别同意 Google 发布的 Shell Style guide:

如果您正在编写超过 100 行的脚本,或者使用一些非直观的控制流逻辑,您应该用更结构化的语言重写它。请记住,脚本必然会变得更长,因此请尽早重写它们,这样您就可以避免在将来必须重写它们时浪费更多的时间和精力。

如果你不是全职程序员,基本掌握 Bash 就够了。但是如果你需要写更长的脚本,在选择了默认的服务器操作系统之后,接下来的问题就是选择默认的脚本语言了。

理论上,任何可以与操作系统交互的语言都可以用作脚本语言,因此大多数编程语言都可以完成工作。例如,MySQL 附带一个名为 mysql_secure_installation 的脚本。它的原始版本是用 Bash 编写的,但随着脚本的增长,它用 C++ 进行了重写。这对于项目本身来说是一个不错的选择,毕竟 MySQL 本体是用 C/C++ 编写的;但是在选择默认脚本语言时,C++ 绝对不是一个好主意。

在选择脚本语言时,我建议你优先考虑不需要编译的语言,最好有强大的技术社区支持。 Python、Ruby 和 JavaScript 都是不错的选择。我个人最终选择了 JavaScript,有两个原因:第一,它不那么难学c语言程序调试方法视频c语言程序调试方法视频,也不会花太多时间;其次,我的 Web 开发工作本身就需要掌握 JavaScript/TypeScript。如果还有其他更复杂的需求,Node 还通过 npm 提供了庞大的包库。

如果你是 iOS 开发者,虽然我也很想推荐 Swift,但它确实不擅长实现 Linux 管理。虽然 Linux 的支持越来越好,我们现在可以像使用常规脚本语言一样使用 Swift 并避免编译步骤,但 Swift 的包管理器与 NPM 相比仍有很大差距,因此在 Linux 管理方面相对薄弱。

在选择了操作系统、学习了 Bash 并指定了脚本语言(可选)之后,接下来的问题是 Webserver 和数据层。请注意,这都在服务器管理的范围内。如果你不是全职程序员,没必要踏入数据库的“大坑”:)

我选择 Nginx 作为我的默认网络服务器,但我听说 Apache 实际上也很不错。掌握网络服务器后,它可以帮助我们将流量引导到我们的应用程序。至于默认数据库,我选择了 MySQL。原因很简单,MySQL 已经足够老了,我的所有需求都是小菜一碟。

在此重申,对于刚起步的人来说,选择托管内容比选择托管工具更重要。最好让应用程序指导我们首先需要学习的内容。如果您真的不知道使用什么来托管您的第一个应用程序,那么 WordPress 始终是您不会出错的选择。虽然许多托管服务提供一键式 WordPress 安装选项,但当出现问题时,我们根本不知道如何调整设置来修复它。因此,作为初始目标,最好尝试使用单个脚本在新主​​机上安装 WordPress。

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论