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 showip a
显示路由表 route -n ip route showip 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.x192.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.x10.x.x.x172.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 showip a
查看路由表 route -n ip route showip 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 密钥认证

相关推荐
go_bai5 小时前
Linux_基础IO(2)
linux·开发语言·经验分享·笔记·学习方法·1024程序员节
华纳云IDC服务商5 小时前
服务器实时流量监控工具推荐:确保服务器不被滥用
服务器·流量监控
tritone5 小时前
在优豆云免费云服务器上搭建与配置Apache的实践笔记
服务器·网络·apache·1024程序员节
YongCheng_Liang5 小时前
Windows CMD 常用命令:7 大核心模块速查指南(附实战场景)
运维·服务器·windows·1024程序员节
野犬寒鸦5 小时前
从零起步学习MySQL || 第九章:从数据页的角度看B+树及MySQL中数据的底层存储原理(结合常见面试题深度解析)
java·服务器·数据库·后端·mysql·oracle·1024程序员节
huangyuchi.5 小时前
【Linux网络】套接字Socket编程预备
linux·运维·服务器·端口号·linux网络·套接字·1024程序员节
Bruce_Liuxiaowei5 小时前
[特殊字符] C&C服务器:网络攻击的指挥中心
运维·服务器·网络安全
胡耀超5 小时前
5、服务器互连技术(小白入门版)
服务器·网络·ai·网络拓扑·gpu·pcie·1024程序员节
阿酷tony5 小时前
IIS服务器一直报Application Error错误
运维·服务器