在 Raspberry Pi 上搭建最小化服务器

不要轻易放弃你的旧 Raspberry Pi!这份循序渐进的指南展示了我是如何设置我的 Raspberry Pi,使用最简配置来节省宝贵的系统资源。
132 位读者喜欢这篇文章。
Raspberry Pi used at SUNY Albany

Opensource.com

最近,我的 Raspberry Pi 中的 microSD(安全数字)卡停止工作了。它已经作为服务器持续使用了将近两年,这提供了一个重新开始并纠正一些问题的绝佳机会。在其初始安装之后,它开始遇到磁盘问题,并且官方 Raspberry Pi 操作系统 (OS) 进行了重大更新(并从 Raspbian 更名为 Raspberry Pi OS)。所以我购买了一张新的 microSD 卡并开始重建。

虽然这款 Raspberry Pi 3 Model B 不是最新的硬件,但它仍然足以运行一个最小化服务器来提供各种服务。我认为我的原始安装使用了完整的操作系统镜像,其中包含图形用户界面和许多其他对于我的需求来说不必要的软件包。

这份循序渐进的指南展示了我是如何设置我的 Raspberry Pi,使用最简配置来节省宝贵的系统资源。

开始入门

首先,为 Pi 创建一个新的操作系统驱动器。这需要两样东西:一个操作系统镜像文件和一个 microSD 卡。

下载 Raspberry Pi OS 镜像文件

虽然有几种操作系统可供选择,但我选择坚持使用官方支持的操作系统。

第一步是从官方 Raspberry Pi OS 站点下载最新的操作系统镜像文件到一台可以用来写入 microSD 卡的计算机上。提供了三个不同的镜像,我选择了 Raspberry Pi OS Lite。它是最小的操作系统,仅包含基本操作系统所需的基本文件,因此它将消耗最少的磁盘空间和系统 RAM。(当我下载操作系统时,发布日期是 2020 年 8 月 20 日,但此后已更新。我不期望有任何重大差异,但与往常一样,我建议阅读发行说明。)

将操作系统写入 microSD 卡

第二步是将下载的操作系统镜像文件写入 microSD 卡。我的卡之前使用过,当我将其插入我的 Linux 桌面时,它自动挂载了其两个现有分区。我无法写入镜像,直到我卸载了这些分区。为此,我必须使用 lsblk 命令确定它们的路径,该命令将设备识别为 /dev/mmcblk0

# lsblk -p

然后我使用 umount 命令卸载了分区

# umount /dev/mmcblk0p2
# umount /dev/mmcblk0p1

一旦分区被卸载,将镜像文件写入 microSD 卡。虽然有很多图形化的镜像写入工具可用,但我使用了古老的 dd 命令

# dd bs=4M if=/home/alan/Downloads/raspios/2020-08-20-raspios-buster-armhf-lite.img of=/dev/mmcblk0 status=progress conv=fsync

启动 Pi

你只需要一个显示器、键盘和电源适配器即可访问 Raspberry Pi。我还有一个用于网络连接的以太网电缆,我更喜欢有线连接而不是无线连接——特别是对于专用服务器。

插入 microSD 卡并打开 Pi 的电源。一旦启动,使用默认凭据登录:用户名为 pi,密码为 raspberry

配置操作系统

采取以下步骤来尽可能地最小化你的安装、磁盘空间和内存使用量。我建议花时间研究每个配置,使其尽可能正确。通常有几种方法可以应用配置,并且配置文件和指令可能会被弃用。始终查看产品的文档,以确保你没有应用过时的配置。

运行 raspi-config

Raspberry Pi OS 中的主要配置程序称为 raspi-config。在登录后立即运行它

# raspi-config

Raspberry Pi config main window

它提供了一个选项来扩展根文件系统以使用 microSD 卡上的所有可用空间。选择此选项后,重启并重新登录。

使用 df 命令验证卡片的全部容量是否正在被使用

# df -h

如果你需要配置其他选项,请再次运行 raspi-config。其中一些选项会根据你的需求或偏好而有所不同。浏览所有选项以确保你不会遗漏任何内容。我建议进行以下更改以获得最佳性能。(我将跳过我没有进行任何更改的部分。)

  • 系统选项: 你可以设置主机名,最好使用完全限定域名 (FQDN)。你也可以在这里更改你的密码,这始终是强烈推荐的。
  • 接口选项: 启用 SSH。
  • 性能选项: 将 GPU 内存减少到最低设置(16MB)。
  • 本地化选项: 选择你的时区、位置和键盘类型。
  • 高级选项: 此部分包含“扩展文件系统”选项,用于扩展根文件系统。如果你在上面没有这样做,请务必在此处执行此操作,以便你可以访问 microSD 卡上的所有可用存储空间。
  • 更新: 进入“更新”部分会立即检查 raspi-config 工具的更新。如果有更新可用,它将被下载并应用。否则,raspi-config 将在几秒钟后重新启动。

在 raspi-config 中完成这些配置后,选择“完成”退出该工具。

手动配置

我建议进行其他几项更改。它们都是手动更改,需要编辑某些配置文件。

配置静态 IP

通常,最好为服务器配置静态 IP 地址。要配置 IP 和你的默认网关(路由器)以及域名服务 (DNS) 地址,首先使用 ip 命令识别网络接口设备

# ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
    link/ether b8:27:eb:48:3f:46 brd ff:ff:ff:ff:ff:ff

