1.
准备与前提
- 环境:假设服务器为Ubuntu/Debian或CentOS,已开放SSH并可sudo。
- 用户与权限:创建运维用户 ops 并配置sudo:sudo adduser ops;usermod -aG sudo ops。
- 确认时区为台湾:sudo timedatectl set-timezone Asia/Taipei。
2.
安装基础工具
- 安装必要命令:Debian/Ubuntu: sudo apt update && sudo apt install -y git rsync jq curl mailutils;CentOS: sudo yum install -y git rsync jq mailx curl。
- 推荐安装Ansible用于多机管理:sudo pip3 install ansible 或 apt/yum 包管理安装。
3.
SSH密钥与无密码登录
- 在管理机生成密钥:ssh-keygen -t rsa -b 4096 -C "ops@wlk";然后 ssh-copy-id ops@target。
- 检查权限:~/.ssh 权限应为700,authorized_keys 600。确保禁用密码登录(/etc/ssh/sshd_config:PasswordAuthentication no)。
4.
脚本组织与版本控制
- 目录结构:/opt/wlk/ops/scripts (脚本) /opt/wlk/ops/playbooks (Ansible)。
- Git管理:cd /opt/wlk && git init;将脚本入库并推到私有仓库,便于回滚与审计。
5.
示例:增量备份脚本(backup.sh)
- 脚本内容(放在/opt/wlk/ops/scripts/backup.sh):
#!/bin/bash
SRC="/var/www/" DST="/backup/$(date +%F)"
mkdir -p "$DST"
rsync -az --delete --link-dest=/backup/latest "$SRC" "$DST"/site
ln -sfn "$DST" /backup/latest
find /backup -maxdepth 1 -type d -mtime +30 -exec rm -rf {} \;
- 权限并加入Cron:chmod +x backup.sh;sudo crontab -u root -e 添加:0 2 * * * /opt/wlk/ops/scripts/backup.sh >> /var/log/ops/backup.log 2>&1
6.
示例:定期巡检脚本(inspect.sh)
- 脚本功能:检查磁盘、内存、服务、负载并发送报告。关键片段:
#!/bin/bash
HOST=$(hostname)
df -h > /tmp/${HOST}_df.txt
free -h >> /tmp/${HOST}_df.txt
systemctl list-units --type=service --state=failed >> /tmp/${HOST}_df.txt
cat /tmp/${HOST}_df.txt | mail -s "巡检报告 $HOST" ops@example.com
- 调度:每日早上8点运行,加入ops用户crontab。
7.
日志管理与轮转
- 使用logrotate管理自建日志:/etc/logrotate.d/wlk_ops 内容样例:/var/log/ops/*.log { daily rotate 14 compress missingok notifempty copytruncate }。
- 定期检查/var/log/syslog 或 /var/log/messages,结合journalctl --since "1 day ago" 做系统级故障排查。
8.
服务健康与自动重启
- 对关键服务使用systemd配置自动重启,例如 /etc/systemd/system/nginx.service 的 [Service] 添加 Restart=on-failure RestartSec=5。
- 使用systemctl is-active nginx || systemctl restart nginx 在巡检脚本中实现被动恢复。
9.
监控与告警集成
- 部署Prometheus node_exporter收集指标,Grafana展示。hold台灣机房可用性。
- 简单Webhook告警:curl -X POST -H 'Content-type: application/json' --data '{"text":"服务器告警:磁盘>90%"}' https://hooks.slack.com/services/XXX。
10.
定期巡检清单(按频率)
- 每日:df -h、free -m、systemctl list-units --failed、tail -n 200 /var/log/xxx。
- 每周:apt/yum 更新测试、备份完整性校验(rsync --dry-run)、证书到期检查(openssl s_client 或 acme脚本)。
- 每月:安全补丁部署、磁盘坏道SMART测试(smartctl -a /dev/sda)、性能基线对比。
11.
安全与权限最佳实践
- 最小权限原则:脚本运行使用专用服务账号,sudo 限制命令路径;sudoers 示例:ops ALL=(root) NOPASSWD: /opt/wlk/ops/scripts/backup.sh。
- 脚本内不要写明密码,使用密钥或Vault(Ansible Vault / HashiCorp Vault)。
12.
部署到多台台湾服务器的步骤(问)
- 问:如何把脚本快速部署到多台
台湾服务器并统一管理?
13.
部署到多台台湾服务器的步骤(答)
- 答:使用Ansible:inventory 写入台湾机组IP,playbook 示例:复制脚本并设置crontab;命令 ansible-playbook -i inventory deploy.yml。并结合SSH agent转发与密钥管理。
14.
脚本安全运行常见问题(问)
- 问:如何确保自动化脚本不会带来安全风险或误删数据?
15.
脚本安全运行常见问题(答)
- 答:在测试环境使用 --dry-run 参数验证;脚本加入日志与回滚(保留7天备份);对危险操作加交互或确认开关(--force 开启才执行)。
16.
网络延迟与丢包排查(问)
- 问:在台湾机房如何快速定位网络延迟或丢包?
17.
网络延迟与丢包排查(答)
- 答:使用 mtr -rw <目标> 进行连续追踪;使用 ping -c 100 与 tcpdump 保存 pcap,结合 iftop 或 nethogs 查看带宽突发。若跨机房问题,联系带宽提供商并上报 traceroute 结果。
来源:wlk台湾服务器运维自动化脚本与定期巡检清单实用分享