本站包含联盟链接——如果你通过链接注册,我们可能获得佣金。 Affiliate links.

DigitalOcean Rocky Linux Droplet 安装配置指南 2026

DigitalOcean Rocky Linux Droplet 安装配置指南 2026

Rocky Linux 是 Red Hat 改变 CentOS 发展方向后推出的社区开发操作系统。Red Hat 将 CentOS 从 RHEL(Red Hat Enterprise Linux)的下游重建版本改为 CentOS Stream(作为上游)之后,Red Hat 企业 Linux 的 CentOS 替代品就此诞生。这一变化促使许多依赖 CentOS 进行生产工作的系统管理员寻找新的替代方案。原始 CentOS 创始人之一 Gregory Kurtzer 启动了 Rocky Linux 项目,其目标与早期 CentOS 一致:成为与 RHEL 完全二进制兼容(1:1 基础)、免费使用且不依附于任何单一公司的发行版。如今,Rocky Linux 由非营利组织 Rocky Enterprise Software Foundation(RESF)维护,其成员来自多家公司。对于那些希望在 DigitalOcean Droplet 上运行与 RHEL 二进制兼容、同时保持免费使用的系统的用户,本指南将逐步介绍从创建 Droplet 到设置基本安全配置的全过程,这些配置与 Debian/Ubuntu 系列存在明显差异。这些差异包括 dnf、firewalld 和 SELinux。

什么是 Rocky Linux — CentOS 的替代方案

Rocky Linux 在 2021 年出现,当时 Red Hat 宣布改变 CentOS 的发展方向,从 RHEL(Red Hat Enterprise Linux)的下游重建版本改为 CentOS Stream,后者作为上游存在。这一变化促使许多依赖 CentOS 进行生产工作的系统管理员寻找新的替代方案。Gregory Kurtzer 是原始 CentOS 创始人之一,他启动了 Rocky Linux 项目,目标明确:成为与 RHEL 完全二进制兼容(1:1 基础)、免费使用且不依附于任何单一公司的发行版,这与早期 CentOS 的目标相符。如今,Rocky Linux 由非营利组织 Rocky Enterprise Software Foundation(RESF)维护,该组织成员来自多家公司,为其提供支持。 Rocky Linux 与熟悉的 Ubuntu 或 Debian 发行版之间最显著的差异在于包管理器和安全模型。Rocky Linux 使用 dnf(Dandified YUM)而不是 apt,在安装完成后将 SELinux(Security-Enhanced Linux)强制设置为强制模式下的强制访问控制,而 Ubuntu 使用 AppArmor(采用不同的操作原则),并使用 firewalld 而不是 ufw 来管理防火墙。此外,Rocky Linux 遵循 RHEL 的发布周期,每个主要版本(如 9.x)获得长达 10 年的支持(5 年完全支持加 5 年维护支持),这使其更适合优先考虑长期稳定性而非频繁功能更新的工作负载。 对于考虑在 DigitalOcean Droplet 上运行 Rocky Linux 的用户,主要原因通常包括与在 RHEL 上测试过的企业软件的兼容性、团队对 CentOS/RHEL 系列的熟悉度、来自特定行业的合规要求(指定使用 RHEL 兼容操作系统),或需要运行作为 RPM 包专门分发的软件。与此同时,强调简便性或受益于 Ubuntu 庞大教程生态系统的用户可能会发现 Ubuntu 或 Debian 能够在初始设置阶段更快地满足他们的需求。

创建 Rocky Linux Droplet

综合多次测试,在 DigitalOcean 上创建 Rocky Linux Droplet 使用与创建任何其他 Droplet 类型相同的控制面板界面。首先单击创建 > Droplets,然后选择发行版选项卡,选择 Rocky Linux,并选择可用的版本。系统会显示区域选择,所有 15 个数据中心都可用,就像标准 Droplets 一样。对于泰国用户,建议使用 sgp1(新加坡)以获得最低延迟,blr1(班加罗尔)作为备选方案。 下一步涉及从基本层(共享 CPU)选择 Droplet 大小,起价为每月 $4(512 MiB RAM、1 vCPU、10GB SSD、500GiB 流量)。但是,由于 Rocky Linux 通常运行需要 SELinux 和 firewalld 以全容量运行的生产工作负载或服务,建议从至少每月 $12 的计划开始(2GiB RAM、1 vCPU、50GB SSD、2,000GiB 流量),以便为 dnf 更新和多个并发服务提供足够的余量。对于需要超过 1 vCPU 的用户,每月 $18 的计划(2GiB RAM、2 vCPU、60GB SSD)代表另一个成本效益选项。 在身份验证步骤中,始终选择 SSH 密钥而不是密码(上传现有公钥或使用 ssh-keygen -t ed25519 预先生成新密钥)。对于主机名,使用描述性名称如 rocky-web-01 以简化运行多个 Droplets 时的管理。然后单击创建 Droplet;配置通常需要约 1 分钟。 账单说明:自 2026 年 1 月 1 日起,DigitalOcean 使用按秒计费方式为 Droplets 计费,最少收费 60 秒或每次激活 $0.01,两者取其高者。这意味着即使在几秒内测试 Droplet 的创建和删除,每次也会产生最少费用。如果您经常创建和销毁 Droplets,请相应地规划测试活动。

