Copias de seguridad y actualizaciones
Qué hacer copia de seguridad, cómo restaurarlo en un nuevo host, cómo actualizarlo y cómo migrar un servidor de Mattermost o una sola comunidad a Antimatter.
Qué hacer copia de seguridad
| Qué | Con el archivo compose del sitio | Con un archivo de liberación | Con el paquete .deb o .rpm |
|---|---|---|---|
| La base de datos: mensajes, usuarios, comunidades, canales y, con el archivo compose del sitio, la configuración | volumen antimatter_postgres, mediante pg_dump | su base de datos PostgreSQL | su base de datos PostgreSQL |
| Archivos subidos, imágenes y aplicaciones instaladas | volumen antimatter_files (el almacenamiento S3) | FileSettings.Directory, ./data/ por defecto | /var/lib/antimatter |
| El archivo de configuración | (en la base de datos) | config/config.json | /etc/antimatter/config/config.json |
| GIFs y pegatinas | volumen antimatter_gifs | el directorio de datos del servicio de GIF | /var/lib/gifs-server |
| Secretos | .env (y compose.override.yaml) | su archivo de entorno | /etc/antimatter/antimatter.env, /etc/gifs-server |
| La clave de cifrado de IA, que cifra las claves de las conexiones de modelos | AM_AI_ENCRYPTION_KEY en .env (recomendado), o el archivo ai-encryption.key en el volumen antimatter_data | AM_AI_ENCRYPTION_KEY, o data/ai-encryption.key | AM_AI_ENCRYPTION_KEY en antimatter.env, o /var/lib/antimatter/data/ai-encryption.key |
Sin la clave de cifrado de IA, un servidor restaurado no puede leer las claves API de sus conexiones de modelos, y cada una debe volver a escribirse. Guarda una copia de la clave por separado de las copias de seguridad de la base de datos, para que una copia robada no contenga ambas. Consulta La clave de cifrado.
La base de datos y los archivos pertenecen juntos: haga copias de seguridad al mismo tiempo y mantenga copias fuera del servidor. Los nombres de los volúmenes comienzan con el nombre del proyecto compose, antimatter (docker volume ls los lista).
Hacer copia de seguridad
Desde el directorio de compose.yaml. Detener Antimatter primero proporciona una copia totalmente coherente; una copia de seguridad tomada mientras se ejecuta suele estar bien, pero los archivos subidos durante la copia de seguridad pueden no estar presentes en ella.
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"
Si no has configurado AM_AI_ENCRYPTION_KEY, el archivo de clave del servidor está en el volumen data, que el bucle anterior guarda con los archivos. Mejor, pon su contenido en .env como explica La clave de cifrado, y guarda una copia por separado de las copias de seguridad de la base de datos.
Ejecute desde cron para copias de seguridad diarias y copie el directorio backups/ a otra máquina. Mantenga las copias de .env tan seguras como el servidor: contienen sus contraseñas.
Para copiar los archivos subidos objeto por objeto (por ejemplo, a otro almacenamiento S3), use la herramienta de línea de comandos de AWS del servicio bucket:
docker compose run --rm -v "$PWD/backups/files:/backup" bucket \
"aws --endpoint-url http://files:9000 s3 sync s3://antimatter /backup"
Con un archivo de versión, haz una copia de seguridad de la base de datos con pg_dump -Fc, y de los directorios data/ y config/ con tus herramientas habituales (data/ contiene el archivo de clave de IA). Con los paquetes, haz una copia de seguridad de la base de datos de la misma manera, y de /etc/antimatter, /var/lib/antimatter, /etc/gifs-server y /var/lib/gifs-server.
Restaurar en un nuevo host
Coloque compose.yaml, el .env guardado y las copias de seguridad en un nuevo directorio, luego:
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
Usa el mismo .env: el almacenamiento y la base de datos deben mantener las contraseñas que tenían, y las conexiones de modelos necesitan la misma clave de cifrado de IA. Si el nuevo host tiene otra dirección, actualiza SITE_URL (y DOMAIN).
Pruebe sus copias de seguridad restaurándolas en otra máquina de vez en cuando.
Actualizar
data: el archivo de clave de IA estaba en el contenedor. Antes de usar el nuevo compose.yaml, y si .env no tiene AM_AI_ENCRYPTION_KEY, guarda la clave que creó el servidor: echo "AM_AI_ENCRYPTION_KEY=$(docker compose exec -T antimatter cat /antimatter/data/ai-encryption.key)" >> .env. Si el comando no encuentra el archivo, ninguna conexión de modelo ha guardado una clave todavía.- Haga una copia de seguridad.
- Cambie la etiqueta de la imagen en
.env(ANTIMATTER_IMAGE), si fija una, como se recomienda. - Descargue y reinicie:
docker compose pull docker compose up -d docker compose logs -f antimatter
Al iniciar, el servidor actualiza el esquema de la base de datos (puedes seguir el proceso en el registro; en un servidor grande puede tardar varios minutos) e instala las versiones más recientes de las aplicaciones incluidas en la imagen. Si usas un archivo de liberación: detén el servidor, reemplaza todo excepto config/, data/, logs/, plugins/ y client/plugins/ con el contenido del nuevo archivo y vuelve a iniciarlo. Si usas el paquete .deb o .rpm, instala el nuevo paquete como se explica en Actualizar un paquete.
antimatter-next de vuelta a antimatter.Versiones
El servidor de Antimatter informa la versión de la línea de Mattermost en la que se basa (actualmente 12.0.0). Las liberaciones en GitHub, con sus archivos y paquetes, tienen sus propios números de versión, en la serie 0.9.0 durante la beta: antimatter version lo muestra como Número de compilación. Las imágenes se reconstruyen desde las ramas main: antimatter-next cada noche (etiquetas nightly-<YYYYMMDD>) y ambas imágenes en cada cambio (etiquetas sha-<commit>). Fija una de estas etiquetas, actualiza de forma intencional y anota la etiqueta anterior para saber con qué copia de seguridad corresponde.
Versiones principales de PostgreSQL
El archivo de compose usa postgres:17-alpine. Antimatter requiere PostgreSQL 15 o superior. Una nueva versión principal de PostgreSQL no puede leer el directorio de datos de la versión anterior: para pasar a una nueva, realiza un volcado de la base de datos, inicia la nueva versión en un volumen nuevo y restaura el volcado en ella.
Actualización a la versión 0.9.0
La primera ejecución de la versión 0.9.0 (o de una imagen construida a partir del 17 de octubre de 2026) realiza algunos cambios únicos en los datos. Cada uno se ejecuta una sola vez y queda registrado en la base de datos. Estos cambios aplican el nuevo valor predeterminado a lo que se había dejado con un valor antiguo, y no modifican lo que un administrador haya elegido. Puedes seguirlos en el registro.
AM_TEAMSETTINGS_DEFAULTCOMMUNITYKIND=workplace. La actualización asigna a cada comunidad el tipo que tenga esta configuración en ese momento, y las llamadas están desactivadas de forma predeterminada en los canales de las comunidades de tipo Gremio. Consulta Gremio o espacio de trabajo.| Qué | El cambio |
|---|---|
| Tipos de comunidad | Cada comunidad tiene un tipo, Gremio o Espacio de trabajo: el valor de Tipo de nuevas comunidades (TeamSettings.DefaultCommunityKind) en el primer inicio. Si ya se ha establecido un tipo, se mantiene. Los administradores de la comunidad pueden cambiar el tipo de su comunidad posteriormente, en Configuración del equipo › General. |
| Quién archiva los canales | Los miembros del canal ya no archivan los canales en los que se encuentran: lo hacen los administradores de la comunidad. En un espacio de trabajo, los administradores del canal (quien lo creó y quienes nombraron como administradores) también pueden archivarlo. Esto cambia los roles del esquema del sistema; los esquemas de permisos que un administrador del sistema creó para algunas comunidades se dejan tal como están. |
| El rol Moderators de las plantillas de diseño | El rol Moderators que las comunidades obtuvieron de una plantilla de diseño recibe Quitar personas, que es lo necesario para expulsar y eliminar personas. Solo cambian los roles que siguen siendo exactamente como los creó la plantilla; un rol que alguien editó se deja tal como está. |
| Roles con Administrador | Un rol de comunidad con el interruptor Administrador activado ahora tiene todo lo que los administradores de la comunidad pueden hacer, como indica el interruptor, y no solo las configuraciones de la comunidad. |
| El límite de miembros | Máximo de miembros por comunidad (TeamSettings.MaxUsersPerTeam) pasa de 50, el valor predeterminado anterior, a 0 (sin límite). Se conserva cualquier otro valor, así como un límite establecido con AM_TEAMSETTINGS_MAXUSERSPERTEAM. |
| Conexiones de modelos | Los administradores del sistema obtienen la gestión de las conexiones de modelos, y los administradores de la comunidad (y los roles con Administrador) la de las de su propia comunidad. Los servicios de IA de la app Agents se convierten en conexiones de modelos de todo el servidor, como se explica a continuación. |
| Town Square pasa a ser General | El canal predeterminado de cada comunidad se renombra de town-square (Town Square) a general (General). Mantiene su ID, miembros, mensajes y configuraciones, así como el nombre de visualización que los administradores eligieron. Los enlaces y búsquedas antiguas por town-square siguen llevándolo. Una comunidad que ya tenga un canal llamado general, incluso archivado, mantiene su town-square como canal predeterminado, al igual que una comunidad cuyo town-square esté archivado: el registro los nombra, y sus administradores pueden renombrar los canales. |
| Favoritos | La categoría de la barra lateral Favoritos de todos se renombra a Favoritos, como ahora indica la interfaz. Las categorías que las personas crearon con ese nombre se dejan tal como están. |
Los servicios de la app Agents
La actualización copia cada servicio de IA de la aplicación Agentes en una conexión de modelo a nivel de servidor, compartida con todas las comunidades y utilizable por todos excepto los invitados (activa También invitados para permitirlo). Las claves se cifran durante el proceso, por lo que el servidor necesita su clave de cifrado de IA: en un clúster cuyos archivos están en S3, establece AM_AI_ENCRYPTION_KEY primero, o la copia esperará al siguiente inicio. Luego revisa Consola de sistema › IA › Conexiones de modelos:
- Cada conexión conserva el ID de su servicio, por lo que los agentes de la app y una configuración de traducción automática asignada a un servicio de Agents siguen encontrándolo.
- Los servicios de OpenAI, compatibles con OpenAI, Anthropic, Mistral, Cohere y Gemini se convierten en conexiones a su punto de extremo compatible con OpenAI (o Anthropic). Un servicio de Azure se convierte en una conexión al punto de extremo compatible con OpenAI del recurso: pruébalo.
- Los servicios de AWS Bedrock, Google Vertex AI y Cohere North, y los tipos desconocidos, se marcan como Requiere atención, con el motivo. Sus credenciales de nube no se copian: dirígelos al punto de extremo compatible con OpenAI del proveedor o a una pasarela como LiteLLM, y luego guarda.
- El servicio de embeddings se convierte en el modelo Embeddings de la conexión con la misma dirección y clave, o en una conexión propia. El servicio de transcripción obtiene el modelo
whisper-1. - Cuando la reescritura y los resúmenes aún no tienen conexión, obtienen el servicio y el modelo del agente predeterminado de la app.
Los agentes de la aplicación Agentes
Después de los servicios, la actualización convierte cada agente de la aplicación Agentes (ahora la aplicación de chat de IA) en un agente a nivel de servidor, en la misma cuenta: su conexión (la que se copió de su servicio), modelo, instrucciones, razonamiento, turnos de herramientas y quién puede usarlo. El servidor responde por estos agentes. Si la aplicación limitaba un agente de una manera que los agentes del servidor no expresan (los canales donde respondía, listas de bloqueo, acceso basado en atributos), el agente se restringe a los miembros de esos canales, o a nadie, y se marca como que necesita atención, al igual que un agente cuyo servicio no se convirtió en una conexión. Revísalos en Consola de sistema › IA › Conexiones de modelos. La otra configuración de la aplicación se deja tal como estaba.
Otros cambios en los valores predeterminados
- Llamadas: Modo de prueba está desactivado y Activar video está activado por defecto. Una elección guardada en la configuración se conserva. Las llamadas también siguen el tipo de comunidad (ver Llamadas y voz).
- Poner mensajes en la parte superior es para los administradores del canal, los administradores y moderadores de la comunidad (con Gestionar mensajes); los miembros de un mensaje directo o de grupo aún pueden hacerlo.
- Los canales archivados pueden aceptar nuevos miembros, quienes leen su historial. Nadie publica, reacciona ni cambia nada en ellos.
Migración desde Mattermost
Antimatter usa el esquema de base de datos de Mattermost y agrega sus propias tablas, por lo que puede tomar el control de la base de datos PostgreSQL y los archivos de un servidor de Mattermost. Pruébalo primero en una copia:
- Realiza una copia de seguridad de la base de datos de Mattermost, su almacenamiento de archivos (
data/o cubo S3) yconfig.json, y luego detén Mattermost. - Restaura la base de datos en el PostgreSQL de Antimatter, o apunta Antimatter a una copia de esta (
AM_SQLSETTINGS_DATASOURCE). - Copia los archivos al almacenamiento de Antimatter, manteniendo sus rutas: al cubo
antimattercon una herramienta S3, o adata/con un archivo de versión. - Reutiliza tu configuración: copia
config.jsono muévelo a la base de datos conamctl --local config migrate(ver Configuración). Tus variables de entornoMM_siguen funcionando; renómbralas aAM_cuando sea conveniente. - Inicia Antimatter y sigue el registro mientras actualiza la base de datos. Después, revisa Consola de sistema › Plugins › Gestión de Plugins. Antimatter instala sus propias versiones de Calls, Chat de IA y las integraciones cuando son más recientes que la versión instalada, y también de Playbooks y Kanban (Boards) si el servidor de Mattermost ya tenía alguna de ellas instalada (ninguna se incluye en un servidor nuevo: consulta Apps incluidas). Si Mattermost tenía una versión más reciente de alguna de ellas, elimina esa app y reinicia Antimatter para que se instale su propia versión.
- Configura las notificaciones móviles de nuevo, con tu propio proxy de notificaciones: Antimatter nunca envía notificaciones a los servicios de Mattermost, ya sean de prueba o alojados, que solo las entregan a las propias aplicaciones de Mattermost. Hasta que cambies Servidor de Notificaciones Móviles, el servidor no envía notificaciones móviles (ver Notificaciones móviles).
Antimatter no contacta ningún servicio operado por Mattermost, Inc. (consulta Conexiones a servicios externos), incluso si tu configuración aún menciona uno:
- un servidor de notificaciones push de Mattermost se conserva en la configuración, pero nunca se utiliza;
- se vacían las direcciones de Mattermost para el marketplace de aplicaciones (URL del Marketplace) y para los avisos de producto;
- los enlaces de descarga de la app que eran los predeterminados de Mattermost (Enlace de Descarga de la Aplicación para Android, Enlace de Descarga de la Aplicación para iOS y Enlace de la página de descarga de aplicaciones de Antimatter) se reemplazan por las páginas de descarga de las apps de Antimatter en GitHub; los enlaces que configures tú se conservan;
- la aplicación Llamadas utiliza el servidor STUN público de Cloudflare en lugar del de Mattermost, sin modificar la configuración guardada (consulta Llamadas);
- se eliminan la comprobación de actualizaciones de seguridad y el informe de errores, junto con sus ajustes en la Consola de sistema (Activar alertas de seguridad, Activar diagnóstico e informe de errores) y la página Avisos.
El socket de modo local ahora es /var/tmp/antimatter_local.socket; amctl también intenta el antiguo /var/tmp/mattermost_local.socket. Mattermost solo admite PostgreSQL en sus versiones recientes, y lo mismo ocurre con Antimatter: primero, migra una base de datos de MySQL a PostgreSQL. Volver a Mattermost después de que Antimatter haya actualizado la base de datos implica restaurar tu copia de seguridad de Mattermost.
Exportar e importar datos
El formato de exportación masiva permite mover datos entre servidores: el servidor completo, algunas comunidades o algunos canales, con adjuntos, fotos de perfil y emojis personalizados si los deseas.
# 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
Puedes observar los trabajos con amctl export job list y amctl import job list. Para una exportación de comunidad o canal, se requiere --imported-users: active cuando las personas se trasladan a este servidor, inactive cuando se importa en un servidor donde ya tienen cuentas, de modo que las cuentas creadas a partir de coincidencias inciertas permanezcan inactivas hasta que un administrador las verifique. --destination-team-name importa en una comunidad existente. Las exportaciones e importaciones se conservan en el almacenamiento del servidor (ExportSettings.Directory, ImportSettings.Directory) durante 30 días por defecto.
En el propio servidor, antimatter export bulk y antimatter import bulk --apply realizan lo mismo desde archivos, sin pasar por la API.
La línea de un canal en la exportación incluye su tipo y configuración (am_type, am_mode, am_root_posts y, en el caso de los foros, am_forum_view); una línea sin estos campos se importa como un canal de Chat de texto plano. La línea de una publicación raíz en un canal de foro necesita props.am_thread_title, el título de su tema; sin él, la importación falla en esa línea.