WECO » Установка

Установка WECO — пошагово, с нуля

Вы получили письмо с файлом weco_license.jwt? Эта инструкция для вас. Мы провели её по шагам так, чтобы её мог выполнить человек, который никогда не открывал «командную строку» — все непонятные термины объясняются на месте, а на каждый шаг есть отдельная картинка-помощь, если вдруг непонятно где нажать.

✓ Не нужно быть программистом

Если вы умеете скачивать и устанавливать программы из интернета, копировать файлы и заводить виртуальную машину у облачного провайдера (как обычный аккаунт на сайте), — этого достаточно. Все «страшные» команды у нас уже написаны и копируются одной кнопкой.

Общее время — около 30–45 минут в первый раз. Со второго раза — 5 минут.

Какая у вас операционная система?

Выберите вашу систему — инструкция покажет шаги именно для неё.

Что вас ждёт

  1. Что нужно подготовить10 мин
  2. Сохранить файл лицензии в надёжное место1 мин
  3. Завести виртуальную машину (VM)10 мин
  4. Установить программу для подключения к VM5 мин
  5. Запустить мастер установки WECO10 мин
  6. Войти в админку WECO в браузере1 мин
  7. После установки: бэкапы, приватность и heartbeat5 мин
  8. Если что-то пошло не так

0Что нужно подготовить

prerequisites · ~10 минут

Перед началом убедитесь, что у вас есть:

  • Файл weco_license.jwt — он пришёл во вложении к письму от noreply@nexaxt.com с темой «Ваша trial-ключ» или «Ваша лицензия». Сохраните его, например, в папку «Загрузки» / Downloads.
  • Аккаунт у облачного провайдера, где будет работать ваша VM. Подойдёт любой: Hetzner (от €4/мес), Vultr, DigitalOcean, AWS, Yandex.Cloud и т.д. Если у вас уже есть аккаунт у любого из них — этого достаточно.
  • Email и пароль для админки — вы их сами придумаете на шаге 4. Пароль минимум 12 символов.
  • Что-то для записи паролей и ключей — менеджер паролей (1Password, Bitwarden, Apple/Google Passwords) или хотя бы текстовый файл на вашем компьютере, который вы потом удалите. Записывать в Telegram/Slack — нельзя.
Что такое VM (виртуальная машина)? Это «компьютер в облаке» — отдельный сервер, который вы арендуете у провайдера. Он работает 24/7, у него свой IP-адрес и своя память. Для WECO нужна одна главная VM (Admin) и по одной маленькой VM на каждый ваш SPV-сайт.

1Сохранить файл лицензии в надёжное место

on your computer · 1 минута

Найдите письмо от noreply@nexaxt.com со вложенным файлом weco_license.jwt. Это и есть ваша лицензия — небольшой текстовый файл (~700 байт), он будет нужен на шаге 4.

В вашем почтовом клиенте на Windows:
В нижней части письма обычно есть карточка вложения — синий значок и название weco_license.jwt. Нажмите на него правой кнопкой мыши → Сохранить как… → выберите папку Загрузки (или любую другую, которую запомните) → Сохранить.
В Mail / Spark / Gmail на Mac:
Внизу письма карточка вложения — нажмите по ней правой кнопкой (или Ctrl+клик) → Сохранить вложение… → выберите ЗагрузкиСохранить.
В Thunderbird / Evolution / любом веб-клиенте:
Найдите вложение в письме → правой кнопкой → Сохранить как…~/Downloads.
Важно про безопасность: файл weco_license.jwt — это ваш ключ к продукту. Не пересылайте его в Telegram / Slack, не загружайте в публичные репозитории и не выкладывайте в общедоступные облака. Он действует именно как пароль.

2Завести виртуальную машину (VM)

on your cloud provider · ~10 минут

Зайдите на сайт вашего облачного провайдера и создайте новую VM с такими параметрами:

  • Операционная система: Ubuntu 22.04 LTS или 24.04 LTS (любая из этих двух). Это обязательно — другие ОС не поддерживаются.
  • Размер: минимум 2 vCPU, 4 GB RAM, 30+ GB SSD. У большинства провайдеров это самый дешёвый или второй по цене план.
  • Регион: любой. Если ваши клиенты в Европе — берите европейский регион; в Казахстане — российский или среднеазиатский.
  • Публичный IP: должен быть включён по умолчанию. Запишите его — например, 203.0.113.42.
  • SSH-ключ: провайдер предложит создать или загрузить SSH-ключ при создании VM. Создайте новый и сохраните файл (обычно id_rsa или vmname.pem) в папку ~/Downloads рядом с лицензией.