配置 SSH 密钥和 SELinux 基础知识

如果在 Droplet 创建期间添加了 SSH 密钥,您可以立即使用 ssh root@your_droplet_ip 通过 SSH 进入机器,而无需输入密码。如果您在创建期间忘记添加密钥,请使用 ssh-copy-id root@your_droplet_ip 之后将密钥复制到 Droplet。您应该立即禁用基于密码的登录以降低暴力破解攻击的风险,方法是编辑 /etc/ssh/sshd_config,设置 PasswordAuthentication noPermitRootLogin prohibit-password,然后使用 systemctl restart sshd 重新启动服务。至关重要的是,您必须在禁用密码身份验证之前测试通过密钥成功登录,以避免将自己锁在机器外面。 Debian/Ubuntu 系列系统最明显不同的方面是 SELinux,Rocky Linux 从安装完成时就在强制模式下启用它。使用 sestatusgetenforce 检查当前状态,默认情况下应显示 Enforcing。SELinux 基于强制访问控制原则运行:它为文件、进程和网络端口分配上下文(标签),然后仅允许策略明确允许的操作。这与 Ubuntu 的 AppArmor 不同,AppArmor 基于路径运行。 对于不熟悉这种方法的用户,最常见的问题是服务尽管配置正确但仍无法运行 — 例如,Nginx 无法从 /var/www 以外的目录读取文件,因为文件上下文与策略允许的不匹配。正确的修复涉及使用 semanage fcontextrestorecon 调整上下文,而不是系统范围内禁用 SELinux。例如:semanage fcontext -a -t httpd_sys_content_t "/data/www(/.*)?" 后跟 restorecon -Rv /data/www。要为服务开放非标准端口,请使用 semanage port -a -t http_port_t -p tcp 8080。要检查 SELinux 已阻止的内容,请运行 ausearch -m avc -ts recentjournalctl -t setroubleshoot

创建用户和配置 sudo

直接以 root 身份运行所有内容会带来安全风险。Droplet 创建后的标准做法是为日常使用创建新用户并授予 sudo 权限。在 Rocky Linux 上,使用 useradd 命令而不是 Ubuntu 使用的交互式 adduser(Rocky 仅将 adduser 作为 useradd 的符号链接,不包含 Debian 风格的提示)。典型命令是 useradd -m -G wheel deploy,其中 -m 自动创建主目录,-G wheel 将用户添加到 wheel 组 — RHEL 系列用于授予 sudo 权限的组(等同于 Ubuntu 上的 sudo 组)。之后使用 passwd deploy 设置密码。 Rocky Linux 的默认 wheel 组可能不会自动启用 sudo 权限;您必须使用 visudo 验证并编辑 sudoers 文件(绝不使用文本编辑器直接编辑 /etc/sudoers,因为语法错误会破坏系统范围内的 sudo)。查找 %wheel ALL=(ALL) ALL 行,如果仍被注释则取消注释。然后通过创建 ~deploy/.ssh 目录、从 root 复制 authorized_keys 文件,并使用 chmod 700 ~deploy/.sshchmod 600 ~deploy/.ssh/authorized_keys 设置正确的权限,加上 chown -R deploy:deploy ~deploy/.ssh,将 SSH 公钥复制到新用户。 关闭 root SSH 访问前,测试使用新用户登录并运行 sudo -l 以确认 sudo 权限正常工作。还要尝试运行需要提升权限的命令,如 sudo dnf update,以确保设置后的系统管理不需要直接 root 登录。

要点总结: useradd -m -G wheel deploy 创建带有主目录和 wheel 组成员资格的用户

使用 firewalld 开放防火墙

