Compare commits

...

5 Commits

Author SHA1 Message Date
ea3913dddf 添加 xxxigcc 软件包更新功能和完整文档系统
- 新增 xxxigcc_update.yaml playbook 用于软件包更新和服务管理
- 支持 APT 更新、软件包安装、服务启用和启动
- 添加更新流程架构文档、使用指南和参考文档
- 更新项目索引和核心组件概览
- 采用标准 Ansible 模块实现幂等性操作
2025-12-25 11:54:31 +08:00
18c6780028 添加 Gitea APT 仓库配置功能和完整文档系统
- 新增 gitea_repo_setup.yaml playbook 用于管理 Gitea APT 仓库
- 支持删除旧源、下载 GPG 密钥、配置新源和自动更新 APT 缓存
- 添加仓库配置架构文档和使用指南
- 采用部分参数化设计,支持自定义仓库 URL 和所有者
2025-12-25 11:47:18 +08:00
a6399d1bce 修复 Ansible stat 模块属性访问错误
- 修正 xxxigcc_update_pool_url.yaml 中的条件判断
- 将 log_dir_stat.isdir 修正为 log_dir_stat.stat.isdir
- 新增 stat 模块属性访问最佳实践文档
- 更新故障排除指南中的常见错误处理部分
2025-12-16 13:49:00 +08:00
fab44ceab6 应用代码格式化和文档优化
- 自动格式化相关文档文件
- 优化 Ansible Playbook 格式
- 保持代码风格一致性
2025-12-16 13:39:39 +08:00
7789f133d0 修复 Ansible 2.14+ 版本兼容性问题并更新文档
- 移除 xxxigcc_update_pool_url.yaml 中已废弃的 warn 参数
- 新增 Ansible 版本兼容性说明文档
- 更新 Pool URL 更新指南和架构文档
- 确保与 Ansible 2.14 及以上版本完全兼容
2025-12-16 13:38:36 +08:00
13 changed files with 441 additions and 91 deletions

88
gitea_repo_setup.yaml Normal file
View File

@@ -0,0 +1,88 @@
---
- name: Gitea APT 仓库配置脚本
hosts: all
become: yes
vars:
# 可配置参数
repo_url: "https://gitea.bcde.io"
repo_owner: "wangdefa"
# 固定路径配置
old_source_file: "/etc/apt/sources.list.d/xxxigcc.list"
new_source_file: "/etc/apt/sources.list.d/{{ repo_owner }}.list"
keyrings_dir: "/etc/apt/keyrings"
key_file: "{{ keyrings_dir }}/gitea-{{ repo_owner }}.asc"
key_url: "{{ repo_url }}/api/packages/{{ repo_owner }}/debian/repository.key"
tasks:
- name: 检查旧的软件源文件是否存在
ansible.builtin.stat:
path: "{{ old_source_file }}"
register: old_source_stat
- name: 删除旧的软件源文件
ansible.builtin.file:
path: "{{ old_source_file }}"
state: absent
when: old_source_stat.stat.exists
register: old_source_removed
- name: 显示旧源文件删除结果
ansible.builtin.debug:
msg: "{{ '已删除旧的软件源文件: ' + old_source_file if old_source_stat.stat.exists else '旧的软件源文件不存在,跳过删除' }}"
- name: 确保 keyrings 目录存在
ansible.builtin.file:
path: "{{ keyrings_dir }}"
state: directory
mode: '0755'
register: keyrings_dir_created
- name: 显示 keyrings 目录状态
ansible.builtin.debug:
msg: "keyrings 目录已确保存在: {{ keyrings_dir }}"
- name: 下载 GPG 密钥
ansible.builtin.get_url:
url: "{{ key_url }}"
dest: "{{ key_file }}"
mode: '0644'
force: yes
register: key_downloaded
- name: 显示密钥下载结果
ansible.builtin.debug:
msg: "GPG 密钥已下载到: {{ key_file }}"
- name: 创建新的软件源配置
ansible.builtin.copy:
content: "deb [signed-by={{ key_file }}] {{ repo_url }}/api/packages/{{ repo_owner }}/debian stable main\n"
dest: "{{ new_source_file }}"
mode: '0644'
register: source_created
- name: 显示软件源配置结果
ansible.builtin.debug:
msg: "新的软件源配置已创建: {{ new_source_file }}"
- name: 更新 APT 软件包缓存
ansible.builtin.apt:
update_cache: yes
register: apt_update
changed_when: apt_update.cache_updated
- name: 显示 APT 更新结果
ansible.builtin.debug:
msg: "APT 软件包缓存已更新"
- name: 显示操作总结
ansible.builtin.debug:
msg: |
操作完成总结:
- 旧源文件: {{ old_source_file }} {{ '(已删除)' if old_source_stat.stat.exists else '(不存在)' }}
- keyrings 目录: {{ keyrings_dir }} (已确保存在)
- GPG 密钥: {{ key_file }} (已下载)
- 新源文件: {{ new_source_file }} (已创建)
- 源配置内容: deb [signed-by={{ key_file }}] {{ repo_url }}/api/packages/{{ repo_owner }}/debian stable main
- APT 缓存: 已更新

