CentOS部署需先选择版本与安装模式,推荐生产环境使用AlmaLinux或Rocky Linux,优先采用最小化安装以提升安全性和性能;接着通过手动分区(建议包含/boot、swap、/、/var等)并启用LVM增强灵活性,配置网络、主机名及用户权限,设置强密码并创建带sudo权限的普通用户;安装后立即更新系统,启用防火墙并开放必要端口,合理配置SELinux策略,加固SSH服务(禁用root登录、使用密钥认证、更改默认端口),安装常用工具如vim、wget、curl,并同步系统时间与时区;遇到网络问题时检查网卡状态、配置文件及防火墙规则,磁盘问题则通过df、fdisk、fsck等命令诊断处理,启动故障可借助GRUB救援模式修复GRUB、修正fstab或重置SELinux标签,全程依赖日志分析定位根源。
CentOS系统部署,说白了就是把这个开源的服务器操作系统,从无到有地安装到你的硬件或虚拟机上,并进行一系列基础配置,让它能够稳定、安全地跑起来,为后续的应用部署打下坚实的基础。这不仅仅是按部就班地点击下一步,更像是一场对系统环境的“精装修”,每一步都关乎未来的稳定性和性能。
CentOS系统的部署,其实可以看作一个循序渐进的过程,从准备到安装,再到安装后的加固和优化。我个人在处理这类任务时,总是倾向于从最基础、最核心的部分着手,确保地基稳固。
首先,你需要一个CentOS的安装介质。通常我们会从官网下载ISO镜像文件。我一般会选择Minimal ISO,因为它只包含了最基本的系统组件,部署后系统会非常“干净”,减少了不必要的服务和软件包,这对于服务器环境来说是极好的,因为它能降低潜在的安全风险,也能节省资源。当然,如果你是桌面用户或者需要图形界面,也可以选择带GUI的版本,但服务器上,我真的不推荐。
有了ISO文件,接下来就是制作启动盘或者在虚拟机里挂载。物理机的话,用Rufus或者Etcher把ISO烧录到U盘;虚拟机就直接挂载ISO文件。
启动安装程序后,你会看到一个图形化的安装界面(Anaconda Installer)。
- 语言选择: 一般我会选择英文,虽然中文界面看起来更亲切,但在排查问题或者查找资料时,英文的错误信息和文档会更通用。
- 键盘布局: 默认即可,或者根据你的键盘选择。
- 安装源: 如果是本地ISO,选择Local Media就行。
- 软件选择: 这里是关键。我强烈推荐选择“Minimal Install”(最小安装),然后取消勾选所有额外的软件包组。这样做的好处是系统会非常精简,只包含最核心的组件。后续需要什么服务,比如Web服务器(Nginx/Apache)、数据库(MySQL/PostgreSQL),或者开发工具,再通过
yum
或
dnf
命令手动安装,这样可以更好地控制系统。
- 安装目的地(磁盘分区): 这是我每次部署都会特别留意的部分。
- 自动分区: 如果你对分区不熟悉,或者只是测试环境,自动分区是个省心的选择。但它可能会创建一个巨大的
/home
分区,而
/
分区可能不够大,未来升级或安装软件时可能会遇到空间问题。
- 手动分区: 我更倾向于手动分区。通常我会创建几个主要分区:
-
/boot
:200MB-500MB,用于存放启动相关文件。
-
swap
:交换分区,大小一般是物理内存的1-2倍,或者根据实际负载来定。现在服务器内存普遍很大,如果内存充足,可以适当减小,或者不设。
-
/
:根分区,这是最重要的。我会给它预留足够的空间,比如50GB-100GB,甚至更多,具体看你的应用需求。
-
/var
:如果日志量很大,或者有数据库等会产生大量数据的服务,我会单独分一个
/var
分区,避免日志撑爆根分区。
-
/home
:如果不是多用户环境,或者用户数据不多,可以不单独分,或者只分很小一部分。
- LVM(逻辑卷管理): 对于生产环境,我几乎都会选择LVM。它的好处是灵活,未来可以方便地扩展分区大小,而不需要重新分区。
-
- 自动分区: 如果你对分区不熟悉,或者只是测试环境,自动分区是个省心的选择。但它可能会创建一个巨大的
- 网络和主机名: 启用网络适配器,配置IP地址(DHCP或静态IP),设置主机名。确保网络连接是通畅的,这是后续操作的基础。如果这里配置错了,安装完会非常麻烦。
- Root密码: 设置一个强密码。
- 用户创建: 创建一个普通用户,并赋予sudo权限。日常操作尽量使用普通用户,避免直接使用root用户,这是基本的安全实践。
配置完成后,就可以开始安装了。安装过程可能需要一些时间,取决于你的硬件性能和选择的软件包数量。安装完成后,系统会提示你重启。
重启后,你就进入了一个全新的CentOS系统。
CentOS版本选择与安装模式:如何根据需求优化部署?
选择合适的CentOS版本和安装模式,这往往是部署前的第一个“哲学问题”。对于一个服务器管理员来说,这不仅仅是版本号的差异,更关乎系统的稳定性、安全性、生命周期以及资源消耗。我个人在做选择时,会非常注重“目的性”。
关于CentOS版本: 过去,我们有CentOS 7、CentOS 8等稳定版本。但现在,CentOS项目已经转向了CentOS Stream。CentOS Stream可以理解为RHEL的上游开发分支,它介于Fedora和RHEL之间,更新会更频繁,也意味着可能会引入一些新的特性和潜在的不稳定性。
- 如果你追求极致的稳定性,且不介意较旧的软件包版本: 那么继续使用CentOS 7(直到其生命周期结束)或者考虑转向RHEL(需要订阅)或其兼容发行版如AlmaLinux、Rocky Linux会是更好的选择。这些发行版旨在提供与RHEL二进制兼容的稳定性。
- 如果你希望尝试较新的技术,不介意更快的更新周期,或者作为开发/测试环境: CentOS Stream是一个不错的选择。它能让你提前接触到RHEL未来的特性,但需要你对系统更新保持更高的关注度。
我个人在生产环境部署时,目前更倾向于AlmaLinux或Rocky Linux,它们提供了与RHEL相同的稳定性承诺,且更新策略更可预测。CentOS Stream我更多用在个人测试或者非关键业务的开发环境中。
关于安装模式(软件选择): 这块我在前面也提到了,但值得再次强调。Anaconda安装器提供了多种“软件选择”,比如“带GUI的服务器”、“开发工作站”、“最小安装”等等。
- 最小安装(Minimal Install): 这是我几乎所有服务器部署的首选。它只安装了系统运行最核心的组件,没有图形界面,没有多余的服务。
- 优点: 资源占用极低(内存、磁盘空间),攻击面小(因为服务少),启动速度快。
- 缺点: 初始状态下功能非常有限,很多常用的工具都需要手动安装。
- 优化策略: 部署后,根据实际需求,通过
yum install
或
dnf install
精确安装所需软件包。例如,如果你需要Web服务器,就安装
nginx
或
httpd
;需要数据库,就安装
mariadb-server
或
postgresql-server
。这种“按需安装”的方式,能最大限度地保持系统精简和高效。
- 带GUI的服务器(Server with GUI): 顾名思义,它会安装一个图形桌面环境。
- 优点: 对于习惯图形界面操作的用户来说更友好。
- 缺点: 资源消耗大,启动慢,增加了不必要的服务和潜在的安全风险。
- 适用场景: 极少用于生产服务器,更多用于桌面工作站或需要图形界面进行某些特定操作的测试服务器。
我的经验是,对于任何需要长期稳定运行的服务器,从“最小安装”开始,然后逐步添加组件,这是最稳妥、最经济、也最安全的部署策略。它可能需要你多敲几行命令,但换来的是一个更健壮、更可控的系统。
CentOS部署后安全加固与基础配置有哪些关键步骤?
系统安装完成,重启进入系统,这只是万里长征的第一步。一个“裸奔”的CentOS系统,就像一扇敞开的门,等着别人来“做客”。所以,部署后的安全加固和基础配置至关重要,这是我每次都必须认真对待的环节。
-
更新系统: 这是最基本也是最重要的一步。新安装的系统,其软件包版本往往不是最新的,可能存在已知的安全漏洞。
sudo dnf update -y sudo reboot # 如果内核有更新,建议重启
dnf
是CentOS 8及更高版本(包括Stream)的包管理器,CentOS 7及以前版本用
yum
。更新后重启,确保所有更新都生效,特别是内核更新。
-
配置防火墙(Firewalld): CentOS默认使用
firewalld
作为防火墙。它默认是开启的,但你需要根据自己的需求开放必要的端口。
- 查看防火墙状态:
sudo firewall-cmd --state
- 查看已开放的服务/端口:
sudo firewall-cmd --list-all
- 开放SSH端口(默认22):
sudo firewall-cmd --zone=public --add-service=ssh --permanent
- 开放HTTP/HTTPS端口:
sudo firewall-cmd --zone=public --add-service=http --permanent
sudo firewall-cmd --zone=public --add-service=https --permanent
- 重新加载防火墙规则:
sudo firewall-cmd --reload
记住,只开放你需要的端口,多余的端口就让它紧闭着。
- 查看防火墙状态:
-
SELinux(安全增强型Linux): SELinux提供了一层额外的安全保护,它强制执行访问控制策略。默认情况下,SELinux通常处于
enforcing
模式。
- 查看SELinux状态:
sestatus
- 临时设置为宽容模式(Permissive):
sudo setenforce 0
(不会在重启后生效)
- 永久设置为宽容模式或禁用: 编辑
/etc/selinux/config
文件,将
SELINUX=enforcing
改为
SELINUX=permissive
或
SELINUX=disabled
。
# 示例:将SELINUX设置为permissive sudo sed -i 's/SELINUX=enforcing/SELINUX=permissive/g' /etc/selinux/config # 然后重启系统才能生效
我个人建议在生产环境保持
enforcing
模式,但对于不熟悉SELinux的用户,在部署初期可能会遇到一些权限问题。可以先设置为
permissive
模式,观察日志(
/var/log/audit/audit.log
),根据日志调整SELinux策略,或者在确保理解其影响后再设置为
enforcing
。
- 查看SELinux状态:
-
SSH服务安全加固: SSH是远程管理服务器的主要方式,也是攻击者最常尝试突破的地方。
- 禁用Root用户SSH登录: 编辑
/etc/ssh/sshd_config
文件,找到
PermitRootLogin yes
,改为
PermitRootLogin no
。
- 使用密钥对登录代替密码: 这是最推荐的方式。生成SSH密钥对(
ssh-keygen
),将公钥上传到服务器的
~/.ssh/authorized_keys
文件。然后,在
sshd_config
中找到
PasswordAuthentication yes
,改为
PasswordAuthentication no
。
- 更改SSH默认端口(可选): 将
Port 22
改为一个不常用的端口,比如
Port 2222
。这虽然不能阻止有针对性的攻击,但可以减少大量自动化扫描。
- 重启SSH服务:
sudo systemctl restart sshd
- 禁用Root用户SSH登录: 编辑
-
安装常用工具: 最小化安装的系统,很多常用工具都没有。
sudo dnf install -y vim wget curl net-tools git # 根据需要安装
vim
是编辑器,
wget
和
curl
是下载工具,
net-tools
包含
ifconfig
等网络命令,
git
是版本控制工具。
-
配置时区和NTP服务: 确保系统时间准确非常重要,特别是对于日志记录和证书验证。
- 设置时区:
sudo timedatectl set-timezone Asia/Shanghai
(根据你所在的地区设置)
- 启用NTP服务:
sudo timedatectl set-ntp true
- 设置时区:
这些步骤是基础中的基础,它们共同构建了一个相对安全、稳定的CentOS运行环境。跳过任何一步,都可能为未来的问题埋下隐患。
CentOS部署中常见的网络、磁盘与启动问题如何诊断与解决?
在CentOS部署过程中,网络、磁盘和启动问题是最常遇到的“拦路虎”。这些问题往往会让你寸步难行,但只要掌握了基本的诊断方法,解决起来也并非难事。我个人在解决这类问题时,总是遵循“先看日志,再查状态,最后尝试修复”的原则。
1. 网络问题诊断与解决: 网络不通是部署后最让人头疼的问题之一,因为很多后续操作都依赖网络。
- 症状: 无法ping通外部IP,无法上网,SSH无法连接。
- 诊断:
- 检查网卡状态: 使用
ip a
(或
ifconfig
,如果安装了
net-tools
)查看网卡是否识别,是否有IP地址。如果网卡显示
DOWN
,可能需要手动激活。
- 检查网络配置文件: 对于CentOS 7/8,网络配置文件通常在
/etc/sysconfig/network-scripts/
目录下,例如
ifcfg-eth0
或
ifcfg-enp0s3
。检查
ONBOOT=yes
是否设置,IP地址、网关、DNS是否配置正确。
- 检查网络服务状态:
sudo systemctl status NetworkManager
或
sudo systemctl status network
(取决于你使用的是NetworkManager还是旧的network服务)。
- 检查路由表:
ip r
或
route -n
,看是否有默认路由。
- 检查DNS解析:
cat /etc/resolv.conf
查看DNS服务器地址,然后尝试
ping google.com
或
dig google.com
。
- 检查防火墙: 确认
firewalld
没有阻止你的连接。
sudo firewall-cmd --list-all
。
- 检查网卡状态: 使用
- 解决:
- 激活网卡:
sudo nmcli device connect eth0
或
sudo ifup eth0
。
- 修改配置文件: 编辑
/etc/sysconfig/network-scripts/ifcfg-enp0s3
(文件名可能不同),确保
ONBOOT=yes
,并正确配置IP、GATEWAY、DNS。修改后重启网络服务:
sudo systemctl restart NetworkManager
或
sudo systemctl restart network
。
- 添加/修改路由:
sudo ip route add default via <gateway_ip>
。
- 修改DNS: 编辑
/etc/resolv.conf
,添加或修改
nameserver
。
- 调整防火墙规则: 根据需要开放端口。
- 激活网卡:
2. 磁盘问题诊断与解决: 磁盘空间不足、分区错误或文件系统损坏,都可能导致系统不稳定甚至无法启动。
- 症状: 系统报错磁盘空间不足,无法创建文件,文件系统只读,或者分区无法挂载。
- 诊断:
- 查看磁盘使用情况:
df -h
可以查看各分区的使用率。
- 查看磁盘分区表:
sudo fdisk -l
或
sudo lsblk
可以查看物理磁盘和分区信息。
- 检查文件系统:
sudo fsck /dev/sda1
(替换为你的分区名)可以检查文件系统错误。
- 查看挂载点:
cat /etc/fstab
检查文件系统挂载配置。
- 查看磁盘使用情况:
- 解决:
- 清理磁盘空间: 查找大文件(
sudo du -sh /*
),清理日志文件(
/var/log
),卸载不用的软件包。
- 调整分区: 如果使用了LVM,可以相对容易地扩展逻辑卷。非LVM分区调整则复杂得多,可能需要备份数据并重新分区。
- 修复文件系统: 在卸载分区后运行
fsck
命令。对于根分区,可能需要进入救援模式(Rescue Mode)进行修复。
- 修改
/etc/fstab
:
确保分区挂载配置正确,特别是UUID或设备名。
- 清理磁盘空间: 查找大文件(
3. 启动问题诊断与解决: 系统无法启动,通常是最令人绝望的,因为你连登录都做不到。
- 症状: 开机卡在某个界面,显示错误信息,进入grub命令行,或者直接黑屏。
- 诊断:
- 观察启动信息: 系统在启动时会显示很多信息,留意有没有
FAILED
或
ERROR
字样。
- 进入GRUB菜单: 开机时按
Shift
键或
Esc
键进入GRUB菜单,尝试选择不同的内核版本启动,或者进入救援模式(Rescue Mode)。
- 救援模式: 这是解决启动问题的利器。在GRUB菜单中选择救援模式,或者使用安装ISO启动,选择“Troubleshooting -> Rescue a CentOS system”。进入救援模式后,系统会将你的根分区挂载到
/mnt/sysimage
,你可以在此环境下修复问题。
- 查看日志: 在救援模式下,可以查看
/mnt/sysimage/var/log/messages
、
/mnt/sysimage/var/log/boot.log
等日志文件。
- 观察启动信息: 系统在启动时会显示很多信息,留意有没有
- 解决:
- 修复GRUB: 如果GRUB损坏,可以使用救援模式,然后
chroot /mnt/sysimage
,再运行
grub2-install /dev/sda
(替换为你的硬盘)和
grub2-mkconfig -o /boot/grub2/grub.cfg
。
- 修复
/etc/fstab
:
如果fstab
配置错误导致启动失败,在救援模式下编辑它,注释掉有问题的行,或者修正UUID/设备名。
- 检查内核参数: 在GRUB菜单中,编辑启动项,查看内核参数是否正确。
- 重置SELinux标签: 如果SELinux策略混乱导致启动问题,在救援模式下
chroot /mnt/sysimage
,然后创建空文件
/forceautorelabel
,重启系统让SELinux重新打标签。
- 修复GRUB: 如果GRUB损坏,可以使用救援模式,然后
解决这些问题,很多时候需要耐心和细致。日志文件是你的好朋友,它们记录了系统运行的点点滴滴,往往能提供解决问题的关键线索。而救援模式,则是你在系统崩溃时的“救命稻草”。
centos mysql linux word git go apache nginx 操作系统 防火墙 虚拟机 mysql nginx gateway cURL Error public var default git vim postgresql 数据库 mariadb apache http https linux centos ssh 自动化