IT运维:从云服务器ECS到私有化大模型部署全流程(包含安装MySQL,Nginx,Redis过程)
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 修改资源配置
操作步骤如下:
- 先点击停止实例
- 再点击资源配置,选择镜像操作
- 将操作系统修改为 CentOS Stream
- 自定义密码即可



三、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 有三种模式:命令模式、插入模式、底行模式。

命令模式操作:
| 按键 | 功能 |
|---|---|
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。


设置主机名并刷新生效:
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

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
修改对应配置项:

2)启动Redis
systemctl start redis
systemctl enable redis # 设置开机自启动
3)测试连接
redis-cli -a 123456 # 带密码登录
redis-cli # 无密码登录
auth 123456 # 进入后输入密码
keys * # 遍历所有key
4.5 配置百度云大模型API
创建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:


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。

在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 会话名 |
恢复会话 |

4.7 安装Nginx
Nginx 是Web服务器和反向代理服务器,最初为提供高效的静态文件服务而生,后来广泛用于负载均衡、反向代理和缓存。
1)安装并启动
dnf install nginx -y
systemctl start nginx
systemctl enable nginx
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:

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 接受协议

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。

输入 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()

启动服务:
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等指标,点击可查看详情:


7.2 配置监控告警

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


2)设置报警规则

可使用监控脚本测试告警是否生效:
sh cpu_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虚拟环境)
- 监控告警要提前配置,防患于未然
希望本文对正在学习或从事运维工作的同学有所帮助!
本文为原创学习笔记,转载请注明出处。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐


所有评论(0)