Compare commits

...

3 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
12 changed files with 367 additions and 86 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

@@ -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

@@ -45,8 +45,32 @@
3. 系统权限 3. 系统权限
4. Ansible 版本兼容性 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. 安全注意事项 ## 5. 安全注意事项
- 仅在可信环境中执行此 Playbook - 仅在可信环境中执行此 Playbook
- 谨慎使用 `old_pool_url` 参数 - 谨慎使用 `old_pool_url` 参数
- 确保 Ansible 版本满足最低要求 - 确保 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 项目的全面技术文档。 ## 文档目录
- [项目概览](/overview/project-overview.md)
## 目录结构 - [指南](/guides/)
- [架构](/architecture/)
### 指南 (Guides) - [参考](/reference/)
- [更新 XXXigCC Pool URL](/guides/xxxigcc-pool-url-update.md)
- 其他操作指南...
### 架构 (Architecture)
- [Ansible 项目架构](/architecture/ansible-project-structure.md)
- 系统组件设计...
### 参考 (Reference)
- [Ansible 版本兼容性](/reference/ansible-version-compatibility.md)
## 最近更新
- 修复 `xxxigcc_update_pool_url.yaml` 中的版本兼容性问题
- 新增 Ansible 版本兼容性参考文档
- 更新 Pool URL 更新指南
## 联系方式
如有任何问题,请联系项目维护者。

View File

@@ -1,63 +1,13 @@
# Gitea Ansible Playbook 自动化部署项目 # Ansible Playbook 项目概览
## 1. 身份定义 ## 1. 身份定义
- **项目目的**: 通过自动化 Ansible Playbook 简化 Linux 服务器配置和管理
- **项目类型:** Ansible 自动化部署工具集 - **核心功能**: 自动化软件包管理、仓库配置和服务部署
- **主要目的:** 简化 Gitea 服务的安装、配置和系统集成
## 2. 高级描述 ## 2. 高级描述
本项目提供了一组模块化的 Ansible Playbook专注于简化 Linux 服务器的软件包管理和服务配置。通过标准化和自动化的方法,降低系统管理复杂性。
这是一个专为 Gitea 服务设计的 Ansible Playbook 自动化部署项目。通过模块化的 Ansible Playbook该项目提供了灵活、可配置的部署解决方案支持 Gitea 服务的快速安装、个性化配置和便捷卸载。 ## 3. 核心组件
- `gitea_repo_setup.yaml`: 配置并管理 APT 软件仓库
## 3. 目录结构 - `xxxigcc_update.yaml`: 更新并管理 xxxigcc 软件包及其服务
- `xxxigcc_update_pool_url.yaml`: 动态更新服务配置
### 主要目录
- `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 的部署与管理
- 系统日志配置
- 安全且可重复的自动化部署

View File

@@ -10,6 +10,18 @@
## 关键变更详情 ## 关键变更详情
### 模块属性访问
Ansible stat 模块返回的是嵌套字典结构,访问属性时需要注意:
- **错误示例**`log_dir_stat.isdir`
- **正确示例**`log_dir_stat.stat.isdir`
原因:
- stat 模块返回一个包含 `stat` 子字典的对象
- 必须通过 `stat` 子字典访问文件/目录属性
- 直接访问根对象属性会导致 `'dict object' has no attribute` 错误
### `warn` 参数的移除 ### `warn` 参数的移除
- **版本**Ansible 2.14 - **版本**Ansible 2.14
@@ -32,6 +44,7 @@
- 始终使用最新的 Ansible 版本 - 始终使用最新的 Ansible 版本
- 定期检查并更新 Playbook - 定期检查并更新 Playbook
- 使用 `ansible_version` 进行版本兼容性检查 - 使用 `ansible_version` 进行版本兼容性检查
- 谨慎访问模块返回的嵌套字典属性
## 参考资源 ## 参考资源

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

@@ -106,7 +106,7 @@
- name: 显示日志清理结果 - name: 显示日志清理结果
ansible.builtin.debug: ansible.builtin.debug:
msg: "日志目录 {{ log_dir }} 已清理" 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 服务 - name: 重启 xxxigcc-daemon 服务
ansible.builtin.systemd: ansible.builtin.systemd: