Запуск в контейнере (Docker / Podman)

Запустите Marinara Engine в контейнере с помощью Docker или Podman. Контейнер – это пакет, в котором лежит само приложение и все, что ему нужно, поэтому Node.js устанавливать не придется. Если вы хотите запустить Marinara с минимальной настройкой, начните отсюда.

Что нужно заранее

Установите одно из двух на компьютер, на котором будет работать Marinara:

Термины, которые встретятся дальше:

Официальные образы публикуются в ghcr.io/pasta-devs/marinara-engine.

Запуск Marinara

В проекте уже есть готовый файл docker-compose.yml. Compose – это часть Docker, которая читает этот файл и запускает контейнер. Это рекомендуемый способ.

  1. Откройте терминал – окно, в котором вводятся команды. Если у вас уже есть рабочая копия Marinara, откройте терминал в этой папке и пропустите два следующих шага.
  2. Скачайте файлы проекта.
   git clone https://github.com/Pasta-Devs/Marinara-Engine.git
  1. Перейдите в новую папку.
   cd Marinara-Engine
  1. Запустите контейнер в фоне.
   docker compose up -d

При первом запуске скачивается образ ghcr.io/pasta-devs/marinara-engine:latest, это может занять несколько минут. По завершении терминал показывает контейнер в состоянии Started.

  1. Откройте в браузере http://127.0.0.1:7860. Загрузится главный экран Marinara.

Если не получилось: возможно, порт 7860 занят другой программой. Выберите свободный порт, например 8080. Создайте в той же папке, где лежит docker-compose.yml, файл с именем .env со строкой PORT=8080, затем снова выполните docker compose up -d. Compose читает этот файл каждый раз, поэтому новый порт сохранится и после обновлений. Затем откройте http://127.0.0.1:8080. Другие решения – в разделе Устранение неполадок.

Остановка Marinara

Выполните эту команду из той же папки. Она останавливает и удаляет контейнер. Данные остаются в томе.

docker compose down

Для Podman используйте podman compose down.

Где хранятся данные

Marinara сохраняет чаты, персонажей, загруженные файлы, шрифты и стандартные фоны обычными файлами в томе Compose с именем marinara-data. Compose добавляет перед ним имя папки проекта, поэтому настоящее имя выглядит как PROJECT_marinara-data. Чтобы узнать точное имя и где лежит том, выполните:

docker volume ls --filter name=marinara-data
docker volume inspect PROJECT_marinara-data

Вместо PROJECT_marinara-data подставьте имя, которое напечатала первая команда.

При первом запуске Marinara также создает внутри тома пустой файл настроек /app/data/.env. Добавляйте настройки сервера туда. Они сохраняются при перезапусках и обновлениях образа. См. Настройки сервера: справочник.

При каждом запуске контейнер исправляет владельца папки с данными, чтобы приложение могло в нее писать. Он стартует от имени root, исправляет владельца, а затем переключается на обычного пользователя (не root). Это работает и для тома, и для папки, подключенной с вашего компьютера.

Открытие Marinara с другого устройства

По умолчанию Compose разрешает обращаться к Marinara только с этого компьютера. Чтобы открыть ее на телефоне или другом компьютере, опубликуйте порт на всех интерфейсах, но сначала задайте вход. Никогда не открывайте Marinara в сеть без входа.

В Docker Desktop, OrbStack и rootless Docker (Docker без прав root) все устройства видны под одним адресом шлюза. Без входа порт, опубликованный на всех интерфейсах, пускает всех. Когда вход задан, его запрашивают и у этого компьютера. См. Обход для Tailscale и Docker.

  1. Откройте файл docker-compose.yml из папки Marinara в текстовом редакторе.
  2. В списке ports: уберите 127.0.0.1:.
   ports:
     - "${PORT:-7860}:7860"
  1. В список environment: добавьте секрет администратора. Подставьте свое длинное случайное значение.
   environment:
     - ADMIN_SECRET=another-long-random-value
  1. В тот же список добавьте вход. Подставьте свое имя пользователя и длинный случайный пароль.
   - BASIC_AUTH_USER=your-username
   - BASIC_AUTH_PASS=another-long-random-password
  1. Сохраните файл и перезапустите контейнер.
   docker compose up -d
  1. На другом устройстве откройте http://YOUR_COMPUTER_IP:7860. Если вы задали PORT, укажите этот порт. Страница запросит вход.

Если не указывать BASIC_AUTH_USER и BASIC_AUTH_PASS, страница вместо этого попросит одноразовый код настройки. Найдите его в журнале, затем введите на странице вместе с новыми именем пользователя и паролем.

docker logs <container> 2>&1 | grep "setup code"

Позже вход в приложение можно изменить в Settings → Advanced → Access (настройки → дополнительно → доступ) в браузере, где вход уже выполнен. Если вы забыли пароль, выполните docker exec <container> node scripts/reset-login.mjs. Эта команда не меняет вход, заданный через BASIC_AUTH_USER и BASIC_AUTH_PASS. Их измените в файле compose и пересоздайте контейнер.