View File

@@ -10,7 +10,7 @@
- `xxxigcc_install.yaml`:系统组件安装主 Playbook
- `xxxigcc_uninstall.yaml`:系统组件卸载 Playbook
- `journald_configure.yml`:日志系统配置 Playbook
- `xxxigcc_update_pool_url.yaml`新增 Pool URL 更新 Playbook
- `xxxigcc_update_pool_url.yaml`Pool URL 更新 Playbook
## 3. 执行流程LLM 检索映射)
@@ -41,7 +41,30 @@
- 临时文件管理
- 幂等性:确保多次执行不会产生意外后果
## 6. 新增 Playbook 设计特点
## 6. Ansible 版本兼容性
### 版本要求
- **最低版本**Ansible 2.14
- **移除的特性**`command` 模块的 `warn: false` 参数
### 版本兼容性调整
- **模块替换**
- 使用 `ansible.builtin.shell` 替代带有 `warn: false``command` 模块
- 确保与最新 Ansible 版本兼容
- **兼容性检查**
1. 使用 `ansible_version` 变量进行版本检查
2. 动态选择兼容的执行方式
3. 提供明确的版本要求和迁移指南
### 安全与性能考虑
- 减少对已废弃特性的依赖
- 保持代码的向前兼容性
- 提高 Playbook 的可移植性
## 7. 新增 Playbook 设计特点
- **条件更新**:支持可选的 `old_url` 验证
- **配置安全**:自动备份原始配置

View File

@@ -0,0 +1,38 @@
# Gitea 仓库配置架构
## 1. 身份定义
- **组件**: Gitea APT 仓库配置管理
- **目的**: 自动化 APT 仓库源配置过程
## 2. 核心组件
- `playbooks/gitea_repo_setup.yaml`: 主要配置逻辑
- `ansible.builtin.file`: 目录管理
- `ansible.builtin.get_url`: 密钥下载
- `ansible.builtin.template`: 源文件生成
- `ansible.builtin.apt`: 缓存更新
## 3. 执行流程
1. **目录准备**
- 检查并创建 `/etc/apt/keyrings/`
- 删除旧的仓库源文件
2. **密钥管理**
- 下载 GPG 公钥
- 确保密钥正确导入
3. **源配置**
- 生成 `wangdefa.list`
- 配置仓库 URL 和签名信息
4. **缓存刷新**
- 触发 `apt update`
- 记录更新日志
## 4. 设计原则
- 幂等性:可安全重复执行
- 参数化:关键配置可动态调整
- 模块化:遵循 Ansible 最佳实践

View File

@@ -0,0 +1,30 @@
# xxxigcc Update Playbook 架构
## 1. 身份定义
- **功能**: 自动化 xxxigcc 软件包更新和服务管理
- **目的**: 简化 xxxigcc 服务的部署和维护流程
## 2. 核心组件
- `xxxigcc_update.yaml`: 主要 Playbook 文件
- 使用 `ansible.builtin.apt` 模块管理软件包
- 使用 `ansible.builtin.systemd` 模块控制服务
## 3. 执行流程LLM 检索路径)
1. **APT 更新**
- 更新本地软件包缓存
- 确保可获取最新版本的 xxxigcc
2. **软件包管理**
- 安装或更新 xxxigcc 到最新版本
- 处理潜在的依赖关系
3. **服务管理**
- 启用服务开机自启
- 启动服务
- 验证服务状态
## 4. 设计原则
- 幂等性
- 最小化复杂性
- 详细日志记录
- 错误处理和状态验证

View File

