Резервные копии и обновления
Что нужно резервировать, как восстановить данные на новом хосте, как обновить систему и как перенести сервер Mattermost или отдельное сообщество на Antimatter.
Что нужно резервировать
| Что | С файлом compose сайта | С архивом релиза | С пакетом .deb или .rpm |
|---|---|---|---|
| База данных: сообщения, пользователи, сообщества, каналы и, при использовании файла compose сайта, конфигурация | том antimatter_postgres, через pg_dump | ваша база данных PostgreSQL | ваша база данных PostgreSQL |
| Загруженные файлы, изображения и установленные приложения | том antimatter_files (хранилище S3) | FileSettings.Directory, по умолчанию ./data/ | /var/lib/antimatter |
| Файл конфигурации | (в базе данных) | config/config.json | /etc/antimatter/config/config.json |
| GIF и стикеры | том antimatter_gifs | каталог данных службы GIF | /var/lib/gifs-server |
| Секретные данные | .env (и compose.override.yaml) | ваш файл переменных окружения | /etc/antimatter/antimatter.env, /etc/gifs-server |
| Ключ шифрования ИИ, который шифрует ключи подключений к моделям | AM_AI_ENCRYPTION_KEY в .env (рекомендуется) или файл ai-encryption.key в томе antimatter_data | AM_AI_ENCRYPTION_KEY или data/ai-encryption.key | AM_AI_ENCRYPTION_KEY в antimatter.env или /var/lib/antimatter/data/ai-encryption.key |
Без ключа шифрования ИИ восстановленный сервер не сможет прочитать API-ключи подключений к моделям, и каждый из них придётся ввести заново. Храните копию ключа отдельно от резервных копий базы данных, чтобы в одной украденной копии не оказались и то, и другое. См. Ключ шифрования.
База данных и файлы неразделимы: резервируйте их одновременно и храните копии вне сервера. Имена томов начинаются с имени проекта compose, antimatter (список можно получить командой docker volume ls).
Резервное копирование
Выполняйте из каталога с compose.yaml. Предварительная остановка Antimatter обеспечивает полностью согласованную копию; резервная копия, сделанная во время работы, обычно тоже подходит, но файлы, загруженные в процессе резервного копирования, могут в ней отсутствовать.
stamp=$(date +%Y%m%d-%H%M%S)
mkdir -p backups
docker compose stop antimatter
# Database
docker compose exec -T postgres pg_dump -U antimatter -d antimatter -Fc \
> "backups/antimatter-db-$stamp.dump"
# File storage, GIF service and the data directory (the AI key file)
for v in files gifs data; do
docker run --rm -v "antimatter_$v:/data:ro" -v "$PWD/backups:/backup" \
alpine tar -czf "/backup/antimatter-$v-$stamp.tar.gz" -C /data .
done
docker compose start antimatter
# Secrets
cp .env "backups/env-$stamp"
Если вы не задали AM_AI_ENCRYPTION_KEY, файл ключа сервера находится в томе data, который цикл выше сохраняет вместе с файлами. Лучше поместить его содержимое в .env, как объясняется в разделе Ключ шифрования, и хранить копию отдельно от резервных копий базы данных.
Запускайте из cron для ежедневного резервного копирования и копируйте каталог backups/ на другой компьютер. Храните копии .env так же безопасно, как и сам сервер: в них содержатся пароли.
Чтобы копировать загруженные файлы по одному (например, в другое хранилище S3), используйте командную утилиту AWS службы bucket:
docker compose run --rm -v "$PWD/backups/files:/backup" bucket \
"aws --endpoint-url http://files:9000 s3 sync s3://antimatter /backup"
При использовании архива релиза резервируйте базу данных с помощью pg_dump -Fc, а каталоги data/ и config/ — с помощью обычных инструментов (data/ содержит файл ключа ИИ). При использовании пакетов резервируйте базу данных тем же способом, а также /etc/antimatter, /var/lib/antimatter, /etc/gifs-server и /var/lib/gifs-server.
Восстановление на новом хосте
Поместите compose.yaml, сохранённый .env и резервные копии в новый каталог, затем:
stamp=20261016-030000 # the backup to restore
docker compose create # creates the volumes, starts nothing
docker compose up -d postgres
docker compose exec -T postgres pg_restore -U antimatter -d antimatter --no-owner \
< "backups/antimatter-db-$stamp.dump"
for v in files gifs data; do
docker run --rm -v "antimatter_$v:/data" -v "$PWD/backups:/backup" \
alpine tar -xzf "/backup/antimatter-$v-$stamp.tar.gz" -C /data
done
docker compose up -d
Используйте тот же .env: хранилище и база данных должны сохранить прежние пароли, а подключениям к моделям нужен тот же ключ шифрования ИИ. Если у нового хоста другой адрес, обновите SITE_URL (и DOMAIN).
Периодически проверяйте резервные копии, восстанавливая их на другом компьютере.
Обновление
data: файл ключа ИИ находился в контейнере. Прежде чем использовать новый compose.yaml, и если в .env нет AM_AI_ENCRYPTION_KEY, сохраните ключ, созданный сервером: echo "AM_AI_ENCRYPTION_KEY=$(docker compose exec -T antimatter cat /antimatter/data/ai-encryption.key)" >> .env. Если команда не находит файл, ни одно подключение к модели ещё не сохранило ключ.- Сделайте резервную копию.
- Измените тег образа в
.env(ANTIMATTER_IMAGE), если вы фиксируете версию, как рекомендуется. - Загрузите и перезапустите:
docker compose pull docker compose up -d docker compose logs -f antimatter
При запуске сервер обновляет схему базы данных (процесс можно отслеживать в журнале; на большом сервере это может занять несколько минут) и устанавливает более новые версии приложений, входящих в образ. При использовании архива релиза: остановите сервер, замените всё, кроме config/, data/, logs/, plugins/ и client/plugins/, содержимым нового архива, а затем запустите сервер снова. При использовании пакета .deb или .rpm установите новый пакет, как описано в разделе Обновление пакета.
antimatter-next обратно на antimatter.Версии
Сервер Antimatter сообщает версию линейки Mattermost, на которой он основан (на данный момент 12.0.0). Релизы на GitHub, включая их архивы и пакеты, имеют собственные номера версий: в период бета-тестирования это серия 0.9.0. Команда antimatter version отображает её как Номер сборки. Образы пересобираются из веток main: antimatter-next — каждую ночь (теги nightly-<YYYYMMDD>), а оба образа — при каждом изменении (теги sha-<commit>). Закрепите один из этих тегов, обновляйте систему осознанно и записывайте предыдущий тег, чтобы знать, какая резервная копия ему соответствует.
Основные версии PostgreSQL
Файл compose использует postgres:17-alpine. Antimatter требует PostgreSQL 15 или новее. Новая основная версия PostgreSQL не может читать каталог данных предыдущей версии: чтобы перейти на неё, сделайте дамп базы данных, запустите новую версию на новом томе и восстановите дамп в неё.
Обновление до версии 0.9.0
Первый запуск версии 0.9.0 (или образа, собранного 17 октября 2026 года или позже) вносит несколько одноразовых изменений в данные. Каждое изменение выполняется один раз и записывается в базу данных. Они приводят значения, оставшиеся на старых значениях по умолчанию, к новым, при этом не затрагивая параметры, которые администратор выбрал вручную. Отслеживайте эти изменения в журнале.
AM_TEAMSETTINGS_DEFAULTCOMMUNITYKIND=workplace. При обновлении каждому сообществу будет присвоен тип, соответствующий значению этого параметра в момент обновления, а звонки по умолчанию будут отключены в каналах сообществ типа Сообщество. См. Компания или сообщество.| Что | Изменение |
|---|---|
| Типы сообществ | Каждое сообщество получает тип — Сообщество или Компания: значение параметра Тип новых сообществ (TeamSettings.DefaultCommunityKind) при первом запуске. Уже установленный тип сохраняется. Администраторы сообществ могут впоследствии изменить тип своего сообщества в разделе Параметры команды › Каналы › Тип сообщества. |
| Кто архивирует каналы | Участники каналов больше не архивируют каналы, в которых состоят: это делают администраторы сообществ. На рабочем месте каналы архивируют администраторы канала (тот, кто его создал, и те, кого он назначил администраторами). Это изменяет роли системной схемы; схемы разрешений, созданные системным администратором для некоторых сообществ, остаются без изменений. |
| Роль «Модераторы» в пресетах макета | Роль Модераторы, которую сообщества получили из пресета макета, получает Удаление участников, что необходимо для приостановки и удаления участников. Изменяются только те роли, которые полностью соответствуют пресету; роли, отредактированные пользователем, остаются без изменений. |
| Роли с Администратор | Роль сообщества с включённым переключателем Администратор теперь предоставляет все возможности, доступные администраторам сообщества, как и указано в переключателе, а не только управление настройками сообщества. |
| Лимит участников | Макс. количество участников в сообществе (TeamSettings.MaxUsersPerTeam) изменяется со значения 50 (предыдущее значение по умолчанию) до 0 (без ограничений). Любое другое значение сохраняется, как и лимит, установленный с помощью AM_TEAMSETTINGS_MAXUSERSPERTEAM. |
| Подключения моделей | Системные администраторы получают управление подключениями моделей, а администраторы сообществ (и роли с Администратор) — управление подключениями моделей их собственного сообщества. Сервисы ИИ приложения Agents становятся общесерверными подключениями моделей, см. ниже. |
| Town Square переименовывается в General | Канал по умолчанию в каждом сообществе переименовывается из town-square (Town Square) в general (General). Он сохраняет свой ID, участников, сообщения и настройки, а также отображаемое имя, выбранное администраторами. Старые ссылки и запросы по town-square по-прежнему ведут к нему. Сообщество, в котором уже есть канал с именем general (даже если он архивирован), сохраняет town-square в качестве канала по умолчанию, как и сообщество, в котором town-square архивирован: они упоминаются в журнале, а их администраторы могут переименовать каналы. |
| Избранное | Категория боковой панели «Избранное» у всех пользователей переименовывается в «Избранное», как теперь указано в интерфейсе. Категории, созданные пользователями с этим именем, остаются без изменений. |
Сервисы приложения Agents
При обновлении каждая служба ИИ приложения Agents копируется в серверное подключение к модели, которое становится общим для всего рабочего пространства и доступно всем, кроме гостей (чтобы разрешить доступ гостям, включите Guests too). Ключи шифруются при передаче, поэтому серверу нужен ключ шифрования ИИ: если файлы кластера хранятся в S3, сначала задайте AM_AI_ENCRYPTION_KEY, иначе копирование отложится до следующего запуска. Затем проверьте Системная консоль › AI › Model connections:
- Каждое подключение сохраняет идентификатор своей службы, поэтому агенты приложения и автоматический перевод, настроенный на службу Agents, по-прежнему смогут её найти.
- Службы OpenAI, совместимые с OpenAI, Anthropic, Mistral, Cohere и Gemini становятся подключениями к их конечным точкам, совместимым с OpenAI (или Anthropic). Служба Azure становится подключением к конечной точке ресурса, совместимой с OpenAI: протестируйте её.
- Службы AWS Bedrock, Google Vertex AI и Cohere North, а также типы, которые не удалось определить, помечаются как Needs attention с указанием причины. Их облачные учётные данные не копируются: укажите для них конечную точку провайдера, совместимую с OpenAI, или шлюз, например LiteLLM, и сохраните изменения.
- Служба эмбеддингов становится моделью Embeddings подключения с тем же адресом и ключом или отдельным подключением. Служба транскрипции получает модель
whisper-1. - Если для переписывания и кратких выводов подключение ещё не настроено, они получают службу и модель агента по умолчанию из приложения.
Собственные параметры и данные приложения Agents остаются без изменений: его агенты продолжают использовать его службы.
Другие изменения параметров по умолчанию
- Звонки: Test mode выключен, а Enable video включено по умолчанию. Выбор, сохранённый в конфигурации, сохраняется. Звонки также зависят от типа рабочего пространства (см. Calls and voice).
- Функция закрепления сообщений наверху доступна администраторам канала, администраторам и модераторам рабочего пространства (с правом Управление сообщениями); участники личных и групповых сообщений по-прежнему могут закреплять сообщения.
- В архивированные каналы можно добавлять новых участников, которые смогут читать историю. Никто не может публиковать сообщения, добавлять реакции или вносить какие-либо изменения в них.
Переход с Mattermost
Antimatter использует схему базы данных Mattermost и добавляет собственные таблицы, поэтому он может взять на себя PostgreSQL-базу данных и файлы сервера Mattermost. Сначала попробуйте это на копии:
- Сделайте резервную копию базы данных Mattermost, его хранилища файлов (
data/или S3-бакета) иconfig.json, затем остановите Mattermost. - Восстановите базу данных в PostgreSQL Antimatter или укажите Antimatter на её копию (
AM_SQLSETTINGS_DATASOURCE). - Скопируйте файлы в хранилище Antimatter, сохранив их пути: в бакет
antimatterс помощью S3-инструмента или вdata/с помощью архива релиза. - Переиспользуйте свои настройки: скопируйте
config.jsonили перенесите его в базу данных с помощьюamctl --local config migrate(см. Конфигурация). Ваши переменные окруженияMM_продолжают работать; переименуйте их вAM_, когда будет удобно. - Запустите Antimatter и следите за журналом во время обновления базы данных. Затем откройте Системная консоль › Плагины › Управление плагинами. Antimatter устанавливает собственные сборки Calls, Playbooks, Kanban (Boards), Agents и интеграций, если они новее установленных версий. Если в Mattermost была более новая версия одного из этих приложений, удалите его и перезапустите Antimatter, чтобы установилась его собственная сборка.
- Настройте push-уведомления заново, используя собственный push-прокси: Antimatter никогда не отправляет уведомления в push-сервисы Mattermost, будь то тестовые или хостинговые, поскольку они доставляются только в собственные приложения Mattermost. Пока вы не измените Сервер push уведомлений, сервер не отправляет push-уведомления (см. Push-уведомления).
Antimatter не связывается ни с одним сервисом, управляемым Mattermost, Inc. (см. Соединения с внешними сервисами), даже если в вашей конфигурации они все еще указаны:
- push-сервер Mattermost сохраняется в настройках, но никогда не используется;
- адреса Mattermost для магазина приложений (URL магазина плагинов) и для продуктовых объявлений очищены;
- ссылки на загрузку приложений, которые по умолчанию указывали на Mattermost (Antimatter Apps Download Page Link, Ссылка на страницу загрузки приложения для Android и Ссылка на страницу загрузки приложения для iOS), заменены на страницы загрузки приложений Antimatter на GitHub; ссылки, которые вы задали самостоятельно, сохраняются;
- приложение Calls использует публичный STUN-сервер Cloudflare вместо сервера Mattermost, не изменяя сохраненную настройку (см. Calls);
- проверка обновлений безопасности и отчёт о сбоях удалены, а вместе с ними — параметры Системной консоли (Включить уведомления о безопасности, Включить диагностику и отчёт об ошибках) и страница Объявления.
Сокет локального режима теперь /var/tmp/antimatter_local.socket; amctl также пытается использовать старый /var/tmp/mattermost_local.socket. Mattermost поддерживает только PostgreSQL в последних версиях, и Antimatter делает то же самое: сначала перенесите базу данных MySQL в PostgreSQL. Возврат к Mattermost после обновления базы данных Antimatter означает восстановление резервной копии Mattermost.
Экспорт и импорт данных
Формат пакетного экспорта переносит данные между серверами: весь сервер, некоторые сообщества или некоторые каналы, включая вложения, аватары и пользовательские эмодзи, если вы этого хотите.
# on the source server
amctl export create --team-name design --include-profile-pictures
amctl export list
amctl export download <export file> design.zip
# on the destination server
amctl import upload design.zip
amctl import list available
amctl import process <uploaded file> --imported-users active
Следите за выполнением задач с помощью команд amctl export job list и amctl import job list. Для экспорта сообщества или канала требуется параметр --imported-users: active, если пользователи переезжают на этот сервер, и inactive, если импорт выполняется на сервер, где у них уже есть аккаунты, чтобы аккаунты, созданные из неоднозначных совпадений, оставались неактивными до проверки администратором. Параметр --destination-team-name позволяет импортировать данные в существующее сообщество. Файлы экспорта и импорта хранятся на диске сервера (ExportSettings.Directory, ImportSettings.Directory) в течение 30 дней по умолчанию.
На самом сервере команды antimatter export bulk и antimatter import bulk --apply выполняют те же операции из файлов, минуя API.