การตั้งค่า
ตำแหน่งที่ 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.SiteURL | AM_SERVICESETTINGS_SITEURL |
SqlSettings.DataSource | AM_SQLSETTINGS_DATASOURCE |
EmailSettings.SMTPServer | AM_EMAILSETTINGS_SMTPSERVER |
PrivacySettings.EnableUserBlocking | AM_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 แถบด้านข้างมีกล่อง ค้นหาการตั้่งค่า ที่สามารถค้นหาได้ทั่วทุกหน้า

หมวดหมู่มีดังนี้:
- การรายงาน: สถิติและบันทึกของเซิร์ฟเวอร์
- การจัดการผ้้ใช้: ผู้ใช้ กลุ่ม ชุมชน (แสดงเป็นทีม) ช่อง สิทธิ์ และการมอบหมายสิทธิ์ผู้ดูแล
- คุณลักษณะของระบบ: คุณลักษณะโปรไฟล์แบบกำหนดเองและการเข้าถึงตามคุณลักษณะ
- สภาพแวดล้อม: เว็บเซิร์ฟเวอร์ ฐานข้อมูล การเก็บไฟล์ 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 การเลือกเลย์เอาต์พรีเซ็ตเมื่อสร้างชุมชนจะกำหนดประเภทของชุมชนนั้นเอง ผู้ดูแลระบบของแต่ละชุมชนสามารถเปลี่ยนประเภทได้ทีหลัง ใน การตั้่งค่าทีม › ช่อง › ประเภทของชุมชน
เครื่องมือบรรทัดคำสั่ง 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
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