用户经常问到的一点是:Rocky Linux 使用 firewalld 作为其默认防火墙管理器,而不是 Ubuntu 使用的 ufw。firewalld 使用区域运行,每个区域有其自己的规则集,接口或源附加到单个区域。标准 Droplets 默认为 public 区域。首先,使用 systemctl status firewalld 验证服务状态,使用 firewall-cmd --get-active-zones 查看活动区域。 开放标准服务比直接开放端口更简单,因为 firewalld 提供现成的服务定义。使用 firewall-cmd --permanent --add-service=ssh 开放 SSH,使用 firewall-cmd --permanent --add-service=httpfirewall-cmd --permanent --add-service=https 开放网络流量。对于没有预构建服务定义的端口 — 如在端口 3000 上运行的应用服务器 — 使用 firewall-cmd --permanent --add-port=3000/tcp。至关重要的是,每个使用 --permanent 的命令在您运行 firewall-cmd --reload 以将新规则加载到运行时配置中之前保持无效。使用 firewall-cmd --list-all 验证所有结果。 严重警告:在首次重新加载或启用 firewalld 之前,始终开放 SSH 端口。意外关闭 SSH 访问意味着您无法再通过 SSH 登录(您将依赖 DO Console 通过控制面板 Web 界面进行恢复)。DigitalOcean 还提供在流量到达 Droplet 之前的网络级别上运行的 Cloud Firewall,无额外成本。将其与 firewalld 结合提供深层防御;设置 Cloud Firewall 规则以匹配您实际开放的服务,以防止混淆流量被阻止的位置。

  1. 使用 firewall-cmd --get-active-zones 检查活动区域(通常为 public)
  2. 使用 firewall-cmd --permanent --add-service=ssh/http/https 开放标准服务
  3. 使用 --add-port 开放非标准端口,例如 3000/tcp
  4. 在使用 --permanent 添加规则后始终运行 firewall-cmd --reload
  5. 使用 DigitalOcean Cloud Firewall(免费)与 firewalld 结合以实现深层防御

使用 dnf 更新系统

基本安全设置完成后,下一步是使用 dnf(Dandified YUM)更新系统,dnf 是 Rocky Linux 的主要包管理器,取代了 apt。要运行的第一个命令是 sudo dnf update -y 以更新所有包,包括最新的安全补丁。与 apt 不同(后者将更新步骤(获取包列表)与升级步骤(安装包)分开),dnf update 在单个命令中执行两者。更新完成后,运行 sudo dnf autoremove 以清理系统中不必要的包。 某些包在 RHEL/Rocky 的标准存储库中不存在;首先使用 sudo dnf install epel-release -y 启用 EPEL(企业 Linux 的额外包),然后正常 dnf install 所需的包。对于具有多个版本的软件 — 如 PostgreSQL 或 Node.js — Rocky Linux 使用 dnf module 系统。使用 dnf module list postgresql 检查可用的流,选择所需的流,然后安装。 与更新一起进行的其他基本配置包括设置时区和主机名。使用 sudo timedatectl set-timezone Asia/Bangkok 设置时区,使用 sudo hostnamectl set-hostname rocky-web-01 设置主机名以匹配 Droplet 创建期间设置的名称。最后,对于需要自动安全补丁而无需每次手动 SSH 干预的系统,通过 sudo dnf install dnf-automatic 安装 dnf-automatic,然后使用 sudo systemctl enable --now dnf-automatic.timer 启用其计时器。配置 /etc/dnf/automatic.conf 以仅自动应用安全更新;可能影响兼容性的一般更新应保持手动并首先在暂存环境中测试,特别是在生产服务器上。

常见错误和修复方法

从 Ubuntu/Debian 过渡来的用户一个主要错误是习惯性地运行 aptapt-get,立即产生"命令未找到"错误,因为 Rocky 不附带 apt。您必须重新训练肌肉记忆每次都使用 dnf。类似地,运行 adduser username 期望 Debian 的交互式提示将只会在没有任何提示的情况下创建用户,因为在 Rocky 上它仅是 useradd 的符号链接。 下一个频繁的问题是服务尽管配置正确且 firewalld 端口开放但仍拒绝运行,通常是因为 SELinux 在某些日志中无声地阻止它而没有清晰的错误消息。每当服务在没有明显原因的情况下出现故障时,始终检查 journalctl -t setroubleshootausearch -m avc -ts recent,而不是急于使用 setenforce 0 系统范围内禁用 SELinux。这修复了立即症状但使系统永久易受攻击。 另一个频繁的错误是在验证 SSH 密钥登录有效之前在 sshd_config 中禁用 PasswordAuthentication,将自己锁在机器外面,除了通过 DO Console(比标准 SSH 慢得多)之外别无他法。在关闭原始访问方法之前,在另一个终端窗口中保持打开状态测试使用新用户/密钥登录。 最后,忘记在使用 --permanent 添加规则后运行 firewall-cmd --reload 会使规则看起来处于活动状态(firewall-cmd 报告成功),但它们实际上不会生效直到 reload 运行。另外,dnf update 有时会因为陈旧的元数据缓存而挂起;使用 dnf clean all 后跟 dnf makecache 在重试更新之前修复这一点。

