IT运维实战指南:从云服务器ECS到私有化大模型部署全流程

本文记录了一次完整的IT运维实践过程,涵盖云服务器ECS的开通与配置、Linux基础操作、MySQL/Redis/Nginx等服务部署、前端项目上线,以及ChatGLM-6B私有化大模型部署和阿里云监控告警配置。适合运维入门和后端开发同学参考。

目录

一、运维基础知识点

在动手之前,先梳理几个核心概念。

1.1 工单系统

工单系统用于记录、分配、处理请求并生成报告,是运维流程化管理的基石。它能把零散的运维工作标准化、可追溯。

1.2 网络通信

不同设备通过网络连接进行数据传输与交换,涉及三个核心概念:

概念 说明
协议 定义数据在网络中传输的规则和格式
IP地址 唯一标识网络中的每一台设备
端口 区分同一台设备上不同的应用程序和服务

常见端口与端口分类:

  • HTTP:80,HTTPS:443,FTP:21
  • 0~1023:系统/服务使用端口
  • 1024~49151:注册端口
  • 49152~65535:动态私有端口

1.3 云服务器

云服务器是一台租用的私有服务器。下文将以阿里云ECS为例,演示如何开通ECS并将操作系统配置为 CentOS Stream


二、云服务器ECS试用与配置

2.1 修改资源配置

操作步骤如下:

  1. 先点击停止实例
  2. 再点击资源配置,选择镜像操作
  3. 将操作系统修改为 CentOS Stream
  4. 自定义密码即可

修改资源配置1

修改资源配置2

修改资源配置3


三、Linux基础操作

3.1 目录结构

Linux采用树形目录结构,几个关键目录的含义如下:

目录 含义
/home/root 用户家目录
/bin/sbin 命令所在目录
/dev 设备目录
/opt 应用安装包目录
/tmp 临时文件目录
/etc 配置文件目录

3.2 基础命令

pwd            # 查看当前目录
ls             # 显示目录内容
cd             # 切换目录
tree           # 显示目录结构
mkdir -p a/b/c # 递归创建多级文件夹
rmdir          # 删除空文件夹

3.3 文件操作与查找

touch a.txt            # 创建文件
touch -d "2024-01-01" a.txt  # 创建文件并指定时间

cp -r a.txt b.txt /test/a/   # 递归复制文件/文件夹到目标目录
mv a.txt ./a/c.txt           # 移动文件(可同时改名)
rm -rf folder                # 递归强制删除文件/文件夹

提示: 路径要写完整,或者使用相对路径 ./a/;移动和复制时都可以改名。

find 查找命令:

# 语法:find 路径 -name 名称 -type 类型 -size 大小 -exec 命令 \;
# -type:f 表示文件,d 表示文件夹
# -size:+100M 表示大于100M

# 将大于100M的文件移至家目录
find /user -size +100M -type f -exec cp {} ~ \;

# 将3天前的文件复制到备份目录
find ~ -mtime +3 -type f -exec cp -r {} /backup/old_logs/ \;

卡住时按 Ctrl+C 终止。

3.4 文件编辑(vim)

vim 有三种模式:命令模式、插入模式、底行模式

vim模式

命令模式操作:

