惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

WordPress大学
WordPress大学
Spread Privacy
Spread Privacy
T
The Exploit Database - CXSecurity.com
Simon Willison's Weblog
Simon Willison's Weblog
P
Privacy & Cybersecurity Law Blog
L
LINUX DO - 热门话题
T
Threat Research - Cisco Blogs
T
Tenable Blog
TaoSecurity Blog
TaoSecurity Blog
Security Archives - TechRepublic
Security Archives - TechRepublic
AI
AI
P
Proofpoint News Feed
A
About on SuperTechFans
P
Privacy International News Feed
月光博客
月光博客
雷峰网
雷峰网
S
Secure Thoughts
博客园 - 叶小钗
博客园 - 聂微东
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Project Zero
Project Zero
The Cloudflare Blog
SecWiki News
SecWiki News
The Hacker News
The Hacker News
V
Vulnerabilities – Threatpost
罗磊的独立博客
A
Arctic Wolf
阮一峰的网络日志
阮一峰的网络日志
Know Your Adversary
Know Your Adversary
酷 壳 – CoolShell
酷 壳 – CoolShell
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
T
Troy Hunt's Blog
The Last Watchdog
The Last Watchdog
Schneier on Security
Schneier on Security
小众软件
小众软件
有赞技术团队
有赞技术团队
博客园 - 司徒正美
T
Tailwind CSS Blog
量子位
C
Cybersecurity and Infrastructure Security Agency CISA
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Hugging Face - Blog
Hugging Face - Blog
人人都是产品经理
人人都是产品经理
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
S
Security @ Cisco Blogs
大猫的无限游戏
大猫的无限游戏
S
SegmentFault 最新的问题
Apple Machine Learning Research
Apple Machine Learning Research
宝玉的分享
宝玉的分享
L
Lohrmann on Cybersecurity

mephisto.cc

修复rime-ice无法弹出候选框的问题 开机滚动字体显示优化 个人网站安全防护 树莓派上部署Vaultwarden 使用goaccess实时分析Caddy日志 个人网站监控 Hugo全站AVIF记 Linux下尝试使用Godot开发小游戏 Arch linux dae 透明代理 Airflow接管galler-dl下载任务 如何使用gallery-dl批量下载图像 Arch核显下如何愉快玩Dota2和CS2 Arch/labwc 环境网络相关设置 Rime添加dota2词库 Arch 重装记录 Supertuxkart iOS版终于发布了 打造自己的流媒体音乐服务 剪切板管理工具clipcat推荐 MangoHud性能监控 微信小程序开发记 Rofi试用 解决Arch下VSCode无法输入中文的问题 独立窗口管理器下无法录屏问题处理 上海市二手房成交数据监控 OpenLDAP监控 Arch linux如何顺畅连接蓝牙设备 Arch Linux SSL VPN 客户端配置 简单获取celery任务实时结果 Arch linux下iNode客户端的安装和使用方法 券商费率调整记 迷你主机组装记 Labwc更换定制皮肤 树莓派跑分流代理 实用自动代理配置示例 九年老鼠标复活记 Openvpn示例 Mac下如何旋转webp图片 如何隐藏Vscode中Markdown PDF插件的头部内容 解决Linux下网络配置无法变更保存的问题 labwc环境启用wlogout Ubuntu下新官方微信尝鲜 简单检测用户是否开启广告屏蔽 Atuin ZFS下卡顿问题解决 Wine安装64位微信 Fish 和 Atuin使用记 Fastapi简单实现临时下载链接 Fastapi微信公众号开发简要 Hugo根据语种展示不同内容 如何修复Waybar微信图标错误 信封加密简要 Linux环境下维护公众号记录 快速隐藏和呼出终端 Wayland环境自动切换壁纸 SuperTuxKart 试玩 简单抓取雪球股票快讯 为什么你的kill命令不能列出信号表 Wine安装微信保姆教程 Hysteria科学上网简要 Ubuntu 23.10 钉钉无法启动解决方法 网站导航栏防止插入Adsense自动广告 Linux环境按键检测 Hugo文末添加最后修改时间 Wayland环境ksnip无法复制问题解决 我眼中的股票市场 Caddy简单图片防盗链 greetd和regreet使用教程 Wayland环境下截图加后期修改 Wayland 环境下gif录屏 Firefox的一些有趣功能 Ubuntu 切换系统语言 Firefox 标题栏高度调整 网站添加回到顶部功能 Hugo自定义字体 Labwc 便捷配置 Wofi使用教程 窗口管理器labwc使用记 文件共享软件Dufs推荐 Hugo静态站点接入Adsense广告 Fcitx5配置详解 Ubuntu安装chrome的方法总结 一种Xterm.js的全屏方案 Google网址收录api Python示例 手机听离线音乐 Snipe it资产导入 应用启动器yofi使用配置 Snipe it资产管理系统安装使用 Ubuntu开机启动加速 Vue3 vite TypeScript跨域等相关设置 Ubuntu手动升级Libreoffice Ubuntu设置alacritty为默认终端 简体文章批量转换为繁体 使用Inkscape调整svg图片大小 实用命令 使用mitmproxy给手机app抓包 Python中rstrip方法细解 Github同主机多仓库部署deploy key问题处理 Linux安装最新版本Python KeePassXC使用教程 Ubuntu 22.10连接蓝牙耳机报错br-connection-profile-unavailable解决方法 Caddy日志配置轮转和格式化
使用Git和Ansible管理配置文件
2024-10-19 · via mephisto.cc

