Резервне копіювання та оновлення

Що резервувати, як відновити на новому хості, як оновити, а також як перенести сервер 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_dataAM_AI_ENCRYPTION_KEY або data/ai-encryption.keyAM_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).

Періодично перевіряйте резервні копії, відновлюючи їх на іншому комп’ютері.

Оновлення

Файли Compose, завантажені до 17 жовтня 2026 р., не мали тому 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. Якщо команда не знаходить файла, жодне з’єднання з моделлю ще не зберегло ключ.
  1. Зробіть резервну копію.
  2. Змініть тег образу в .env (ANTIMATTER_IMAGE), якщо ви фіксуєте версію, як рекомендовано.
  3. Отримайте образ і перезапустіть:
    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 року або пізніше) вносить кілька одноразових змін у дані. Кожна зміна виконується лише один раз і записується в базу даних. Вони приводять значення, що залишилися на старому значенні за замовчуванням, до нового, і не чіпають те, що обрав адміністратор. Відстежуйте ці зміни в журналі.

Якщо Antimatter призначено для компанії або організації, встановіть Тип нових спільнот на Робоче середовище до оновлення: AM_TEAMSETTINGS_DEFAULTCOMMUNITYKIND=workplace. Під час оновлення кожна спільнота отримає тип, який має це налаштування на той момент, а дзвінки за замовчуванням вимкнені в каналах спільнот типу Спільнота. Див. Робоче середовище або спільнота.
ЩоЗміна
Типи спільнотКожна спільнота отримує тип: Спільнота або Робоче середовище — значення Тип нових спільнот (TeamSettings.DefaultCommunityKind) під час першого запуску. Вже встановлений тип зберігається. Адміністратори спільнот можуть змінити тип своєї спільноти пізніше, у розділі Налаштування команди › Канали › Тип спільноти.
Хто архівує каналиУчасники каналів більше не архівують канали, в яких вони перебувають: це роблять адміністратори спільноти. На робочому місці це також роблять адміністратори каналу (той, хто його створив, і ті, кого він призначив адміністраторами). Це змінює ролі системної схеми; схеми дозволів, які системний адміністратор створив для деяких спільнот, залишаються незмінними.
Роль «Модератори» у пресетах макетаРоль Модератори, яку спільноти отримали з пресета макета, отримує Видалення людей, що потрібно для виставлення людей та їх видалення. Змінюються лише ті ролі, які досі точно відповідають пресету; роль, яку хтось редагував, залишається незмінною.
Ролі з АдміністраторРоль спільноти з увімкненим перемикачем Адміністратор тепер має всі права, які можуть виконувати адміністратори спільноти, як і заявлено в перемикачі, а не лише налаштування спільноти.
Обмеження кількості учасниківМакс. кількість учасників у спільноті (TeamSettings.MaxUsersPerTeam) змінюється зі значення 50 (попередній стандарт) на 0 (без обмежень). Будь-яке інше значення зберігається, а також обмеження, встановлене за допомогою AM_TEAMSETTINGS_MAXUSERSPERTEAM.
Підключення моделейСистемні адміністратори отримують керування з’єднаннями моделей, а адміністратори спільнот (і ролі з Адміністратор) — керування з’єднаннями моделей їхньої спільноти. ШІ-сервіси додатка «Агенти» стають серверними з’єднаннями моделей, див. нижче.
«Площа» стає «Загальний»Типовий канал кожної спільноти перейменовується з town-square (Площа) на general (Загальний). Він зберігає свій ID, учасників, повідомлення та налаштування, а також відображуване ім’я, яке обрали адміністратори. Старі посилання та запити за town-square досі ведуть сюди. Спільнота, яка вже має канал із назвою general, навіть архівований, зберігає свій town-square як типовий канал, і те саме стосується спільноти, у якій town-square архівований: журнал називає їх, а їхні адміністратори можуть перейменувати канали.
ОбраніКатегорію бічної панелі «Обрані» для всіх учасників перейменовано на «Обрані», як тепер називає її інтерфейс. Категорії, які люди створили з такою назвою, залишаються незмінними.

Сервіси додатка «Агенти»

