服务覆盖:昆明·曲靖·玉溪·保山·昭通·丽江·普洱·临沧·楚雄·红河·文山·西双版纳·大理·德宏·怒江·迪庆

原始方式:手动登录每台服务器

eycit 2026-04-20 -2 次阅读 系统安装
---

theme: default themeName: "默认主题" title: "还在手动SSH登录服务器运维?这套自动化方案让效率提升10倍"


前言

手动运维有多苦,相信每个运维都深有体会:服务器多了登录不过来回敲命令敲到腱鞘炎、批量改配置改到怀疑人生、出问题登录几十台服务器排查……自动化运维不是高大上,是每个运维必须掌握的基本技能。本文分享一套完整的自动化运维实践方案,从工具选型到具体落地,看完就能动手做。

自动化运维的三个层次

层次1:批量操作

一次性在多台服务器执行相同命令。

# 原始方式:手动登录每台服务器

ssh user@server1 "systemctl restart nginx" ssh user@server2 "systemctl restart nginx"

... 重复100次

自动化方式:ansible批量执行

ansible all -m shell -a "systemctl restart nginx"

层次2:脚本化

把重复操作写成脚本,一次编写,反复使用。

#!/bin/bash

部署应用的标准化脚本

./deploy.sh app-v1.2.3.tar.gz

自动完成:备份->停止->解压->配置->启动->检查

层次3:平台化

把常用操作做成平台,点点鼠标就完成。

  • 发布系统:一键发布到测试/预发/生产
  • 监控系统:故障自动告警+自愈
  • 巡检系统:自动生成巡检报告

工具选型

1. Ansible:配置管理神器

特点:

  • 无Agent(通过SSH连接)
  • YAML编写剧本(Playbook)
  • 幂等性(重复执行结果一致)
  • 学习曲线平缓

# 示例:安装nginx playbook

  • name: Install Nginx
hosts: webservers become: yes tasks: - name: Install nginx apt: name: nginx state: present - name: Start nginx service: name: nginx state: started

2. Terraform:基础设施即代码

特点:

  • 声明式配置
  • 支持多云(AWS/Azure/GCP/阿里云)
  • 状态管理
  • 计划预览

# 示例:创建云服务器

resource "alicloud_instance" "web" { instance_name = "web-server" image_id = "ubuntu_18_04" instance_type = "ecs.t6.small" vpc_id = alicloud_vpc.main.id vswitch_id = alicloud_vswitch.main.id security_groups = [alicloud_security_group.web.id] }

3. GitLab CI/CD:持续集成部署

特点:

  • 代码版本控制
  • 自动构建测试
  • 自动部署
  • 回滚方便

# .gitlab-ci.yml

stages: - build - test - deploy

build: stage: build script: - docker build -t myapp:$CI_COMMIT_SHA .

deploy: stage: deploy script: - docker run -d myapp:$CI_COMMIT_SHA only: - main

自动化实践:从0到1

第一步:资产清单化

先把所有服务器信息整理到一个文件里:

# inventory/hosts.ini

[webservers] 192.168.1.10 ansible_user=deploy 192.168.1.11 ansible_user=deploy

[dbservers] 192.168.1.20 ansible_user=deploy

[appservers] 192.168.1.30 ansible_user=deploy 192.168.1.31 ansible_user=deploy

第二步:SSH Key互信

# 在运维机生成Key

ssh-keygen -t rsa

批量推送公钥到服务器

ssh-copy-id deploy@192.168.1.10 ssh-copy-id deploy@deploy@192.168.1.11

... 批量处理所有服务器

第三步:Ansible入门

# 安装

pip install ansible

配置文件 ansible.cfg

[defaults] inventory = ./inventory/hosts.ini host_key_checking = False retry_files_enabled = False

测试连通性

ansible all -m ping

第四步:编写第一个Playbook

# init-server.yml

  • name: Initialize new server
hosts: all become: yes tasks: - name: Update apt cache apt: update_cache: yes - name: Install basic tools apt: name: ["curl", "wget", "vim", "git", "htop"] state: present - name: Set timezone timezone: name: Asia/Shanghai - name: Disable firewalld service: name: firewalld state: stopped enabled: no