按键 功能
o 光标下一行后插入
O 光标上一行前插入
dd 删除当前行
ndd 删除多行(如 3dd
p 粘贴
yy 复制当前行
gg 回到文件顶部
G 跳到文件末尾

插入模式:

  • i / a:当前光标前 / 后插入
  • o / O:当前行下 / 上一行插入

底行模式:

命令 功能
:q 退出(未保存会报错)
:q! 强制退出
:w 保存
:wq 保存并退出
:x 保存并退出
:X 设置密码(不输入密码即取消)

典型操作流程:

输入 i 进入编辑模式 → 按 Esc 回到命令模式 → 用 dd/3dd 删除、p 粘贴、yy 复制、Ctrl+R 撤销 → 输入 : 进入底行模式保存退出。

安装 vim(与 vi 区别不大):

dnf install -y vim

小坑: 如果没保存就关闭,会产生 .swp 交换文件,按 R 可恢复。

3.5 文件查看命令

文件查看命令

命令 说明 示例
cat 查看文件全部内容 cat /var/log/messages
more 分页查看(向下翻页) more file
less 分页查看,可搜索 less /var/log/messages,输入 / 查找,q 退出
head 查看前N行(默认10) head -20 /var/log/messages
tail 从后往前查看 tail -f a.txt 实时监测文件变化
wc 统计行数/单词/字符 wc -l(行号)-w(单词)-m(字符)
grep 查找指定信息的行 grep error /var/log/messages
| 管道符,连接命令 ll | grep error
echo 追加内容到文件 echo '111' >> a.txt

3.6 文件压缩与解压

# 解压
tar -xzvf file.tar.gz              # 解压 tar.gz
unzip file.zip -C /目标路径         # 解压 zip 到指定目录

# 压缩
tar -czvf file.tar.gz 目录/         # 压缩为 tar.gz
zip file.zip 目录/                  # 压缩为 zip

四、运维部署实战

4.1 申请服务器

将原有实例停用后即可看到试用入口,点击创建使用ECS,创建后按前文方式修改操作系统为 CentOS Stream。

申请服务器1

申请服务器2

设置主机名并刷新生效:

hostnamectl set-hostname node1.itcast.cn
su    # 重新登录刷新

4.2 安装MySQL 8

1)安装MySQL仓库
dnf install -y https://dev.mysql.com/get/mysql80-community-release-el9-1.noarch.rpm
2)检查仓库是否启用
dnf repolist enabled | grep mysql

检查MySQL仓库

3)安装MySQL服务
dnf install -y mysql-community-server --nogpgcheck
4)启动并设置开机自启
systemctl start mysqld
systemctl enable mysqld
systemctl status mysqld
5)获取初始root密码
grep password /var/log/mysqld.log

获取初始密码

6)安全初始化配置
mysql_secure_installation

按提示配置即可:

安全配置

7)登录测试
mysql -uroot -p你的密码
quit   # 退出
8)开放防火墙端口

涉及两层防火墙:

  • firewalld:服务器内部系统层面防火墙
  • 阿里云安全组:云厂商外网层面防火墙
# 方式1:直接放行mysql服务名(firewalld内置识别mysql=3306端口)
firewall-cmd --zone=public --add-service=mysql --permanent

# 方式2:直接放行3306 tcp端口(更通用)
firewall-cmd --zone=public --add-port=3306/tcp --permanent

# 重载防火墙,让新增规则立刻生效
firewall-cmd --reload

# 查看所有防火墙放行规则,验证3306是否开放成功
firewall-cmd --list-all

4.3 导入MySQL数据

1)创建目录并上传SQL文件
mkdir -p /opt/zzyl/sql
cd /opt/zzyl/sql
pwd
ll    # 检查目录内容,再将sql文件拖拽进去
2)导入SQL并验证
# 导入sql文件
mysql -uroot -pAa123456. < ry-zzyl.sql

# 查看所有数据库
mysql -uroot -pAa123456. -e 'show databases;'

# 查看指定库的表
mysql -uroot -pAa123456. -e 'use ry-zzyl; show tables;'

4.4 安装Redis

Redis 是超快的数据存储工具,将数据保存在内存中。

1)安装并修改配置
dnf install redis -y
vim /etc/redis/redis.conf    # 进入配置文件修改

进入底行模式搜索 /bind,将第75行改为 bind * -::*,允许任意IP访问。按 Esc 进入命令模式,按 G 跳到文件末尾,:X 退出。

vim +900 /etc/redis/redis.conf

修改对应配置项:

Redis配置

2)启动Redis
systemctl start redis
systemctl enable redis    # 设置开机自启动
3)测试连接
redis-cli -a 123456       # 带密码登录
redis-cli                 # 无密码登录
auth 123456               # 进入后输入密码
keys *                    # 遍历所有key

4.5 配置百度云大模型API

