IT运维实战指南:从云服务器ECS到私有化大模型部署全流程
本文记录了一次完整的IT运维实践过程,涵盖云服务器ECS的开通与配置、Linux基础操作、MySQL/Redis/Nginx等服务部署、前端项目上线,以及ChatGLM-6B私有化大模型部署和阿里云监控告警配置。适合运维入门和后端开发同学参考。
目录
- IT运维实战指南:从云服务器ECS到私有化大模型部署全流程
- 一、运维基础知识点
- 1.1 工单系统
- 1.2 网络通信
- 1.3 云服务器
- 二、云服务器ECS试用与配置
- 2.1 修改资源配置
- 三、Linux基础操作
- 3.1 目录结构
- 3.2 基础命令
- 3.3 文件操作与查找
- 3.4 文件编辑(vim)
- 3.5 文件查看命令
- 3.6 文件压缩与解压
- 四、运维部署实战
- 4.1 申请服务器
- 4.2 安装MySQL 8
- 1)安装MySQL仓库
- 2)检查仓库是否启用
- 3)安装MySQL服务
- 4)启动并设置开机自启
- 5)获取初始root密码
- 6)安全初始化配置
- 7)登录测试
- 8)开放防火墙端口
- 4.3 导入MySQL数据
- 1)创建目录并上传SQL文件
- 2)导入SQL并验证
- 4.4 安装Redis
- 1)安装并修改配置
- 2)启动Redis
- 3)测试连接
- 4.5 配置百度云大模型API
- 4.6 安装Java与部署jar包
- 1)安装Java 11
- 2)部署jar包
- 3)安装screen(后台运行)
- 4.7 安装Nginx
- 1)安装并启动
- 2)安全组添加端口
- 3)Nginx目录结构
- 五、前端服务部署
- 5.1 修改nginx.conf配置
- 5.2 完整nginx.conf参考
- 六、智能客服私有化大模型部署
- 6.1 服务器要求
- 6.2 安装显卡驱动
- 6.3 配置CUDA环境变量
- 6.4 安装Anaconda
- 6.5 部署ChatGLM-6B模型
- 6.6 上传代码并安装依赖
- 6.7 修改模型路径并启动
- 七、运维监控与告警
- 7.1 云监控
- 7.2 配置监控告警
- 1)设置报警联系人和联系组
- 2)设置报警规则
- 八、常见运维问题排查
- 8.1 CPU负载过高
- 8.2 内存爆满
- 8.3 ECS服务器巡检报告
- 九、总结
一、运维基础知识点
在动手之前,先梳理几个核心概念。
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 修改资源配置
操作步骤如下:
- 先点击停止实例
- 再点击资源配置,选择镜像操作
- 将操作系统修改为CentOS Stream
- 自定义密码即可
三、Linux基础操作
3.1 目录结构
Linux采用树形目录结构,几个关键目录的含义如下:
| 目录 | 含义 |
|---|---|
/home、/root | 用户家目录 |
/bin、/sbin | 命令所在目录 |
/dev | 设备目录 |
/opt | 应用安装包目录 |
/tmp | 临时文件目录 |
/etc | 配置文件目录 |
3.2 基础命令
pwd# 查看当前目录ls# 显示目录内容cd# 切换目录tree# 显示目录结构mkdir-pa/b/c# 递归创建多级文件夹rmdir# 删除空文件夹3.3 文件操作与查找
toucha.txt# 创建文件touch-d"2024-01-01"a.txt# 创建文件并指定时间cp-ra.txt b.txt /test/a/# 递归复制文件/文件夹到目标目录mva.txt ./a/c.txt# 移动文件(可同时改名)rm-rffolder# 递归强制删除文件/文件夹提示:路径要写完整,或者使用相对路径
./a/;移动和复制时都可以改名。
find 查找命令:
# 语法:find 路径 -name 名称 -type 类型 -size 大小 -exec 命令 \;# -type:f 表示文件,d 表示文件夹# -size:+100M 表示大于100M# 将大于100M的文件移至家目录find/user-size+100M-typef-execcp{}~\;# 将3天前的文件复制到备份目录find~-mtime+3-typef-execcp-r{}/backup/old_logs/\;卡住时按
Ctrl+C终止。
3.4 文件编辑(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 区别不大):
dnfinstall-yvim小坑:如果没保存就关闭,会产生
.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-xzvffile.tar.gz# 解压 tar.gzunzipfile.zip-C/目标路径# 解压 zip 到指定目录# 压缩tar-czvffile.tar.gz 目录/# 压缩为 tar.gzzipfile.zip 目录/# 压缩为 zip四、运维部署实战
4.1 申请服务器
将原有实例停用后即可看到试用入口,点击创建使用ECS,创建后按前文方式修改操作系统为 CentOS Stream。
设置主机名并刷新生效:
hostnamectl set-hostname node1.itcast.cnsu# 重新登录刷新4.2 安装MySQL 8
1)安装MySQL仓库
dnfinstall-yhttps://dev.mysql.com/get/mysql80-community-release-el9-1.noarch.rpm2)检查仓库是否启用
dnf repolist enabled|grepmysql3)安装MySQL服务
dnfinstall-ymysql-community-server--nogpgcheck4)启动并设置开机自启
systemctl start mysqld systemctlenablemysqld systemctl status mysqld5)获取初始root密码
greppassword /var/log/mysqld.log6)安全初始化配置
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-all4.3 导入MySQL数据
1)创建目录并上传SQL文件
mkdir-p/opt/zzyl/sqlcd/opt/zzyl/sqlpwdll# 检查目录内容,再将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)安装并修改配置
dnfinstallredis-yvim/etc/redis/redis.conf# 进入配置文件修改进入底行模式搜索/bind,将第75行改为bind * -::*,允许任意IP访问。按Esc进入命令模式,按G跳到文件末尾,:X退出。
vim+900 /etc/redis/redis.conf修改对应配置项:
2)启动Redis
systemctl start redis systemctlenableredis# 设置开机自启动3)测试连接
redis-cli-a123456# 带密码登录redis-cli# 无密码登录auth123456# 进入后输入密码keys *# 遍历所有key4.5 配置百度云大模型API
创建APIKey后复制获取:百度智能云-管理中心
4.6 安装Java与部署jar包
1)安装Java 11
cd/export/software# 将JDK11放到此目录tar-xzfopenjdk-11.0.0.2_linux-x64.tar.gz-C/opt/# 解压至/opt/cd/opt/ llvim/etc/profile# 编辑环境变量在文件末尾添加:
exportJAVA_HOME=/opt/jdk-11.0.0.2exportPATH=$JAVA_HOME/bin:$PATHexportCLASSPATH=$JAVA_HOME/lib:$CLASSPATH重新加载环境变量并验证:
source/etc/profilejava-version2)部署jar包
jar包是Java打包后的压缩包。SpringBoot项目的配置文件分层加载:
| 配置文件 | 说明 |
|---|---|
application.yml | 公共基础配置,所有环境都会加载 |
application-dev.yml | 开发环境 |
application-test.yml | 测试环境 |
application-prod.yml | 生产环境 |
在node1上使用ip a获取IP地址,并修改application-prod.yml:
mkdir-p/opt/zzyl/baskend/cd/opt/zzyl/baskend/ lljava-jarzzyl-admin.jar# 启动jar包配置MySQL远程访问权限(node1报错MySQL连接时设置,%表示允许任意IP):
CREATEUSER'root'@'%'IDENTIFIEDBY'Aa123456.';GRANTALLPRIVILEGESON*.*TO'root'@'%'WITHGRANTOPTION;FLUSHPRIVILEGES;
Ctrl+D退出MySQL。
在node2上接着启动:
java-jarzzyl-admin.jar3)安装screen(后台运行)
screen 用于让后端进程在后台持续运行,避免SSH断开导致服务停止。
dnfinstall-yepel-release# 先安装第三方库dnfinstall-yscreenscreen-Szzyl-backend# 创建会话,给项目起个名字java-jarzzyl-admin.jar# 在会话中启动项目| 快捷键/命令 | 功能 |
|---|---|
Ctrl+A+D | 将会话移至后台 |
screen -ls | 查看所有会话 |
screen -r 会话名 | 恢复会话 |
4.7 安装Nginx
Nginx 是Web服务器和反向代理服务器,最初为提供高效的静态文件服务而生,后来广泛用于负载均衡、反向代理和缓存。
1)安装并启动
dnfinstallnginx-ysystemctl start nginx systemctlenablenginx2)安全组添加端口
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.conf1)在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-sreload六、智能客服私有化大模型部署
本节采用ChatGLM-6B模型进行私有化部署。
6.1 服务器要求
- 模型:ChatGLM-6B
- 系统:Linux
- 显存:4GB
- 内存:8GB
- 磁盘:40GB
购买4核15G的大模型ECS:
6.2 安装显卡驱动
验证服务器是否已安装显卡驱动:
lspci|grep-invidia nvidia-smi# 验证驱动是否正确加载如果未安装,前往 developer.nvidia.com 下载安装:
wgethttps://developer.download.nvidia.com/compute/cuda/12.9.1/local_installers/cuda_12.9.1_575.57.08_linux.runsudoshcuda_12.9.1_575.57.08_linux.run# 需等待一会# 输入 accept 接受协议6.3 配置CUDA环境变量
echo'export PATH=/usr/local/cuda/bin:$PATH'>>~/.bashrcecho'export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH'>>~/.bashrcsource~/.bashrc# 执行使配置生效nvidia-smi# 验证是否成功6.4 安装Anaconda
大模型使用Python开发,依赖大量库,使用Anaconda可以方便地管理包并隔离不同环境,减少相互影响。
wgethttps://repo.anaconda.com/archive/Anaconda3-2024.10-1-Linux-x86_64.shshAnaconda3-2024.10-1-Linux-x86_64.sh安装过程:一路回车,出现 yes/no 输入
yes,注意不要多按回车跳过初始化环境,最后出现的 yes/no 也输入yes。
输入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[$?-eq0];theneval"$__conda_setup"elseif[-f"/root/anaconda3/etc/profile.d/conda.sh"];then."/root/anaconda3/etc/profile.d/conda.sh"elseexportPATH="/root/anaconda3/bin:$PATH"fifiunset__conda_setup# <<< conda initialize <<<保存退出即可。
6.5 部署ChatGLM-6B模型
# 1. 创建虚拟环境conda create--namechatglmpython=3.10# 输入 y 确认# 2. 进入虚拟环境conda activate chatglm# 3. 创建项目目录mkdir-p/export/data/glmcd/export/data/glm# 4. 安装国内模型资源平台工具pipinstall-Uhuggingface_hub# 5. 设置模型资源镜像地址exportHF_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 pipinstall-rrequirements.txt-ihttps://mirror.sjtu.edu.cn/pypi/web/simplePython项目的依赖一般写在
requirements.txt中,-i指定国内镜像源加速下载。先全部安装,缺什么再补。
6.7 修改模型路径并启动
修改api.py文件,告诉程序知识库(模型)存放位置:
cd/export/data/glm/ChatGLM-6Bviapi.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()启动服务:
python api.py默认部署在本地8000端口,通过POST方法调用:
curl-XPOST"http://127.0.0.1:8000"\-H'Content-Type: application/json'\-d'{"prompt":"你好","history":[]}'记得在安全组中添加8000端口放行。
七、运维监控与告警
阿里云监控帮助用户实时监控云上各种资源,出现问题时自动发出警报。
7.1 云监控
安装云监控插件后,可以查看CPU等指标,点击可查看详情:
7.2 配置监控告警
1)设置报警联系人和联系组
2)设置报警规则
可使用监控脚本测试告警是否生效:
shcpu_test.sh八、常见运维问题排查
8.1 CPU负载过高
使用top或htop确认负载情况:
可能原因:
- 某个进程或服务占用过高 →
kill -9 进程号终止 - 服务器本身性能不足
- 磁盘、网络阻塞导致CPU负载高但使用率不高
- 遭到攻击
- 进程处于不可中断睡眠状态(D状态)
8.2 内存爆满
当mem行的free值几乎为0时,说明内存已满:
8.3 ECS服务器巡检报告
定期对ECS进行巡检,评估内容包括:
- 性能监控数据
- 异常问题判断
- 安全风险评估
- 资源使用和配置
- 时间记录与处理意见
云监控支持自定义大盘,可按需创建并添加监控项,实现可视化巡检。
九、总结
本文完整记录了一次IT运维实践的全流程:
- 基础准备:理解工单系统、网络通信、云服务器等核心概念
- 服务器配置:ECS开通与CentOS Stream系统配置
- Linux基础:目录结构、文件操作、vim编辑、文件查看、压缩解压
- 服务部署:MySQL 8、Redis、Java环境、jar包部署(screen后台运行)、Nginx
- 前端部署:Nginx静态托管 + 反向代理 + CORS跨域配置
- 大模型部署:显卡驱动、CUDA、Anaconda、ChatGLM-6B私有化部署
- 监控告警:阿里云云监控、报警规则配置
- 问题排查:CPU负载、内存爆满等常见问题
核心经验:
- 防火墙有两层(firewalld + 安全组),部署服务时要确保两层都放行端口
- 后端服务用screen运行,避免SSH断开导致服务停止
- Nginx配置CORS和反向代理是前后端分离项目的标配
- 大模型部署注意显存要求和环境隔离(conda虚拟环境)
- 监控告警要提前配置,防患于未然
希望本文对正在学习或从事运维工作的同学有所帮助!
本文为原创学习笔记,转载请注明出处。