Yonote OnPrem

Установка через Docker Compose

Пошаговая установка Yonote на одном сервере

Создайте рабочую директорию и скачайте конфигурацию

Выполните на сервере:

mkdir /opt/yonote
cd /opt/yonote
curl -O https://yonote.ru/onprem/yonote-onprem.zip
unzip yonote-onprem.zip
cd yonote-onprem

Можно выбрать любой каталог, в примерах используется /opt/yonote. Архив распаковывается в папку yonote-onprem: все следующие команды выполняйте из неё.

Если с сервера нет доступа к yonote.ru, скачайте архив здесь, загрузите его на сервер любым удобным способом и выполните unzip:

Скачать yonote-onprem.zip

В архиве лежат docker-compose.yml, шаблон настроек .env.sample (скрытый файл, виден по ls -a), конфигурация nginx и скрипт инициализации базы Keycloak.

Требуется docker-compose v2.17.3 или новее. Проверить: docker compose version.

Выберите версию

Список доступных версий: images.updates.yonote.ru/v2/yonote/tags/list. Укажите выбранную версию в APP_VERSION (в шаблоне стоит 1.45.33). Версию latest лучше не использовать: так вы сами решаете, когда обновляться.

Создайте .env

Скопируйте шаблон и откройте его в редакторе:

cp .env.sample .env
vim .env

Обязательно заполните:

  • домены: замените domain.ru на свой домен в BASENAME_FOR_SUBDOMAIN, KC_YNT_HOST и S3_YNT_HOST. Адрес S3_ADMIN_YNT_HOST (веб-консоль хранилища) по желанию;
  • пароли: YNT_DB_PASSWORD, KC_DB_PASSWORD, KC_PASSWORD, S3_ADMIN_PASSWORD и S3_SECRET_ACCESS_KEY. В шаблоне стоят примеры, смените их;
  • LICENSE_KEY: вставьте содержимое лицензии одной строкой, без кавычек и пробелов. Если лицензии нет, получите триал за 5 минут (лицензия выпускается автоматически), по вопросам покупки пишите на hello@yonote.ru;
  • SECRET_KEY и UTILS_SECRET (следующий шаг);
  • блок SMTP_*: заполните, если нужна почта, иначе закомментируйте строки SMTP_* (поставьте #).

В шаблоне строка SMTP_HOST= пустая. С пустым значением приложение не запустится и напишет Environment configuration is invalid. Либо укажите адрес SMTP-сервера, либо закомментируйте SMTP_HOST.

Лицензию указывайте только в LICENSE_KEY. Файл License.key создавать не нужно: если такого файла нет, Docker создаст на его месте пустую папку, это нормально, приложение её игнорирует и берёт ключ из .env.

Для паролей используйте только буквы и цифры: пароль базы подставляется в адрес подключения, и спецсимволы (@, :, /, #) его сломают.

Назначение каждой переменной описано в разделе Переменные окружения.

Сгенерируйте секреты

SECRET_KEY и UTILS_SECRET нужно сгенерировать и записать в .env:

openssl rand -hex 32

Команду выполните дважды: для SECRET_KEY и для UTILS_SECRET. Значения должны быть разными.

Ключи Web Push (Service Worker) создаются командой (нужен Node.js и npm, можно на любом компьютере):

npx web-push generate-vapid-keys

Результат запишите в .env:

SERVICE_WORKER_PUBLIC_KEY=<ваш публичный ключ>
SERVICE_WORKER_PRIVATE_KEY=<ваш приватный ключ>

Настройте DNS

Адреса из .env (приложение, auth. и s3.) должны открываться и на сервере, и в браузерах пользователей, и указывать на этот сервер. Добавьте записи в DNS (для веб-консоли хранилища по желанию добавьте ещё и s3-admin.). Для проверки без DNS можно прописать их в /etc/hosts (на сервере и на вашем компьютере):

192.0.2.10  domain.ru auth.domain.ru s3.domain.ru

Замените 192.0.2.10 на IP сервера, а домены на свои.

Запустите приложение

docker compose up -d

При первом запуске скачиваются образы и применяются миграции базы данных, это может занять несколько минут. Проверить состояние:

docker compose ps
docker compose logs -f yonote

Приложение готово, когда в логах yonote появились сообщения о запуске сервера, а docker compose ps показывает все сервисы запущенными. Сервис seaweedfs-client отработает (создаст пользователя и бакет в хранилище) и завершится, это нормально.

Настройте планировщик

Уведомления календаря и плановая очистка работают через cron. Добавьте на сервере два задания по инструкции Планировщик задач.

Войдите в систему

Откройте адрес из BASENAME_FOR_SUBDOMAIN, например http://domain.ru, и нажмите вход. На странице авторизации (Keycloak) выберите регистрацию и создайте пользователя. Первый вошедший пользователь создаёт рабочее пространство и становится его администратором, остальных можно пригласить из приложения.

Имя рабочего пространства (оно же его поддомен) должно быть длиной от 4 до 32 символов и состоять из латинских букв, цифр и дефиса. Слово app использовать нельзя.

Консоль Keycloak доступна по адресу http://auth.domain.ru (логин и пароль из KC_USERNAME и KC_PASSWORD), при желании можно открыть и веб-консоль хранилища SeaweedFS по адресу из S3_ADMIN_YNT_HOST (логин и пароль из S3_ADMIN_USERNAME и S3_ADMIN_PASSWORD). Замените домены на свои.

Если что-то не работает

СимптомЧто проверить
В логах Environment configuration is invalidСообщение ниже укажет, какая переменная неверна. Чаще всего это пустой SMTP_HOST, SECRET_KEY или UTILS_SECRET
В логах License not found!В .env заполнена переменная LICENSE_KEY: целиком, одной строкой, без кавычек и пробелов по краям
В логах Your license has been expired!Срок лицензии истёк, запросите новую
В логах Your license key is not valid!Лицензия скопирована не полностью или повреждена
Не приходят уведомления календаряНастроен планировщик, токен в заданиях совпадает с UTILS_SECRET
Страница не открываетсяПорт 80 свободен, домен указывает на сервер, docker compose ps показывает nginx запущенным
После входа ошибка авторизации или переадресация на неверный адресДомены и протоколы в .env совпадают с теми, по которым вы открываете сайт; Keycloak-адрес (auth.…) открывается в браузере
Не загружаются файлы и картинкиАдрес хранилища (s3.…) открывается в браузере; docker compose logs s3-client без ошибок