创建APIKey后复制获取:百度智能云-管理中心

百度云APIKey

4.6 安装Java与部署jar包

1)安装Java 11
cd /export/software                          # 将JDK11放到此目录
tar -xzf openjdk-11.0.0.2_linux-x64.tar.gz -C /opt/   # 解压至/opt/
cd /opt/
ll
vim /etc/profile                             # 编辑环境变量

在文件末尾添加:

export JAVA_HOME=/opt/jdk-11.0.0.2
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=$JAVA_HOME/lib:$CLASSPATH

重新加载环境变量并验证:

source /etc/profile
java -version
2)部署jar包

jar包是Java打包后的压缩包。SpringBoot项目的配置文件分层加载:

配置文件 说明
application.yml 公共基础配置,所有环境都会加载
application-dev.yml 开发环境
application-test.yml 测试环境
application-prod.yml 生产环境

在node1上使用 ip a 获取IP地址,并修改 application-prod.yml

修改配置1

修改配置2

mkdir -p /opt/zzyl/baskend/
cd /opt/zzyl/baskend/
ll
java -jar zzyl-admin.jar    # 启动jar包

配置MySQL远程访问权限(node1报错MySQL连接时设置,% 表示允许任意IP):

CREATE USER 'root'@'%' IDENTIFIED BY 'Aa123456.';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

Ctrl+D 退出MySQL。

MySQL远程权限

在node2上接着启动:

java -jar zzyl-admin.jar
3)安装screen(后台运行)

screen 用于让后端进程在后台持续运行,避免SSH断开导致服务停止。

dnf install -y epel-release     # 先安装第三方库
dnf install -y screen
screen -S zzyl-backend          # 创建会话,给项目起个名字
java -jar zzyl-admin.jar        # 在会话中启动项目
快捷键/命令 功能
Ctrl+A+D 将会话移至后台
screen -ls 查看所有会话
screen -r 会话名 恢复会话

screen会话

4.7 安装Nginx

Nginx 是Web服务器和反向代理服务器,最初为提供高效的静态文件服务而生,后来广泛用于负载均衡、反向代理和缓存。

1)安装并启动
dnf install nginx -y
systemctl start nginx
systemctl enable nginx
2)安全组添加端口

安全组1

安全组2

3)Nginx目录结构
目录 说明
/etc/nginx/ 主配置文件目录,包含 nginx.conf(主配置)、conf.d/(额外配置,常用于虚拟主机)、mime.types(文件类型映射)
/var/www/ 网站文件目录(HTML、图片等)
/var/log/nginx/ 日志文件目录,用于排查错误

五、前端服务部署

前端部署用到Nginx的Web服务器功能和反向代理(将前端请求转发给后端)。

5.1 修改nginx.conf配置

vim /etc/nginx/nginx.conf

1)在HTTP块下添加CORS跨域配置:

# 跨域资源共享(CORS),允许其他域名访问资源,解决浏览器同源策略限制
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods "GET, POST, OPTIONS, PUT, DELETE";
add_header Access-Control-Allow-Headers "Origin, X-Requested-With, Content-Type, Accept, Authorization";

2)设置请求体大小与缓冲区(用于文件上传):

client_max_body_size 60m;        # 限制客户端请求体的最大大小
client_body_buffer_size 512k;    # 缓冲客户端请求体的内存大小
client_header_buffer_size 2k;    # 缓冲请求头的内存大小

3)在server块中配置静态页面与反向代理:

# 处理静态页面
location / {
    root /var/www/dist;
    index index.html index.htm;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection upgrade;
    try_files $uri $uri/ /index.html;
}

# 处理反向代理
location /prod-api/ {
    proxy_pass http://192.168.88.102:8080/zzyl-admin/;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection upgrade;
}

5.2 完整nginx.conf参考

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}

