設定

Antimatter 儲存設定的位置、變更設定的三種方式(系統控制台、環境變數、amctl),以及日誌的位置。

設定的儲存位置

每個伺服器設定都由一個區段和一個金鑰組成,例如 ServiceSettings.SiteURL 或 EmailSettings.SMTPServer。它們共同構成一個設定,並儲存在以下兩個位置之一:

  • 在資料庫中。 站点的 compose 檔案將 AM_CONFIG 設定為 PostgreSQL 連線 URL,因此設定是資料庫中的一列,容器不會在磁碟上保留任何內容。共用同一個資料庫的多個伺服器也會共用其設定。
  • 在檔案中。 若未設定 AM_CONFIG,伺服器會讀取位於 bin/ 目錄旁的 config/config.json(在 Docker 映像中為 /antimatter/config/config.json)。antimatter-docker 的發行版壓縮檔與生產環境 compose 檔案採用此方式,.deb 和 .rpm 套件也是如此,其檔案路徑為 /etc/antimatter/config/config.json。請確保此檔案僅可由伺服器的使用者讀取:其中包含密碼和金鑰。

AM_CONFIG(或 antimatter 命令的 --config 旗標)接受檔案路徑或 postgres:// URL。未明確設定的項目將採用預設值。

若要將現有的設定從檔案遷移至資料庫,請在伺服器上執行此操作,然後將 AM_CONFIG 設定為相同的 URL 並啟動伺服器:

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

環境變數

任何設定也可以透過環境變數提供。環境變數優先於儲存的設定,因此非常適合用於屬於部署層級的內容:資料庫、網站 URL、檔案儲存、埠號。

命名規則

先寫 AM_,接著是區段,然後是金鑰,全部使用大寫字母並以底線分隔。區段或金鑰名稱內的單字之間不加分隔符:

設定變數
ServiceSettings.SiteURLAM_SERVICESETTINGS_SITEURL
SqlSettings.DataSourceAM_SQLSETTINGS_DATASOURCE
EmailSettings.SMTPServerAM_EMAILSETTINGS_SMTPSERVER
PrivacySettings.EnableUserBlockingAM_PRIVACYSETTINGS_ENABLEUSERBLOCKING
  • 布林值設定使用 true 或 false;數字則直接使用數字。
  • 清單類設定以空格分隔其值,例如 AM_SERVICESETTINGS_TRUSTEDPROXYIPHEADER="X-Forwarded-For X-Real-IP"。
  • 物件類型的設定採用 JSON 格式。應用程式中唯一符合此類型的變數是 AM_PLUGINSETTINGS_PLUGINS,它會一次取代所有應用程式的設定:請改用系統控制台或 amctl 來設定應用程式設定(詳見下文)。
  • 較舊的 Mattermost 設定使用 MM_ 前綴,例如 MM_SQLSETTINGS_DATASOURCE。它仍作為遺留別名運作。當兩者皆設定時,AM_ 變數優先。

透過變數設定的項目在系統控制台中會被鎖定,並附註「此設定已透過環境變數設定,無法透過系統控制台變更。」它不會寫入儲存的設定中:移除該變數後,儲存的值將重新生效。

使用 Docker Compose

在 antimatter 服務的 environment: 下新增變數,或在 compose.yaml 旁邊放置 compose.override.yaml(Compose 會自動讀取它,且它能在下載檔案更新後保留):

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

使用 docker compose up -d 套用變更,這將重新建立容器。

應用程式讀取的變數

少數變數並非設定,且沒有對應的系統控制台欄位:AM_CONFIG(設定檔位置),以及 AM_AI_ENCRYPTION_KEY 和 AM_AI_ENCRYPTION_PREVIOUS_KEYS,用於加密模型連線的 API 金鑰(詳見 AI)。

少數應用程式會讀取設定在 antimatter 服務上的專屬變數:通話應用程式讀取 AM_CALLS_*(詳見 通話與語音),GIF 應用程式讀取 AM_GIFS_SERVICE_URL、AM_GIFS_API_KEY 和 AM_GIFS_UPLOAD_KEY(詳見 內建應用程式)。

系統控制台

系統控制台是網頁應用程式的管理區域,供系統管理員使用。要開啟它,請點擊應用程式側欄頂部的個人圖片並選擇系統控制台,或前往 https://chat.example.com/admin_console。其側邊欄有一個尋找設定框,可搜尋所有頁面。

The System Console, with its sidebar of sections on the left and the SAML 2.0 settings page on the right.
系統控制台。側邊欄將頁面分組為報告、使用者管理和環境等區段。

其區段包括:

  • 報告:統計資料和伺服器日誌。
  • 使用者管理:使用者、群組、社群(列為團隊)、頻道、權限和委託管理。
  • 系統屬性:自訂個人檔案屬性,以及基於屬性的存取控制。
  • 環境:Web 伺服器、資料庫、檔案儲存、影像代理、SMTP、推送通知、速率限制、記錄、工作階段長度、效能監控。
  • 網站設定:品牌、使用者與團隊、通知、貼文、檔案分享及其他伺服器層級行為。
  • 驗證:註冊、電子郵件與密碼登入、MFA、AD/LDAP、SAML 2.0、OAuth 2.0、OpenID Connect 與訪客存取。
  • AI:模型連線與內建 AI 功能(重寫、摘要、自動翻譯、文字轉語音)。請參閱 AI。
  • 擴充程式:應用程式管理,以及每個已安裝應用程式的設定。
  • 整合:Webhook、斜線指令、機器人帳號、GIF、文字轉語音、CORS。
  • 規範:資料保留、合規匯出與監控、稽核記錄、自訂服務條款。
  • 實驗性:可能變更的功能。

