系统安装:从镜像选择到虚拟机部署
在企业级 Linux 运维实践中,CentOS 7 Minimal ISO 是构建轻量级服务器的首选。该版本不包含图形界面(GUI),仅提供命令行环境,适用于生产环境中对资源占用敏感的服务部署。
我们通过访问官方源 https://www.centos.org/download/ 获取 minimal ISO 镜像文件,其大小约为 962.6MB,远小于完整版 DVD ISO(约 4.5GB)。Minimal 版本专为服务器设计,仅预装基础系统组件和核心工具集,确保最小攻击面和高效运行性能
对于国内用户,直接访问官方源可能速度较慢。推荐使用国内知名开源镜像站加速下载:
- 网易镜像站:
https://mirrors.163.com/centos/7/isos/x86_64/ - 阿里云镜像站:
https://mirrors.aliyun.com/centos/7/isos/x86_64/
上述站点均提供完整目录结构,包含各版本 ISO 文件及校验信息(如 SHA256SUMS)
选择对应版本后,点击 CentOS-7-x86_64-Minimal-1810.iso 下载即可
注意:确保选择架构为 x86_64 的 64 位版本,适用于现代处理器平台
基于 VirtualBox 的 CentOS 7 Minimal 虚拟机创建与安装流
1 )创建虚拟机实例
打开 Oracle VM VirtualBox,执行以下步骤:
- 点击"新建" → 名称输入
centos-server(可自定义) - 类型选择:Linux
- 版本选择:Red Hat (64-bit)
- 内存分配:建议至少 1024MB(1GB),可根据负载需求扩展至 2048MB
- 硬盘类型:VDI(VirtualBox Disk Image)
- 存储方式:固定大小(Fixed-size) 更利于 I/O 性能优化,避免动态扩容带来的碎片问题
- 磁盘容量:初始设置为 10GB,满足基础服务部署需求
内存建议分配至少 1024MB(1GB),可根据主机硬件适当提升至 2048MB。磁盘类型默认使用 VDI(Virtual Disk Image),存储方式推荐选择 固定大小(Fixed-size) 以获得更稳定的 I/O 性能
初始磁盘空间设为 10GB 可满足基本服务运行需求(后续可通过快照或扩容机制扩展)
创建完成后,将已下载的 Minimal ISO 挂载至虚拟光驱
bash
进入 "设置 → 存储" 菜单,在 "控制器: IDE" 下添加光驱设备并挂载已下载的 `CentOS-7-x86_64-Minimal-1810.iso` 文件
或
Settings → Storage → Controller: IDE → Optical Drive → Choose a disk file...
→ 选择 CentOS-7-x86_64-Minimal-1810.iso
随后启动虚拟机,在引导界面按 Enter 键选择默认项 Install CentOS 7 开始安装流程
注意:若显示窗口过小,可通过底部菜单栏的"View" → "Virtual Screen 1" 调整缩放比例至 300%,确保文字清晰可见
2 )启动安装过程
启动虚拟机后,将自动加载 ISO 并显示启动菜单。默认高亮选项为 Install CentOS 7,按回车确认。若界面缩放异常导致菜单显示不全,可通过调整 VirtualBox 显示比例(如 200% 或 300%)解决
安装程序启动后,默认语言为 English,保持不变继续下一步。
关键配置项说明:
| 配置项 | 推荐设置 | 说明 |
|---|---|---|
| Installation Destination | 自动分区 | 默认启用 LVM 分区策略,无需手动干预 |
| Network & Host Name | 开启网络连接 | 将网卡状态由 Off 改为 On |
| 设置自动连接 | 在配置中勾选 "Automatically connect to this network when available" | |
| Software Selection | Minimal Install | 对应 minimal ISO 的唯一安装模式,不含 GUI 组件 |
点击 Begin Installation 开始安装进程。
3 )用户与密码设置
- Root Password:必须设置 root 用户密码。示例中使用简单密码
123456,但生产环境务必使用高强度复杂密码 - User Creation:可选创建普通用户。若需赋予管理员权限,勾选 "Make this user a administrator"。本环境中暂不创建额外用户,仅通过 root 登录操作
安装完成后点击 Reboot 重启系统
系统安装过程关键配置项详解
安装过程中需手动干预的关键步骤如下:
1 )语言与时区设置
- Language: English(默认)
- Time & Date: 可修改为 Asia/Shanghai,确保日志时间戳符合本地时区
2 )安装目标磁盘配置
进入 Installation Destination 页面:
- 自动检测到唯一磁盘设备
- 默认启用自动分区方案(LVM + 标准布局)
- 点击 "Done" 提交配置,无需手动干预
3 )网络与主机名配置
进入 Network & Hostname 设置页面:
- 当前状态显示 "Not connected",点击右侧开关切换为 ON
- 勾选 "Automatically connect to this network when it is available"
- 主机名可设为
server.local或根据需要自定义 - 点击 "Done" 保存配置
4 )软件选择
- 默认选项为 Minimal Install,与所用 ISO 类型一致
- 不包含 GNOME/KDE 图形环境,无多余服务包
- 保持默认即可,点击 "Done"
5 )Root 用户密码设置
必须设置 root 密码以完成安装:
bash
Password:
Confirm:
注意:生产环境应使用复杂密码;实验环境可简化以便记忆。
6 )用户创建(可选)
默认未创建普通用户。若需添加管理员用户:
- 点击 User Creation
- 输入用户名(如
admin) - 勾选 "Make this user administrator"
- 设置密码并确认
- 点击 Done
但考虑到后续管理便捷性,在服务器场景中通常直接使用 root 登录操作更为高效,尤其在初期配置阶段
安装完成与首次登录验证
安装进度条结束后点击 Reboot 重启系统。重启后进入纯命令行界面:
输入用户名 root 及设定的密码登录。命令行提示符为 #,表示当前处于超级用户权限
运行 pwd 命令确认当前目录为 /root ------ 即 root 用户的家目录
此时服务器已成功部署,可执行基本命令测试功能:
bash
whoami # 输出: root
hostname # 查看主机名
date # 查看系统时间是否正确
关闭服务器可通过命令:
bash
poweroff
网络配置进阶:NAT 到 Bridge 模式的转换
默认网络模式为 NAT(Network Address Translation),此模式下虚拟机通过主机 NAT 出网,获得私有 IP 地址(如 10.0.2.15),但外部主机无法主动访问该虚拟机。
为实现局域网内其他设备(包括宿主机或其他虚拟机)能够访问 CentOS 服务器,必须更改为 Bridge(桥接)模式。
1 )网络工具对比:ifconfig vs ip address
传统网络配置命令 ifconfig 来自 net-tools 工具集,起源于 BSD Unix 系统,曾是 Linux 早期标准网络管理工具。然而自 2001 年起,Linux 社区逐步停止维护 net-tools,转而推广由 iproute2 项目提供的现代化替代方案
| 命令 | 所属工具集 | 功能描述 |
|---|---|---|
ifconfig |
net-tools | 旧式接口配置工具 |
ip addr / ip link |
iproute2 | 新一代网络管理工具,功能更强、结构更清晰 |
iproute2 与 net-tools 功能对照表
| 功能 | net-tools 命令 | iproute2 命令 |
|---|---|---|
| 显示 IP 地址 | ifconfig |
ip addr show 或 ip a |
| 显示路由表 | route -n |
ip route show 或 ip r |
| 显示网络接口状态 | ifconfig |
ip link show |
| 启用/禁用网卡 | ifconfig eth0 up/down |
ip link set dev eth0 up/down |
推荐优先掌握 ip 命令家族,因其输出结构化、支持更多高级功能(如流量控制、命名空间等)
在 CentOS 7 Minimal 安装中,默认未安装 net-tools,因此执行 ifconfig 将报错:
bash
-bash: ifconfig: command not found
进行安装
bash
yum install -y net-tools
安装完成后即可正常使用 ifconfig 命令
此时应使用 ip addr show(或简写 ip a)查看网络接口状态:
bash
ip addr show
输出示例:
ss
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
inet 10.0.2.15/24 brd 10.0.2.255 scope global dynamic enp0s3
valid_lft 86345sec preferred_lft 86345sec
其中:
lo:本地回环接口,IP 为127.0.0.1enp0s3:主以太网接口,当前 IP 为10.0.2.15
此 IP 属于私有地址段 10.0.0.0/8,由 VirtualBox 默认 NAT 模式分配,外部主机无法直接访问该虚拟机
2 ) 修改 VirtualBox 网络适配器设置
操作步骤:
- 关闭虚拟机电源
- 进入 Settings → Network
- Adapter 1 → Attached to: Bridged Adapter
- Name: 根据主机实际网卡选择(如 Wi-Fi: iPhone USB 或 Ethernet)
- Promiscuous Mode: Deny(默认)
- 点击 OK 保存
或
- 关闭虚拟机(执行
poweroff) - 进入 "设置 → 网络"
- 适配器 1 启用,连接方式选择 桥接网卡(Bridged Adapter)
- 接口名称选择宿主机当前活动网卡(如 Wi-Fi 或有线网卡)
- 保存设置并重新启动虚拟机
桥接模式原理:虚拟机通过宿主机物理网卡直接接入局域网,如同一台独立设备,由路由器通过 DHCP 分配真实局域网 IP 地址。
重启后再次执行:
bash
ip addr show enp0s3
预期输出包含类似内容:
conf
inet 172.20.10.2/24 brd 172.20.10.255 scope global dynamic enp0s3
该 IP(如 172.20.10.2)可在局域网内被其他设备 ping 通并建立 SSH 连接。
注:具体 IP 段取决于宿主机所连网络环境。若宿主机通过手机热点联网,则常见 172.20.10.x;家庭路由器多为 192.168.1.x 或 192.168.0.x
3 )重新启动系统并验证新 IP 地址
重新启动后执行:
bash
ip addr show
输出示例:
log
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
inet 172.20.10.2/24 brd 172.20.10.255 scope global dynamic enp0s3
valid_lft 86345sec preferred_lft 86345sec
inet6 fe80::5054:ff:feeb:1a2b/64 scope link
valid_lft forever preferred_lft forever
其中 enp0s3 接口已通过 DHCP 获取到局域网 IP(如 172.20.10.2),该地址可在同一网络内的其他设备上直接 ping 通
注:IP 地址前缀取决于你所在网络环境(常见如 192.168.x.x、10.x.x.x、172.16-31.x.x)
4 ) 网络配置文件解析
CentOS 7 中网络接口配置文件存储于:
conf
/etc/sysconfig/network-scripts/ifcfg-enp0s3
查看其内容:
bash
cat /etc/sysconfig/network-scripts/ifcfg-enp0s3
典型输出:
ini
TYPE=Ethernet
BOOTPROTO=dhcp
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
NAME=enp0s3
UUID=5fb06bd0-0bb0-7f8f-a9d4-123456789abc
DEVICE=enp0s3
ONBOOT=yes
关键字段解释:
-
BOOTPROTO=dhcp:表示通过 DHCP 自动获取 IP 地址。 -
ONBOOT=yes:开机时激活此网卡;若为no,需手动启用ifup enp0s3 -
DEVICE=enp0s3:设备名称匹配物理接口 -
若要配置静态 IP,应改为:
iniBOOTPROTO=static IPADDR=192.168.1.100 NETMASK=255.255.255.0 GATEWAY=192.168.1.1 DNS1=8.8.8.8 -
若
ONBOOT=no,需编辑文件启用:bashvi /etc/sysconfig/network-scripts/ifcfg-enp0s3 修改 ONBOOT=yes
修改后重启网络服务生效:
bash
systemctl restart network
网络工具补全与命令对比分析
Minimal 安装默认未包含传统网络工具集 net-tools,导致 ifconfig 命令不可用:
bash
[root@server ~]# ifconfig
-bash: ifconfig: command not found
这是正常现象。现代 Linux 发行版推荐使用 iproute2 工具集替代 net-tools
1 ) net-tools vs iproute2 功能对照表
| 功能 | net-tools 命令 | iproute2 命令 |
|---|---|---|
| 查看接口信息 | ifconfig |
ip addr show 或 ip a |
| 查看路由表 | route -n |
ip route show 或 ip r |
| 查看 ARP 表 | arp -a |
ip neigh show |
| 启用/禁用接口 | ifconfig eth0 up/down |
ip link set dev enp0s3 up/down |
2 ) 安装 net-tools 以兼容旧脚本
尽管 ip 命令更强大直观,但在维护遗留系统时仍可能需要 ifconfig:
bash
yum install -y net-tools
安装后即可使用:
bash
ifconfig
# 或
ifconfig enp0s3
输出结果与 ip addr show enp0s3 基本一致,便于习惯旧命令的管理员使用
基础开发与编辑工具补充
Minimal 系统缺少常用文本编辑器,影响配置文件修改效率
1 )安装 nano 编辑器
bash
yum install -y nano
测试编辑:
bash
nano /etc/motd
输入欢迎信息,保存退出
2 )测试外网连通性
验证服务器能否访问互联网:
bash
ping -c 4 baidu.com
若返回响应包,表明 DNS 解析与路由正常。否则检查 /etc/resolv.conf 是否包含有效 nameserver:
bash
cat /etc/resolv.conf
示例:
nameserver 8.8.8.8
nameserver 114.114.114.114
必要时手动添加公共 DNS
3 ) 网络接口配置文件解析
路径:/etc/sysconfig/network-scripts/ifcfg-enp0s3
使用示例:
bash
nano /etc/sysconfig/network-scripts/ifcfg-enp0s3
典型内容:
ini
TYPE=Ethernet
BOOTPROTO=dhcp
DEFROUTE=yes
NAME=enp0s3
DEVICE=enp0s3
ONBOOT=yes
关键字段说明:
BOOTPROTO=dhcp:表示通过 DHCP 获取 IPONBOOT=yes:开机时激活该接口(若为 no 需手动改为 yes 并重启网络)
常用工具安装:增强服务器可维护性
Minimal 系统缺少许多开发与调试工具,建议安装以下关键组件:
bash
安装文本编辑器 nano(比 vi 更易上手)
yum install -y nano
安装 wget 和 curl,用于下载远程资源
yum install -y wget curl
安装 telnet 和 netstat(用于网络诊断)
yum install -y telnet net-tools
更新系统包
yum update -y
此外,解决鼠标捕获问题:
- macOS 主机:按下 Command 键释放鼠标
- Windows 主机:按下 Ctrl 键释放鼠标
该行为由 VirtualBox 的 Guest Additions 控制,未来可通过安装增强功能包解决
附加代码库:基于 NestJS + TypeScript 的远程监控原型
1 )方案1
虽然 CentOS 本身为后端操作系统,但可结合现代 Node.js 框架构建统一运维平台。以下是一个基于 NestJS 的轻量级服务器状态采集模块,可用于未来集成 SSH 监控、日志拉取等功能。
项目结构概览
src/
├── server-monitor/
│ ├── server-monitor.controller.ts
│ ├── server-monitor.service.ts
│ └── dto/
│ └── server-status.dto.ts
DTO 定义:服务器状态响应模型
typescript
// src/server-monitor/dto/server-status.dto.ts
export class ServerStatusDto {
hostname: string;
ipAddresses: string[];
uptime: string;
loadAverage: string;
memoryUsage: {
total: string;
used: string;
free: string;
};
diskUsage: string;
}
服务层:SSH 执行远程命令
typescript
// src/server-monitor/server-monitor.service.ts
import { Injectable } from '@nestjs/common';
import * as ssh from 'ssh2-promise';
@Injectable()
export class ServerMonitorService {
private readonly connectionConfig = {
host: '172.20.10.2', // 替换为你的 CentOS 服务器 IP
username: 'root',
password: 'your_root_password', // 实际使用建议使用密钥认证
};
async getServerStatus(): Promise<ServerStatusDto> {
const conn = new ssh(this.connectionConfig);
try {
await conn.connect();
const hostname = await conn.exec('hostname');
const ips = await conn.exec("ip -4 addr show enp0s3 | grep -oP '(?<=inet\\s)\\d+(\\.\\d+){3}'");
const uptime = await conn.exec('uptime');
const loadavg = await conn.exec('cat /proc/loadavg | awk \'{print $1, $2, $3}\'');
const meminfo = await conn.exec('free -h | grep Mem');
const df = await conn.exec("df -h / | tail -1 | awk '{print $5}'");
await conn.disconnect();
const parseMemInfo = ( const [, total, used, free] = data.trim().split(/\s+/);
return { total, used, free };
};
return {
hostname: hostname.trim(),
ipAddresses: ips.trim().split('\n'),
uptime: uptime.trim(),
loadAverage: loadavg.trim(),
memoryUsage: parseMemInfo(meminfo),
diskUsage: df.trim(),
};
} catch (error) {
console.error('SSH Error:', error.message);
throw new Error(`Failed to fetch server status: ${error.message}`);
}
}
}
控制器:暴露 HTTP 接口
typescript
// src/server-monitor/server-monitor.controller.ts
import { Controller, Get } from '@nestjs/common';
import { ServerMonitorService } from './server-monitor.service';
import { ServerStatusDto } from './dto/server-status.dto';
@Controller('monitor')
export class ServerMonitorController {
constructor(private readonly monitorService: ServerMonitorService) {}
@Get('status')
async getStatus(): Promise<ServerStatusDto> {
return await this.monitorService.getServerStatus();
}
}
模块注册
typescript
// src/server-monitor/server-monitor.module.ts
import { Module } from '@nestjs/common';
import { ServerMonitorController } from './server-monitor.controller';
import { ServerMonitorService } from './server-monitor.service';
@Module({
controllers: [ServerMonitorController],
providers: [ServerMonitorService],
})
export class ServerMonitorModule {}
安装依赖
bash
npm install ssh2-promise
npm install @types/ssh2-promise --save-dev
此模块实现了通过 SSH 协议安全地从 NestJS 应用获取 CentOS 服务器运行状态的能力,为后续构建集中式运维监控平台奠定基础
2 )方案2
实现轻量级服务器状态采集系统。客户端部署于 CentOS 7 服务器上,定时上报 CPU、内存、磁盘及网络状态至中心服务端
服务端:NestJS Server Monitor API
typescript
// src/server-monitor.controller.ts
import { Controller, Get, Query } from '@nestjs/common';
import { execSync } from 'child_process';
@Controller('api/servers')
export class ServerMonitorController {
@Get('status')
getStatus(@Query('host') host: string) {
// 模拟多节点数据存储(实际应用可用数据库)
const mockData = {
'172.20.10.2': {
cpu: this.getCPUUsage(),
memory: this.getMemoryUsage(),
disk: this.getDiskUsage(),
timestamp: new Date().toISOString(),
},
};
return mockData[host] || { error: 'Host not found' };
}
private getCPUUsage(): string {
try {
const result = execSync("top -bn1 | grep 'Cpu(s)'").toString();
return result.match(/(\d+\.\d+) id/)?.[1]
? (100 - parseFloat(result.match(/(\d+\.\d+) id/)[1])).toFixed(2) + '%'
: 'N/A';
} catch {
return 'Error';
}
}
private getMemoryUsage(): string {
try {
const result = execSync("free | grep Mem").toString();
const [total, used] = result.trim().split(/\s+/).slice(1, 3).map(Number);
return ((used / total) * 100).toFixed(2) + '%';
} catch {
return 'Error';
}
}
private getDiskUsage(): string {
try {
return execSync("df / | tail -1 | awk '{print $5}'").toString().trim();
} catch {
return 'Error';
}
}
}
typescript
// src/app.module.ts
import { Module } from '@nestjs/common';
import { ServerMonitorController } from './server-monitor.controller';
@Module({
imports: [],
controllers: [ServerMonitorController],
providers: [],
})
export class AppModule {}
启动命令:
bash
npm run start
访问 http://localhost:3000/api/servers/status?host=172.20.10.2
客户端:CentOS 7 上运行的状态上报脚本(Bash + curl)
在 CentOS 服务器上创建定时任务,定期推送数据:
bash
/usr/local/bin/report-status.sh
#!/bin/bash
SERVER_URL="http://172.20.10.1:3000/api/servers/status"
HOST_IP=$(hostname -I | awk '{print $1}')
DATA=$(cat <<EOF
{
"host": "$HOST_IP",
"cpu": "$(top -bn1 | grep 'Cpu(s)' | awk '{print 100 - $8}')%",
"memory": "$(free | grep Mem | awk '{printf "%.2f%%", ($3/$2)*100}')",
"disk": "$(df / | tail -1 | awk '{print $5}')",
"timestamp": "$(date -u +%Y-%m-%dT%H:%M:%SZ)"
}
EOF
)
curl -X POST \
-H "Content-Type: application/json" \
--data "$DATA" \
"$SERVER_URL"
授权并加入 crontab 每 5 分钟执行一次:
bash
chmod +x /usr/local/bin/report-status.sh
crontab -e
添加:
-/5 * * * * /usr/local/bin/report-status.sh >> /var/log/server-report.log 2>&1
3 )方案3
实现远程采集 CentOS 服务器基本信息(如 IP、CPU、内存等)。
项目结构概览
tree
server-monitor/
├── src/
│ ├── main.ts
│ ├── app.controller.ts
│ └── utils/system-info.ts
├── package.json
└── tsconfig.json
src/utils/system-info.ts ------ 系统信息采集模块
ts
import { execSync } from 'child_process';
export class SystemInfo {
static getIp(): string {
try {
const output = execSync("ip -4 addr show enp0s3 | grep -oP '(?<=inet\\s)\\d+(\\.\\d+){3}'", { encoding: 'utf-8' });
return output.trim() || '127.0.0.1';
} catch (err) {
return 'unknown';
}
}
static getHostname(): string {
return execSync('hostname', { encoding: 'utf-8' }).trim();
}
static getUptime(): string {
return execSync('uptime -p', { encoding: 'utf-8' }).trim();
}
static getLoadAverage(): string {
return execSync('cat /proc/loadavg', { encoding: 'utf-8' }).split(' ')[0].trim();
}
static getMemoryUsage(): string {
const meminfo = execSync('free -m', { encoding: 'utf-8' });
const lines = meminfo.trim().split('\n');
const [, total, used] = lines[1].split(/\s+/);
return `${used}MB/${total}MB`;
}
}
src/app.controller.ts ------ HTTP 接口暴露
ts
import { Controller, Get } from '@nestjs/common';
import { SystemInfo } from './utils/system-info';
@Controller('api/server')
export class AppController {
@Get('info')
getInfo() {
return {
hostname: SystemInfo.getHostname(),
ip: SystemInfo.getIp(),
uptime: SystemInfo.getUptime(),
loadAverage: SystemInfo.getLoadAverage(),
memoryUsage: SystemInfo.getMemoryUsage(),
timestamp: new Date().toISOString()
};
}
@Get('health')
healthCheck() {
return { status: 'OK', service: 'server-monitor', version: '1.0.0' };
}
}
src/main.ts ------ 应用入口
ts
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
app.enableCors(); // 允许跨域请求
await app.listen(3000);
console.log('Server is running on http://localhost:3000');
}
bootstrap();
package.json 示例依赖
json
{
"name": "centos-server-monitor",
"version": "1.0.0",
"scripts": {
"start": "nest start"
},
"dependencies": {
"@nestjs/common": "^10.0.0",
"@nestjs/core": "^10.0.0",
"@nestjs/platform-express": "^10.0.0",
"reflect-metadata": "^0.1.13",
"rxjs": "^7.8.1"
},
"devDependencies": {
"@nestjs/cli": "^10.0.0",
"typescript": "^5.0.0"
}
}
使用说明
- 将此 Node.js 服务部署在 CentOS 服务器上
- 安装依赖:
npm install - 编译并运行:
npm run start - 外部客户端可通过
http://<server-ip>:3000/api/server/info获取实时系统数据
安全建议:生产环境中应增加身份认证(JWT)、HTTPS 加密及防火墙规则限制访问来源
构建可扩展的企业级服务器底座
本文从 CentOS 7 Minimal ISO 下载 → VirtualBox 部署 → 系统安装 → 网络模式切换 → 工具链补全 → 远程监控原型开发 的全流程。重点强调了以下几个核心技术细节:
| 技术要点 | 说明 |
|---|---|
| Minimal ISO 优势 | 体积小、安全高、资源占用低,适合服务器场景 |
| Bridge 模式必要性 | 实现局域网互通,是远程管理的前提 |
| ip vs ifconfig | 推荐使用 ip addr 替代 ifconfig,符合现代 Linux 发展趋势 |
| 网络配置持久化 | 修改 /etc/sysconfig/network-scripts/ifcfg-* 文件实现永久生效 |
| 工具补全策略 | 使用 yum install 安装 net-tools, nano 等必备工具 |
| 远程运维准备 | 安装 SSH 服务(默认开启),配合 NestJS 构建监控 API,迈向 DevOps 自动化 |
通过本次配置,已搭建出一个稳定、可远程访问的 Linux 服务器平台,为后续部署数据库、Web 服务、容器化应用等打下坚实基础
该环境不仅适用于教学实践,也可作为微服务架构中某个中间件节点(如 Nginx、MySQL、Redis)的基础运行平台
最佳实践提醒:生产环境中禁止长期使用 root 直接登录,应创建受限普通用户并通过 sudo 执行特权命令;同时建议配置静态 IP、防火墙规则及 SSH 密钥认证