--- - name: Deploy and Reload Caddy & frpc on Heterogeneous Systems hosts: caddy_servers become: yes # # 'pre_tasks' 会在所有常规 'tasks' 之前执行 # pre_tasks: # - name: "(Alpine Only) Ensure Python 3 is installed for Ansible" # # 使用 'raw' 模块,因为它不依赖 Python # # 这是一个标准的在 Alpine 上引导 Ansible 的方法 # raw: test -e /usr/bin/python3 || (apk update && apk add python3) # register: result # changed_when: "'OK' in result.stdout or 'fetch' in result.stdout" # # 'when' 条件确保这个任务只在 Alpine 系统上运行 # when: ansible_os_family == "Alpine" tasks: # --- Caddy 任务 (保持不变) --- - name: "Copy Caddyfile for {{ inventory_hostname }}" copy: src: "files/{{ inventory_hostname }}/Caddyfile" dest: /etc/caddy/Caddyfile owner: root group: caddy mode: '0644' validate: 'caddy validate --config %s --adapter caddyfile' notify: Reload Caddy # --- 新增的 FRPC 任务 --- - name: "Copy frpc.toml for {{ inventory_hostname }}" # 使用 copy 模块部署 frpc.toml copy: src: "files/{{ inventory_hostname }}/frp/frpc.toml" dest: /etc/frp/frpc.toml owner: root group: root # 根据您服务器上的实际情况,frp的用户组可能是root或frp mode: '0640' # toml文件可能包含敏感信息,使用更严格的权限 # 当这个任务只在 192.168.31.102 上执行 when: inventory_hostname == "192.168.31.101" # 当文件变更时,通知 "Restart frpc" 这个 handler notify: Restart frpc # --- 新增的 DOCKER COMPOSE 任务 --- - name: "Copy docker-compose.yml for {{ inventory_hostname }}" copy: src: "files/{{ inventory_hostname }}/ddns-go/docker-compose.yml" dest: /root/ddns-go/docker-compose.yml owner: root group: root mode: '0644' when: inventory_hostname == "192.168.31.101" notify: Relaunch Docker Compose application handlers: # --- Caddy Handlers (保持不变) --- - name: Reload Caddy on systemd systems (e.g., Ubuntu) # Both handlers listen for the same notification listen: "Reload Caddy" systemd: name: caddy state: reloaded # This handler ONLY runs on systems with systemd when: ansible_service_mgr == "systemd" - name: Reload Caddy on OpenRC systems (e.g., Alpine) # Both handlers listen for the same notification listen: "Reload Caddy" # For Alpine, we use the 'command' module to call its service manager command: rc-service caddy reload # This handler ONLY runs on systems with openrc when: ansible_service_mgr == "openrc" # --- 新增的 FRPC Handler --- - name: Restart frpc # frpc 运行在 Alpine (OpenRC) 上,所以我们直接使用 command 模块 command: rc-service frpc restart # 这个 handler 监听 "Restart frpc" 通知 listen: "Restart frpc" # --- 新增的 DOCKER COMPOSE Handler --- - name: Relaunch Docker Compose application # 使用 command 模块来执行 docker compose 命令,以应用新的配置 # 'docker compose' 是新版语法,如果您的服务器是旧版 docker-compose,请使用 'docker-compose' command: docker compose -f /root/ddns-go/docker-compose.yml up -d --remove-orphans listen: "Relaunch Docker Compose application"