Перейти к содержимому

Быстрый старт: Docker

Эта инструкция — для администратора, который ставит Portal на один Linux-сервер через Docker Compose из готового архива (bundle).

Читайте сверху вниз. На каждом шаге есть команда «что ввести» и способ проверить, что шаг удался.

Если ещё не уверены, что нужен именно Docker — сначала выберите канал.


После всех шагов:

  1. На сервере работают контейнеры Portal (сайт, API, база, файлы и т.д.).
  2. В браузере открывается Portal по адресу сервера (часто http://localhost или ваш домен).
  3. Можно войти логином admin и паролем из файла .env.
  4. На корневом узле есть страница приветствия welcome.

ЧтоМинимумЗачем
Linux-серверс доступом по SSHкуда ставим
Docker 24 или новееdocker --versionзапуск контейнеров
Docker Compose v2docker compose versionкоманда docker compose
Оперативная память4 GB минимум; 8 GB рекомендуется, если нужен Portal Officeиначе контейнеры будут падать
Архив дистрибутивафайл вида portal-1.0.0-docker-bundle.tar.gzот поставщика
Окно терминала
docker --version
docker compose version

Как проверить, что шаг удался: обе команды печатают номер версии, без ошибки command not found.

Если Docker не установлен — установите его по инструкции вашей ОС (Docker Engine + Compose plugin) и повторите команды.


Bundle — это архив с готовым Portal: образы контейнеров, portal-cli (программа-установщик), шаблоны конфигов и документация.

Имя файла может отличаться версией. Подставьте своё:

Окно терминала
# перейдите в каталог, куда положили архив, например /opt
cd /opt
tar xzf portal-1.0.0-docker-bundle.tar.gz
cd portal-1.0.0-docker-bundle
pwd
ls -la

Что должны увидеть в списке файлов (имена могут слегка отличаться):

  • каталог portal-cli/ — установщик;
  • каталог images/ — файл с Docker-образами;
  • portal.config.example.yamlшаблон настроек (его копируют, оригинал не правят);
  • docker-compose.yml — описание контейнеров.

Как проверить: pwd показывает путь к каталогу bundle; ls показывает перечисленные файлы.

Дальше все команды выполняйте из этого каталога (пока не указано иное).


Образы — «снимки» программ Portal. Их нужно один раз загрузить в Docker на сервере:

Окно терминала
docker load -i images/portal-images.tar

Команда может идти несколько минут (файл большой).

Как проверить:

Окно терминала
docker images | grep portal

Должны появиться строки с образами вроде portal/…. Если пусто — проверьте путь к images/portal-images.tar (ls -la images/).


Окно терминала
cp portal.config.example.yaml portal.config.yaml
ls -la portal.config.yaml
ФайлЧто это
portal.config.example.yamlПример «как должно быть». Его не редактируют.
portal.config.yamlВаша рабочая конфигурация. Её читает установщик.
.envПоявится после install. Секреты и порты для Docker Compose.

На сервере удобен редактор nano (простой текстовый редактор в терминале):

Окно терминала
nano portal.config.yaml

Как пользоваться nano:

  1. Двигайтесь стрелками к нужной строке.
  2. Правьте текст как в блокноте.
  3. Сохранить: Ctrl+O, затем Enter.
  4. Выйти: Ctrl+X.

(Можно vim или любой другой редактор — суть та же.)

В начале файла найдите блок portal: и задайте свои значения. Пример:

portal:
version: "1.0.0"
domain: portal.company.local
httpPort: 80
httpsPort: 443
timezone: Europe/Moscow

Правила простыми словами:

ПолеЧто писать
domainИмя сайта, по которому сотрудники откроют Portal (DNS или запись в /etc/hosts)
httpPort / httpsPortОбычно 80 и 443. Если нет прав на привилегированные порты — см. §8
timezoneЧасовой пояс организации в формате IANA: Europe/Moscow, Asia/Yekaterinburg, UTC и т.п.

Пустые секреты (jwtSecret, пароли) можно оставить пустыми — установщик сгенерирует их сам и запишет в .env.

Сохраните файл (Ctrl+O, Enter, Ctrl+X).

Как проверить:

Окно терминала
grep -E 'domain:|timezone:' portal.config.yaml

Должны увидеть ваши значения, не случайный мусор.


Окно терминала
chmod +x portal-cli/portal-cli
./portal-cli/portal-cli install --mode docker

Установщик по шагам:

  1. Читает portal.config.yaml.
  2. Создаёт файл .env с секретами (пароли, ключи).
  3. Запускает docker compose up -d (поднимает контейнеры).
  4. Ждёт, пока ответит проверка здоровья /health.

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

Если нужна повышенная нагрузка (добавляется PgBouncer и связанные настройки):

Окно терминала
./portal-cli/portal-cli install --mode docker --prod

Используйте либо обычный install, либо с --prod — не запускайте оба подряд «на всякий случай» без понимания, что уже установлено. Если Portal уже стоит, для обновления используйте upgrade, а не повторный install.

Как проверить, что установка удалась — переходите к §6.


Окно терминала
./portal-cli/portal-cli status

Ожидание: команды завершаются без ошибки, контейнеры в рабочем состоянии (не сплошные Exit / Restarting).

Окно терминала
curl -sS http://localhost/health
curl -sS http://localhost/api/v1/system/version
curl -sS http://localhost/api/v1/system/license-status

Что значит успех:

КомандаОжидание
/healthОтвет без ошибки соединения (часто JSON или короткий OK)
/api/v1/system/versionJSON с версией продукта
/license-statusJSON со статусом лицензии (до активации ключа запись может быть ограничена — это нормально)

Если curl: (7) Failed to connect — контейнеры ещё стартуют: подождите 30–60 секунд и повторите. Смотрите также:

Окно терминала
docker compose --env-file .env ps
docker compose --env-file .env logs --tail=80

Пароль первого админа лежит в файле .env (его создал установщик). Это обычный текстовый файл с переменными ИМЯ=значение.

Окно терминала
grep SEED_ADMIN_PASSWORD .env

Скопируйте значение после = — это пароль. Не публикуйте его в чатах и тикетах без необходимости.

Логин по умолчанию: admin (если не меняли seed.adminLogin в конфиге).

В браузере откройте:

  • http://localhost — если вы на том же компьютере;
  • или http://ВАШ_ДОМЕН / IP сервера — как задали в portal.domain.

Войдите: логин admin, пароль из SEED_ADMIN_PASSWORD.

Как проверить успех:

  • Открылась главная Portal, вы залогинены.
  • На корневом узле есть страница приветствия welcome.
  • Списки и библиотеки документов создаёт администратор сам (их может ещё не быть — это нормально).

Порты 80 и 443 на Linux часто требуют повышенных привилегий. Для пилота можно сменить HTTP-порт.

Откройте .env:

Окно терминала
nano .env

Найдите или добавьте:

Окно терминала
PORTAL_HTTP_PORT=8080
PORTAL_HTTPS_PORT=8443

Сохраните, пересоздайте стек:

Окно терминала
docker compose --env-file .env up -d

Проверка:

Окно терминала
curl -sS http://localhost:8080/health

В браузере: http://localhost:8080 (или http://IP:8080).


Без активированного LICENSE.key запись в Portal недоступна (можно смотреть, нельзя полноценно работать). Ключ выдаёт поставщик: коммерческий или trial на 30 дней.

  1. Войдите как admin.
  2. Откройте Админка портала → Настройки → Продукт и лицензия.
  3. Скопируйте Привязку (нужна поставщику, чтобы выпустить ключ под вашу инсталляцию).
  4. Получите файл LICENSE.key.
  5. Загрузите файл или вставьте ключ → нажмите Активировать лицензию.

Права на модули (modules в ключе) отображаются в том же разделе.

Положите LICENSE.key в каталог bundle (или укажите полный путь):

Окно терминала
./portal-cli/portal-cli license activate --file LICENSE.key
./portal-cli/portal-cli upgrade --mode docker

Как проверить:

Окно терминала
curl -sS http://localhost/api/v1/system/license-status

В админке статус лицензии должен быть действительным. Подробнее: Лицензии и тарифы.


10. Внешнее S3 вместо встроенного хранилища (по желанию)

Заголовок раздела «10. Внешнее S3 вместо встроенного хранилища (по желанию)»

По умолчанию файлы хранит встроенный SeaweedFS. Если нужен корпоративный S3, задайте его до установки в portal.config.yaml (или согласуйте с Внешними сервисами для уже стоящего стенда).

Пример блока storage::

storage:
endpoint: s3.corp.local
port: 443
useSsl: true
accessKey: portal-rw
secretKey: "ваш_секрет"
bucket: portal-files

Либо после генерации .env: очистите COMPOSE_PROFILES (чтобы не поднимать встроенный профиль хранилища) и задайте переменные S3_*. Подробности: Внешние сервисы.


В portal.config.yaml поле portal.timezone установщик записывает в .env как TZ для контейнеров API и Worker.

Модули (бронирование переговорных, дни рождения, службы по расписанию) используют локальное время процесса — оно совпадает с TZ.

Если даты в модулях «сдвинуты»:

  1. Проверьте timezone в portal.config.yaml.
  2. Проверьте TZ в .env: grep ^TZ= .env.
  3. Перезапустите контейнеры:
Окно терминала
docker compose --env-file .env up -d --force-recreate backend worker

Пример фрагмента конфига:

portal:
domain: portal.company.local
timezone: Europe/Moscow

  1. Получите у поставщика новый bundle той же линии (Docker).
  2. Сделайте резервную копию (см. админский бэкап).
  3. Загрузите новые образы:
Окно терминала
docker load -i images/portal-images.tar
  1. Из каталога нового bundle (сохранив ваш .env / portal.config.yaml):
Окно терминала
./portal-cli/portal-cli upgrade --mode docker

Upgrade применяет миграции БД (db-init) и перезапускает контейнеры.

Обновление из админки (если есть интернет до korport.ru)

Заголовок раздела «Обновление из админки (если есть интернет до korport.ru)»
  1. Поднимите сервис update-runner (при обычной установке он уже в compose):
Окно терминала
docker compose --env-file .env up -d update-runner
docker compose --env-file .env ps update-runner
  1. В админке: Настройки → Продукт и лицензия → Обновить.

Подробности: Обновление Portal.

Проверка после обновления:

Окно терминала
./portal-cli/portal-cli status
curl -sS http://localhost/health
curl -sS http://localhost/api/v1/system/version

Версия должна совпасть с ожидаемой из нового bundle / файла RELEASE.


Остановить контейнеры, данные сохранить:

Окно терминала
docker compose --env-file .env down

Остановить и удалить тома с данными (БД и файлы пропадут — необратимо):

Окно терминала
docker compose --env-file .env down -v

Файл / каталогНазначение
portal.config.example.yamlШаблон конфигурации
portal.config.yamlАктивная конфигурация для установщика
.envПеременные для Docker Compose (создаётся install)
docker-compose.ymlОписание сервисов
portal-cli/Команды install / status / upgrade / license
PORTAL_DATA_DIR.env)Каталог данных инсталляции: install.id, license.key

Ключевые переменные лицензии в .env:

  • PORTAL_LICENSE_KEY — лицензионный токен;
  • PORTAL_LICENSE_FILE — путь к файлу LICENSE.key;
  • PORTAL_DATA_DIR — каталог с install.id и сохранённым ключом.

WebPart и другие пакеты ставятся в уже работающий Portal (hot deploy). Штатные образы Api/Worker — Production: отладка с брейкпоинтами из IDE внутрь контейнера не входит в поставку. Смотрите логи и цикл переустановки пакета: Отладка расширений.


СимптомЧто сделать
docker: command not foundУстановите Docker Engine, повторите §1
Cannot connect to the Docker daemonЗапустите службу Docker / добавьте пользователя в группу docker, перелогиньтесь
/health не отвечаетdocker compose --env-file .env ps и logs; подождите старт БД
Не знаете пароль admingrep SEED_ADMIN_PASSWORD .env
Сайт открывается, но нельзя сохранятьАктивируйте LICENSE.key (§9)
Время в модулях «не то»§11 (timezone / TZ)

Общий разбор: Устранение неполадок.