diff --git a/roles/vhosts/ai-workspace/defaults/main.yml b/roles/vhosts/ai-workspace/defaults/main.yml index f18dd31..623e0c8 100644 --- a/roles/vhosts/ai-workspace/defaults/main.yml +++ b/roles/vhosts/ai-workspace/defaults/main.yml @@ -6,6 +6,16 @@ migrate_litellm_db: "litellm" migrate_litellm_db_user: "litellm" migrate_litellm_db_host: "127.0.0.1" +# Public bootstrap redirects +ai_workspace_caddy_base_dir: "{{ caddy_config_dir | default('/etc/caddy') }}" +ai_workspace_caddy_conf_dir: "{{ ai_workspace_caddy_base_dir }}/conf.d" +ai_workspace_caddyfile_path: "{{ ai_workspace_caddy_base_dir }}/Caddyfile" +ai_workspace_caddy_fragment_path: "{{ ai_workspace_caddy_conf_dir }}/install.svc.plus.caddy" +ai_workspace_public_domain: "install.svc.plus" +ai_workspace_install_script_url: "https://raw.githubusercontent.com/ai-workspace-lab/xworkspace-console/main/scripts/setup-ai-workspace-all-in-one.sh" +ai_workspace_xworkmate_install_script_url: "https://raw.githubusercontent.com/ai-workspace-lab/xworkmate-app/main/scripts/install-xworkmate-app.sh" +ai_workspace_manage_caddy: true + # Migration paths openclaw_data_dir: "~/.openclaw" xworkspace_state_dir: "~/.local/state/xworkspace" diff --git a/roles/vhosts/ai-workspace/meta/main.yml b/roles/vhosts/ai-workspace/meta/main.yml index ff4da01..3a36a14 100644 --- a/roles/vhosts/ai-workspace/meta/main.yml +++ b/roles/vhosts/ai-workspace/meta/main.yml @@ -1,5 +1,6 @@ --- dependencies: + - role: roles/vhosts/caddy - role: roles/agent_skills - role: roles/vhosts/gateway_openclaw - role: roles/vhosts/xworkmate_bridge diff --git a/roles/vhosts/ai-workspace/tasks/main.yml b/roles/vhosts/ai-workspace/tasks/main.yml index 7f8c0a3..4921992 100644 --- a/roles/vhosts/ai-workspace/tasks/main.yml +++ b/roles/vhosts/ai-workspace/tasks/main.yml @@ -1,4 +1,35 @@ --- +- name: Ensure AI Workspace Caddy fragment directory exists + ansible.builtin.file: + path: "{{ ai_workspace_caddy_conf_dir }}" + state: directory + mode: "0755" + when: ai_workspace_manage_caddy | bool + +- name: Render install.svc.plus redirect fragment + ansible.builtin.template: + src: Caddyfile.j2 + dest: "{{ ai_workspace_caddy_fragment_path }}" + mode: "0644" + register: ai_workspace_caddy_fragment + when: ai_workspace_manage_caddy | bool + +- name: Validate Caddy configuration + ansible.builtin.command: >- + caddy validate --config {{ ai_workspace_caddyfile_path }} + changed_when: false + when: + - ai_workspace_manage_caddy | bool + - ai_workspace_caddy_fragment.changed + +- name: Reload Caddy after updating install redirects + ansible.builtin.service: + name: caddy + state: reloaded + when: + - ai_workspace_manage_caddy | bool + - ai_workspace_caddy_fragment.changed + # ============================================================================= # Final deployment of the prebuilt XWorkspace Console runtime. # diff --git a/roles/vhosts/ai-workspace/templates/Caddyfile.j2 b/roles/vhosts/ai-workspace/templates/Caddyfile.j2 new file mode 100644 index 0000000..2184ef6 --- /dev/null +++ b/roles/vhosts/ai-workspace/templates/Caddyfile.j2 @@ -0,0 +1,6 @@ +{{ ai_workspace_public_domain }} { + redir /ai-workspace {{ ai_workspace_install_script_url }} 302 + redir /ai-workspace/latest {{ ai_workspace_install_script_url }} 302 + redir /xworkmate-app {{ ai_workspace_xworkmate_install_script_url }} 302 + redir /xworkmate-app/latest {{ ai_workspace_xworkmate_install_script_url }} 302 +}