Configuración

Dónde guarda Antimatter sus ajustes, las tres formas de modificarlos (Consola de sistema, variables de entorno, amctl) y dónde se almacenan los registros.

Dónde se encuentran los ajustes

Cada ajuste del servidor tiene un nombre compuesto por una sección y una clave, como ServiceSettings.SiteURL o EmailSettings.SMTPServer. Juntos forman una única configuración, almacenada en uno de dos lugares:

  • En la base de datos. El archivo de composición del sitio establece AM_CONFIG en la URL de conexión de PostgreSQL, por lo que la configuración es una fila en la base de datos y el contenedor no conserva nada en el disco. Varios servidores que comparten una base de datos también comparten su configuración.
  • En un archivo. Sin AM_CONFIG, el servidor lee config/config.json junto a su directorio bin/ (/antimatter/config/config.json en la imagen de Docker). El archivo de la versión y los archivos de compose de producción de antimatter-docker funcionan así, al igual que los paquetes .deb y .rpm, cuyo archivo es /etc/antimatter/config/config.json. Mantén este archivo legible solo por el usuario del servidor: contiene contraseñas y claves.

AM_CONFIG (o la opción --config del comando antimatter) acepta una ruta de archivo o una URL postgres://. Los ajustes que se omitan tomarán su valor predeterminado.

Para mover una configuración existente de un archivo a la base de datos, ejecute esto en el servidor y luego inicie el servidor con AM_CONFIG establecido en la misma URL:

amctl --local config migrate /opt/antimatter/config/config.json \
    "postgres://antimatter:PASSWORD@localhost:5432/antimatter?sslmode=disable&connect_timeout=10"

Variables de entorno

Cualquier ajuste también puede proporcionarse como variable de entorno. Las variables tienen prioridad sobre la configuración almacenada, lo que las hace adecuadas para lo que pertenece a la implementación: la base de datos, la URL del sitio, el almacenamiento de archivos, los puertos.

Regla de nomenclatura

Escriba AM_, luego la sección, luego la clave, en mayúsculas y separadas por guiones bajos. Las palabras dentro de un nombre de sección o clave no se separan:

AjusteVariable
ServiceSettings.SiteURLAM_SERVICESETTINGS_SITEURL
SqlSettings.DataSourceAM_SQLSETTINGS_DATASOURCE
EmailSettings.SMTPServerAM_EMAILSETTINGS_SMTPSERVER
PrivacySettings.EnableUserBlockingAM_PRIVACYSETTINGS_ENABLEUSERBLOCKING
  • Los ajustes booleanos toman true o false; los números son números planos.
  • Los ajustes de lista toman sus valores separados por espacios, por ejemplo AM_SERVICESETTINGS_TRUSTEDPROXYIPHEADER="X-Forwarded-For X-Real-IP".
  • Los ajustes que son objetos toman JSON. La única variable de este tipo para aplicaciones es AM_PLUGINSETTINGS_PLUGINS, y reemplaza los ajustes de todas las aplicaciones a la vez: configure los ajustes de las aplicaciones en la Consola de sistema o con amctl en su lugar (ver abajo).
  • Las configuraciones antiguas de Mattermost usan el prefijo MM_, por ejemplo MM_SQLSETTINGS_DATASOURCE. Sigue funcionando como un alias de compatibilidad. Cuando se definen ambos, la variable AM_ tiene prioridad.

Una configuración definida mediante una variable queda bloqueada en la Consola de sistema, con la nota «Esta configuración se ha establecido mediante una variable de entorno. No se puede cambiar desde la Consola de sistema». No se escribe en la configuración almacenada: si se elimina la variable, vuelve a aplicarse el valor almacenado.

Con Docker Compose

Añade las variables bajo environment: del servicio antimatter, o en un compose.override.yaml junto a compose.yaml (Compose lo lee automáticamente y se conserva tras las actualizaciones del archivo descargado):

