1. 背景与目标
概述:在台湾部署多IP站群常见于SEO、代理或多域名托管,目标是实现可重复、可审计、可回滚的自动化运维。
关键点:统一配置管理、免密SSH、按IP区分虚拟主机、证书自动化、集中监控与告警、自动修复脚本。
交付物:Ansible playbook、监控规则、证书分发流程、备份/回滚脚本。
2. 环境准备与IP资源管理
步骤:1) 确认ISP或机房分配的公网/内网IP段;2) 在台湾机房或VPS控制台添加次要IP到网卡(若需手工在系统上绑定,使用iproute2)。
命令示例:sudo ip addr add 203.0.113.10/32 dev eth0; 永久写入:在Ubuntu编辑 /etc/netplan/*.yaml 或在CentOS写入 /etc/sysconfig/network-scripts/ifcfg-eth0:0。
建议:为每个站点分配固定IP并记录在配置管理数据库(CMDB)。
3. 工具选型与仓库管理
推荐工具:Ansible(配置与部署)、Git(配置版本控制)、Certbot(证书)、Nginx/HAProxy(负载与IP绑定)、Prometheus+Grafana(监控)、ELK或Loki(日志)。
仓库结构:roles/nginx、roles/certbot、roles/monitoring、inventory/taiwan.yml。每次变更通过Git push并触发CI(可用GitLab CI或Jenkins)。
4. 无密码SSH与Ansible清单构建
步骤:1) 在运维主机生成密钥 ssh-keygen -t rsa;2) 使用 ssh-copy-id user@host 或 Ansible 的 authorized_key 模块分发;3) 在inventory中按IP写入主机,如:site1 ansible_host=203.0.113.10 ansible_user=ubuntu。
测试:ansible -i inventory/taiwan.yml all -m ping,确保全连通。
5. Nginx按IP虚拟主机的自动化部署(实操Playbook示例流程)
步骤概览:1) 准备Nginx模板(Jinja2),模板中以变量写listen {{ ip }}:80 和 server_name {{ domain }};2) Ansible task:复制模板、生成配置、reload nginx。
关键任务示例:- name: Deploy vhost template copy: src=templates/vhost.j2 dest=/etc/nginx/sites-available/{{ domain }} notify: reload nginx;再创建软链并 enable。
验证:在目标IP上 curl -I http://203.0.113.10 -H "Host: example.tw" 查看返回头。
6. 证书自动化与分发(实战)
推荐方式:在多IP站群中优先用DNS-01挑战(避免IP/端口冲突)。步骤:1) 在DNS服务商(CloudFlare、阿里云等)开API权限并保存凭证;2) 使用certbot certonly --manual或certbot-dns插件自动获取;3) Ansible将证书分发到对应主机并 reload nginx。
续期:配置 crontab 或系统d定时任务执行 certbot renew && ansible-playbook playbooks/deploy-certs.yml,部署后检查证书链。
7. 监控、日志集中与告警(部署步骤)
Prometheus部署步骤:1) 部署node_exporter到每台服务器(Ansible role安装并开启 systemd);2) 配置Prometheus scrape targets 指向各IP;3) 在Grafana导入Dashboard。
日志方案:使用Filebeat/Promtail采集日志到ELK或Loki,Ansible统一安装和配置,设置索引/标签按IP和域名分类。
告警:Prometheus Alertmanager配置email/Slack/Webhook,结合自动化脚本进行简单自愈(例如重启nginx或清理磁盘)。
8. 备份、回滚与演练(操作指南)
备份流程:1) 使用Ansible run list 收集 /etc/nginx、/etc/letsencrypt、站点代码(rsync到备份服务器或S3);2) 对数据库做定期dump并上传。
回滚步骤:将Git中上一个稳定tag checkout,运行ansible-playbook playbooks/rollback.yml(该playbook从备份恢复配置、重启服务并校验状态)。
演练:每月至少一次演练回滚,验证DNS、证书和访问路径是否恢复。
9. 常见问题:如何把特定IP绑定到站点并自动化?
问:在多IP站群如何确保每个域名固定绑定到指定IP并由Ansible自动部署?
答:在inventory中为每个主机写入 ansible_host 和自定义变量 ip 与 domain;在vhost模板使用 listen {{ ip }}:80 与 server_name {{ domain }};使用Ansible template + handler reload nginx。先在目标机用 ip addr add 永久写入网络配置,再运行 playbook 即可。
10. 常见问题:证书续签在多IP环境中如何无缝自动化?
问:Certbot如何在多个IP、多个域名上做到自动续签并分发?
答:使用DNS-01挑战模式结合DNS插件(如 certbot-dns-cloudflare);生成证书后用Ansible把 /etc/letsencrypt/live/{{ domain }} 下的cert与key分发到对应IP的服务器并 reload nginx;通过 certbot renew --deploy-hook "ansible-playbook playbooks/deploy-certs.yml" 实现续期自动分发。
11. 常见问题:发生服务异常如何做自动修复?
问:当某台服务器Nginx崩溃或磁盘满导致站点不可用,如何自动化自愈?
答:组合方法:1) Prometheus监控并定义alert规则(nginx_down、disk_usage>85%);2) Alertmanager通过Webhook触发自愈脚本(调用Ansible限定playbook重启服务、清理日志或扩容磁盘);3) 重要进程用systemd配置 Restart=always 或使用Monit做进程巡检,必要时触发流量切换到备用IP/备用机。
来源:自动化管理在台湾多IP站群服务器维护中的实现方法与工具