Під час оновлення кожен AI-сервіс додатка Agents копіюється як загальне для сервера підключення до моделі, доступне для всіх спільнот і всіх користувачів, окрім гостей (щоб дозволити це гостям, увімкніть Дозволити гостям). Ключі шифруються під час передачі, тому серверу потрібен ключ шифрування AI: для кластера, файли якого зберігаються в S3, спочатку встановіть AM_AI_ENCRYPTION_KEY, інакше копіювання відбудеться під час наступного запуску. Далі перевірте Системна консоль › AI › Підключення до моделей:

  • Кожне підключення зберігає ID свого сервісу, тому агенти додатка та автоматичний переклад, налаштований на сервіс Agents, продовжують його знаходити.
  • Сервіси OpenAI, сумісні з OpenAI, Anthropic, Mistral, Cohere та Gemini стають підключеннями до їхніх кінцевих точок, сумісних з OpenAI (або Anthropic). Сервіс Azure стає підключенням до кінцевої точки ресурсу, сумісної з OpenAI: перевірте це.
  • Сервіси AWS Bedrock, Google Vertex AI та Cohere North, а також невідомі типи, позначаються як Потребує уваги з вказанням причини. Їхні хмарні облікові дані не копіюються: вкажіть на них кінцеву точку провайдера, сумісну з OpenAI, або шлюз, наприклад LiteLLM, а потім збережіть.
  • Сервіс вбудовування стає моделлю Вбудовування підключення з тією самою адресою та ключем, або окремим підключенням. Сервіс транскрипції отримує модель whisper-1.
  • Якщо переписування та резюме ще не мають підключення, вони отримують сервіс і модель за замовчуванням агента додатка.

Власні налаштування та дані додатка Agents залишаються незмінними: його агенти продовжують використовувати його сервіси.

Інші зміни значень за замовчуванням

  • Дзвінки: Тестовий режим вимкнено, а Увімкнути відео увімкнено за замовчуванням. Вибір, збережений у конфігурації, зберігається. Дзвінки також підпорядковуються типу спільноти (див. Дзвінки та голос).
  • Закріплення повідомлень доступне адміністраторам каналу, адміністраторам та модераторам спільноти (з Керування повідомленнями); учасники приватних або групових повідомлень також можуть це робити.
  • Архівовані канали можуть отримувати нових учасників, які читають їхню історію. Ніхто не публікує, не реагує та не змінює нічого в них.

Перехід з Mattermost

Antimatter використовує схему бази даних Mattermost та додає власні таблиці, тому може взяти під контроль базу даних PostgreSQL та файли сервера Mattermost. Спочатку спробуйте це на копії:

  1. Зробіть резервну копію бази даних Mattermost, сховища файлів (data/ або S3-бакета) та config.json, а потім зупиніть Mattermost.
  2. Відновіть базу даних у PostgreSQL Antimatter або вкажіть Antimatter на копію бази (AM_SQLSETTINGS_DATASOURCE).
  3. Скопіюйте файли до сховища Antimatter, зберігаючи їхні шляхи: у бакет antimatter за допомогою S3-інструменту або до data/ за допомогою архіву релізу.
  4. Повторно використовуйте свої налаштування: скопіюйте config.json або перенесіть його до бази даних за допомогою amctl --local config migrate (див. Налаштування). Ваші змінні середовища MM_ продовжують працювати; перейменуйте їх на AM_, коли буде зручно.
  5. Запустіть Antimatter і стежте за журналом під час оновлення бази даних. Потім перевірте Системна консоль › Плагіни › Керування плагінами. Antimatter встановлює власні збірки додатків Дзвінки, Плейбуки, Канбан (Дошки), Агенти та інтеграцій, якщо вони новіші за встановлену версію. Якщо в Mattermost була новіша версія одного з цих додатків, видаліть його та перезапустіть Antimatter, щоб встановилася його власна збірка.
  6. Знову налаштуйте push-повідомлення, використовуючи власний push-проксі: Antimatter ніколи не надсилає сповіщення на push-сервіси Mattermost, будь то тестові чи хостовані, оскільки вони доставляють сповіщення лише у власні додатки Mattermost. Доки ви не зміните Сервер push-повідомлень, сервер не надсилає жодних push-сповіщень (див. Push-сповіщення).

Antimatter не встановлює з’єднання з жодним сервісом, який працює під управлінням Mattermost, Inc. (див. З’єднання з зовнішніми сервісами), навіть якщо у вашій конфігурації все ще вказано такий сервіс:

  • push-сервер Mattermost зберігається в налаштуваннях, але ніколи не використовується;
  • адреси Mattermost для магазину додатків (URL-адреса магазину плагінів) та для продуктових оголошень очищуються;
  • посилання для завантаження додатків, які за замовчуванням належали Mattermost (Посилання на сторінку завантаження додатків Antimatter, Посилання для завантаження програми для Android та Посилання для завантаження додатку для iOS), замінені на сторінки завантаження додатків Antimatter на GitHub; посилання, які ви встановили самостійно, зберігаються;
  • додаток Дзвінки використовує публічний STUN-сервер Cloudflare замість сервера Mattermost, не змінюючи збережене налаштування (див. Дзвінки);
  • перевірка оновлень безпеки та звіт про аварії прибрано, а разом із ними й їхні налаштування в Системній консолі (Увімкнути сповіщення про безпеку, Увімкнути діагностику та звіт про помилки) і сторінку Оголошення.

Сокет локального режиму тепер /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.