services:
  antimatter:
    environment:
      AM_EMAILSETTINGS_SMTPSERVER: smtp.example.com
      AM_EMAILSETTINGS_SMTPPORT: "587"
      AM_LOGSETTINGS_CONSOLELEVEL: INFO

Aplica los cambios con docker compose up -d, que recrea el contenedor.

Variables leídas por las aplicaciones

Algunas variables no son ajustes y no tienen un campo en la Consola de sistema: AM_CONFIG (dónde está la configuración) y AM_AI_ENCRYPTION_KEY y AM_AI_ENCRYPTION_PREVIOUS_KEYS, la clave que cifra las claves de API de las conexiones de modelos (ver IA).

Algunas aplicaciones leen sus propias variables, definidas en el servicio antimatter: la app de Llamadas lee AM_CALLS_* (ver Llamadas y voz), y la app de GIFs lee AM_GIFS_SERVICE_URL, AM_GIFS_API_KEY y AM_GIFS_UPLOAD_KEY (ver Aplicaciones integradas).

La Consola de sistema

La Consola de sistema es el área de administración de la aplicación web, para administradores del sistema. Para abrirla, haz clic en tu foto en la parte superior de la barra lateral de la aplicación y elige Consola de sistema, o ve a https://chat.example.com/admin_console. Su barra lateral tiene una caja Buscar ajustes que busca en todas las páginas.

The System Console, with its sidebar of sections on the left and the SAML 2.0 settings page on the right.
La Consola de sistema. La barra lateral agrupa las páginas en secciones como Informes, Gestión de usuarios y Entorno.

Sus secciones son:

  • Informes: estadísticas y registros del servidor.
  • Gestión de usuarios: usuarios, grupos, comunidades (listadas como Equipos), canales, permisos y administración delegada.
  • Atributos del sistema: atributos de perfil personalizados y control de acceso basado en atributos.
  • Entorno: servidor web, base de datos, almacenamiento de archivos, proxy de imágenes, SMTP, notificaciones push, limitación de tasa, registros, duraciones de sesión y monitorización de rendimiento.
  • Configuración del sitio: marca, usuarios y equipos, notificaciones, publicaciones, intercambio de archivos y otros comportamientos a nivel de servidor.
  • Autenticación: registro, inicio de sesión con correo y contraseña, MFA, AD/LDAP, SAML 2.0, OAuth 2.0, OpenID Connect y acceso de invitados.
  • IA: conexiones de modelos y las funciones de IA integradas (reescritura, resúmenes, traducción automática, texto a voz). Ver IA.
  • Plugins: gestión de aplicaciones y configuración de cada aplicación instalada.
  • Integraciones: webhooks, comandos con barra diagonal, cuentas de bot, GIFs, texto a voz, CORS.
  • Conformidad: retención de datos, exportación y supervisión de conformidad, registro de auditoría y términos de servicio personalizados.
  • Experimental: funciones que pueden cambiar.

En esta guía, cada ajuste se indica mediante su ruta en la Consola de sistema, seguido de su etiqueta y, a continuación, de su clave de configuración. Por ejemplo: Consola de sistema › Configuración del Sitio › Usuarios y Equipos › Activar ignorar, bloquear y solicitudes de mensaje (PrivacySettings.EnableUserBlocking).

La mayoría de los cambios se aplican en cuanto haces clic en Guardar. Algunos (la dirección de escucha, ciertas configuraciones de base de datos y de caché) requieren un reinicio, y la página lo indica.

Gremio o espacio de trabajo

Cada comunidad tiene un tipo, que establece algunos de sus valores predeterminados:

  • Gremio, para una comunidad pública o de afición: las llamadas están desactivadas en sus canales (la gente habla en canales de voz), y solo sus administradores, y los roles que gestionan canales, archivan canales.
  • Espacio de trabajo, para una empresa u organización: las llamadas están activadas en sus canales, y los administradores de un canal (quien lo creó, y a quienes hicieron administradores) también lo archivan.