Что такое SSH-ключ? Это пара файлов: «секретный» (остаётся у вас на компьютере) и «публичный» (загружается на VM). Вместе они работают как электронная подпись: ваш компьютер доказывает VM, что это действительно вы, без ввода пароля. Большинство облачных провайдеров автоматически генерируют его при создании VM — просто следуйте их подсказкам.

В конце шага у вас должно быть на руках три значения, запишите их в менеджер паролей:

  1. IP-адрес VM: например 203.0.113.42.
  2. Имя пользователя для SSH: у Hetzner это root, у DigitalOcean — root, у Yandex.Cloud — обычно ubuntu или user. Точное имя пишет провайдер при создании VM.
  3. Файл с секретным SSH-ключом: например ~/Downloads/my-vm-key.pem.

У меня нет аккаунта у облачного провайдера

Самый простой и дешёвый старт — Hetzner Cloud (€4/мес за подходящую VM). Регистрация по почте, оплата картой, VM поднимается за 30 секунд. hetzner.com/cloud.

3Установить программу для подключения к VM

on your computer · 5 минут

На Windows установите Windows Terminal и OpenSSH (если их ещё нет). Большинство современных Windows 10/11 уже имеют OpenSSH встроенным — проверим.

  1. Нажмите Win + S, начните набирать Терминал (или Terminal) и запустите его. Если не нашли — скачайте Windows Terminal из Microsoft Store.
  2. В открывшемся чёрном окне напишите ssh и нажмите Enter. Если видите справку по командам ssh — у вас всё установлено, переходите к следующему шагу.
  3. Если видите «не является внутренней или внешней командой» — установите OpenSSH по этой инструкции от Microsoft (5 минут).
Что вы должны увидеть в Терминале после набора ssh:
Несколько строк текста, начинающихся с usage: ssh [-46AaCfGgKkMNnqsTtVvXxYy]. Это значит, программа SSH установлена и готова к работе.

На macOS уже есть всё нужное — никакой установки. Просто откройте программу Терминал:

  1. Нажмите + Пробел → начните набирать ТерминалEnter. Откроется белое (или чёрное) окно с курсором.
  2. Проверьте: наберите 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, FirstVDSroot
AWS Ubuntu AMIubuntu
AWS Amazon Linuxec2-user
Yandex.Cloud, GCP, Selecteluser или yc-user (точное имя пишет провайдер при создании VM — обычно в карточке VM)
Oracle, Azureopc / azureuser

Если не уверены — провайдер показывает имя пользователя в карточке VM или в письме после создания. Если ssh говорит Permission denied (publickey), это почти всегда либо неправильный пользователь, либо неправильно зажатые права на ключ (см. шаг выше).

Что должно произойти:
В первый раз ssh спросит: «The authenticity of host ... can't be established. Are you sure you want to continue connecting (yes/no)?» — наберите yes и нажмите Enter. После этого вы увидите приглашение командной строки на VM (что-то вроде root@vm-name:~#). Это значит, всё подключилось — наберите exit и Enter, чтобы вернуться к себе.
Permissions … are too open? Если ssh ругается на права доступа, значит шаг с chmod 600 / icacls не сработал. Перепроверьте путь к файлу и повторите команду — это самая частая ошибка.
WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED или Host key verification failed — это значит, что у вас уже есть запись о другой VM с тем же IP (например, вы пересоздавали VM). Очистите старую запись одной командой и повторите подключение:
ssh-keygen -R 203.0.113.42

Замените жёлтый IP на адрес вашей VM. После этого снова выполните команду ssh -i … выше — ssh заново спросит «Are you sure you want to continue connecting (yes/no)?», ответьте yes.

4Запустить мастер установки WECO

in terminal · ~10 минут (в основном автоматика)

На этом шаге одна команда сделает всё остальное: подключится к вашей 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!'
Что вы увидите в терминале (по очереди):
  1. «Validating license JWT… OK»
  2. «Connecting to VM… OK»
  3. «Installing dependencies (postgres, nginx)…» — это может занять 5–10 минут, не закрывайте окно
  4. «Bootstrapping admin database…»
  5. «Issuing Let's Encrypt SSL certificate…»
  6. «Admin UI is up at https://<ip> — log in with email and password» ← готово!
Что значит --password? Это пароль, которым вы будете заходить в админку WECO в браузере. Придумайте сложный — буквы + цифры + спецсимвол, минимум 12 символов. Запишите его в менеджер паролей. Сам пароль никуда дальше вашего компьютера не уходит — установщик хеширует его перед отправкой на VM.
Хотите проверить, что именно ставится на вашу VM (для InfoSec / compliance-ревью)? Скрипт 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 для лицензиатов.

5Войти в админку WECO в браузере

in your browser · 1 минута

Откройте в браузере адрес, который вам выдал установщик — обычно это https://<IP-вашей-VM> (тот самый IP, который вы записали на шаге 2).