http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 4096;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

    include /etc/nginx/conf.d/*.conf;

    # CORS 跨域配置
    add_header Access-Control-Allow-Origin *;
    add_header Access-Control-Allow-Methods "GET, POST, OPTIONS, PUT, DELETE";
    add_header Access-Control-Allow-Headers "Origin, X-Requested-With, Content-Type, Accept, Authorization";

    server {
        listen       80;
        listen       [::]:80;

        # 请求体大小与缓冲区配置
        client_max_body_size 60m;
        client_body_buffer_size 512k;
        client_header_buffer_size 2k;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        error_page 404 /404.html;
        location = /404.html {
        }

        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
        }

        # 处理静态页面
        location / {
            root   /var/www/dist;
            index  index.html index.htm;
            proxy_set_header   Upgrade          $http_upgrade;
            proxy_set_header   Connection       upgrade;
            try_files $uri $uri/ /index.html;
        }

        # 处理反向代理(注意:proxy_pass 改为自己的后端IP)
        location /prod-api/ {
            proxy_pass http://172.24.11.176:9000/;
            proxy_set_header   Upgrade          $http_upgrade;
            proxy_set_header   Connection       upgrade;
        }
    }
}

注意: proxy_pass 中的IP需替换为你自己后端服务的实际IP和端口。

修改完成后重载Nginx使配置生效:

nginx -s reload

六、智能客服私有化大模型部署

本节采用 ChatGLM-6B 模型进行私有化部署。

6.1 服务器要求

  • 模型:ChatGLM-6B
  • 系统:Linux
  • 显存:4GB
  • 内存:8GB
  • 磁盘:40GB

购买4核15G的大模型ECS:

大模型ECS

6.2 安装显卡驱动

验证服务器是否已安装显卡驱动:

lspci | grep -i nvidia
nvidia-smi    # 验证驱动是否正确加载

验证显卡

如果未安装,前往 developer.nvidia.com 下载安装:

wget https://developer.download.nvidia.com/compute/cuda/12.9.1/local_installers/cuda_12.9.1_575.57.08_linux.run
sudo sh cuda_12.9.1_575.57.08_linux.run   # 需等待一会
# 输入 accept 接受协议

安装CUDA

6.3 配置CUDA环境变量

echo 'export PATH=/usr/local/cuda/bin:$PATH' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc      # 执行使配置生效
nvidia-smi            # 验证是否成功

6.4 安装Anaconda

大模型使用Python开发,依赖大量库,使用Anaconda可以方便地管理包并隔离不同环境,减少相互影响。

wget https://repo.anaconda.com/archive/Anaconda3-2024.10-1-Linux-x86_64.sh
sh Anaconda3-2024.10-1-Linux-x86_64.sh

安装过程:一路回车,出现 yes/no 输入 yes,注意不要多按回车跳过初始化环境,最后出现的 yes/no 也输入 yes

Anaconda安装

输入 su 后出现 (base) 即安装完成。

如果没出现初始化询问,手动配置 ~/.bashrc

cd ~    # 切换到家目录
vim .bashrc

在文件末尾添加:

# >>> conda initialize >>>
# !! Contents within this block are managed by 'conda init' !!
__conda_setup="$('/root/anaconda3/bin/conda' 'shell.bash' 'hook' 2> /dev/null)"
if [ $? -eq 0 ]; then
    eval "$__conda_setup"
else
    if [ -f "/root/anaconda3/etc/profile.d/conda.sh" ]; then
        . "/root/anaconda3/etc/profile.d/conda.sh"
    else
        export PATH="/root/anaconda3/bin:$PATH"
    fi
fi
unset __conda_setup
# <<< conda initialize <<<

保存退出即可。

6.5 部署ChatGLM-6B模型

# 1. 创建虚拟环境
conda create --name chatglm python=3.10
# 输入 y 确认

# 2. 进入虚拟环境
conda activate chatglm

# 3. 创建项目目录
mkdir -p /export/data/glm
cd /export/data/glm

# 4. 安装国内模型资源平台工具
pip install -U huggingface_hub

# 5. 设置模型资源镜像地址
export HF_ENDPOINT=https://hf-mirror.com

# 6. 下载ChatGLM-6B-int4模型(断点续传)
huggingface-cli download --resume-download THUDM/chatglm-6b-int4 --local-dir THUDM/chatglm-6b-int4

参数说明:

  • -U:升级指定包到最新版本(未安装则直接安装最新版)
  • --resume-download:支持断点续传,防止网络中断导致重新下载

6.6 上传代码并安装依赖

conda activate chatglm          # 进入虚拟环境
cd /export/data/glm
ll                              # 检查文件,将ChatGLM-6B代码拖入

# 安装依赖
cd /export/data/glm/ChatGLM-6B
pip install -r requirements.txt -i https://mirror.sjtu.edu.cn/pypi/web/simple

Python项目的依赖一般写在 requirements.txt 中,-i 指定国内镜像源加速下载。先全部安装,缺什么再补。

6.7 修改模型路径并启动

修改 api.py 文件,告诉程序知识库(模型)存放位置:

cd /export/data/glm/ChatGLM-6B
vi api.py

增加/修改以下内容:

model_path = "/export/data/glm/THUDM/chatglm-6b-int4"

tokenizer = AutoTokenizer.from_pretrained(model_path, trust_remote_code=True)
model = AutoModel.from_pretrained(model_path, trust_remote_code=True).half().cuda()
model = model.eval()

修改api.py

启动服务:

python api.py

默认部署在本地8000端口,通过POST方法调用:

curl -X POST "http://127.0.0.1:8000" \
  -H 'Content-Type: application/json' \
  -d '{"prompt":"你好","history":[]}'

记得在安全组中添加8000端口放行。


七、运维监控与告警

阿里云监控帮助用户实时监控云上各种资源,出现问题时自动发出警报。

7.1 云监控

云监控

安装云监控插件后,可以查看CPU等指标,点击可查看详情:

云监控详情1

云监控详情2

7.2 配置监控告警

配置告警

1)设置报警联系人和联系组

报警联系人

报警联系组

2)设置报警规则

报警规则

可使用监控脚本测试告警是否生效:

sh cpu_test.sh

八、常见运维问题排查

8.1 CPU负载过高

使用 tophtop 确认负载情况:

top命令

可能原因:

  • 某个进程或服务占用过高 → kill -9 进程号 终止
  • 服务器本身性能不足
  • 磁盘、网络阻塞导致CPU负载高但使用率不高
  • 遭到攻击
  • 进程处于不可中断睡眠状态(D状态)

8.2 内存爆满

mem 行的 free 值几乎为0时,说明内存已满:

内存爆满

8.3 ECS服务器巡检报告

定期对ECS进行巡检,评估内容包括:

  • 性能监控数据
  • 异常问题判断
  • 安全风险评估
  • 资源使用和配置
  • 时间记录与处理意见

云监控支持自定义大盘,可按需创建并添加监控项,实现可视化巡检。


九、总结

本文完整记录了一次IT运维实践的全流程:

  1. 基础准备:理解工单系统、网络通信、云服务器等核心概念
  2. 服务器配置:ECS开通与CentOS Stream系统配置
  3. Linux基础:目录结构、文件操作、vim编辑、文件查看、压缩解压
  4. 服务部署:MySQL 8、Redis、Java环境、jar包部署(screen后台运行)、Nginx
  5. 前端部署:Nginx静态托管 + 反向代理 + CORS跨域配置
  6. 大模型部署:显卡驱动、CUDA、Anaconda、ChatGLM-6B私有化部署
  7. 监控告警:阿里云云监控、报警规则配置
  8. 问题排查:CPU负载、内存爆满等常见问题

核心经验:

  • 防火墙有两层(firewalld + 安全组),部署服务时要确保两层都放行端口
  • 后端服务用screen运行,避免SSH断开导致服务停止
  • Nginx配置CORS和反向代理是前后端分离项目的标配
  • 大模型部署注意显存要求和环境隔离(conda虚拟环境)
  • 监控告警要提前配置,防患于未然

希望本文对正在学习或从事运维工作的同学有所帮助!


本文为原创学习笔记,转载请注明出处。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