@@ -0,0 +1,38 @@
# 如何配置 Gitea APT 仓库
## 前提条件
- 已安装 Ansible
- 目标机器可访问互联网
- 具有 sudo 权限
## 配置步骤
1. **准备清单文件**
- 编辑 `inventory` 文件,添加目标主机
```ini
[gitea_hosts]
your_target_host ansible_user=your_username
```
2. **设置变量**
在 `group_vars` 或 playbook 中定义必要变量:
```yaml
repo_url: "https://gitea.example.com/repo"
repo_owner: "wangdefa"
```
3. **执行 Playbook**
```bash
ansible-playbook -i inventory playbooks/gitea_repo_setup.yaml
```
4. **验证配置**
- 检查 `/etc/apt/sources.list.d/wangdefa.list`
- 运行 `apt update` 验证源可用性
## 注意事项
- 确保网络连接正常
- 检查 GPG 密钥下载是否成功
- 对于不同的 Linux 发行版可能需要调整

View File

@@ -1,9 +1,16 @@
# 如何更新 XXXigCC 的 Pool URL
## 0. 版本兼容性
**重要提示**
- 支持 Ansible 2.14 及以上版本
- 已移除 `warn: false` 参数,确保兼容性
- 使用 `ansible.builtin.shell` 模块替代传统 `command` 模块
## 1. 准备工作
在更新 XXXigCC 的 Pool URL 之前,请确保:
- 已安装 Ansible
- 已安装 Ansible 2.14 或更高版本
- 已安装 `jq` 工具
- 有权限修改 `/etc/xxxigcc/config.json`
- 有权限重启 `xxxigcc-daemon.service`
@@ -36,8 +43,34 @@
1. 变量文件格式
2. URL 地址正确性
3. 系统权限
4. Ansible 版本兼容性
### 常见错误处理
#### Stat 模块属性访问问题
- **错误**`'dict object' has no attribute 'isdir'`
- **原因**Ansible stat 模块返回嵌套字典结构
- **解决方案**:始终使用 `log_dir_stat.stat.isdir` 而非 `log_dir_stat.isdir`
示例修复:
```yaml
- name: 检查日志目录
ansible.builtin.stat:
path: "/var/log/xxxigcc"
register: log_dir_stat
# 正确的条件判断
- name: 处理日志目录
when: log_dir_stat.stat.exists and log_dir_stat.stat.isdir
block:
- name: 清理日志
# 清理操作
```
## 5. 安全注意事项
- 仅在可信环境中执行此 Playbook
- 谨慎使用 `old_pool_url` 参数
- 谨慎使用 `old_pool_url` 参数
- 确保 Ansible 版本满足最低要求
- 注意处理 stat 模块返回的嵌套字典属性

View File

