上一篇 下一篇 分享链接 返回 返回顶部

Ansible批量管控宝塔与1panel多面板服务器指南

发布人: 发布时间:4小时前 阅读量:5

多面板服务器管理的痛点

随着业务规模扩张,企业常同时使用宝塔(BT Panel)与1Panel等多款服务器管理面板。不同面板的API接口、认证方式与操作逻辑各异,运维人员需要在多个控制台间切换,手工重复执行部署、更新与巡检任务,效率低且易出错。Ansible作为无代理自动化工具,通过SSH即可实现批量管控,为异构面板环境提供了统一操作入口。

架构设计:以Ansible为控制中枢

建议将Ansible控制节点部署在一台独立运维机器上,通过Inventory文件管理所有服务器。每个主机需定义面板类型变量(例如panel_type: "baota"panel_type: "1panel"),并在Playbook中按变量调用对应模块或API脚本。核心思路是:Ansible只负责下发指令和收集结果,面板自身功能仍通过其官方API或CLI完成。

实现步骤

1. 准备Inventory与变量

[web_servers]
192.168.1.10 panel_type=baota bt_key="xxxx" bt_secret="yyyy"
192.168.1.11 panel_type=1panel api_token="zzzz"

注意密钥建议使用Ansible Vault加密,避免明文存储。

2. 使用URI模块调用面板API

宝塔与1Panel均提供HTTP API。以下为通用Playbook片段,先获取站点列表:

- name: 获取站点列表
  uri:
    url: "{{ item.api_url }}"
    method: GET
    headers:
      Authorization: "{{ item.token }}"
  loop:
    - { api_url: "http://{{ inventory_hostname }}:8888/sites", token: "{{ bt_token }}" }
    - { api_url: "http://{{ inventory_hostname }}:10086/api/v1/sites", token: "{{ panel_token }}" }
  when: item.panel_type == ansible_facts['hostvars'][inventory_hostname]['panel_type']
  register: result

实际开发中建议为每个面板编写独立的Playbook或Role,通过include_tasks按panel_type动态加载,避免条件判断过于复杂。

3. 统一执行常见运维任务

  • 批量创建站点:调用宝塔site.AddSite接口与1Panel的POST /websites接口,参数由Ansible变量注入。
  • 更新SSL证书:使用uri模块触发面板的续签任务,再通过Ansible的wait_for检查证书文件变更时间。
  • 定期备份:定义Cron job让Ansible定时执行备份Playbook,通过面板API创建备份任务,并将结果推送至日志系统。

4. 与面板CLI结合

若某些操作无API支持,可使用command模块调用面板自带命令行工具。例如宝塔有bt命令,1Panel有1pctl命令。通过Ansible的become提权执行,需注意命令与版本兼容性。

最佳实践与注意事项

  • API限流与错误处理:在Playbook中添加until循环和retries参数,应对面板API的临时故障。
  • 幂等性设计:先查询再执行操作,避免重复创建资源。
  • 审计与回滚:记录每次变更的ansible_facts,配合Ansible Tower或AWX实现审批流。
  • 安全隔离:面板API Token的权限应最小化,Ansible控制节点需严格访问控制。

结语

通过Ansible统一对接宝塔与1Panel,可将重复性操作标准化、版本化,降低人为误操作风险。该方案不依赖面板特有能力,完全基于公开API,适合追求可控性与跨平台兼容性的运维团队。建议先在测试环境验证API参数,再逐步扩大管控范围。

目录结构
全文
企业微信 企业微信
微信公众号 微信公众号
服务热线: 400-790-1688
电子邮箱: 3310008520@qq.com