63 lines
2.3 KiB
YAML
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
|