目录
-
- 前言:你的服务器,不只是 “云硬盘”
- 一、部署篇:从 “裸机” 到 “可用环境”,1 小时搭好生产级服务器
-
- 1.1 服务器选购与初始化(决定后续运维成本)
-
- 1.1.1 关键初始化操作(必做!)
- 1.2 基础环境部署:以 LNMP(Nginx+MySQL+PHP)为例
-
- 1.2.1 安装 MySQL(数据库)
- 1.2.2 安装 Nginx(Web 服务器)
- 1.2.3 安装 PHP(动态语言支持)
- 1.2.4 部署应用(以 WordPress 为例)
- 1.3 部署验收:确保环境 “可用”
- 二、调试篇:应用崩溃?5 分钟定位问题的 “运维工具箱”
-
- 2.1 常见问题 1:Nginx 502 Bad Gateway(PHP-FPM 崩溃)
- 2.2 常见问题 2:MySQL 连接超时(业务卡顿)
- 2.3 调试工具推荐(必装!)
- 三、迁移篇:业务扩容或搬迁,如何做到 “零停机”?
-
- 3.1 场景 1:服务器配置升级(小机器换大机器)
- 3.2 场景 2:跨可用区迁移(容灾需求)
- 3.3 迁移注意事项
- 四、维护篇:让服务器 “永葆青春” 的日常操作
-
- 4.1 系统级维护:安全与性能的基石
-
- 4.1.1 定期更新(防漏洞)
- 4.1.2 安全加固(防攻击)
- 4.2 应用级维护:确保业务稳定运行
-
- 4.2.1 日志管理(避免磁盘爆仓)
- 4.2.2 定时任务(自动化运维)
- 五、监控篇:从 “被动救火” 到 “主动预防”
-
- 5.1 阿里云原生监控(开箱即用)
-
- 5.1.1 关键监控指标(必设!)
- 5.1.2 告警设置(避免漏报)
- 5.2 自定义监控(高级玩法)
-
- 5.2.1 安装 Prometheus
- 5.2.2 安装 Grafana(可视化)
- 5.2.3 监控效果
- 总结:运维的本质是 “系统化思维”
前言:你的服务器,不只是 “云硬盘”
在云计算普及的今天,“上云” 早已不是企业的选择题,而是必答题。但你是否遇到过这些场景?
- 新购的阿里云 ECS 服务器,安装环境时反复报错,半天搭不好一个 WordPress;
- 应用突然崩溃,日志里全是乱码,根本不知道从哪查起;
- 业务增长需要扩容,数据迁移时手忙脚乱,停机 3 小时被老板骂;
- 服务器被攻击、磁盘空间爆了、数据库慢查询…… 每天提心吊胆。
这些问题的核心,在于缺乏系统化的服务器全生命周期管理能力。
本文将围绕阿里云 Linux 服务器的部署→调试→迁移→维护→监控全流程,结合真实运维场景,给出可复用的操作指南。无论你是刚接触云服务器的新手,还是需要优化现有环境的运维工程师,都能从中找到解决问题的 “钥匙”。
一、部署篇:从 “裸机” 到 “可用环境”,1 小时搭好生产级服务器
1.1 服务器选购与初始化(决定后续运维成本)
阿里云 ECS 的选型需结合业务类型:
- 博客 / 小网站:1 核 2G(突发性能实例 t6)+40G 系统盘 + 1M 公网带宽(足够支撑日均 1000 访问);
- 企业级应用(如 ERP):2 核 4G(通用型 c6)+100G 系统盘 + 5M 公网带宽(需考虑数据库 IO);
- 高并发场景(如电商大促):4 核 8G(计算型 g6)+ 负载均衡 + 弹性伸缩(按需扩容)。
1.1.1 关键初始化操作(必做!)
# 步骤1:SSH远程连接(替换为公网IP)
ssh root@47.100.xx.xx
# 步骤2:更新系统软件源(避免安装旧版本)
apt update && apt upgrade -y # Ubuntu/Debian
# 或
yum update -y # CentOS/Fedora
# 步骤3:设置 hostname(方便集群管理)
hostnamectl set-hostname blog-server # 替换为你的服务器名
1.2 基础环境部署:以 LNMP(Nginx+MySQL+PHP)为例
90% 的 Web 应用依赖 LNMP 环境,以下是标准化部署流程(以 Ubuntu 22.04 为例):
1.2.1 安装 MySQL(数据库)
# 安装MySQL 8.0(最新稳定版)
sudo apt install mysql-server -y
# 初始化安全配置(设置root密码、禁用远程root登录)
sudo mysql_secure_installation
# 创建应用专用数据库(如blog_db)和用户(blog_user)
sudo mysql -u root -p <<EOF
CREATE DATABASE blog_db DEFAULT CHARSET utf8mb4;
CREATE USER 'blog_user'@'localhost' IDENTIFIED BY 'Blog@2024';
GRANT ALL ON blog_db.* TO 'blog_user'@'localhost';
FLUSH PRIVILEGES;
EOF
1.2.2 安装 Nginx(Web 服务器)
# 安装Nginx并启动
sudo apt install nginx -y
sudo systemctl start nginx
sudo systemctl enable nginx # 开机自启
# 验证安装(浏览器访问公网IP,出现“Welcome to nginx!”即成功)
1.2.3 安装 PHP(动态语言支持)
# 安装PHP 8.1(兼容主流框架如Laravel)及扩展
sudo apt install php8.1-fpm php8.1-mysql php8.1-gd php8.1-mbstring -y
# 启动PHP-FPM并关联Nginx
sudo systemctl start php8.1-fpm
sudo systemctl enable php8.1-fpm
1.2.4 部署应用(以 WordPress 为例)
# 步骤1:创建网站根目录并设置权限
sudo mkdir -p /var/www/blog
sudo chown -R www-data:www-data /var/www/blog
sudo chmod -R 755 /var/www/blog
# 步骤2:下载并解压WordPress
cd /var/www/blog
sudo wget https://cn.wordpress.org/latest-zh_CN.tar.gz
sudo tar -zxvf latest-zh_CN.tar.gz –strip-components=1 # 解压到当前目录
# 步骤3:配置Nginx虚拟主机(/etc/nginx/sites-available/blog.conf)
sudo nano /etc/nginx/sites-available/blog.conf
Nginx 配置文件内容(关键参数注释):
server {
listen 80;
server_name your-domain.com www.your-domain.com; # 替换为你的域名(如conkl.cn)
root /var/www/blog;
index index.php;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
# PHP解析(关键!)
location ~ \\.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
}
}
1.3 部署验收:确保环境 “可用”
- Nginx 验证:curl http://localhost返回 Nginx 欢迎页;
- PHP 验证:在/var/www/blog创建info.php(内容<?php phpinfo(); ?>),访问http://your-domain.com/info.php看到 PHP 信息页;
- MySQL 验证:mysql -u blog_user -p blog_db能成功登录数据库。
二、调试篇:应用崩溃?5 分钟定位问题的 “运维工具箱”
2.1 常见问题 1:Nginx 502 Bad Gateway(PHP-FPM 崩溃)
现象:访问 PHP 页面提示 502,Nginx 错误日志(/var/log/nginx/error.log)显示:
connect() to unix:/run/php/php8.1-fpm.sock failed (111: Connection refused)
排查流程:
检查 PHP-FPM 是否运行:
sudo systemctl status php8.1-fpm # 状态应为active (running)
若未运行,尝试重启:
sudo systemctl restart php8.1-fpm
若频繁崩溃,检查 PHP-FPM 配置(
/etc/php/8.1/fpm/pool.d/www.conf
):
- pm.max_children(最大进程数)是否过小(推荐:内存 / 30M,如 2G 内存设为 50);
- pm.status_path是否开启(用于监控进程状态)。
2.2 常见问题 2:MySQL 连接超时(业务卡顿)
现象:应用查询数据库时提示 “Connection timed out”,MySQL 慢查询日志(/var/log/mysql/slow.log)有大量超时记录。
排查流程:
检查 MySQL 连接数:
mysql -u root -p -e "SHOW GLOBAL STATUS LIKE 'Threads_connected';"
- 若接近max_connections(默认 151),需调大该参数(/etc/mysql/mysql.conf.d/mysqld.cnf中设置max_connections=300);
优化慢查询:
- 为查询字段添加索引(如ALTER TABLE posts ADD INDEX idx_title (title););
- 开启查询缓存(query_cache_type=1,但 MySQL 8.0 已弃用,推荐用 Redis 缓存)。
2.3 调试工具推荐(必装!)
telnet | 测试端口连通性(如 MySQL 3306) | telnet 127.0.0.1 3306 | |
netstat | 查看端口占用 | `netstat -tunlp | grep 80` |
strace | 跟踪进程系统调用(定位崩溃) | strace -p $(pgrep nginx) | |
htop | 实时监控 CPU / 内存占用 | htop(比 top 更直观) |
三、迁移篇:业务扩容或搬迁,如何做到 “零停机”?
3.1 场景 1:服务器配置升级(小机器换大机器)
需求:原服务器 1 核 2G,业务增长需升级到 2 核 4G。
迁移步骤:
- 数据库:mysqldump -u blog_user -p blog_db > blog_db.sql;
- 应用文件:tar -czvf /backup/blog.tar.gz /var/www/blog;
- 上传备份文件到新服务器;
- 导入数据库:mysql -u blog_user -p blog_db < blog_db.sql;
- 解压应用文件到/var/www/blog;
3.2 场景 2:跨可用区迁移(容灾需求)
需求:原服务器在阿里云华东 1(杭州),需迁移到华东 2(上海)以提升容灾能力。
最佳实践:
- 使用阿里云迁移工具(SMC):支持在线迁移,无需停机;
- 步骤:
- 在原服务器安装 SMC 客户端;
- 在目标可用区创建空 ECS 实例;
- 通过 SMC 同步原服务器磁盘数据到目标实例;
- 停止原服务器,启动目标实例,切换域名解析。
3.3 迁移注意事项
- 最小化停机时间:对高可用业务,可使用负载均衡(SLB)实现新旧服务器流量切换;
- 环境一致性:新服务器的系统版本、软件版本(如 Nginx 1.22→1.24 需测试兼容性)需与原环境一致;
- 数据校验:迁移后对比原服务器和新服务器的文件 MD5 值(md5sum /var/www/blog/index.php),确保无丢失。
四、维护篇:让服务器 “永葆青春” 的日常操作
4.1 系统级维护:安全与性能的基石
4.1.1 定期更新(防漏洞)
# Ubuntu/Debian:更新系统和软件包
sudo apt update && sudo apt upgrade -y
# CentOS/Fedora:
sudo yum update -y
注意:内核更新(linux-image-*)需谨慎,可能导致驱动不兼容(如网卡 / 显卡),建议重启前备份。
4.1.2 安全加固(防攻击)
-
禁用 root 直接登录:
sudo nano /etc/ssh/sshd_config
# 修改为:PermitRootLogin no
sudo systemctl restart sshd -
启用 SSH 密钥登录
(替代密码,防暴力破解):
# 本地生成密钥对(Windows用PuttyGen,Mac/Linux用ssh-keygen)
ssh-keygen -t rsa -b 4096
# 将公钥上传到服务器
cat ~/.ssh/id_rsa.pub | ssh user@server "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
4.2 应用级维护:确保业务稳定运行
4.2.1 日志管理(避免磁盘爆仓)
-
日志切割:使用
logrotate
定期压缩旧日志(配置文件):
/etc/logrotate.d/nginx
/var/log/nginx/*.log {
daily # 每日切割
rotate 7 # 保留7天日志
missingok # 日志不存在不报错
compress # 压缩旧日志
delaycompress # 延迟压缩(避免当前日志被压缩)
} -
手动清理大日志:
# 清空Nginx访问日志(不删除文件,避免服务找不到路径)
cat /dev/null > /var/log/nginx/access.log
4.2.2 定时任务(自动化运维)
用crontab设置每日数据库备份:
# 编辑定时任务
crontab -e
# 添加以下内容(每天凌晨3点备份blog_db到/backup)
0 3 * * * mysqldump -u blog_user -p'Blog@2024' blog_db > /backup/blog_db_$(date +\\%Y\\%m\\%d).sql
五、监控篇:从 “被动救火” 到 “主动预防”
5.1 阿里云原生监控(开箱即用)
阿里云提供了云监控(CloudMonitor)**和**日志服务(SLS),覆盖服务器、数据库、应用的全维度监控。
5.1.1 关键监控指标(必设!)
服务器 | CPU 使用率 | >80% 持续 5 分钟 | 防止高负载导致应用卡顿 |
服务器 | 内存使用率 | >90% 持续 5 分钟 | 避免 OOM(内存溢出)杀进程 |
服务器 | 磁盘使用率 | >80% | 防止日志 / 数据库占满磁盘 |
MySQL | 慢查询数 | >10 次 / 分钟 | 优化查询性能 |
Nginx | 5xx 错误率 | >5% | 定位应用异常 |
5.1.2 告警设置(避免漏报)
- 通知方式:短信 + 邮件 + 钉钉机器人(阿里云控制台→云监控→告警规则→通知方式);
- 阈值校准:根据业务特点调整(如大促期间 CPU 阈值可放宽到 90%)。
5.2 自定义监控(高级玩法)
对于需要更细粒度监控的场景,可搭建Prometheus+Grafana组合:
5.2.1 安装 Prometheus
# 下载并解压Prometheus
wget https://github.com/prometheus/prometheus/releases/download/v2.47.0/prometheus-2.47.0.linux-amd64.tar.gz
tar -zxvf prometheus-2.47.0.linux-amd64.tar.gz
mv prometheus-2.47.0.linux-amd64 /opt/prometheus
# 启动Prometheus(监控本地服务器)
/opt/prometheus/prometheus –config.file=/opt/prometheus/prometheus.yml
5.2.2 安装 Grafana(可视化)
# 安装Grafana(Ubuntu)
sudo apt install -y adduser libfontconfig1
wget https://dl.grafana.com/oss/release/grafana_10.2.0_amd64.deb
sudo dpkg -i grafana_10.2.0_amd64.deb
sudo systemctl start grafana-server
5.2.3 监控效果
通过 Grafana 导入预定义仪表盘(如 “Linux Server Monitoring”),可实时查看:
- CPU 核负载、内存使用趋势、磁盘 IO 吞吐量;
- Nginx 请求速率、MySQL 连接数、PHP-FPM 进程状态;
- 自定义告警(如 “磁盘剩余空间 < 10G 时触发通知”)。
总结:运维的本质是 “系统化思维”
从部署时的环境标准化,到调试时的问题定位,再到迁移时的风险控制,维护的日常优化,监控的主动预防 —— 阿里云 Linux 服务器的运维不是零散的操作,而是一套可复用、可扩展的系统化流程。
掌握这套流程,你不仅能解决眼前的问题,更能构建 “预测 – 防御 – 修复” 的运维体系,让你的服务器成为业务增长的 “稳定基石”。毕竟,最好的运维,是让业务方 “感受不到运维的存在”—— 但一旦出问题,你能第一时间 “化险为夷”。
现在,是时候动手实践了!从你的阿里云控制台开始,一步步搭建属于自己的 “云端数字堡垒” 吧~
评论前必须登录!
注册