# 执行

ansible-playbook init-server.yml

常见自动化场景

场景1:批量更新SSL证书

# deploy-ssl.yml

  • name: Deploy SSL Certificate
hosts: webservers become: yes tasks: - name: Copy certificate copy: src: "/ssl/{{ inventory_hostname }}.crt" dest: "/etc/nginx/ssl/{{ inventory_hostname }}.crt" - name: Copy private key copy: src: "/ssl/{{ inventory_hostname }}.key" dest: "/etc/nginx/ssl/{{ inventory_hostname }}.key" - name: Reload nginx service: name: nginx state: reloaded

场景2:批量日志清理

# clean-logs.yml

  • name: Clean old logs
hosts: all become: yes tasks: - name: Find old log files find: paths: /var/log age: 7d file_type: file register: old_logs - name: Delete old logs file: path: "{{ item.path }}" state: absent loop: "{{ old_logs.files }}"

场景3:应用批量部署

# deploy-app.yml

  • name: Deploy Application
hosts: appservers vars: app_version: "v1.2.3" app_port: 8080 tasks: - name: Stop old container docker_container: name: myapp state: stopped ignore_errors: yes - name: Pull new image docker_image: name: myregistry/myapp tag: "{{ app_version }}" source: pull - name: Run new container docker_container: name: myapp image: "myregistry/myapp:{{ app_version }}" state: started restart_policy: always ports: - "{{ app_port }}:8080" - name: Health check uri: url: "http://localhost:{{ app_port }}/health" status_code: 200 register: health until: health.status == 200 retries: 5 delay: 10

自动化平台设计

如果团队足够大,可以考虑做平台化。

1. CMDB资产管理系统

功能:

  • 服务器信息录入
  • 资产变更记录
  • 归属部门/业务
  • 标签/分组

工具:

  • 阿里云云CMDB
  • 腾讯云CMDB
  • 自建:iTop、Snipe-it

2. 发布系统

流程:

1. 代码提交 -> 自动构建 2. 构建成功 -> 部署到测试环境 3. 测试通过 -> 审批 4. 审批通过 -> 灰度发布 5. 灰度OK -> 全量发布

工具:

  • Jenkins
  • GitLab CI/CD
  • Argo CD
  • 自研平台

3. 监控系统

推荐组合:

  • 监控: Prometheus + Alertmanager
  • 可视化: Grafana
  • 日志: ELK/Loki
  • 告警: 钉钉/企业微信/飞书

避坑指南

1. 幂等性

# 错误的写法(每次都执行,不安全)

  • name: Create directory
shell: mkdir -p /data

正确的写法(幂等)

  • name: Create directory
file: path: /data state: directory

2. 错误处理

# 忽略错误继续执行

  • name: Some task
command: /some/command ignore_errors: yes

失败时回滚

  • block:
- name: Deploy command: ./deploy.sh rescue: - name: Rollback command: ./rollback.sh

3. 敏感信息

# 使用vault加密敏感数据

ansible-vault encrypt secrets.yml

或者使用ansible-vault decrypt时输入密码

ansible-playbook deploy.yml --ask-vault-pass

效率提升效果

场景手动耗时自动化耗时
10台服务器装nginx30分钟1分钟
100台服务器日志清理2小时2分钟
应用灰度发布1小时5分钟
故障自愈人工响应+处理30分钟自动10秒

结语

自动化运维不是"会不会"的问题,是"什么时候做"的问题。从最简单的批量命令开始,逐渐积累成脚本,再慢慢做成平台。罗马不是一天建成的,自动化也是一步步迭代出来的。先让Ansible跑起来,这是最简单、收益最快的第一步。


看完还有什么疑问吗?

如果文章没有覆盖到你的情况,欢迎联系我们咨询——免费解答,说清楚再决定要不要服务。

📞 服务热线:13708730161 💬 微信:eyc1689 📧 邮箱:service@eycit.com 🌐 https://www.eycit.com

易云城IT服务,您身边的IT专家。

上一篇
Docker需要守护进程...
下一篇
未命名文章...