最佳实践

一旦您的 Rocky Linux Droplet 准备好使用,几个实践帮助保持系统的长期安全和可维护性。首先,始终将 SELinux 保持在 Enforcing 模式;绝不永久禁用它或将其切换到 Permissive,因为它是一个关键的保护层,限制了进程被破坏时的损害范围。如果必要进行策略调整,使用 audit2allow 为特定问题生成自定义模块,而不是直接禁用系统。 其次,安装 fail2ban 防御 SSH 暴力破解攻击。fail2ban 位于 EPEL 存储库中,启用 epel-release 后通过 dnf install fail2ban 安装。它通过 fail2ban-firewalld 操作直接与 firewalld 一起工作。第三,定期为持有重要数据的 Droplets 创建 Droplet 快照;快照费用为每月每 GiB $0.06 — 远低于丢失数据的成本 — 如果需要扩展或恢复,可以快速从模板创建 Droplet。 第四,启用 DigitalOcean 监控,这是一个免费的内置功能,提供实时 CPU、RAM、磁盘和带宽视图,以及警告策略设置以在资源接近容量时向您发送邮件。这在最终用户注意到问题之前捕捉问题。第五,将补丁管理分为两层:让安全更新通过 dnf-automatic 自动运行,但保持主要/次要版本升级手动并首先进行暂存测试,这对 RHEL 系列系统尤其重要,其中一次跳过多个次要版本的风险比典型发行版高。 最后,将 firewalld 规则和任何 SELinux 策略自定义文档分开 — 理想情况下作为脚本或基础设施即代码 — 以便您的团队可以快速使用匹配配置配置新 Droplets,而不是依赖一个人的手动记忆。

领取 $200 免费额度 →

常见问题(FAQ)

Rocky Linux 与 CentOS Stream 有何不同?
Rocky Linux 是 RHEL 的下游重建版本,具有二进制兼容的 1:1 奇偶校验,强调与 RHEL 稳定发布相匹配的稳定性。相比之下,CentOS Stream 是 RHEL 的上游,变化更快,稳定性更低 — 更适合开发/测试而不是生产。
如果遇到服务故障,我需要禁用 SELinux 吗?
不,不建议永久禁用。首先使用 journalctl -t setroubleshoot 或 ausearch -m avc -ts recent 检查日志,然后使用 semanage fcontext 和 restorecon 修复上下文。系统范围内禁用 SELinux 会降低 Droplet 的整体安全性。
对于 Rocky Linux,我应该选择什么大小的 Droplet?
从至少基本计划 2GiB RAM/1vCPU/50GB SSD(每月 $12)或更高开始,为 dnf 更新和多个并发服务提供足够的余量。512MiB 每月 $4 的计划通常对生产 Rocky Linux 工作负载来说太小。
我可以使用 DigitalOcean 的 Cloud Firewall 而不是 firewalld 并跳过 firewalld 设置吗?
将两者一起使用以实现深层防御。DigitalOcean 的 Cloud Firewall 是免费的,在网络级别运行(在流量到达 Droplet 之前),而 firewalld 在操作系统级别运行。这种分层保护可防止任一级别的配置错误。
什么是 EPEL,安装它是必须的吗?
EPEL(企业 Linux 的额外包)是提供 RHEL/Rocky 标准存储库中不存在的包的社区存储库。如果您需要 fail2ban 或基础存储库中缺少的其他工具等包,请安装它,使用 dnf install epel-release。
我通过禁用密码身份验证意外将自己锁在 SSH 外。我该怎么办?
使用来自 Droplet 控制面板的 DO Console(恢复控制台)通过浏览器访问机器而无需 SSH,然后编辑 /etc/ssh/sshd_config 以恢复密码身份验证或在重启 sshd 前添加正确的 SSH 密钥。