การตั้งค่า

ตำแหน่งที่ Antimatter เก็บการตั้งค่า, วิธีเปลี่ยนค่าสามแบบ (System Console, ตัวแปรสภาพแวดล้อม, amctl) และตำแหน่งของบันทึกเหตุการณ์ (logs)

ตำแหน่งที่เก็บการตั้งค่า

การตั้งค่าของเซิร์ฟเวอร์แต่ละรายการมีชื่อที่ประกอบด้วยส่วน (section) และคีย์ (key) เช่น ServiceSettings.SiteURL หรือ EmailSettings.SMTPServer ทั้งสองส่วนประกอบกันเป็นค่าการตั้งค่าหนึ่งรายการ ซึ่งเก็บไว้ในสองตำแหน่ง:

  • ในฐานข้อมูล. ไฟล์ compose ของไซต์ตั้งค่า AM_CONFIG เป็น URL การเชื่อมต่อ PostgreSQL ทำให้ค่าการตั้งค่าเป็นแถวในฐานข้อมูล และคอนเทนเนอร์ไม่เก็บข้อมูลใด ๆ บนดิสก์ เซิร์ฟเวอร์หลายตัวที่ใช้ฐานข้อมูลร่วมกันจะใช้ค่าการตั้งค่าร่วมกันด้วย
  • ในไฟล์ หากไม่มี AM_CONFIG เซิร์ฟเวอร์จะอ่าน config/config.json ที่อยู่ถัดจากไดเรกทอรี bin/ (ใน Docker image คือ /antimatter/config/config.json) อาร์ไคฟ์สำหรับเวอร์ชันที่ปล่อยออกมาและไฟล์ compose สำหรับ production ของ antimatter-docker ทำงานในลักษณะนี้ เช่นเดียวกับแพ็กเกจ .deb และ .rpm ซึ่งไฟล์ของพวกมันคือ /etc/antimatter/config/config.json ให้เก็บไฟล์นี้ให้อ่านได้โดยผู้ใช้ของเซิร์ฟเวอร์เท่านั้น เนื่องจากมีรหัสผ่านและคีย์เก็บอยู่

AM_CONFIG (หรือแฟลก --config ของคำสั่ง antimatter) รับได้ทั้งเส้นทางไฟล์หรือ URL postgres:// ค่าการตั้งค่าที่ไม่ได้ระบุจะรับค่าเริ่มต้น

若要ย้ายค่าการตั้งค่าที่มีอยู่จากไฟล์ไปยังฐานข้อมูล ให้รันคำสั่งนี้บนเซิร์ฟเวอร์ จากนั้นเริ่มเซิร์ฟเวอร์โดยตั้งค่า 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_ ตามด้วยชื่อส่วน (section) และชื่อคีย์ (key) โดยใช้ตัวพิมพ์ใหญ่และคั่นด้วยเครื่องหมายขีดล่าง คำภายในชื่อส่วนหรือชื่อคีย์ไม่คั่นด้วยเครื่องหมาย:

การตั้งค่าตัวแปร
ServiceSettings.SiteURLAM_SERVICESETTINGS_SITEURL
SqlSettings.DataSourceAM_SQLSETTINGS_DATASOURCE
EmailSettings.SMTPServerAM_EMAILSETTINGS_SMTPSERVER
PrivacySettings.EnableUserBlockingAM_PRIVACYSETTINGS_ENABLEUSERBLOCKING
  • ค่าการตั้งค่าที่เป็นค่าจริง/เท็จ (true/false) ใช้ true หรือ false; ตัวเลขเป็นตัวเลขธรรมดา
  • ค่าการตั้งค่าที่เป็นรายการ (list) ใช้ค่าที่คั่นด้วยช่องว่าง เช่น AM_SERVICESETTINGS_TRUSTEDPROXYIPHEADER="X-Forwarded-For X-Real-IP"
  • การตั้งค่าที่เป็นอ็อบเจกต์ต้องเป็น JSON ตัวแปรเดียวสำหรับแอปคือ AM_PLUGINSETTINGS_PLUGINS ซึ่งแทนที่การตั้งค่าของแอปทุกตัวพร้อมกัน: ตั้งค่าแอปในคอนโซลระบบหรือด้วย amctl แทน (ดูด้านล่าง)
  • การติดตั้ง Mattermost รุ่นเก่าใช้คำนำหน้า MM_ เช่น MM_SQLSETTINGS_DATASOURCE ซึ่งยังทำงานได้เป็นชื่อเดิม (legacy alias) เมื่อตั้งทั้งสองตัว ตัวแปร AM_ จะชนะ

