Compare commits

..

6 Commits

Author SHA1 Message Date
Sergey Antropoff 8ba1c6c45f fix: пропускать sync install_server.sh при сетевой ошибке
Если get.hy2.sh недоступен (таймаут без VPN), используется локальная
копия в roles/hysteria2/files/; падение только если её нет.
2026-07-01 14:06:46 +03:00
Sergey Antropoff 3034be388b docs: LIMIT при добавлении сервера и force_export в README
Описано, что make install LIMIT не трогает старые VPS и как принудительно
перевыпустить URL/QR через hysteria2_force_export.
2026-07-01 13:37:53 +03:00
Sergey Antropoff 83b47dbc30 fix: пересборка output/index.html при uninstall с LIMIT
Второй play перенесён на hysteria2_servers с run_once на localhost,
чтобы LIMIT не пропускал пересборку. Пустой index.html удаляется.
2026-07-01 13:31:28 +03:00
Sergey Antropoff 4b5a1ef51f Полная очистка при uninstall: VPS и output/<server>/
Скрипт --remove снимает только бинарник и systemd; Ansible дочищает конфиг,
пользователя, ufw, пакеты и всегда удаляет локальную папку экспорта.
2026-07-01 13:28:59 +03:00
Sergey Antropoff bdc316efac fix: run only uninstall tasks, not full role on make uninstall
Tagging the whole role with uninstall caused install/configure/update/export to run first. Use include_role tasks_from uninstall.yml; add safe defaults for uninstall variables.
2026-07-01 13:20:17 +03:00
Sergey Antropoff 01198b4f77 docs: update README for Salamander branch features
Mirror main documentation: install script sync, incremental update/export, uninstall, vault wiring, Makefile and role structure.
2026-07-01 13:16:38 +03:00
2 changed files with 77 additions and 11 deletions
+21
View File
@@ -80,10 +80,12 @@ make install # → output/index.html откроется в браузере
```bash ```bash
make install LIMIT=vps-de make install LIMIT=vps-de
make install LIMIT=vps-nl # только новый сервер — старые не трогаются
make update LIMIT=vps-nl make update LIMIT=vps-nl
make export make export
make uninstall LIMIT=vps-de make uninstall LIMIT=vps-de
make update EXTRA_VARS='hysteria2_force_export=true' # перевыпустить URL/QR для всех make update EXTRA_VARS='hysteria2_force_export=true' # перевыпустить URL/QR для всех
make install EXTRA_VARS='hysteria2_force_export=true' # то же при install
make install EXTRA_VARS='hysteria2_open_browser=false' make install EXTRA_VARS='hysteria2_open_browser=false'
make update EXTRA_VARS='hysteria2_wait_for_acme=false' make update EXTRA_VARS='hysteria2_wait_for_acme=false'
``` ```
@@ -240,6 +242,25 @@ hysteria2_obfs_password: "{{ vault_hysteria2_obfs_passwords[inventory_hostname]
Принудительно перевыпустить URL/QR для всех VPN-пользователей: `hysteria2_force_export: true`. Принудительно перевыпустить URL/QR для всех VPN-пользователей: `hysteria2_force_export: true`.
```bash
make install EXTRA_VARS='hysteria2_force_export=true'
make update LIMIT=vps-de EXTRA_VARS='hysteria2_force_export=true'
```
### Добавить второй VPS
После `make install` на первом сервере можно добавить ещё один хост в `inventory/hosts.yml`.
**Без `LIMIT`** `make install` пройдёт по **всем** серверам из inventory. На уже установленном пароли и файлы URL/QR **не перегенерируются** (берутся из `output/<server>/server-info.yml`), если вы не меняли его `hysteria2_users`, домен или порт.
Чтобы **не трогать** уже работающий VPS и экспорт:
```bash
make install LIMIT=новый-сервер
```
`LIMIT` — имя нового хоста из inventory (например `vps-nl`).
### Добавить / удалить пользователя ### Добавить / удалить пользователя
1. Отредактируйте `hysteria2_users` в `inventory/hosts.yml`. 1. Отредактируйте `hysteria2_users` в `inventory/hosts.yml`.
+56 -11
View File
@@ -14,10 +14,19 @@
dest: "{{ hysteria2_install_script_staging_dir }}/{{ hysteria2_install_script_name }}.remote" dest: "{{ hysteria2_install_script_staging_dir }}/{{ hysteria2_install_script_name }}.remote"
mode: "0644" mode: "0644"
force: true force: true
timeout: 30
delegate_to: localhost delegate_to: localhost
become: false become: false
run_once: true run_once: true
register: _hysteria2_remote_script register: _hysteria2_remote_script
failed_when: false
- name: Record install script fetch result
ansible.builtin.set_fact:
_hysteria2_script_fetch_ok: "{{ not (_hysteria2_remote_script.failed | default(false)) }}"
delegate_to: localhost
become: false
run_once: true
- name: Stat local install script in role files - name: Stat local install script in role files
ansible.builtin.stat: ansible.builtin.stat:
@@ -36,6 +45,7 @@
become: false become: false
run_once: true run_once: true
register: _hysteria2_remote_script_stat register: _hysteria2_remote_script_stat
when: _hysteria2_script_fetch_ok | bool
- name: Update bundled install script when official version is newer - name: Update bundled install script when official version is newer
ansible.builtin.copy: ansible.builtin.copy:
@@ -45,20 +55,55 @@
delegate_to: localhost delegate_to: localhost
become: false become: false
run_once: true run_once: true
when: >- when:
not _hysteria2_local_script.stat.exists - _hysteria2_script_fetch_ok | bool
or _hysteria2_local_script.stat.checksum - >-
!= _hysteria2_remote_script_stat.stat.checksum not _hysteria2_local_script.stat.exists
or _hysteria2_local_script.stat.checksum
!= _hysteria2_remote_script_stat.stat.checksum
register: _hysteria2_script_updated register: _hysteria2_script_updated
- name: Report install script sync result - name: Fail when bundled install script is missing and official fetch failed
ansible.builtin.debug: ansible.builtin.fail:
msg: >- msg: >-
{{ Не удалось скачать {{ hysteria2_install_script_url }}
'Официальный install_server.sh обновлён в roles/hysteria2/files/' ({{ _hysteria2_remote_script.msg | default('сеть недоступна') }})
if (_hysteria2_script_updated.changed | default(false)) и локальный roles/hysteria2/files/{{ hysteria2_install_script_name }} отсутствует.
else 'Локальный install_server.sh актуален (совпадает с ' ~ hysteria2_install_script_url ~ ')'
}}
delegate_to: localhost delegate_to: localhost
become: false become: false
run_once: true run_once: true
when:
- not _hysteria2_script_fetch_ok | bool
- not _hysteria2_local_script.stat.exists
- name: Report install script sync skipped due to network error
ansible.builtin.debug:
msg: >-
Пропуск синхронизации с {{ hysteria2_install_script_url }}:
{{ _hysteria2_remote_script.msg | default('сеть недоступна') }}.
Используется локальный roles/hysteria2/files/{{ hysteria2_install_script_name }}.
delegate_to: localhost
become: false
run_once: true
when: not _hysteria2_script_fetch_ok | bool
- name: Report install script updated from official server
ansible.builtin.debug:
msg: Официальный install_server.sh обновлён в roles/hysteria2/files/
delegate_to: localhost
become: false
run_once: true
when:
- _hysteria2_script_fetch_ok | bool
- _hysteria2_script_updated.changed | default(false)
- name: Report install script already up to date
ansible.builtin.debug:
msg: >-
Локальный install_server.sh актуален (совпадает с {{ hysteria2_install_script_url }}).
delegate_to: localhost
become: false
run_once: true
when:
- _hysteria2_script_fetch_ok | bool
- not (_hysteria2_script_updated.changed | default(false))