Consola de sistema › Configuración del Sitio › Usuarios y Equipos › Tipo de nuevas comunidades (TeamSettings.DefaultCommunityKind, AM_TEAMSETTINGS_DEFAULTCOMMUNITYKIND) es el tipo de las comunidades creadas a partir de ese momento: Gremio (el predeterminado) o Espacio de trabajo; la configuración sigue almacenando y leyendo los valores antiguos community y workplace. Un preajuste de diseño elegido al crear una comunidad establece su propio tipo. Los administradores de cada comunidad pueden cambiar su tipo más tarde, en Configuración del equipo › General. Los nuevos gremios ponen a todos en todos los canales (TeamSettings.AllChannelsMembershipForNewTeams) es el predeterminado solo para nuevos gremios: los espacios de trabajo nunca comienzan así (consulte Todos en todos los canales).

Para una empresa, establézcalo en Espacio de trabajo antes de crear la primera comunidad, o antes de actualizar un servidor existente a la versión 0.9.0: la actualización asigna a cada comunidad existente el valor que tenga la configuración en ese momento (consulte Actualización a la versión 0.9.0).

Mensajes que se eliminan al leerlos

Las personas pueden enviar mensajes que se eliminan un tiempo después de que cada lector los abra (consulte Mensajes que se eliminan al leerse). Las configuraciones están en Consola de sistema › Configuración del Sitio › Publicaciones, bajo Mensajes que se eliminan al leerse:

AjusteClave y variablePredeterminado
Activar mensajes que se eliminan al leerseServiceSettings.EnableBurnOnRead, AM_SERVICESETTINGS_ENABLEBURNONREADactivado
Duración de los mensajes que se eliminan al leerse: cuánto dura un mensaje una vez abierto, cuando su remitente no eligió ninguna duraciónServiceSettings.BurnOnReadDurationSeconds, AM_SERVICESETTINGS_BURNONREADDURATIONSECONDS600 (10 minutos)
Duración máxima que pueden elegir los remitentes: de 1 hora a 7 días; una elección más larga se acorta a este valorServiceSettings.BurnOnReadMaximumDurationSeconds, AM_SERVICESETTINGS_BURNONREADMAXIMUMDURATIONSECONDS86400 (1 día)
Tiempo de vida máximo para mensajes de lectura con autodestrucción: un mensaje se elimina este tiempo después de haber sido enviado, incluso si no todos lo leyeronServiceSettings.BurnOnReadMaximumTimeToLiveSeconds, AM_SERVICESETTINGS_BURNONREADMAXIMUMTIMETOLIVESECONDS604800 (7 días)

La duración máxima se vuelve a comprobar cuando se lee un mensaje, por lo que reducirla también acorta los mensajes ya enviados.

La herramienta de línea de comandos amctl

amctl gestiona un servidor desde la línea de comandos: usuarios, comunidades, canales, aplicaciones, configuración, trabajos y más. Se comunica con el servidor de una de dos maneras.

Modo local, en el servidor

El modo local permite que amctl se comunique con el servidor a través de un socket Unix, sin necesidad de iniciar sesión. Está activado en la imagen de Docker y en los paquetes .deb y .rpm. En un servidor instalado desde un archivo, actívelo con ServiceSettings.EnableLocalMode (AM_SERVICESETTINGS_ENABLELOCALMODE=true). El socket es /var/tmp/antimatter_local.socket por defecto (ServiceSettings.LocalModeSocketLocation).

# with Docker Compose
docker compose exec antimatter amctl --local system status
# with a release archive
sudo -u antimatter /opt/antimatter/bin/amctl --local system status
# with the .deb or .rpm package
sudo -u antimatter amctl --local system status
Cualquiera que pueda usar el socket, o ejecutar docker compose exec en el host, tiene permisos completos de administrador del sistema.

Remoto, con una cuenta

Desde cualquier máquina, inicia sesión con una cuenta de administrador del sistema (o un token de acceso personal) y luego ejecuta comandos contra ese servidor:

amctl auth login https://chat.example.com --name prod --username admin
amctl system status

Comandos de configuración

