Установка через 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:
В архиве лежат 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 без ошибок |