การตั้งค่าที่กำหนดด้วยตัวแปรจะถูกล็อกในคอนโซลระบบ พร้อมข้อความว่า "การตั้งค่านี้ถูกตั้งผ่านตัวแปรสภาพแวดล้อม ไม่สามารถเปลี่ยนผ่านคอนโซลระบบได้" ไม่ถูกเขียนลงในค่าที่บันทึกไว้: ลบตัวแปรออกและค่าที่บันทึกไว้จะกลับมาใช้

ใช้กับ Docker Compose

เพิ่มตัวแปรภายใต้ environment: ของบริการ antimatter หรือใน compose.override.yaml ข้าง compose.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 keys ของการเชื่อมต่อโมเดล (ดู AI)

แอปบางตัวอ่านตัวแปรของตัวเองที่ตั้งในบริการ antimatter: แอป Calls อ่าน AM_CALLS_* (ดู Calls and voice) และแอป GIFs อ่าน AM_GIFS_SERVICE_URL, AM_GIFS_API_KEY และ AM_GIFS_UPLOAD_KEY (ดู Bundled apps)

คอนโซลระบบ

คอนโซลระบบคือพื้นที่สำหรับจัดการของเว็บแอปสำหรับผู้ดูแลระบบ เพื่อเปิดใช้งาน ให้คลิกที่รูปของคุณที่ด้านบนของแถบด้านข้างของแอปแล้วเลือก คอนโซลระบบ หรือไปที่ 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.
คอนโซลระบบ แถบด้านข้างจัดกลุ่มหน้าเป็นหมวดหมู่ เช่น Reporting, User Management และ Environment

หมวดหมู่มีดังนี้:

  • การรายงาน: สถิติและบันทึกของเซิร์ฟเวอร์
  • การจัดการผ้้ใช้: ผู้ใช้ กลุ่ม ชุมชน (แสดงเป็นทีม) ช่อง สิทธิ์ และการมอบหมายสิทธิ์ผู้ดูแล
  • คุณลักษณะของระบบ: คุณลักษณะโปรไฟล์แบบกำหนดเองและการเข้าถึงตามคุณลักษณะ
  • สภาพแวดล้อม: เว็บเซิร์ฟเวอร์ ฐานข้อมูล การเก็บไฟล์ image proxy SMTP การแจ้งเตือนแบบ push การจำกัดอัตรา การบันทึกเหตุการณ์ และระยะเวลาของเซสชัน
  • การตั้่่งค่าไซต์: การสร้างแบรนด์ ผู้ใช้และทีม การแจ้งเตือน โพสต์ การแชร์ไฟล์ และพฤติกรรมอื่น ๆ ของเซิร์ฟเวอร์
  • การยืนยันตัวตน: การสมัครสมาชิก การเข้าสู่ระบบด้วยอีเมลและรหัสผ่าน MFA AD/LDAP SAML 2.0 OAuth 2.0 OpenID Connect และการเข้าถึงสำหรับแขก
  • AI: การเชื่อมต่อโมเดลและฟีเจอร์ AI ในตัว (เขียนใหม่ สรุป แปลอัตโนมัติ และแปลงข้อความเป็นเสียง) ดู AI
  • ปลั๊กอิน: การจัดการแอปและการตั้งค่าของแต่ละแอปที่ติดตั้ง
  • อินทิเกรชัน: เว็บฮุค คำสั่่งสแลช บอท อีโมจิ การแปลงข้อความเป็นเสียง และ CORS
  • การปฏิบัติตามกฎระเบียบ: การเก็บข้อมูล การส่งออกและการตรวจสอบการปฏิบัติตามกฎระเบียบ การบันทึกการตรวจสอบ และข้อกำหนดการให้บริการแบบกำหนดเอง
  • การทดลอง: ฟีเจอร์ที่อาจมีการเปลี่ยนแปลง

ในคู่มือนี้ การตั้งค่าจะเขียนเป็นเส้นทางในคอนโซลระบบ ตามด้วยป้ายชื่อ และตามด้วยคีย์การตั้งค่า ตัวอย่างเช่น คอนโซลระบบ › การตั้่่งค่าไซต์ › ผู้ใช้งานและทีม › เปิดใช้งานการเพิกเฉย การบล็อก และคำขอร้องข้อความ (PrivacySettings.EnableUserBlocking)