ComandoQué hace
amctl config get ServiceSettings.SiteURLImprime una configuración.
amctl config set TeamSettings.EnableOpenServer falseCambie una configuración. Las listas de configuraciones aceptan un valor o varios.
amctl config patch settings.jsonFusiona un archivo JSON de configuraciones en la configuración.
amctl config showImprime toda la configuración como JSON.
amctl config editAbre la configuración en tu editor ($EDITOR).
amctl config resetRestablece las configuraciones a sus valores predeterminados.
amctl config reloadRecarga la configuración desde donde se almacena, después de un cambio realizado fuera del servidor.

Las configuraciones de las aplicaciones se encuentran bajo PluginSettings.Plugins.<app id>, con claves en minúsculas. Por ejemplo, para establecer la URL de servicio y la clave de la aplicación GIFs desde el host de Docker:

docker compose exec -T antimatter amctl --local config patch /dev/stdin <<'EOF'
{"PluginSettings": {"Plugins": {"com.antimatterchat.gifs": {
  "serviceurl": "http://gifs:8080/v2",
  "apikey": "the GIFS_API_KEY of your .env"
}}}}
EOF

Otros comandos útiles: amctl user create, amctl user deactivate, amctl team create, amctl plugin list, amctl plugin enable, amctl system supportpacket y amctl logs. Ejecuta amctl help <command> para ver las opciones de cada uno.

Registros

El servidor escribe sus registros en dos ubicaciones, cada una con su propio nivel (DEBUG, INFO, WARN o ERROR), configurado en Consola de sistema › Entorno › Registros:

DestinoConfiguraciónValores predeterminados
La consola (salida estándar)Imprimir registros en la consola (LogSettings.EnableConsole), Nivel de log de consola (LogSettings.ConsoleLevel), Salida de los registros por consola como JSON (LogSettings.ConsoleJson)activado, DEBUG, JSON
Un archivo, antimatter.logEscribir registros en un archivo (LogSettings.EnableFile), Nivel registro (LogSettings.FileLevel), Directorio del Archivo de Registro (LogSettings.FileLocation)activado, INFO, el directorio logs/ junto a bin/

Los archivos de registro se rotan al alcanzar 100 MB y los anteriores se comprimen.

El archivo compose del sitio desactiva el registro en archivo (AM_LOGSETTINGS_ENABLEFILE=false), por lo que los registros solo están en la salida del contenedor:

docker compose logs -f antimatter
docker compose logs --since 1h antimatter | grep -i error

El nivel de la consola es DEBUG por defecto, lo cual es muy detallado. En un servidor con mucho tráfico, establezca AM_LOGSETTINGS_CONSOLELEVEL=INFO. El config.json del archivo de la versión y de los paquetes ya lo establece en INFO. Con un archivo de la versión bajo systemd, la salida de la consola va al registro (journalctl -u antimatter) y el archivo a /opt/antimatter/logs/antimatter.log. Los paquetes desactivan el registro en archivo, por lo que sus registros solo están en el registro del sistema.

Los archivos de registro y de auditoría deben permanecer dentro de la raíz de registro: AM_LOG_PATH (la variable anterior MM_LOG_PATH sigue funcionando) si está configurada; de lo contrario, en la carpeta logs. Esta restricción se aplica de forma predeterminada: un Directorio del Archivo de Registro, un destino de registro avanzado o una ruta de registro de auditoría fuera de la raíz impiden que el servidor se inicie, y se rechaza al guardar la configuración. Desactive la aplicación de esta restricción con AM_FEATUREFLAGS_ENFORCELOGPATHROOT=false. Si AM_LOG_PATH está configurada y Directorio del Archivo de Registro está vacío, los registros se guardan en AM_LOG_PATH.

Cuando el registro en archivos está activado, los administradores del sistema también pueden leer el registro en Consola de sistema › Informes › Servidor de registros: insignias de nivel con código de colores, filtros rápidos por nivel, seguimiento en tiempo real y preajustes de rango de tiempo desde 5 minutos hasta 24 horas, o mediante amctl logs.