1. 服务器运维备忘录:从零搭建到高效管理实战指南
刚接手一台新服务器时,那种手足无措的感觉我还记忆犹新——该装哪些基础组件?安全配置怎么做?遇到突发故障如何快速定位?经过多年运维实战,我整理出这份覆盖服务器全生命周期的操作备忘录,包含从系统初始化到日常维护的完整checklist,帮你避开90%的运维暗坑。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 服务器基础环境配置
2.1 系统初始化最佳实践
首次登录服务器必做的五件事:
- 创建专用运维账户:避免直接使用root,通过
adduser deploy --gecos ""创建部署账户,usermod -aG sudo deploy赋予sudo权限 - 密钥认证配置:本地执行
ssh-keygen -t ed25519生成密钥对,通过ssh-copy-id deploy@server_ip上传公钥,随后禁用密码登录(/etc/ssh/sshd_config中设置PasswordAuthentication no) - 时区同步:
timedatectl set-timezone Asia/Shanghai && timedatectl set-ntp on - 基础工具链安装:
apt update && apt install -y git curl tmux htop sysstat(Ubuntu系)或yum install -y epel-release && yum install -y git curl tmux htop sysstat(CentOS系) - 防火墙初始化:UFW配置示例:
bash复制ufw allow ssh ufw allow http ufw allow https ufw --force enable
关键提示:新服务器上线后应立即执行
apt update && apt upgrade或yum update打全补丁,避免零日漏洞攻击
2.2 性能监控体系建设
推荐使用Prometheus+Grafana监控方案:
- Node Exporter安装:
bash复制wget https://github.com/prometheus/node_exporter/releases/download/v1.6.1/node_exporter-1.6.1.linux-amd64.tar.gz tar xvfz node_exporter-* && cd node_exporter-* sudo cp node_exporter /usr/local/bin/ sudo useradd -rs /bin/false node_exporter - 创建systemd服务(/etc/systemd/system/node_exporter.service):
ini复制[Unit] Description=Node Exporter After=network.target [Service] User=node_exporter ExecStart=/usr/local/bin/node_exporter [Install] WantedBy=multi-user.target - 启动服务:
systemctl daemon-reload && systemctl enable --now node_exporter
3. 安全防护全攻略
3.1 入侵防御四重奏
-
SSH加固:
- 修改默认端口:
Port 29451(需同步调整防火墙) - 禁用root登录:
PermitRootLogin no - 限制登录IP:
AllowUsers deploy@192.168.1.* - 启用失败锁定:
apt install fail2ban
- 修改默认端口:
-
自动漏洞扫描:
bash复制# 使用vuls进行漏洞扫描 curl -L https://github.com/future-architect/vuls/releases/latest/download/install.sh | bash vuls scan -report-json -
文件完整性监控:
bash复制# 使用AIDE建立基准数据库 sudo apt install aide sudo aideinit sudo mv /var/lib/aide/aide.db.new /var/lib/aide/aide.db # 每日校验(加入crontab): aide --check -
网络层防护:
- TCP SYN Cookie保护:
sysctl -w net.ipv4.tcp_syncookies=1 - 禁用ICMP重定向:
sysctl -w net.ipv4.conf.all.accept_redirects=0
- TCP SYN Cookie保护:
3.2 备份策略设计
采用3-2-1备份原则实现:
bash复制# 每日全量备份脚本示例
#!/bin/bash
BACKUP_DIR="/backups/$(date +%Y%m%d)"
mkdir -p $BACKUP_DIR
# MySQL备份
mysqldump -u root -p$DB_PASS --all-databases | gzip > $BACKUP_DIR/mysql_full.sql.gz
# 关键配置文件备份
tar czf $BACKUP_DIR/etc.tar.gz /etc
# 同步到远程存储
rclone copy $BACKUP_DIR backup_remote:server_backups
# 清理7天前备份
find /backups -type d -mtime +7 | xargs rm -rf
4. 性能调优实战
4.1 Linux内核参数优化
/etc/sysctl.conf关键配置:
conf复制# 提升TCP性能
net.core.somaxconn = 32768
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_tw_reuse = 1
# 内存管理
vm.swappiness = 10
vm.overcommit_memory = 1
# 文件系统
fs.file-max = 2097152
应用配置:sysctl -p
4.2 磁盘IO优化
针对SSD的fstab配置示例:
conf复制UUID=xxxx / ext4 defaults,discard,noatime,nodiratime,commit=60 0 1
- discard:启用TRIM
- noatime:禁止记录访问时间
- commit=60:每60秒提交日志
5. 故障排查工具箱
5.1 性能问题速查表
| 症状 | 诊断命令 | 常见原因 |
|---|---|---|
| CPU满载 | top -H -p 进程ID |
死循环/线程阻塞 |
| 内存不足 | free -h && vmstat 1 5 |
内存泄漏/OOM Killer触发 |
| 磁盘IO高 | iotop -oP |
大量小文件写入/swap频繁 |
| 网络延迟 | mtr -rw 目标IP |
路由问题/带宽拥塞 |
| TCP连接失败 | `ss -tnlp | grep 端口` |
5.2 日志分析技巧
- 实时监控日志:
tail -f /var/log/nginx/error.log | grep -E '50[0-9]' - 统计错误频率:
cat /var/log/syslog | awk '/error/{print $1}' | sort | uniq -c | sort -nr - 追踪完整请求流:
journalctl -u nginx --since "1 hour ago" --no-pager
6. 自动化运维实践
6.1 使用Ansible进行配置管理
基础playbook示例(install_nginx.yml):
yaml复制---
- hosts: webservers
become: yes
tasks:
- name: Add Nginx repo
apt_repository:
repo: ppa:nginx/stable
state: present
when: ansible_os_family == 'Debian'
- name: Install Nginx
package:
name: nginx
state: latest
- name: Ensure Nginx is running
service:
name: nginx
state: started
enabled: yes
执行命令:ansible-playbook -i hosts.ini install_nginx.yml
6.2 定时任务管理
通过systemd timer替代cron的示例:
-
创建服务单元(/etc/systemd/system/backup.service):
ini复制[Unit] Description=Daily backup service [Service] Type=oneshot ExecStart=/usr/local/bin/backup.sh -
创建计时器(/etc/systemd/system/backup.timer):
ini复制[Unit] Description=Run backup daily at 2AM [Timer] OnCalendar=*-*-* 02:00:00 Persistent=true [Install] WantedBy=timers.target -
激活:
systemctl enable --now backup.timer
7. 容器化部署规范
7.1 Docker最佳实践
优化过的Dockerfile示例:
dockerfile复制FROM nginx:1.23-alpine
ARG BUILD_ENV=production
# 安全基线配置
RUN apk add --no-cache tini && \
addgroup -S app && adduser -S -G app app && \
chown -R app:app /var/cache/nginx
# 多阶段构建
COPY --chown=app:app nginx.conf /etc/nginx/nginx.conf
COPY --chown=app:app dist /usr/share/nginx/html
# 健康检查
HEALTHCHECK --interval=30s --timeout=3s \
CMD curl -f http://localhost/ || exit 1
USER app
ENTRYPOINT ["/sbin/tini", "--"]
CMD ["nginx", "-g", "daemon off;"]
构建命令:docker build --build-arg BUILD_ENV=production -t myapp:v1 .
7.2 容器编排检查项
Kubernetes部署清单关键配置:
yaml复制apiVersion: apps/v1
kind: Deployment
metadata:
name: webapp
spec:
replicas: 3
selector:
matchLabels:
app: webapp
template:
metadata:
labels:
app: webapp
spec:
securityContext:
runAsNonRoot: true
runAsUser: 1000
containers:
- name: web
image: myapp:v1
resources:
limits:
cpu: "1"
memory: 512Mi
livenessProbe:
httpGet:
path: /healthz
port: 80
initialDelaySeconds: 15
periodSeconds: 20
8. 云端服务器特殊考量
8.1 云元数据服务防护
防止SSRF攻击的iptables规则:
bash复制# 禁止访问云厂商元数据IP(以AWS为例)
iptables -A OUTPUT -d 169.254.169.254 -j DROP
# 或使用云安全组屏蔽
8.2 云磁盘性能优化
AWS EBS优化配置:
bash复制# 查看设备调度器
cat /sys/block/xvdf/queue/scheduler
# 修改为deadline(NVMe使用none)
echo deadline > /sys/block/xvdf/queue/scheduler
# 调整IO队列深度
echo 256 > /sys/block/xvdf/queue/nr_requests
9. 运维人员必备脚本库
9.1 服务器体检脚本
bash复制#!/bin/bash
echo "===== System Overview ====="
echo "Hostname: $(hostname)"
echo "Uptime: $(uptime)"
echo "===== CPU Usage ====="
mpstat -P ALL 1 3 | grep -v "CPU" | grep -v "^$"
echo "===== Memory Usage ====="
free -h
echo "===== Disk Usage ====="
df -h | grep -v tmpfs
echo "===== Top Processes ====="
ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%cpu | head -n 6
9.2 批量操作工具
使用parallel加速批量操作:
bash复制# 并行执行SSH命令
echo -e "server1\nserver2" | parallel -j 10 'ssh {} "hostname && df -h"'
# 并行传输文件
ls *.log | parallel -j 5 'rsync -az {} user@remote:/backup/'
10. 文档化与知识沉淀
10.1 标准化文档模板
Markdown格式的服务器档案示例:
markdown复制# Server: web-prod-01
## Basic Info
- **IP**: 192.168.1.100
- **Role**: Web Frontend
- **OS**: Ubuntu 20.04 LTS
- **Spec**: 4C8G 200GB SSD
## Services
| Service | Port | Config Path |
|----------|-------|----------------------|
| Nginx | 80/443| /etc/nginx/conf.d/ |
| Node.js | 3000 | /opt/app/ecosystem.config.js |
## Maintenance Notes
2023-05-10: 升级Nginx到1.25.1版本
2023-07-22: 调整内核参数解决TIME_WAIT堆积
10.2 变更记录管理
Git管理的服务器配置仓库结构:
code复制infra-as-code/
├── ansible/
│ ├── roles/
│ └── inventories/
├── scripts/
│ ├── monitoring/
│ └── maintenance/
├── docs/
│ ├── server-specs.md
│ └── runbooks/
└── terraform/
├── modules/
└── environments/
这份备忘录持续更新在我的内部Wiki中,每次遇到新问题或发现更好方案都会及时补充。建议运维团队建立类似的共享知识库,你会发现处理同类故障的时间能从小时级缩短到分钟级