การเปลี่ยนแปลงส่วนใหญ่จะมีผลทันทีเมื่อคุณคลิก บันทึก บางส่วน (เช่น ที่อยู่การรับฟัง การตั้งค่าฐานข้อมูลและแคชบางส่วน) ต้องรีสตาร์ท และหน้าจะแจ้งให้ทราบ

ที่ทำงานหรือชุมชน

ชุมชนทุกแห่งมีประเภท ซึ่งกำหนดค่าเริ่มต้นบางส่วน:

  • ชุมชน สำหรับชุมชนสาธารณะหรือชุมชนที่ก่อตั้งขึ้นจากงานอดิเรก: การโทรจะปิดอยู่ในช่อง (ผู้คนสนทนาในช่องเสียง) และเฉพาะผู้ดูแลระบบและบทบาทที่จัดการช่องเท่านั้นที่สามารถเก็บถาวรช่องได้
  • ท่ีทำงาน สำหรับบริษัทหรือองค์กร: การโทรเปิดใช้งานในช่องต่าง ๆ และผู้ดูแลระบบของช่อง (ผู้สร้าง และผู้ที่ได้รับสิทธิ์จากผู้สร้าง) สามารถเก็บถาวรได้

คอนโซลระบบ › การตั้่งค่าไซต์ › ผู้ใช้งานและทีม › ประเภทของชุมชนใหม่ (TeamSettings.DefaultCommunityKind, AM_TEAMSETTINGS_DEFAULTCOMMUNITYKIND) คือประเภทของชุมชนที่จะถูกสร้างหลังจากนี้: community (ค่าเริ่มต้น) หรือ workplace การเลือกเลย์เอาต์พรีเซ็ตเมื่อสร้างชุมชนจะกำหนดประเภทของชุมชนนั้นเอง ผู้ดูแลระบบของแต่ละชุมชนสามารถเปลี่ยนประเภทได้ทีหลัง ใน การตั้่งค่าทีม › ช่อง › ประเภทของชุมชน

สำหรับบริษัท ให้ตั้งเป็น ท่ีทำงาน ก่อนสร้างชุมชนแรก หรือก่อนอัปเกรดเซิร์ฟเวอร์ที่มีอยู่เป็น 0.9.0: การอัปเกรดจะกำหนดค่าปัจจุบันของตัวแปรนี้ให้กับชุมชนที่มีอยู่ทั้งหมด (ดู การอัปเกรดเป็น 0.9.0)

เครื่องมือบรรทัดคำสั่ง amctl

amctl จัดการเซิร์ฟเวอร์จากบรรทัดคำสั่ง: ผู้ใช้ ชุมชน ช่อง แอป การตั้งค่า งาน และอื่น ๆ มันสื่อสารกับเซิร์ฟเวอร์ด้วยสองวิธี

โหมดโลคอล บนเซิร์ฟเวอร์

โหมดท้องถิ่น (Local mode) ช่วยให้ amctl สื่อสารกับเซิร์ฟเวอร์ผ่าน Unix socket โดยไม่ต้องเข้าสู่ระบบ เปิดใช้งานใน Docker image และในแพ็กเกจ .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> โดยมีคีย์เป็นตัวพิมพ์เล็ก ตัวอย่างเช่น เพื่อตั้งค่า URL และคีย์ของบริการแอป GIF จาก Docker host:

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) ตั้งค่าใน คอนโซลระบบ › สภาพแวดล้อม › การบันทึกล็อก:

ปลายทางการตั้่งค่าค่าเริ่มต้น
คอนโซล (standard output)ออกล็อกข้อมูลไป console (LogSettings.EnableConsole), ระดับคอนโซล log (LogSettings.ConsoleLevel), ออกล็อก console logs เป็น JSON (LogSettings.ConsoleJson)เปิิด, DEBUG, JSON
ไฟล์ antimatter.logอปัต์พุต log ลงไฟล์ (LogSettings.EnableFile), ระดับไฟล์ log (LogSettings.FileLevel), ไดเรกทอรียไฟล์ log (LogSettings.FileLocation)เปิิด, INFO, โฟลเดอร์ logs/ ท่ีอยู้ข้าง ๆ bin/

ไฟล์ล็อกจะถุกหมุน (rotate) ท่ี 100 MB และไฟล์เก่าน์จะถุกบีบอัด

ไฟล์ compose ของไซต์จะปิดการบันทึกล็อกลงไฟล์ (AM_LOGSETTINGS_ENABLEFILE=false) ท่ีทำให้ล็อกอยู้เพีียงใน output ของคอนเทนเนอร์:

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