在本指南中,設定的寫法為其在系統控制台中的路徑,接著是其標籤,最後是其設定金鑰。例如 系統控制台 › 網站設定 › 使用者與團隊 › 啟用忽略、封鎖與訊息請求(PrivacySettings.EnableUserBlocking)。

大多數變更在您點擊 儲存 後立即生效。少數項目(例如監聽位址、部分資料庫與快取設定)需要重新啟動,頁面會加以說明。

工作場所或社群

每個社群都有一種類型,這會決定其部分預設值:

  • 社群,適用於公開或興趣社群:其頻道中的通話功能關閉(人們在語音頻道中交談),且僅有管理員以及管理頻道的角色可以封存頻道。
  • 工作場所,適用於公司或組織:其頻道中的通話功能開啟,且頻道的管理員(建立者及其指定的管理員)也可以封存該頻道。

系統控制台 › 網站設定 › 使用者與團隊 › 新社群的類型(TeamSettings.DefaultCommunityKind、AM_TEAMSETTINGS_DEFAULTCOMMUNITYKIND)是之後建立的社群的類型:community(預設值)或 workplace。建立社群時選擇的版面配置預設值會設定其自身的類型。每個社群的管理員之後可以在 團隊設定 › 頻道 › 社群類型 中變更其類型。

如果是公司,請在建立第一個社群之前,或在將現有伺服器升級至 0.9.0 之前,將其設定為 工作場所:升級時會將該設定當下的值賦予所有現有社群(請參閱 升級至 0.9.0)。

amctl 命令列工具

amctl 可從命令列管理伺服器:使用者、社群、頻道、應用程式、設定、工作等。它透過兩種方式之一與伺服器通訊。

本機模式,在伺服器上

本機模式讓 amctl 透過 Unix socket 與伺服器通訊,無需登入。Docker 映像檔以及 .deb 和 .rpm 套件預設已啟用此模式。若伺服器是從檔案安裝的,請使用 ServiceSettings.EnableLocalMode(AM_SERVICESETTINGS_ENABLELOCALMODE=true)來啟用。Socket 預設路徑為 /var/tmp/antimatter_local.socket(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
任何能使用該 socket 或在主機上執行 docker compose exec 的人,都擁有完整的系統管理員權限。

遠端,使用帳戶

從任何機器,使用系統管理員帳戶(或個人存取權杖)登入,然後對該伺服器執行指令:

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

設定指令

指令功能說明
amctl config get ServiceSettings.SiteURL印出一個設定值。
amctl config set TeamSettings.EnableOpenServer false變更一個設定值。清單類型的設定可接受多個值。
amctl config patch settings.json將 JSON 檔案中的設定合併至現有設定中。
amctl config show以 JSON 格式印出完整設定。
amctl config edit在您的編輯器中開啟設定($EDITOR)。
amctl config reset將設定重設為預設值。
amctl config reload在伺服器外部進行變更後,從儲存位置重新載入設定。

應用程式設定位於 PluginSettings.Plugins.<app id> 之下,金鑰使用小寫。例如,要在 Docker 主機上設定 GIFs 應用程式的服務 URL 和金鑰:

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

其他實用指令:amctl user create、amctl user deactivate、amctl team create、amctl plugin list、amctl plugin enable、amctl system supportpacket 以及 amctl logs。對每個指令執行 amctl help <command> 以查看其選項。

記錄

伺服器會將其記錄寫入兩個位置,每個位置都有各自的層級(DEBUG、INFO、WARN 或 ERROR),設定於 系統控制台 › 環境 › 記錄:

目的地設定預設值
主控台(標準輸出)將紀錄內容輸出到控制台(LogSettings.EnableConsole)、控制台記錄等級(LogSettings.ConsoleLevel)、以 JSON 格式輸出控制台記錄(LogSettings.ConsoleJson)on、DEBUG、JSON
檔案 antimatter.log將紀錄內容輸出到檔案(LogSettings.EnableFile)、檔案記錄等級(LogSettings.FileLevel)、記錄檔目錄(LogSettings.FileLocation)on、INFO、位於 bin/ 旁的 logs/ 目錄

記錄檔在達到 100 MB 時會進行輪替,舊的記錄檔會被壓縮。

該站點的 compose 檔案已停用檔案記錄(AM_LOGSETTINGS_ENABLEFILE=false),因此記錄僅存在於容器的輸出中:

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

控制台記錄等級預設為 DEBUG,這相當詳細。在繁忙的伺服器上,請設定 AM_LOGSETTINGS_CONSOLELEVEL=INFO。發行版壓縮檔與套件中的 config.json 已將其設定為 INFO。若在 systemd 下使用發行版壓縮檔,控制台輸出會進入 journal(journalctl -u antimatter),而檔案記錄則位於 /opt/antimatter/logs/antimatter.log。套件已停用檔案記錄,因此其記錄僅存在於 journal 中。

當檔案記錄啟用時,系統管理員也可以在系統控制台 › 報告 › 伺服器記錄中查看最新的記錄行,或使用 amctl logs。