你还需要知道你的默认网关和一个或多个 DNS 服务器的 IP 地址。将此信息添加到文件 /etc/dhcpcd.conf 中(我强烈建议在进行更改之前备份此文件

# cd /etc
# cp -a dhcpcd.conf dhcpcd.conf.original

如下所示编辑文件

# vi dhcpcd.conf

# static IP configuration:
interface eth0
static ip_address=192.168.1.5/24
static routers=192.168.1.1
static domain_name_servers=192.168.1.3 192.168.1.4

禁用 IPv6

除非你特别需要使用 IPv6,否则你可能更愿意禁用它。通过创建两个新文件来执行此操作,这两个文件包含一个单行指令,指示 Linux 内核不要使用 IPv6。

首先,创建文件 /etc/sysctl.d/disable-ipv6.conf,内容为

net.ipv6.conf.all.disable_ipv6 = 1:

# cd /etc/sysctl.d
# echo "net.ipv6.conf.all.disable_ipv6 = 1" > disable-ipv6.conf

然后创建文件 /etc/modprobe.d/blacklist-ipv6.conf,内容为 blacklist ipv6

# cd /etc/modprobe.d
# echo "blacklist ipv6" > blacklist-ipv6.conf

禁用 WiFi、蓝牙和音频

我的服务器的特定用途不需要蓝牙或音频。此外,由于它通过以太网连接,因此不会使用无线网络 (WiFi)。除非你计划使用它们,否则请按照以下步骤禁用它们。

对文件 /boot/config.txt 进行以下更改(再次,我建议备份此文件

# cd /boot
# cp -a config.txt config.txt.original

将以下两个指令添加到文件底部以禁用蓝牙和 WiFi

  • dtoverlay=disable-bt
  • dtoverlay=disable-wifi

这些 echo 命令将完成这项工作

# cd /boot
# echo "dtoverlay=disable-bt" >> config.txt
# echo "dtoverlay=disable-wifi" >> config.txt

要禁用音频,请将参数 dtparam=audio 更改为 off。你可以使用简短的 sed 命令来完成此操作

# sed -i '/dtparam=audio/c dtparam=audio=off' config.txt

最后一步是禁用 WiFi 服务。使用 systemctl mask 命令

systemctl mask wpa_supplicant.service

如果你不需要,你可以禁用其他几个服务

  • 禁用调制解调器服务
    systemctl disable hciuart
  • 禁用 Avahi-daemon
    systemctl disable avahi-daemon.service

最后步骤

  • 检查你的内存使用情况
    # free -h

    我感到震惊:我的操作系统仅使用 30MB 的 RAM。

  • 创建个人帐户: 建议为任何将登录此服务器的个人创建用户帐户。你可以将他们分配到 sudo 组,以允许他们发出管理命令。例如,要为名为 George 的用户创建一个帐户
    # adduser george
    # usermod -a -G adm,sudo,users george
  • 获取更新: 这是一个重要的步骤。应用更新以获取 Raspberry Pi OS 的最新修复程序
    # apt update
    # apt full-upgrade
  • 重启: 重启你的新服务器是个好主意
    # systemctl reboot
  • 安装 Cockpit: 你可以在 Raspberry Pi OS 上安装 Cockpit,也称为 Linux Web 控制台。它为远程管理和监控你的服务器提供了一个基于 HTML 的界面。我最近写了一篇关于 Cockpit 入门的文章。使用以下命令安装它:
    # apt install cockpit

现在我的 Raspberry Pi 已准备好托管服务器。我可以使用它来搭建 Web 服务器VPN 服务器、游戏服务器(例如 Minetest),或者(正如我所做的那样)基于 Pi-Hole 的广告拦截器

让旧硬件焕发生机

无论你拥有什么硬件,仔细地最小化和控制你的操作系统和软件包都可以保持你的资源使用率较低,从而最大限度地利用它。通过减少试图利用漏洞的潜在恶意行为者可用的服务和软件包数量,这也有助于提高安全性。

因此,在你放弃旧硬件之前,请考虑所有可以继续使用它的可能性。

接下来阅读什么
标签
Alan Formy-Duval Opensource.com Correspondent
Alan 拥有 20 年的 IT 经验,主要在政府和金融部门。他最初是一名增值经销商,之后转入系统工程领域。Alan 的背景是高可用集群应用程序。他在 Oracle Press/McGraw Hill 出版的《Oracle Solaris 11 系统管理》一书中撰写了“用户和组”以及“Apache 和 Web 堆栈”章节。

3 条评论

你可能有兴趣阅读我在我的个人博客上写的一系列关于设置 Raspberry Pi 作为基本网络服务(DHCP 和 DNS)服务器的文章

第 1 部分(简介):https://shaminospage.blogspot.com/2020/08/using-raspberry-pi-for-basic-network.html
第 2 部分 (DHCP):https://shaminospage.blogspot.com/2020/08/using-raspberry-pi-for-basic-network_11.html
第 3 部分(通过 DHCP 的静态 IP):https://shaminospage.blogspot.com/2020/08/using-raspberry-pi-for-basic-network_14.html
第 4 部分 (DNS):https://shaminospage.blogspot.com/2020/09/using-raspberry-pi-for-basic-network.html

恰逢其时。我正在设置我的旧 Raspberry Pi Model B 作为 Web 服务器,以便在台式机或笔记本电脑上处理一些事情。

使用旧 Raspberry Pi 的好处在于,它会提醒你仔细考虑你的流程,因为如果你不小心,最终会坐在那里等待它完成任务,然后才能进行下一步。

当你提供调整或任何旨在提高效率或速度的更改时,你就会注意到它是否真的有效。在现代系统上尝试这样做,你无法确定是否节省了那几毫秒。

我已经在这个网站阅读文章并从中学习了一段时间。但我今天不得不加入,以便我可以对这篇文章说“太棒了”。大家继续努力。

© . All rights reserved.