Linux小课堂: CentOS 7 Minimal 服务器安装与网络配置实战详解

系统安装:从镜像选择到虚拟机部署

在企业级 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.1
  • enp0s3:主以太网接口,当前 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 保存

或

  1. 关闭虚拟机(执行 poweroff)
  2. 进入 "设置 → 网络"
  3. 适配器 1 启用,连接方式选择 桥接网卡(Bridged Adapter)
  4. 接口名称选择宿主机当前活动网卡(如 Wi-Fi 或有线网卡)
  5. 保存设置并重新启动虚拟机

桥接模式原理:虚拟机通过宿主机物理网卡直接接入局域网,如同一台独立设备,由路由器通过 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,应改为:

    ini 复制代码
    BOOTPROTO=static
    IPADDR=192.168.1.100
    NETMASK=255.255.255.0 
    GATEWAY=192.168.1.1
    DNS1=8.8.8.8
  • 若 ONBOOT=no,需编辑文件启用:

    bash 复制代码
    vi /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 获取 IP
  • ONBOOT=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"
  }
}

使用说明

  1. 将此 Node.js 服务部署在 CentOS 服务器上
  2. 安装依赖:npm install
  3. 编译并运行:npm run start
  4. 外部客户端可通过 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 密钥认证

相关推荐
ajassi20006 小时前
AI语音智能体开发日记(十八)智能体服务器xiaozhi-esp32-server源码部署指南
运维·服务器·人工智能·ai·ai编程
‎ദ്ദിᵔ.˛.ᵔ₎6 小时前
linux 进程信号(下)
linux·运维·服务器
skywalk81636 小时前
在FreeBSD系统的linux仿真环境下安装和使用kiro 这个亚马逊的AI agent
linux·人工智能·freebsd·kiro
Mikko76 小时前
Linux 磁盘满了但 du 找不到?LVM 扩容 df 不变?fstab 写错开不了机?三台真机实测磁盘排查
linux·运维·centos
yumgpkpm7 小时前
Acceldata ODP 3.3.6.4 vs CDP Private Cloud Base 7.3.2 对比
大数据·运维·服务器·hadoop·华为·zookeeper·hbase
Madison-No77 小时前
多语言聊天大模型--测试报告
linux·git·python·selenium·jmeter·自动化·postman
Liuqy-057 小时前
特殊进程——孤儿、僵尸、守护进程
linux·运维·服务器
流浪0017 小时前
Linux系统篇47——线程(十二) POSIX 信号量与环形队列,把判空判满提前到访问之前
linux·操作系统·线程·信号量·环形队列
咖丨喱7 小时前
【MMC Core + hc16 Host(WiFi SDIO 如何落到控制器)】
linux
等我调个Bug7 小时前
【Linux系统篇】权限
linux·服务器