В Docker Desktop, OrbStack и rootless Docker откройте Marinara на этом компьютере по адресу http://localhost:7860, чтобы задать вход в Settings. Список разрешенных IP-адресов там не может различить устройства, поэтому используйте вход. О других способах ограничить доступ и о том, что дает секрет администратора, читайте в руководстве Удаленный доступ: вход и список разрешенных адресов.

Обновление Marinara

Контейнеры сами не обновляются. Сначала сделайте резервную копию (см. Резервное копирование и восстановление Marinara), затем скачайте новый образ и перезапустите контейнер. Выполните эту команду из папки, где лежит docker-compose.yml:

docker compose pull && docker compose up -d

Для Podman используйте вместо этого podman compose. В приложении Settings → Advanced → Updates → Check for Updates (обновления → проверить обновления) показывает тег образа и эту команду. Само приложение применить обновление для контейнера не может.

Чтобы вернуться к более старому выпуску, укажите его тег в строке image: файла docker-compose.yml, затем выполните docker compose up -d. Но сначала прочитайте раздел Переход на старую версию. Старые сборки не могут открыть данные, сохраненные новыми.

Выбор тега образа

ТегЧто это
latestСтабильный выпуск. Его использует docker-compose.yml.
X.Y.ZОдна фиксированная версия, например ghcr.io/pasta-devs/marinara-engine:2.5.1.
stagingНестабильная тестовая сборка из еще не выпущенного кода. Она может ломаться, и вернуть данные в стабильную сборку может не получиться.
liteОблегченный образ. См. ниже.
X.Y.Z-liteФиксированная версия образа lite.

Если вы запускаете staging, используйте отдельный том, чтобы эта сборка не могла изменить стабильные данные:

docker run -d --name marinara-staging \
  -p 127.0.0.1:7860:7860 \
  -v marinara-staging-data:/app/data \
  ghcr.io/pasta-devs/marinara-engine:staging

Образ lite

Образ lite меньше по размеру и собран на Wolfi – минимальной основе Linux для контейнеров. В нем нет возможностей, которым нужны большие локальные файлы:

Убрано в liteЧто теряется
Встроенная модельМодель ИИ нельзя запустить на своем оборудовании.
Локальная модель эмбеддинговЭмбеддинги текста на устройстве недоступны.
Memory Recall (семантический поиск)Зависит от локальной модели эмбеддингов.
Локальный голосовой ввод WhisperРаспознавание речи для звонков режима Conversation недоступно.
Определение настроения для аватаров2D- и 3D-аватары выбирают выражение лица по списку слов, а не с помощью небольшой локальной модели эмоций.

Все остальное работает: чат, ролевая игра, Game Mode, агенты, лорбуки, персонажи и удаленные сервисы ИИ. Для функций ИИ нужно добавить аккаунт внешнего сервиса. См. Подключение к провайдеру ИИ.

docker run -d --name marinara-lite \
  -p 127.0.0.1:7860:7860 \
  -v marinara-data:/app/data \
  ghcr.io/pasta-devs/marinara-engine:lite

Некоторые старые образы lite падают на Raspberry Pi 4 и похожих компьютерах на ARM с ошибкой SIGILL (ошибка недопустимой инструкции) во время исходящих обращений к ИИ. На таких устройствах используйте обычный образ latest. Актуальные подробности – в руководстве Устранение неполадок в приложении Marinara Engine.

Podman

Podman запускает те же образы. В большинстве команд достаточно заменить docker на podman.

podman compose up -d

Чтобы запустить один контейнер без Compose:

podman run -d \
  -p 127.0.0.1:7860:7860 \
  -v marinara-data:/app/data \
  ghcr.io/pasta-devs/marinara-engine:latest

Команде podman compose нужен вспомогательный пакет podman-compose. Установите его одной из этих команд:

sudo dnf install podman-compose
sudo apt install podman-compose
pip install podman-compose

Первая строка – для Fedora, вторая – для Debian или Ubuntu, а третья работает везде, где есть pip.

Самостоятельная сборка образа

Чтобы собрать образ из исходного кода, а не скачивать его:

docker build -t marinara-engine .
docker run -d -p 127.0.0.1:7860:7860 -v marinara-data:/app/data marinara-engine

Чтобы собрать образ lite, используйте файл сборки lite:

docker build -f Dockerfile.lite -t marinara-engine:lite .

Устранение неполадок

Страница не открывается или порт уже занят. См. решение с портом в разделе Запуск Marinara.

Marinara не может записывать файлы или появляются ошибки доступа. При каждом запуске контейнер исправляет владельца папки. На некоторых файловых системах хоста это исправление не срабатывает, а при MARINARA_SKIP_DATA_CHOWN=true оно пропускается. Если ошибки не проходят, используйте стандартный том marinara-data. Это самый надежный вариант.

Образ lite падает на Raspberry Pi 4. Используйте обычный образ latest.

Если нужна дополнительная помощь, читайте руководство Устранение неполадок в приложении Marinara Engine.

Смежные руководства