Браузер показывает «Это соединение не защищено»? Это ожидаемо при первом запуске — пока к вашей VM не привязан настоящий домен (вроде admin.your-firm.com), браузер видит «незнакомое имя». Нажмите ПодробнееПерейти на сайт. Дальше, когда вы привяжете домен, сертификат будет валидный и предупреждение исчезнет.

Введите email и пароль из шага 4 — вы попали в админку. С этого момента вы можете заводить SPV-сайты, загружать compliance-PDF и публиковать их одной кнопкой.

Что доступно в админке:

  • Создавать SPV-сайты по шаблону (11 готовых блоков: Hero, Documents, Contacts, FAQ и т.д.)
  • Загружать PDF-документы — они автоматически защищены от прямого скачивания
  • Привязывать домен к каждому SPV-сайту — Let's Encrypt SSL выпустится автоматически
  • Заводить дополнительных админ-пользователей с разными ролями (RBAC)
  • Смотреть audit log — кто и когда что менял
  • Делать бэкапы и откаты в один клик

6После установки: бэкапы, приватность и heartbeat

с v0.0.102 (релиз 2026-05-10) · ~5 минут на чтение, потом — настроить раз и навсегда

С релиза v0.0.102 WECO ужесточил три вещи. Это хорошие изменения для вашей безопасности — но они меняют ваши обязанности как оператора. Прочитайте каждое и поставьте галочку.

6.1 Лицензия теперь — ключ к данным (критично)

С 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. Бэкапьте отдельно от лицензии и отдельно от БД.
  • Дамп Postgres (pg_dump) — обычная резервная копия БД, делайте по расписанию.

Если потеряете все три — данные невосстановимы. Если потеряете лицензию или MASTER_SECRET, но сохранили остальные — данные тоже невосстановимы. Это сделано намеренно: каждый артефакт защищает от компрометации остальных.

Установщик сохраняет лицензию в /etc/ff-admin/license.key (mode 0400, root-owned). Дополнительно скопируйте её в свой менеджер паролей сразу после установки.

6.2 Ваш установщик уникален — не передавайте URL

С 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 ссылку для аудита.

6.3 Heartbeat — что и когда отсылается

Раз в час admin VM делает один HTTPS-запрос на https://nexaxt.com/api/weco/host-heartbeat. Это нужно нам для (а) проверки активности лицензии и (б) детектирования «параллельного» использования одной лицензии на нескольких VM (=явный признак перепродажи или утечки).

Что мы видим:

  • Ваш license_id и customer_id — то, что вы и так нам сказали при покупке.
  • Хеш SHA-256 от /etc/machine-id вашей VM — это не IP, не имя машины и не серийный номер; просто стабильная «отметина» Linux-инсталляции, по обратному значению восстановить ничего нельзя.
  • Сколько хостов сейчас зарегистрировано в админке (число, не их IP/детали).
  • Тег релиза (например v0.0.X) — для отслеживания распространённости версий.
  • IP-адрес, с которого пришёл запрос (это в любом случае виден нам через DNS-A-запись вашего admin-домена, ничего нового).

Что мы НЕ видим: содержимое ваших SPV-сайтов, имена ваших клиентов, PDF-файлы, audit-лог админки, логины пользователей, конфиги хостов. Heartbeat не открывает входящих портов — это всегда исходящий запрос с вашей стороны.

Air-gapped установка / запрет исходящего трафика? Установите FF_HEARTBEAT_DISABLE=1 в /etc/ff-admin/.env и перезапустите сервис: systemctl restart ff-admin. Heartbeat при этом полностью отключается. Внимание: на закрытых установках мы теряем возможность проактивно предупредить вас о «странной» активности (например, попытка переустановки лицензии на чужой VM); ответственность за защиту от утечек переходит на вас.

Подробный список полей и срок хранения см. в Privacy Policy §«Heartbeat data».

6.4 Чек-лист после установки

  • ☐ Скопировал файл лицензии (weco_license.jwt) в свой менеджер паролей.
  • ☐ Скопировал значение MASTER_SECRET из /etc/ff-admin/.env отдельно от лицензии.
  • ☐ Настроил автоматический pg_dump по расписанию (cron / systemd timer).
  • ☐ Не публиковал персональную ссылку https://weco.nexaxt.com/releases/<мой-id>/… в чатах, репозиториях, Confluence и т.п.
  • ☐ Если установка air-gapped — задал FF_HEARTBEAT_DISABLE=1.
  • ☐ Прочитал WHO_OWNS_THIS.txt в корне tarball и понял, что я — лицо, отвечающее за нераспространение.

?Если что-то пошло не так

troubleshooting

«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.

Запросить 7-дневный trial Купить лицензию