@@ -0,0 +1,27 @@
# 如何使用 xxxigcc_update.yaml Playbook
## 前置条件
1. 已安装 Ansible
2. 已配置 APT 软件仓库(使用 gitea_repo_setup.yaml
## 使用步骤
1. **准备工作**
```bash
# 确保 Ansible 已正确安装
ansible --version
```
2. **执行 Playbook**
```bash
ansible-playbook xxxigcc_update.yaml
```
3. **验证服务状态**
- Playbook 将自动检查并报告 xxxigcc-daemon 服务状态
- 查看详细输出以确认服务正常运行
## 注意事项
- 此 Playbook 支持幂等执行
- 可重复运行,不会影响已配置的服务
- 始终检查 Ansible 输出,确保没有错误

View File

@@ -1,28 +1,12 @@
# Ansible Playbook 文档系统
# Ansible Playbook 文档索引
## 项目概览
## 核心组件
- `gitea_repo_setup.yaml`: APT 仓库配置
- `xxxigcc_update.yaml`: xxxigcc 软件包更新与服务管理
- `xxxigcc_update_pool_url.yaml`: 服务配置更新
本文档系统提供 Ansible Playbook 项目的全面技术文档。
## 目录结构
### 指南 (Guides)
- [更新 XXXigCC Pool URL](/guides/xxxigcc-pool-url-update.md)
- 其他操作指南...
### 架构 (Architecture)
- [Ansible 项目架构](/architecture/ansible-project-structure.md)
- 系统组件设计...
### 参考 (Reference)
- 待添加...
## 最近更新
- 新增 `xxxigcc_update_pool_url.yaml` Playbook
- 更新系统架构文档
- 添加 Pool URL 更新指南
## 联系方式
如有任何问题,请联系项目维护者。
## 文档目录
- [项目概览](/overview/project-overview.md)
- [指南](/guides/)
- [架构](/architecture/)
- [参考](/reference/)

View File

@@ -1,63 +1,13 @@
# Gitea Ansible Playbook 自动化部署项目
# Ansible Playbook 项目概览
## 1. 身份定义
- **项目类型:** Ansible 自动化部署工具集
- **主要目的:** 简化 Gitea 服务的安装、配置和系统集成
- **项目目的**: 通过自动化 Ansible Playbook 简化 Linux 服务器配置和管理
- **核心功能**: 自动化软件包管理、仓库配置和服务部署
## 2. 高级描述
本项目提供了一组模块化的 Ansible Playbook专注于简化 Linux 服务器的软件包管理和服务配置。通过标准化和自动化的方法,降低系统管理复杂性。
这是一个专为 Gitea 服务设计的 Ansible Playbook 自动化部署项目。通过模块化的 Ansible Playbook该项目提供了灵活、可配置的部署解决方案支持 Gitea 服务的快速安装、个性化配置和便捷卸载。
## 3. 目录结构
### 主要目录
- `docs/`: 面向人类用户的详细文档
- 提供深入的使用指南、配置说明和最佳实践
- 包含 Nezha Agent、XXXigCC 等功能的专项文档
- `examples/`: 配置文件示例
- 提供各种 Playbook 和功能的配置模板
- 包括 Inventory、变量定义等示例文件
- `llmdoc/`: LLM 友好的技术文档系统
- 为 AI 代理提供结构化、可检索的技术文档
### 重要目录说明
- 文档按功能和技术维度组织,方便快速定位和理解
- 示例文件有助于快速理解和复制配置
## 4. 核心组件
### 主要 Playbook
- `xxxigcc_install.yaml`: Gitea 服务安装
- `xxxigcc_uninstall.yaml`: Gitea 服务卸载
- `journald_configure.yml`: 系统日志配置
- `nezha_update_secret.yml`: Nezha Agent 更新
### 关键特性
- 模块化设计
- 灵活的参数配置
- 支持动态参数渲染
- 使用常见 Ansible 模块进行系统交互
## 5. 技术栈
- **主要工具:** Ansible
- **配置语言:** YAML
- **目标系统:** Linux 服务器
- **关键 Ansible 模块:**
- `ansible.builtin.set_fact`
- `ansible.builtin.shell`
- `ansible.builtin.file`
## 6. 使用场景
适用于需要自动化部署和管理 Gitea 服务的运维团队,特别是追求配置灵活性和可重复性的场景。重点关注:
- 自动化 Nezha Agent 配置
- XXXigCC 的部署与管理
- 系统日志配置
- 安全且可重复的自动化部署
## 3. 核心组件
- `gitea_repo_setup.yaml`: 配置并管理 APT 软件仓库
- `xxxigcc_update.yaml`: 更新并管理 xxxigcc 软件包及其服务
- `xxxigcc_update_pool_url.yaml`: 动态更新服务配置

View File

@@ -0,0 +1,52 @@
# Ansible 版本兼容性参考
## 版本兼容性矩阵
| Ansible 版本 | 状态 | 主要变更 | 兼容性级别 |
|------------|---------|-----------------------------|------------|
| 2.9 及以下 | 不推荐 | 传统模块实现 | 低 |
| 2.10-2.13 | 部分兼容 | 模块命名空间变更 | 中 |
| 2.14+ | 推荐 | 废弃 `warn` 参数,模块规范化 | 高 |
## 关键变更详情
### 模块属性访问
Ansible stat 模块返回的是嵌套字典结构,访问属性时需要注意:
- **错误示例**`log_dir_stat.isdir`
- **正确示例**`log_dir_stat.stat.isdir`
原因:
- stat 模块返回一个包含 `stat` 子字典的对象
- 必须通过 `stat` 子字典访问文件/目录属性
- 直接访问根对象属性会导致 `'dict object' has no attribute` 错误
### `warn` 参数的移除
- **版本**Ansible 2.14
- **影响模块**`command``shell`
- **变更原因**:简化模块接口,提高安全性
#### 迁移指南
1. 移除 `warn: false`
2. 使用 `ansible.builtin.shell` 替代
3. 调整执行策略
### 模块命名空间变更
-`command``ansible.legacy.command`
- 推荐使用 `ansible.builtin.shell`
## 最佳实践
- 始终使用最新的 Ansible 版本
- 定期检查并更新 Playbook
- 使用 `ansible_version` 进行版本兼容性检查
- 谨慎访问模块返回的嵌套字典属性
## 参考资源
- [Ansible 官方版本发行说明](https://docs.ansible.com/ansible/latest/release_notes/index.html)
- [Ansible 模块迁移指南](https://docs.ansible.com/ansible/latest/dev_guide/module_lifecycle.html)

View File

@@ -0,0 +1,17 @@
# xxxigcc 更新 Playbook 参考
## 核心摘要
本文档提供 `xxxigcc_update.yaml` Playbook 的参考信息,包括关键操作和设计决策。
## 真实来源
- **主要 Playbook**: `xxxigcc_update.yaml`
- **相关配置**: `ansible.cfg`(如有)
## 详细操作
- **APT 更新**: `ansible.builtin.apt: update_cache=yes`
- **软件包管理**: `ansible.builtin.apt: name=xxxigcc state=latest`
- **服务控制**: `ansible.builtin.systemd: name=xxxigcc-daemon enabled=yes state=started`
## 外部链接
- [Ansible APT 模块文档](https://docs.ansible.com/ansible/latest/collections/ansible/builtin/apt_module.html)
- [Ansible Systemd 模块文档](https://docs.ansible.com/ansible/latest/collections/ansible/builtin/systemd_module.html)

72
xxxigcc_update.yaml Normal file
View File

@@ -0,0 +1,72 @@
---
- name: XXXigCC 更新和服务启动脚本
hosts: all
become: yes
vars:
# 服务配置
package_name: "xxxigcc"
service_name: "xxxigcc-daemon.service"
tasks:
- name: 更新 APT 软件包缓存
ansible.builtin.apt:
update_cache: yes
register: apt_update
changed_when: apt_update.cache_updated
- name: 显示 APT 缓存更新结果
ansible.builtin.debug:
msg: "APT 软件包缓存已更新"
- name: 安装或更新 xxxigcc 软件包
ansible.builtin.apt:
name: "{{ package_name }}"
state: latest
register: package_install
- name: 显示软件包安装结果
ansible.builtin.debug:
msg: "{{ package_name }} 软件包已{{ '更新' if package_install.changed else '确认为最新版本' }}"
- name: 启用 xxxigcc-daemon 服务开机自启
ansible.builtin.systemd:
name: "{{ service_name }}"
enabled: yes
register: service_enabled
- name: 显示服务启用结果
ansible.builtin.debug:
msg: "{{ service_name }} 已设置为开机自启"
- name: 启动 xxxigcc-daemon 服务
ansible.builtin.systemd:
name: "{{ service_name }}"
state: started
register: service_started
- name: 显示服务启动结果
ansible.builtin.debug:
msg: "{{ service_name }} 已启动"
- name: 验证服务运行状态
ansible.builtin.systemd:
name: "{{ service_name }}"
register: service_status
- name: 显示服务状态信息
ansible.builtin.debug:
msg: |
服务状态:
- 服务名称: {{ service_name }}
- 运行状态: {{ service_status.status.ActiveState }}
- 开机自启: {{ 'enabled' if service_enabled.enabled else 'disabled' }}
- name: 显示操作总结
ansible.builtin.debug:
msg: |
操作完成总结:
- APT 缓存: 已更新
- 软件包: {{ package_name }} {{ '(已更新)' if package_install.changed else '(已是最新)' }}
- 服务自启: {{ service_name }} (已启用)
- 服务状态: {{ service_name }} (已启动)

View File

@@ -100,15 +100,13 @@
- name: 删除日志目录下的所有文件
ansible.builtin.shell: |
rm -rf {{ log_dir }}/*
args:
warn: false
when: log_dir_stat.stat.exists and log_dir_stat.stat.isdir
register: log_cleanup
- name: 显示日志清理结果
ansible.builtin.debug:
msg: "日志目录 {{ log_dir }} 已清理"
when: log_dir_stat.stat.exists and log_dir_stat.isdir
when: log_dir_stat.stat.exists and log_dir_stat.stat.isdir
- name: 重启 xxxigcc-daemon 服务
ansible.builtin.systemd: