ARTICLE DETAIL

资讯详情

深耕网站SEO优化与搜索引擎排名提升的一线实战洞察。

CentOS 9服务器从零部署到生产环境配置全指南

CentOS 9服务器从零部署到生产环境配置全指南 1. 项目概述为什么选择CentOS 9作为你的服务器基石如果你正在寻找一个稳定、安全且拥有长期支持的企业级Linux发行版来搭建你的生产环境那么CentOS Stream 9通常我们简称为CentOS 9绝对是一个绕不开的选项。尽管它已经从传统的“下游重建版”转变为RHEL的“上游开发版”但这恰恰意味着你能更早地接触到最新的、经过红帽严格测试的技术栈对于追求前沿稳定性的开发者和运维来说这反而成了一种优势。我最近刚在一台新服务器上完整部署了一套基于CentOS 9的开发环境从系统安装到基础服务配置踩过一些坑也总结了不少让系统“开箱即用”的顺畅技巧。这篇文章我就以一个过来人的身份带你走一遍从零开始安装和配置CentOS 9的全过程不仅仅是把系统跑起来更重要的是把它配置成一个高效、安全、便于后续开发的坚实平台。无论你是Linux新手还是有一定经验想了解CentOS 9新特性的朋友这篇手把手的实录都能给你提供直接的参考。2. 安装前的关键决策与准备工作在真正按下安装按钮之前花点时间做好规划和准备能避免后续很多不必要的麻烦。这一步往往被新手忽略但却是老手们格外重视的环节。2.1 镜像获取与启动介质制作首先你需要从官方或可靠的镜像站获取CentOS Stream 9的ISO镜像文件。直接访问CentOS官方站点即可找到下载链接选择适合你硬件架构的版本通常是x86_64。这里有个小经验如果你计划在物理服务器上安装建议下载“DVD ISO”或“Everything ISO”它们包含了大量的基础软件包在无网络或网络受限的环境下安装会非常方便。如果是在虚拟机里测试学习“Minimal ISO”就足够了。获取镜像后你需要将其制作成启动介质。对于物理服务器通常使用Rufus、balenaEtcher等工具将ISO刻录到U盘。关键点在于在Rufus中分区类型建议选择“GPT”目标系统类型选择“UEFI (非CSM)”这能更好地支持新硬件。对于虚拟机如VMware Workstation或VirtualBox则简单得多新建虚拟机时直接指定ISO文件路径即可。2.2 硬件与分区规划安装前心里要对服务器的硬件有个数。特别是内存和磁盘空间。对于最小化安装1GB内存和10GB磁盘空间勉强够用但如果你想顺畅地运行图形界面或部署应用我建议至少分配2GB内存和20GB磁盘空间。生产环境则根据实际应用需求上不封顶。分区方案是另一个核心决策点。对于新手直接使用安装程序提供的“自动配置分区”是最安全省心的。但对于有经验的管理员手动分区能带来更好的性能和灵活性。一个经典的服务器手动分区方案如下/boot (约1GB)存放系统内核和启动文件。使用ext4文件系统即可。/ (根目录20-50GB)存放系统核心文件和应用程序。同样使用ext4或xfsCentOS 9默认。/home (视情况而定)存放用户数据。如果服务器是多用户环境可以独立分区并分配较大空间。swap (交换分区)传统经验是物理内存的1-2倍但在如今内存动辄几十GB的时代这个规则已不绝对。对于内存大于8GB的服务器分配4-8GB的swap通常足够如果内存非常大如64GB以上甚至可以完全不设swap或者只设一个小的swap文件以备不时之需。注意在虚拟机安装时如果你选择了“自动配置分区”安装程序可能会创建一个很大的/boot/efi分区约600MB和一个biosboot分区约1MB这是为UEFI启动模式准备的属于正常情况无需担心。2.3 安装模式选择图形化还是最小化CentOS 9安装程序会让你选择“带GUI的服务器”或“最小安装”。我的个人建议是对于服务器一律选择“最小安装”。“最小安装”只安装最核心的系统包没有图形界面系统极其纯净、资源占用少、受攻击面小。所有你需要的工具都可以后续通过dnf命令按需安装。通过SSH远程管理才是服务器运维的常态。图形界面GUI不仅消耗大量内存和CPU资源还会引入不必要的服务和潜在的安全漏洞。记住服务器的核心价值是稳定运行服务而不是提供一个桌面环境。3. 系统安装过程步步解析假设你已经做好了启动介质并启动了安装程序下面我们进入图形化安装界面。整个过程是向导式的但有几个页面需要特别关注。3.1 语言、时区与软件选择安装界面首先让你选择语言这个选择主要影响安装过程本身的提示语言系统安装后的语言环境可以再改。我通常直接选择“English (United States)”保持一致性。接下来是关键的一步“安装目的地”。也就是磁盘分区。如果你选择手动分区点击进入后会看到你的磁盘。点击“自定义”然后按我们之前规划的方案点击“”号逐个创建挂载点如/boot,/,/home等设置期望的大小和文件系统类型建议根分区使用XFS它是CentOS/RHEL的默认和推荐文件系统在处理大文件时性能更优。然后配置“网络和主机名”。务必在这里就打开以太网连接点击进入找到你的网卡通常是ens192或eth0将右上角的开关拨到“ON”。这样系统在安装过程中就能连接网络为后续软件包安装和更新打下基础。同时在下方设置好你的主机名例如server01.yourdomain.com。“软件选择”页面正如前文所述请果断选择“最小安装”。下方的附加环境暂时一个都不要勾选。3.2 根密码与用户创建在“Root密码”页面为root管理员账户设置一个强密码。请务必记录并妥善保管。虽然最佳实践是禁用root的SSH登录而使用普通用户sudo但安装阶段root密码是必须的。我强烈建议在“用户创建”页面创建一个用于日常管理的普通用户。例如创建一个用户名为admin的用户并勾选“将此用户设为管理员”这相当于将其加入wheel组拥有sudo权限。同时为这个用户设置一个强密码。这样做的好处是你以后可以通过admin用户登录使用sudo执行特权命令既安全又方便审计。完成所有设置后点击“开始安装”。安装程序会格式化磁盘、复制文件、安装软件包。这个过程取决于你的硬件速度和所选软件包数量一般需要10到30分钟。安装完成后点击“重启系统”。重启后你会看到命令行登录界面。用你刚才创建的普通用户如admin或root登录恭喜你一个最精简的CentOS 9系统已经运行起来了。4. 首次登录后的必备基础配置系统安装完成只是第一步。一个“裸”的系统离生产就绪还差得远。接下来的一系列配置才是让这台服务器变得好用、安全的关键。4.1 网络配置静态IP告别动态获取安装时我们只是启用了网络获取的是DHCP分配的动态IP。对于服务器来说一个固定的静态IP是必须的。CentOS 9使用NetworkManager和nmcli命令进行网络管理这是与老版本使用network-scripts一个很大的不同。首先查看当前的网络连接名nmcli connection show通常你会看到一个名为“有线连接 1”或类似ens192的连接。记住它的名字比如ens192。接下来编辑这个连接的配置将其设置为静态IP。假设我们要设置IP为192.168.1.100/24网关为192.168.1.1DNS服务器为8.8.8.8和114.114.114.114sudo nmcli connection modify ens192 ipv4.method manual ipv4.addresses 192.168.1.100/24 ipv4.gateway 192.168.1.1 ipv4.dns 8.8.8.8 114.114.114.114这条命令的意思是将连接ens192的IPv4方法改为手动设置地址、网关和DNS。然后重启网络连接使配置生效sudo nmcli connection up ens192最后验证一下ip addr show ens192 ping -c 4 8.8.8.8你应该能看到配置的静态IP并且能够ping通外网。4.2 系统更新与基础工具安装新系统第一件事就是更新所有软件包到最新版本以获取安全补丁和错误修复。CentOS 9使用dnf作为包管理器可以看作是yum的下一代。sudo dnf update -y这个-y参数表示自动回答“yes”省去确认环节。更新过程可能会花费一些时间。更新完成后安装一些最常用、几乎离不开的工具集sudo dnf install -y vim wget curl net-tools bash-completion epel-releasevim比默认的vi更强大的文本编辑器。wget/curl命令行下载工具。net-tools包含ifconfig,netstat等传统网络工具虽然ip命令是未来但很多脚本和习惯还在用ifconfig。bash-completion为bash shell提供命令自动补全功能极大提升效率。epel-release安装EPELExtra Packages for Enterprise Linux仓库。这是一个由Fedora社区维护的高质量附加软件包仓库里面有大量官方仓库没有的实用软件如htop,ncdu等。安装它是后续丰富软件生态的基础。安装完EPEL仓库后可以再安装两个神器sudo dnf install -y htop ncduhtop一个交互式的进程查看器比top更直观、功能更强。ncdu一个磁盘使用分析器可以快速找出哪个目录占用了大量空间。4.3 配置SSH服务增强安全默认的SSH配置虽然能用但不够安全。我们需要修改其配置文件。sudo vim /etc/ssh/sshd_config找到并修改以下几行如果行首有#注释请删除#以启用该配置Port 2222 # 将默认的22端口改为一个非标准端口能减少大量自动化扫描攻击 PermitRootLogin no # 禁止root用户直接通过SSH登录强制使用普通用户sudo PasswordAuthentication yes # 初期可以保持为yes方便密码登录。后期配置密钥后可以改为no PubkeyAuthentication yes # 启用公钥认证修改端口后务必记得更新系统的防火墙规则如果防火墙是开启的sudo firewall-cmd --permanent --add-port2222/tcp sudo firewall-cmd --reload然后重启SSH服务sudo systemctl restart sshd重要在关闭当前SSH连接之前请先打开一个新的终端窗口用新端口ssh -p 2222 adminyour_server_ip测试是否能成功连接。确认无误后再关闭原来的连接。这是防止错误配置把自己锁在服务器外面的标准操作。5. 开发环境核心组件安装实录基础系统配置妥当后我们就可以根据需求安装各种开发环境了。以下是我在部署Web应用时最常安装的几个组件。5.1 安装与配置Python 3CentOS 9默认已经安装了Python 3.9但可能不是最新版。你可以先查看版本python3 --version如果需要安装更新的版本例如Python 3.11由于官方仓库版本可能较旧我们可以通过编译安装或使用第三方仓库。这里介绍一种相对简单的方法使用dnf安装python39或python311模块如果仓库提供。# 首先搜索可用的Python模块 sudo dnf module list python* # 假设我们看到有python39和python311 sudo dnf install -y python311安装后你可能需要调整系统默认的python3命令指向新版本。一个更干净的做法是使用alternatives系统或直接使用python3.11命令。接下来安装Python的包管理工具pipsudo dnf install -y python311-pip然后升级pip并安装虚拟环境工具virtualenv这是管理项目依赖的黄金标准sudo pip3.11 install --upgrade pip sudo pip3.11 install virtualenv实操心得对于生产服务器我强烈建议每个应用都使用独立的虚拟环境。这样应用之间的依赖不会冲突部署和迁移也干净利落。例如为你的项目myapp创建环境virtualenv /opt/myapp/venv然后通过source /opt/myapp/venv/bin/activate进入该环境安装依赖。5.2 安装与配置Node.jsNode.js在官方仓库中的版本可能也比较旧。我们可以从NodeSource这个第三方仓库安装最新的LTS版本。# 安装NodeSource仓库脚本以Node.js 18.x LTS为例 curl -fsSL https://rpm.nodesource.com/setup_18.x | sudo bash - # 然后安装Node.js sudo dnf install -y nodejs安装完成后验证node --version npm --versionNode.js自带的npm是社区标准的包管理器但对于大型项目你可能还想安装yarn或pnpmsudo npm install -g yarn5.3 安装与配置Java (OpenJDK)安装Java环境非常简单CentOS 9的AppStream仓库提供了多个版本的OpenJDK。# 搜索可用的JDK版本 sudo dnf search openjdk # 例如安装最新的OpenJDK 21长期支持版本 sudo dnf install -y java-21-openjdk-devel安装后检查版本并设置默认的Java版本如果系统中有多个Javajava -version sudo alternatives --config java # 如果存在多个用此命令选择通常你还需要设置JAVA_HOME环境变量。找到Java的安装路径dirname $(dirname $(readlink -f $(which java)))假设输出是/usr/lib/jvm/java-21-openjdk那么将其添加到/etc/profile或用户家目录的.bashrc中echo export JAVA_HOME/usr/lib/jvm/java-21-openjdk | sudo tee -a /etc/profile.d/java.sh echo export PATH$JAVA_HOME/bin:$PATH | sudo tee -a /etc/profile.d/java.sh source /etc/profile.d/java.sh5.4 安装与配置GitGit是版本控制的必备工具安装非常简单sudo dnf install -y git安装后进行全局配置这在提交代码时很重要git config --global user.name Your Name git config --global user.email your.emailexample.com # 让Git输出带颜色更易读 git config --global color.ui auto # 设置默认分支名为main git config --global init.defaultBranch main6. 数据库与Web服务器安装配置一个完整的后端环境离不开数据库和Web服务器。这里以最流行的MySQL和Nginx为例。6.1 安装与配置MySQL 8.0CentOS 9的AppStream仓库提供了MySQL 8.0。直接安装即可sudo dnf install -y mysql-server安装完成后启动MySQL服务并设置开机自启sudo systemctl start mysqld sudo systemctl enable mysqldMySQL 8.0在首次启动时会自动为root用户生成一个临时密码。这个密码记录在MySQL的错误日志中。查看日志获取密码sudo grep temporary password /var/log/mysqld.log你会看到一行类似[Note] [MY-010454] [Server] A temporary password is generated for rootlocalhost: 临时密码的输出。复制这个临时密码。接下来运行安全安装脚本它会引导你更改root密码、移除匿名用户、禁止root远程登录等sudo mysql_secure_installation按照提示操作输入刚才找到的临时密码设置新的强密码移除匿名用户选Y禁止root远程登录选Y生产环境强烈建议移除测试数据库选Y最后重新加载权限表选Y。完成后你就可以用新密码登录MySQL了mysql -u root -p6.2 安装与配置NginxNginx在EPEL仓库中。我们已经安装了epel-release所以可以直接安装sudo dnf install -y nginx启动Nginx并设置开机自启sudo systemctl start nginx sudo systemctl enable nginx如果系统防火墙firewalld是开启的需要放行HTTP(80)和HTTPS(443)端口sudo firewall-cmd --permanent --add-servicehttp sudo firewall-cmd --permanent --add-servicehttps sudo firewall-cmd --reload现在打开浏览器访问你的服务器IP地址应该能看到Nginx的默认欢迎页面。Nginx的主要配置文件在/etc/nginx/nginx.conf站点配置文件通常放在/etc/nginx/conf.d/目录下以.conf结尾。例如为你的应用创建一个配置文件sudo vim /etc/nginx/conf.d/myapp.conf一个简单的反向代理配置示例如下server { listen 80; server_name your_domain.com; location / { proxy_pass http://localhost:3000; # 假设你的Node.js应用跑在3000端口 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }每次修改配置后需要测试配置语法并重载Nginxsudo nginx -t # 测试配置看到syntax is ok和test is successful才算通过 sudo systemctl reload nginx # 平滑重载配置不影响现有连接7. 运维效率工具与系统调优系统能跑起来之后我们还需要一些工具来监控它、优化它让运维工作更轻松。7.1 防火墙管理firewalld基础CentOS 9默认使用firewalld作为防火墙前端。它的核心概念是“区域”和“服务”。前面我们已经用过了firewall-cmd命令。查看当前区域和规则sudo firewall-cmd --list-all永久添加一个端口sudo firewall-cmd --permanent --add-port8080/tcp永久移除一个服务sudo firewall-cmd --permanent --remove-servicehttp重载防火墙使永久规则生效sudo firewall-cmd --reload注意事项--permanent参数表示规则永久生效但不会立即应用到当前运行时配置。必须执行--reload后永久规则才会同时成为运行时规则。也可以不加--permanent那样规则只会在本次运行中生效重启firewalld服务后失效。生产环境修改防火墙规则务必谨慎最好在本地测试或保有其他访问途径如控制台。7.2 系统服务管理systemctl精通systemctl是管理系统服务守护进程的核心工具。启动服务sudo systemctl start service_name停止服务sudo systemctl stop service_name重启服务sudo systemctl restart service_name重载服务配置不重启sudo systemctl reload service_name并非所有服务都支持查看服务状态sudo systemctl status service_name这是最常用的命令之一可以查看是否运行、最近的日志等启用开机自启sudo systemctl enable service_name禁用开机自启sudo systemctl disable service_name查看所有已启动的服务systemctl list-units --typeservice --staterunning7.3 日志查看journalctl实战CentOS 9使用systemd-journald来管理系统日志查看日志的命令是journalctl。查看所有日志sudo journalctl查看指定服务的日志sudo journalctl -u nginx.service查看最新日志并持续输出类似tail -fsudo journalctl -f查看今天以来的日志sudo journalctl --since today以更友好的时间格式显示sudo journalctl --since 1 hour ago -o short-precise对于传统的文本日志如/var/log/messages,/var/log/secure等依然可以使用tail,cat,grep等命令查看。例如查看SSH登录失败记录sudo grep Failed password /var/log/secure。7.4 性能监控与排查除了安装的htop系统自带了一些基础但强大的工具top/htop实时进程监控。htop更直观支持鼠标操作和树状视图。vmstat查看虚拟内存、进程、CPU活动等统计信息。vmstat 2 5表示每2秒采样一次共采样5次。iostat查看CPU和磁盘I/O统计。需要安装sysstat包sudo dnf install -y sysstat。free -h以人类可读格式查看内存使用情况。df -h查看磁盘空间使用情况。du -sh *查看当前目录下各文件/文件夹的大小。当系统出现响应慢的问题时一个快速的排查顺序是先用htop看CPU和内存谁吃紧了再用iostat看磁盘是否在疯狂读写%util接近100%接着用df -h看是不是磁盘满了最后用journalctl -f或tail -f /var/log/messages看看有没有相关的错误日志。8. 常见问题与故障排查实录即使按照步骤操作也难免会遇到问题。这里记录几个我在安装配置CentOS 9时遇到的高频问题及其解决方法。8.1 网络连接失败ping不通外网现象系统安装后ping 8.8.8.8提示“Network is unreachable”或一直无响应。排查步骤检查网卡状态ip addr show。确认你的以太网卡如ens192是否存在并且是否有分配到IP地址inet那一行。如果没有IP可能是DHCP没成功或网线没插好。检查NetworkManagersudo systemctl status NetworkManager。确保服务是active (running)状态。检查连接配置nmcli connection show。确认你的连接是“已连接”状态。如果不是尝试sudo nmcli connection up ens192。检查路由ip route show。应该有一条默认路由default via ...指向你的网关。如果没有可能是网关没设对。检查DNScat /etc/resolv.conf。里面应该有nameserver行。如果是在nmcli里配置的DNS这里会自动更新。检查防火墙sudo firewall-cmd --state。如果是running尝试暂时关闭防火墙测试sudo systemctl stop firewalld。如果关闭后网络通了说明是防火墙规则挡住了需要正确放行。8.2sudo命令报错“用户不在sudoers文件中”现象用新建的普通用户执行sudo命令时提示username is not in the sudoers file. This incident will be reported.原因创建用户时没有将其加入wheel组拥有sudo权限的组。解决方法先用root用户登录。执行usermod -aG wheel your_username将你的用户加入wheel组。-aG参数表示“追加到以下组”避免移除用户其他现有组。退出root重新用你的用户登录或开启一个新的SSH会话sudo权限即可生效。8.3dnf安装软件时速度极慢或报错现象执行sudo dnf update或sudo dnf install时下载速度很慢或者提示“无法同步缓存”、“无法下载元数据”。原因默认的CentOS仓库镜像可能在国内访问速度不佳。解决方法更换为国内的镜像源如阿里云、腾讯云、清华大学的镜像站。备份原有仓库文件sudo cp /etc/yum.repos.d/centos-stream.repo /etc/yum.repos.d/centos-stream.repo.backup编辑仓库文件sudo vim /etc/yum.repos.d/centos-stream.repo将其中的mirrorlist或baseurl开头的行注释掉在行首加#。添加国内镜像源。以阿里云为例在[baseos]和[appstream]等段落下添加baseurlhttps://mirrors.aliyun.com/centos-stream/$stream/BaseOS/$basearch/os/将$stream替换为9对于CentOS Stream 9$basearch通常是x86_64。具体URL请参考镜像站官方说明。清理并重建缓存sudo dnf clean all sudo dnf makecache8.4 服务启动失败systemctl status显示错误现象例如sudo systemctl start nginx失败sudo systemctl status nginx显示failed并有一段红色的错误描述。排查步骤仔细阅读状态输出status命令的最后几行通常会给出关键错误信息如“端口已被占用”、“配置文件语法错误”、“权限不足”等。使用journalctl查看详细日志sudo journalctl -u nginx.service --since 5 minutes ago -p err。这条命令会筛选出最近5分钟内Nginx服务的错误级别日志信息往往更详细。常见原因端口冲突用sudo ss -tlnp | grep :80查看80端口被谁占用。配置文件语法错误对于Nginx一定要用sudo nginx -t测试配置。对于其他服务通常也有类似的测试命令如apachectl configtest。权限问题检查服务运行用户如nginx用户是否有权访问它需要的文件或目录。用ls -l查看文件属主和权限。依赖服务未启动有些服务依赖其他服务如数据库。确保依赖服务已启动并运行正常。8.5 磁盘空间不足报警现象执行命令或安装软件时提示“No space left on device”。排查与解决快速定位使用df -h查看哪个分区使用率接近100%。找出大文件/目录进入使用率高的分区挂载点如/使用ncdu /需要提前安装进行交互式分析它能快速扫描并按大小排序直观地告诉你哪个目录占用了最多空间。或者用命令sudo du -sh /* | sort -rh | head -10查看根目录下最大的10个目录。常见清理目标日志文件/var/log目录。可以使用sudo journalctl --vacuum-time7d清理7天前的系统日志。检查/var/log下是否有特定应用产生的巨大日志文件。缓存包dnf的缓存位于/var/cache/dnf/可以安全清理sudo dnf clean all。Docker/容器如果使用了Docker它的镜像、容器、卷可能占用大量空间位于/var/lib/docker。临时文件/tmp目录。但注意有些正在运行的程序可能会用到其中的文件。清理后再次运行df -h确认空间已释放。经过以上从规划、安装、基础配置、环境搭建到运维排错的全流程你的CentOS 9服务器已经从一张白纸变成了一个功能完备、安全可控、随时可以承载应用的生产力环境。记住Linux服务器的管理是一个持续的过程定期更新系统、检查日志、监控性能是好习惯的开始。这套配置流程和问题排查思路不仅适用于CentOS 9其核心思想对于其他Linux发行版也同样具有参考价值。
返回列表