Вы получили письмо с файлом weco_license.jwt? Эта инструкция для вас. Мы провели её по шагам так, чтобы её мог выполнить человек, который никогда не открывал «командную строку» — все непонятные термины объясняются на месте, а на каждый шаг есть отдельная картинка-помощь, если вдруг непонятно где нажать.
Если вы умеете скачивать и устанавливать программы из интернета, копировать файлы и заводить виртуальную машину у облачного провайдера (как обычный аккаунт на сайте), — этого достаточно. Все «страшные» команды у нас уже написаны и копируются одной кнопкой.
Общее время — около 30–45 минут в первый раз. Со второго раза — 5 минут.
Выберите вашу систему — инструкция покажет шаги именно для неё.
Перед началом убедитесь, что у вас есть:
weco_license.jwt — он пришёл во вложении к письму от noreply@nexaxt.com с темой «Ваша trial-ключ» или «Ваша лицензия». Сохраните его, например, в папку «Загрузки» / Downloads.Найдите письмо от noreply@nexaxt.com со вложенным файлом weco_license.jwt. Это и есть ваша лицензия — небольшой текстовый файл (~700 байт), он будет нужен на шаге 4.
weco_license.jwt. Нажмите на него правой кнопкой мыши → Сохранить как… → выберите папку Загрузки (или любую другую, которую запомните) → Сохранить.
~/Downloads.
weco_license.jwt — это ваш ключ к продукту. Не пересылайте его в Telegram / Slack, не загружайте в публичные репозитории и не выкладывайте в общедоступные облака. Он действует именно как пароль.
Зайдите на сайт вашего облачного провайдера и создайте новую VM с такими параметрами:
203.0.113.42.id_rsa или vmname.pem) в папку ~/Downloads рядом с лицензией.В конце шага у вас должно быть на руках три значения, запишите их в менеджер паролей:
203.0.113.42.root, у DigitalOcean — root, у Yandex.Cloud — обычно ubuntu или user. Точное имя пишет провайдер при создании VM.~/Downloads/my-vm-key.pem.Самый простой и дешёвый старт — Hetzner Cloud (€4/мес за подходящую VM). Регистрация по почте, оплата картой, VM поднимается за 30 секунд. hetzner.com/cloud.
На Windows установите Windows Terminal и OpenSSH (если их ещё нет). Большинство современных Windows 10/11 уже имеют OpenSSH встроенным — проверим.
ssh и нажмите Enter. Если видите справку по командам ssh — у вас всё установлено, переходите к следующему шагу.ssh:usage: ssh [-46AaCfGgKkMNnqsTtVvXxYy]. Это значит, программа SSH установлена и готова к работе.
На macOS уже есть всё нужное — никакой установки. Просто откройте программу Терминал:
ssh и нажмите Enter. Должна появиться справка по команде. Это значит, всё работает.На любом современном Linux ssh уже установлен. Откройте терминал (обычно Ctrl + Alt + T) и убедитесь, что команда ssh работает.
Дальше нужно подготовить ваш SSH-ключ — задать ему правильные права доступа, иначе ssh откажется его использовать. В терминале выполните одну команду (можно скопировать кнопкой справа):
# Замените путь на свой реальный путь к ключу. Все три строки нужно выполнить подряд. icacls "C:\Users\Имя\Downloads\my-vm-key.pem" /reset icacls "C:\Users\Имя\Downloads\my-vm-key.pem" /inheritance:r icacls "C:\Users\Имя\Downloads\my-vm-key.pem" /grant:r "$($env:USERNAME):R"
Замените жёлтый текст на полный путь к вашему ключу. Чтобы получить путь — найдите файл в Проводнике, нажмите по нему правой кнопкой → Свойства → скопируйте Расположение + добавьте \имя_файла. Команды нужно запускать в PowerShell; $($env:USERNAME) подставит ваше имя пользователя автоматически.
ssh -i ругается Load key "...": Permission denied и затем Permission denied (publickey) — это значит, что три строки выше не были выполнены или не доработали. OpenSSH отказывается читать ключ, который доступен другим пользователям системы. Запустите все три строки в PowerShell ещё раз и проверьте, что после каждой видите Successfully processed 1 files.
# Замените путь на свой реальный путь к ключу chmod 600 ~/Downloads/my-vm-key.pem
Если ваш файл не my-vm-key.pem, замените имя на правильное. Перетащите файл в окно Терминала — он сам подставит правильный путь.
chmod 600 ~/Downloads/my-vm-key.pem
Проверьте, что вы можете подключиться к VM. Замените жёлтые значения на свои. Имя пользователя зависит от облачного провайдера — см. таблицу ниже:
ssh -i ~/Downloads/my-vm-key.pem root@203.0.113.42
| Провайдер | SSH-пользователь по умолчанию |
|---|---|
| Hetzner Cloud, DigitalOcean, FirstVDS | root |
| AWS Ubuntu AMI | ubuntu |
| AWS Amazon Linux | ec2-user |
| Yandex.Cloud, GCP, Selectel | user или yc-user (точное имя пишет провайдер при создании VM — обычно в карточке VM) |
| Oracle, Azure | opc / azureuser |
Если не уверены — провайдер показывает имя пользователя в карточке VM или в письме после создания. Если ssh говорит Permission denied (publickey), это почти всегда либо неправильный пользователь, либо неправильно зажатые права на ключ (см. шаг выше).
root@vm-name:~#). Это значит, всё подключилось — наберите exit и Enter, чтобы вернуться к себе.
chmod 600 / icacls не сработал. Перепроверьте путь к файлу и повторите команду — это самая частая ошибка.
ssh-keygen -R 203.0.113.42
Замените жёлтый IP на адрес вашей VM. После этого снова выполните команду ssh -i … выше — ssh заново спросит «Are you sure you want to continue connecting (yes/no)?», ответьте yes.
На этом шаге одна команда сделает всё остальное: подключится к вашей VM, установит nginx + Postgres + код WECO, активирует лицензию, создаст вам первого admin-пользователя и выпустит SSL-сертификат.
Скачайте установщик с нашего сервера (одна команда в терминале):
curl.exe -LO https://weco.nexaxt.com/install-admin.sh
Внимание: в PowerShell используйте именно curl.exe (с расширением). Без .exe PowerShell подменяет команду на Invoke-WebRequest, у которого другие флаги, и команда падает с ошибкой «A parameter cannot be found that matches parameter name 'LO'». curl.exe входит в комплект Windows 10 (1803+) и Windows 11 — ставить ничего не нужно.
curl -LO https://weco.nexaxt.com/install-admin.sh chmod +x install-admin.sh
curl -LO https://weco.nexaxt.com/install-admin.sh chmod +x install-admin.sh
Теперь запустите его. Подставьте свои значения в жёлтые места (IP вашей VM, путь к SSH-ключу, путь к файлу лицензии, ваш email и пароль для админки):
Файл install-admin.sh — это bash-скрипт. На Windows его нельзя запустить напрямую из PowerShell или cmd: ./install-admin.sh \ распознаётся как ошибка «Missing expression after unary operator '--'», потому что PowerShell не знает bash-синтаксис (обратная косая \ в конце строки и флаги вида --vm-ip). Поэтому нужно установить Git for Windows (5 минут, штатный установщик) — он принесёт bash.
Способ A (рекомендуется) — откройте Git Bash из меню «Пуск», перейдите в папку со скачанным файлом (cd ~/Downloads или куда сохранили), и выполните:
bash install-admin.sh \
--vm-ip 203.0.113.42 \
--ssh-key ~/Downloads/my-vm-key.pem \
--ssh-user root \
--license-file ~/Downloads/weco_license.jwt \
--email you@your-firm.com \
--password 'ChooseAStrong12+Chars!'
Способ B — если вы уже в PowerShell и не хотите переключаться: вызывайте bash по полному пути к Git for Windows. Просто bash … в PowerShell часто попадает на WSL bash (системный C:\Windows\System32\bash.exe) и падает с ошибкой «execvpe(/bin/bash) failed: No such file or directory» — это значит, что у вас Windows-версия WSL установлена, но Linux-дистрибутив в ней не развёрнут. Это не ваша ошибка — это конфликт двух разных bash на Windows. Решение — указать явный путь к bash от Git, и команда станет одной строкой (без переноса через Enter):
& "C:\Program Files\Git\bin\bash.exe" install-admin.sh --vm-ip 203.0.113.42 --ssh-key 'C:/Users/Имя/Downloads/my-vm-key.pem' --ssh-user root --license-file 'C:/Users/Имя/Downloads/weco_license.jwt' --email you@your-firm.com --password 'ChooseAStrong12+Chars!'
В способе B используйте прямые слэши (C:/Users/…) или одинарные кавычки вокруг путей: bash трактует \ как escape-символ, поэтому путь вида C:\Users\… без кавычек распадается. Тильда ~ в PowerShell не разворачивается в домашнюю папку так, как это делает bash, поэтому пишите полный путь от корня C:\.
./install-admin.sh \
--vm-ip 203.0.113.42 \
--ssh-key ~/Downloads/my-vm-key.pem \
--ssh-user root \
--license-file ~/Downloads/weco_license.jwt \
--email you@your-firm.com \
--password 'ChooseAStrong12+Chars!'
./install-admin.sh \
--vm-ip 203.0.113.42 \
--ssh-key ~/Downloads/my-vm-key.pem \
--ssh-user root \
--license-file ~/Downloads/weco_license.jwt \
--email you@your-firm.com \
--password 'ChooseAStrong12+Chars!'
--password? Это пароль, которым вы будете заходить в админку WECO в браузере. Придумайте сложный — буквы + цифры + спецсимвол, минимум 12 символов. Запишите его в менеджер паролей. Сам пароль никуда дальше вашего компьютера не уходит — установщик хеширует его перед отправкой на VM.
install-admin.sh подключается по SSH и затем загружает с GitHub публичный install.sh + tarball с кодом, разворачивая их на вашей машине. Этот релизный репозиторий открыт для аудита:
github.com/antonorlov888/orox_siteconstuctor_admin-dist/releases
Каждый релиз включает install.sh, ff-admin-vX.Y.Z.tar.gz, его SHA-256 (.sha256) и minisign-подпись (.minisig). До запуска можно скачать install.sh оттуда, прочитать его и сверить SHA-256 тарбола вручную. Полный исходный код (включая edit-time админку и pipeline JWT-выпуска) — source-available под NDA для лицензиатов.
Откройте в браузере адрес, который вам выдал установщик — обычно это https://<IP-вашей-VM> (тот самый IP, который вы записали на шаге 2).
admin.your-firm.com), браузер видит «незнакомое имя». Нажмите Подробнее → Перейти на сайт. Дальше, когда вы привяжете домен, сертификат будет валидный и предупреждение исчезнет.
Введите email и пароль из шага 4 — вы попали в админку. С этого момента вы можете заводить SPV-сайты, загружать compliance-PDF и публиковать их одной кнопкой.
Что доступно в админке:
С релиза v0.0.102 WECO ужесточил три вещи. Это хорошие изменения для вашей безопасности — но они меняют ваши обязанности как оператора. Прочитайте каждое и поставьте галочку.
С v0.0.102 ваши зашифрованные данные (SSH-ключи хостов, bearer-токены, 2FA-секреты) расшифровываются ключом, вычисляемым как HKDF-SHA256(license_signature, MASTER_SECRET, "ff-admin-kek-v1") — то есть без файла лицензии расшифровать данные невозможно, даже если у вас есть MASTER_SECRET и dump БД.
Это защищает вас в двух сценариях: (1) утечка одной только БД больше не даёт доступ к секретам хостов; (2) при аннулировании лицензии (например, конец договора) старая БД становится «мёртвой» автоматически. Но это значит, что вы должны бэкапить три артефакта раздельно:
weco_license.jwt) — храните в менеджере паролей (1Password, Bitwarden) или в зашифрованном архиве на отдельном носителе.MASTER_SECRET — 64-символьная hex-строка из /etc/ff-admin/.env. Бэкапьте отдельно от лицензии и отдельно от БД.pg_dump) — обычная резервная копия БД, делайте по расписанию.Если потеряете все три — данные невосстановимы. Если потеряете лицензию или MASTER_SECRET, но сохранили остальные — данные тоже невосстановимы. Это сделано намеренно: каждый артефакт защищает от компрометации остальных.
Установщик сохраняет лицензию в /etc/ff-admin/license.key (mode 0400, root-owned). Дополнительно скопируйте её в свой менеджер паролей сразу после установки.
С v0.0.102 каждая компания получает персональный tarball: ваш customer_id (slug вашей компании) запечён в ~10 местах внутри сборки — в audit-логах, в HTTP-заголовках (x-build-tag), в HTML (<body data-ff-build="…">), в файле WHO_OWNS_THIS.txt внутри tarball, в имени файла ff-admin-vX.Y.Z-<ваш-id>.tar.gz, и в нескольких других местах.
Это означает: если ваш tarball «утечёт» (попадёт к третьим лицам), мы за 30 секунд определяем источник утечки по любому артефакту — заголовку запроса, JSON-логу, view-source страницы, имени файла. Это значимо юридически: договор (Master Services Agreement §3(e)) явно делает оператора ответственным за нераспространение.
Что от вас требуется: не передавайте ссылку https://weco.nexaxt.com/releases/<ваш-id>/install.sh третьим лицам, не выкладывайте сам tarball на общие сетевые шары или Slack/Telegram-чаты. Если нужно дать доступ к коду внешнему аудитору — попросите нас сгенерировать read-only ссылку для аудита.
Раз в час admin VM делает один HTTPS-запрос на https://nexaxt.com/api/weco/host-heartbeat. Это нужно нам для (а) проверки активности лицензии и (б) детектирования «параллельного» использования одной лицензии на нескольких VM (=явный признак перепродажи или утечки).
Что мы видим:
license_id и customer_id — то, что вы и так нам сказали при покупке./etc/machine-id вашей VM — это не IP, не имя машины и не серийный номер; просто стабильная «отметина» Linux-инсталляции, по обратному значению восстановить ничего нельзя.v0.0.X) — для отслеживания распространённости версий.Что мы НЕ видим: содержимое ваших SPV-сайтов, имена ваших клиентов, PDF-файлы, audit-лог админки, логины пользователей, конфиги хостов. Heartbeat не открывает входящих портов — это всегда исходящий запрос с вашей стороны.
Air-gapped установка / запрет исходящего трафика? Установите FF_HEARTBEAT_DISABLE=1 в /etc/ff-admin/.env и перезапустите сервис: systemctl restart ff-admin. Heartbeat при этом полностью отключается. Внимание: на закрытых установках мы теряем возможность проактивно предупредить вас о «странной» активности (например, попытка переустановки лицензии на чужой VM); ответственность за защиту от утечек переходит на вас.
Подробный список полей и срок хранения см. в Privacy Policy §«Heartbeat data».
weco_license.jwt) в свой менеджер паролей.MASTER_SECRET из /etc/ff-admin/.env отдельно от лицензии.pg_dump по расписанию (cron / systemd timer).https://weco.nexaxt.com/releases/<мой-id>/… в чатах, репозиториях, Confluence и т.п.FF_HEARTBEAT_DISABLE=1.WHO_OWNS_THIS.txt в корне tarball и понял, что я — лицо, отвечающее за нераспространение.«Permissions 0644 for ssh-key are too open» — права доступа к SSH-ключу слишком открытые. Вернитесь к шагу 3 и выполните команду chmod 600 (на Mac/Linux) или icacls (на Windows).
«Host key verification failed» / «WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED» / «ssh or sudo failed» при запуске install-admin.sh — почти всегда означает, что у вас в кэше осталась запись о старой VM с тем же IP (вы пересоздавали VM или этот IP когда-то использовался для другой машины). В терминале выполните одну команду — она удалит старый отпечаток ключа — и повторите шаг 4:
ssh-keygen -R 203.0.113.42Замените жёлтый IP на свой. После этого
./install-admin.sh … снова — ssh однократно спросит про новый отпечаток, и установка пойдёт дальше.
«License JWT signature invalid» — файл лицензии повредился при сохранении. Откройте письмо ещё раз и сохраните вложение заново — не копируйте текст вручную, только сохранение через «Сохранить как».
Письмо с лицензией не пришло — проверьте папку «Спам». Если через 10 минут письма всё ещё нет — напишите на anton.orlov@nexaxt.com и укажите номер заявки (он был в первом письме «Подтвердите email»).
Установщик завис на «Issuing Let's Encrypt» — Let's Encrypt не может подтвердить домен. На самом первом запуске можно запускать без домена, тогда установщик пропустит этот шаг — браузер будет показывать «соединение не защищено» (это нормально, см. шаг 5). Когда привяжете домен — запустите команду повторно.
Что-то ещё — пришлите весь вывод терминала в письме на anton.orlov@nexaxt.com и укажите номер заявки. Ответим в течение 1 рабочего дня (Premium tier — 4 часа в рабочее время).
Запросите 7-дневный trial — JWT-файл и инструкция придут на email через несколько секунд после подтверждения email.