Files
mypointvpn/src/serverus/playbooks/xui.yml
T

63 lines
2.3 KiB
YAML

# extravars: username, password, panel_port, web_base_path, domain (optional), version (optional)
#
# Ставит 3x-ui скриптом из README проекта в неинтерактивном режиме.
# Сертификат: на домен, если он задан, иначе на ip. Оба варианта требуют открытый 80 порт (acme).
- name: Install 3x-ui panel
hosts: target
gather_facts: false
vars:
xui_bin: /usr/local/x-ui/x-ui
xui_domain: "{{ domain | default('') }}"
tasks:
- ansible.builtin.import_tasks: tasks/firewall.yml
vars:
firewall_tcp_ports: [ "{{ ansible_port }}", 80, 443, "{{ panel_port }}" ]
- name: Download install script
ansible.builtin.get_url:
url: https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh
dest: /root/3x-ui-install.sh
mode: "0700"
force: true
- name: Run install script
ansible.builtin.command:
cmd: "bash /root/3x-ui-install.sh {{ version | default('') }}"
creates: "{{ xui_bin }}"
environment:
XUI_NONINTERACTIVE: "1"
XUI_USERNAME: "{{ username }}"
XUI_PASSWORD: "{{ password }}"
XUI_PANEL_PORT: "{{ panel_port }}"
XUI_WEB_BASE_PATH: "{{ web_base_path }}"
XUI_SSL_MODE: "{{ 'domain' if xui_domain else 'ip' }}"
XUI_DOMAIN: "{{ xui_domain }}"
XUI_SERVER_IP: "{{ ansible_host }}"
no_log: true
# скрипт не перезаписывает настройки уже установленной панели, поэтому задаем их явно
- name: Apply panel settings
ansible.builtin.command: >-
{{ xui_bin }} setting -username {{ username | quote }} -password {{ password | quote }}
-port {{ panel_port }} -webBasePath {{ web_base_path | quote }}
no_log: true
- name: Restart panel
ansible.builtin.systemd_service:
name: x-ui
state: restarted
enabled: true
- name: Read API token
ansible.builtin.shell: "{{ xui_bin }} setting -getApiToken | grep -Eo 'apiToken: .+' | awk '{print $2}'"
register: api_token
changed_when: false
no_log: true
- name: Return panel access
ansible.builtin.set_stats:
aggregate: false
data:
api_token: "{{ api_token.stdout }}"
no_log: true