在日常工作中,维护运行某些程序,需要通过配置文件,更改软件的行为逻辑,比如Nginx的配置文件、Prometheus的配置文件等。在较复杂的一些真实业务场景中,可能还涉及多机房的加载不同配置文件。

熟悉配置管理工具的同学,可能脑子已经想到Ansible、Puppet等了,此类工具的确擅长做这样的事情。

本文主要介绍,如何使用Git + Ansible + Gitlab Pipeline实现自动管理多机房的配置文件,适合小公司维护不复杂业务的场景,大公司打螺丝的多、工具管理软件成熟、合规要求等不推荐。

好处是显而易见的,Git有版本管理功能,Ansible方便部署、轮子多滚起来很愉快、Pipeline自动推送省事,是个公司都有这些条件。

这里假设你要维护多个机房的Prometheus监控配置文件,读者理解后可自行运用,有一定的通用性。

1. 创建一个Git仓库

创建一个Gitlab仓库,把Ansible playbook 和 Prometheus 配置管理起来。

按照下面的示例组织Prometheus配置文件:

 1➜  prometheus git:(main) tree
 2.
 3├── idc_A
 4│   ├── prometheus.service
 5│   ├── prometheus.yml
 6│   ├── rules
 7│   │   ├── demoA.yml
 8│   │   └── upB.yml
 9│   └── sd_config
10        ├── my_target.yml
11
12│── idc_B
13│   ├── prometheus.service
14│   ├── prometheus.yml
15│   ├── rules
16│   │   ├── demoB.yml
17│   │   └── upB.yml
18│   └── sd_config
19│       ├── my_targetB.yml

上面的意思就是,假设你要维护机房A 和 B 的Prometheus监控文件,分别放到Git仓库的两个子目录中,后续会通过目录名称区分触发Pipeline,运行不同的Ansible分支任务。

文件的内容就不一一列举了,意义不大。

2. 编写Ansible playbook

Ansible不详细介绍了,网上一大堆资料,不懂问AI也可以。

只写核心区分机房的逻辑:

 1➜  ansible git:(main) cat hosts
 2[prom:children]
 3a_host_group
 4b_host_group
 5
 6[a_host_group]
 7192.168.1.1
 8
 9[a_host_group:vars]
10idc=idc_A
11
12[b_host_group]
13192.168.2.1
14
15[b_host_group:vars]
16idc=idc_B

用变量idc区分不同机房, 传输不同配置。

 1
 2- name: Copy 'rules' file
 3  ansible.builtin.copy:
 4    src: "{{ item }}"
 5    dest: "/opt/prometheus/rules/"
 6    mode: 0644
 7    validate: /opt/prometheus/promtool check rules %s  # 常校验是好习惯,防止离谱提交
 8  with_fileglob:
 9    - '{{ config_path }}/{{ idc }}/rules/*'     # 这里引用了idc变量
10  notify: Reload Prometheus

如果你不懂上面是什么意思,建议读一读ansible的教程文章,找个环境实验下。

付费咨询也可以,关注公众号留言联系,商业协作,双赢😄。

3. gitlab ci 编写

 1➜ cat .gitlab-ci.yml
 2stages:
 3  - checkout
 4  - deploy
 5
 6checkout_code:
 7  stage: checkout
 8  tags:
 9    - your_ci_runner    # 你的ci runner
10  script:
11    - |
12      if [ ! -d "/data/your_code_path" ]; then
13        echo "目录不存在, git clone"
14        git clone git@xxx.git /data/your_code_path
15      else
16        echo "目录存在, git pull"
17        cd /data/your_code_path && git pull
18      fi
19  only:
20    - main
21
22prometheus-deploy-A:         # A 机房的部署逻辑
23  stage: deploy
24  tags:
25    - your_ci_runner
26  rules:
27    - changes:
28        - prometheus/idc_A/**/*            # 目录A有变动就触发
29  before_script:
30    - pwd
31    - cd /data/ansible
32    - source .venv/bin/activate
33  script:
34    - echo "Deploying Prometheus A"
35    - ansible-playbook -i hosts deploy.yml -l a_host_group # 执行具体的ansible playbook
36
37prometheus-deploy-B:        # B 机房的逻辑类似A,不再解释
38  stage: deploy
39  tags:
40    - your_ci_runner
41  rules:
42    - changes:
43        - prometheus/idc_B/**/*
44  before_script:
45    - pwd
46    - cd /data/ansible
47    - source .venv/bin/activate
48  script:
49    - echo "Deploying Prometheus B"
50    - ansible-playbook -i hosts deploy.yml -l b_host_group

4. 总结

上述代码我删掉了部分隐私信息(职业操守还在,底线守住),并没有测试运行,主要介绍逻辑思路。真实环境已经修改提交过几十次,平稳顺滑,大幅节约时间。

为了安全,最好在Ansible里面加上各种Lint或者说Check逻辑,防止配置一推上去,全干崩了!其实干崩了也没关系,毕竟是Git管理的配置,可以回滚嘛。

回滚不了,你还以复制到服务器上去嘛,真走到这一步,得反思下,停下来学点真本领。

不尬不吹,互联网上,我还没搜到类似细节文章,懂的人不一定愿意分享,又是牺牲周末时间在写这个破文章,有时候也不知道是为了什么。

总之,当你更改A、B机房配置的时候,直接在对应的Git目录修改文件,提交后,会促发对应的Ansible部署操作。

所有逻辑都是自己定义的,简单清晰,没有什么外部依赖,一开始可能会遇到错误,逐步修复跑顺后,绝对能舒心放心。