অপারেশনস
সার্ভারের দিকে নজর রাখুন, এতে আরও বেশি মানুষকে সামলে নিতে সক্ষম করুন, ডেটা কতদিন রাখা হবে তা ঠিক করুন, এবং অ্যাডমিনদের সবচেয়ে বেশি যে সমস্যার সম্মুখীন হতে হয় তা সমাধান করুন।
হেলথ চেক
amctl --local system status(কন্টেইনারে:docker compose exec antimatter amctl --local system status)। Docker ইমেজের হেলথ চেক প্রতি ৩০ সেকেন্ডে একবার এটি চালায়, তাইdocker compose pshealthyবাunhealthyদেখাবে।GET /api/v4/system/pingসাইন-ইন ছাড়াই উত্তর দেয়, যা বাইরের মনিটর বা লোড ব্যালান্সারের জন্য ব্যবহার করা যায়:curl -fsS https://chat.example.com/api/v4/system/ping।antimatter db pingপরীক্ষা করে যে কনফিগার করা সেটিংস অনুযায়ী ডেটাবেসে পৌঁছানো সম্ভব কিনা।- সিস্টেম কনসোল › রিপোর্টিং › সিস্টেম পরিসংখ্যান ব্যবহারকারী, পোস্ট এবং সেশনের সংখ্যা দেখায়।
- সিস্টেম কনসোল › রিপোর্টিং › সাইট স্বাস্থ্য প্রতি ঘণ্টায় ডেটাবেস, সার্চ, ক্লাস্টার, পুশ, জব, সাইন-ইন, কমপ্লায়েন্স এবং আরও অনেক কিছু পরীক্ষা করে এবং গুরুত্ব অনুযায়ী যেসব বিষয়ে মনোযোগ দেওয়া প্রয়োজন সেগুলো তালিকাভুক্ত করে; আপনি যদি কোনো নির্দিষ্ট সমস্যা আর দেখতে না চান তবে তা মিউট করুন এবং পরে মিউটেড ট্যাবে দেখুন কে এবং কখন মিউট করেছিল। এটি ডিফল্টভাবে চালু থাকে; এটি পূর্ণ সিস্টেম অ্যাডমিনিস্ট্রেটরদের জন্য ওয়ার্কস্পেস অপটিমাইজেশন-এর স্থান নেয় (যে ডিলিগেটেড অ্যাডমিনিস্ট্রেটর শুধুমাত্র সাইট পরিসংখ্যান পড়তে পারেন, তিনি এখনও ওয়ার্কস্পেস অপটিমাইজেশন দেখতে পাবেন)।
AM_FEATUREFLAGS_HEALTHDASHBOARD=falseব্যবহার করে এটি বন্ধ করুন।


মেট্রিকস
সার্ভার Prometheus মেট্রিক্স প্রকাশ করতে পারে: রিকোয়েস্ট রেট এবং সময়কাল, ওয়েবসকট কানেকশন, ডাটাবেস এবং ক্যাশ ব্যবহার, জব, প্লগইন হুক এবং আরও অনেক কিছু। এগুলি চালু করুন সিস্টেম কনসোল › এনভাইরনমেন্ট › পারফরম্যান্স মনিটরিং-এ:
| সেটিং | কী এবং ভেরিয়েবল | ডিফল্ট |
|---|---|---|
| পারফরম্যান্স মনিটরিং সক্রিয় করুন | MetricsSettings.Enable, AM_METRICSSETTINGS_ENABLE | বন্ধ |
| লিসেন ঠিকানা | MetricsSettings.ListenAddress, AM_METRICSSETTINGS_LISTENADDRESS | :8067 |
| ক্লায়েন্ট পারফরম্যান্স মনিটরিং সক্রিয় করুন | MetricsSettings.EnableClientMetrics | চালু: ব্রাউজার এবং অ্যাপস তাদের নিজস্ব সময়কাল রিপোর্ট করে |
Prometheus এরপর http://<server>:8067/metrics থেকে মেট্রিকস সংগ্রহ করে। প্রতিটি মেট্রিক Mattermost নামে (mattermost_…) এবং Antimatter নামে (antimatter_…) প্রকাশিত হয়, তাই বিদ্যমান Mattermost ড্যাশবোর্ডগুলো কাজ করতে থাকে। অ্যাপস তাদের নিজস্ব মেট্রিকস প্রকাশ করে, যেমন Agents অ্যাপ /plugins/mattermost-ai/metrics-এ।
মেট্রিকস পোর্টে সাইন-ইনের প্রয়োজন নেই: এটি একটি প্রাইভেট নেটওয়ার্কে রাখুন। সাইটের compose ফাইল এটি প্রকাশ করে না; হোস্ট থেকে এটি সংগ্রহ করতে antimatter সার্ভিসের ports-এ "127.0.0.1:8067:8067" যোগ করুন।
মেট্রিকস অ্যাপ
প্রোমেথিয়াস সার্ভার ছাড়া, মেট্রিক্স অ্যাপ (দেখুন বান্ডলড অ্যাপসমূহ) একই মেট্রিকসগুলো Antimatter-এর ভিতরে একটি ছোট টাইম-সিরিজ ডেটাবেসে সংগ্রহ করে: প্রতি ৬০ সেকেন্ডে, ১৫ দিন সংরক্ষিত। পারফরম্যান্স মনিটরিং সক্রিয় করুন চালু করলে অ্যাপটিও চালু হয়, যদি না আপনি নিজে এটি বন্ধ করে থাকেন। এটি শুরু হলে মেট্রিকস এন্ডপয়েন্ট চালু করে। সিস্টেম কনসোল › প্লাগইনসমূহ-এ এর পৃষ্ঠা ডেটাবেসের আকার দেখায় এবং আপনার নিজের বিশ্লেষণের জন্য বা বাগ রিপোর্টে সংযুক্ত করার জন্য ডেটার ডাম্প ডাউনলোড করতে দেয়; সর্বশেষ দিনের তথ্যটিও সাপোর্ট প্যাকেটে যোগ করা হয়।
সাপোর্ট প্যাকেট
সাপোর্ট প্যাকেট হলো একটি zip ফাইল যা সমস্যা নির্ণয়ের জন্য যা প্রয়োজন তা ধারণ করে: ভার্সন, পরিসংখ্যান, গোপন তথ্য বাদ দেওয়া কনফিগারেশন, অ্যাপ এবং জবের তালিকা, ডাটাবেস স্কিমা, সাম্প্রতিক লগ এবং পারফরম্যান্স প্রোফাইল। amctl system supportpacket দিয়ে একটি তৈরি করুন, অথবা সিস্টেম কনসোলের সাইডবারের উপরের মেনু থেকে (কমার্সিয়াল সাপোর্ট, যা তারপর আপনি যা অন্তর্ভুক্ত করতে চান তা বেছে নিতে দেয়)। শেয়ার করার আগে এটি পড়ে নিন: এতে কোনো ম্যাসেজ নেই, তবে এতে কমিউনিটি, ব্যবহারকারী এবং সেটিংসের নাম রয়েছে।
পারফরম্যান্স এবং স্কেলিং
২টি CPU কোর এবং ৪ GB মেমরির একটি সার্ভার কয়েকশো মানুষকে পরিষেবা দিতে পারে। নতুন সার্ভার যোগ করার আগে, নিম্নলিখিত বিষয়গুলো দেখুন:
- ডাটাবেস। PostgreSQL বেশিরভাগ কাজ করে: এতে দ্রুত স্টোরেজ এবং মেমরি দিন। রিড রিপ্লিকা রিড লোড নিতে পারে (
SqlSettings.DataSourceReplicas, একটি কানেকশন URL-এর তালিকা)। - সার্চ। ডিফল্টভাবে ডাটাবেসে ম্যাসেজ সার্চ করা হয়। বড় সার্ভারগুলোর জন্য Elasticsearch বা OpenSearch সার্চ এবং ইনডেক্সিং সামলে নিতে পারে: সিস্টেম কনসোল › এনভাইরনমেন্ট › Elasticsearch (
ElasticsearchSettings: ব্যাকএন্ড টাইপ Elasticsearch বা OpenSearch, সার্ভার কানেকশন ঠিকানা, ক্রেডেনশিয়াল, তারপর ইনডেক্সিং চালু করুন, ইনডেক্স তৈরি করুন, এবং সার্চ চালু করুন)। - কলসমূহ। কল মিডিয়া সবচেয়ে ভারী লোড। এগুলি একটি rtcd সার্ভারে সরান: দেখুন Calls and voice।
- খোলা ফাইল। প্রতিটি সংযুক্ত ব্যক্তি একটি websocket খোলা রাখে। antimatter-docker-এর প্রোডাকশন compose ফাইল সীমাটি 49152-এ বাড়িয়ে দেয় (
ulimits: nofile); systemd-এর সাথেও একই কাজ করুন (LimitNOFILE)। - লগ।
LogSettings.ConsoleLevelকেINFOবাWARN-এ নামান: ব্যস্ত সার্ভারেDEBUGঅনেক লগ করে। - কম্প্রেশন। ওয়েব সার্ভার মোড gzip-এ সেট থাকলে,
AM_FEATUREFLAGS_ENABLEBROTLICOMPRESSION=trueযেসব ক্লায়েন্ট Brotli কম্প্রেশন গ্রহণ করে তাদের সাথে API রেসপন্সের জন্য gzip-এর পরিবর্তে Brotli কম্প্রেশন নেগোসিয়েট করে (ঐচ্ছিক, ডিফল্টভাবে বন্ধ; পরিবর্তন করার পর সার্ভার রিস্টার্ট করুন)।
হাই অ্যাভেইলেবিলিটি
একটি লোড ব্যালান্সারের পেছনে একাধিক Antimatter সার্ভার লাইসেন্স ছাড়াই ক্লাস্টার হিসেবে চলতে পারে। তাদের একই PostgreSQL ডেটাবেস, একই S3 ফাইল স্টোরেজ এবং ডেটাবেসে থাকা কনফিগারেশন (AM_CONFIG) শেয়ার করতে হবে। সিস্টেম কনসোল › এনভাইরনমেন্ট › হাই অ্যাভেইলবিলিটি (ClusterSettings) গিয়ে High Availability মোড সক্রিয় করুন (ClusterSettings.Enable) চালু করুন, প্রতিটি নোডকে একই ক্লাস্টারের নাম (ClusterSettings.ClusterName) দিন, এবং নোডগুলোর একে অপরের সাথে গসিপ পোর্ট 8074 TCP এবং UDP (ClusterSettings.GossipPort)-এ যোগাযোগ করার ব্যবস্থা করুন। নোডগুলো ডেটাবেসের মাধ্যমে একে অপরকে খুঁজে পায়। লোড ব্যালান্সারকে ওয়েবসকেট পাস করতে হবে। ক্লাস্টারে কলের জন্য rtcd ব্যবহার করুন।
ডাটা রিটেনশন
ডিফল্টভাবে Antimatter প্রতিটি মেসেজ এবং ফাইল চিরকাল সংরক্ষণ রাখে। পুরনোগুলো স্বয়ংক্রিয়ভাবে মুছে ফেলতে, সিস্টেম কনসোল › কমপ্লায়েন্স › ডেটা রিটেনশন পলিসিসমূহ-এ যান:
- গ্লোবাল রিটেনশন নীতি পুরো সার্ভারের জন্য চ্যানেল ও ডাইরেক্ট মেসেজ রিটেনশন এবং ফাইল রিটেনশন নির্ধারণ করে: চিরকাল সংরক্ষণ করুন, অথবা ঘণ্টা, দিন বা বছরের সংখ্যা (
DataRetentionSettings.EnableMessageDeletion,MessageRetentionHours,EnableFileDeletion,FileRetentionHours)। - কাস্টম রিটেনশন নীতিসমূহ নির্দিষ্ট কমিউনিটি এবং চ্যানেলের জন্য আলাদা সময়কাল নির্ধারণ করে।
- ডিলিট জবটি প্রতিদিন আপনার নির্বাচিত সময়ে চলে (
DataRetentionSettings.DeletionJobStartTime, ডিফল্ট02:00UTC)। এখনই ডিলিট জব চালান দিয়ে তা সাথে সাথে চালাতে পারেন, আর নীতি লগ-এ প্রতিটি রানে কী কী মুছে ফেলা হয়েছে তা তালিকাভুক্ত থাকে।
কমপ্লায়েন্স এক্সপোর্ট এবং অডিট লগ
- সিস্টেম কনসোল › কমপ্লায়েন্স › কমপ্লায়েন্স এক্সপোর্ট প্রতিদিন সকল মেসেজ এবং ফাইল এক্সপোর্ট করে (কমপ্লায়েন্স এক্সপোর্ট সক্রিয় করুন,
MessageExportSettings.EnableExport, ডিফল্ট অবস্থায় বন্ধ; কমপ্লায়েন্স এক্সপোর্ট সময়, ডিফল্ট01:00) এমন একটি ফরম্যাটে যা আর্কাইভিং সিস্টেম পড়তে পারে: CSV, Actiance XML, বা Global Relay (একটি zip ফাইল, অথবা SMTP-এর মাধ্যমে পাঠানো EML)।amctl compliance-exportকমান্ড লাইন থেকে এক্সপোর্ট চালিয়ে ডাউনলোড করে। - কমপ্লায়েন্স মনিটরিং (
ComplianceSettings) একটি ডিরেক্টরিতে দৈনিক রিপোর্ট লেখে। এটি একটি পুরনো মেকানিজম; Compliance Export ব্যবহার করা উত্তম। - অডিট লগিং (বেটা,
ExperimentalAuditSettings) প্রশাসনিক এবং নিরাপত্তা ঘটনা (সাইন-ইন, অনুমতি এবং সেটিংস পরিবর্তন) একটি আলাদা ফাইলে রেকর্ড করে। একটি সিঙ্গেল সাইন-অন রেকর্ডেও উল্লেখ থাকে যে সেই সাইন-ইনটি অ্যাকাউন্ট তৈরি করেছিল কিনা। - কাস্টম Terms of Service Antimatter ব্যবহারের আগে এবং আপনি শর্তাবলি পরিবর্তন করার পরেও সবাইকে আপনার শর্তাবলি স্বীকার করতে চাইতে থাকে।
সাধারণ সমস্যা
"সার্ভারে সংযোগ স্থাপন করা যাচ্ছে না", বা রিলোড করার পরে মাত্র ম্যাসেজ দেখা যায়
WebSocket-এর সংযোগ স্থাপন হচ্ছে না। চেক করুন যে রিভার্স প্রক্সি Upgrade এবং Connection হেডার পাস করছে (দেখুন nginx-এর উদাহরণ), এবং ব্রাউজারে দেখা ঠিকানাটির সাথে সাইটের URL-এর সম্পূর্ণ মিল আছে, https সহ।
"413 Request Entity Too Large" এর সাথে আপলোড ব্যর্থ হয়
প্রক্সি সাইজটি প্রত্যাখ্যান করছে। System Console › Environment › File Storage-এ সর্বোচ্চ ফাইল সাইজ (FileSettings.MaxFileSize, ডিফল্ট 100 MB)-এর কমপক্ষে সমান হওয়া পর্যন্ত nginx-এর client_max_body_size লিমিট বাড়ান।
লোকজন কল শুরু করতে পারে না, বা যোগ দিলেও কিছু শুনতে পায় না
যদি কেবল অ্যাডমিনরা কল শুরু করতে পারেন, তবে কলের Test mode বন্ধ করুন। যদি কোনো কমিউনিটির চ্যানেলসমূহে কল বোতাম না দেখা যায়, তবে সেই কমিউনিটিটি কমিউনিটি ধরনের, যেখানে কল ডিফল্টভাবে বন্ধ থাকে: সেই চ্যানেল বা কমিউনিটির অ্যাডমিনরা চ্যানেলে কল চালু করতে পারেন, অথবা কমিউনিটির ধরন পরিবর্তন করতে পারেন (দেখুন কোথায় কল চালু আছে)। যদি মানুষ যোগ দেয় কিন্তু কিছু শুনতে না পায়, তবে মিডিয়া পোর্ট ব্লক করা আছে অথবা সার্ভার ভুল ঠিকানা ঘোষণা করছে: 8443 UDP এবং TCP পোর্ট খুলুন, এবং NAT-এর পেছনে ICE Host Override সেট করুন। যেসব নেটওয়ার্ক উভয়ই ব্লক করে, সেগুলোর জন্য TURN সার্ভার প্রয়োজন। দেখুন কল এবং ভয়েস।
GIF পিকার খালি
System Console › Plugins › GIFs-এ GIF service URL (সাইটের compose ফাইলে http://gifs:8080/v2) এবং API কী (.env-এর GIFS_API_KEY) চেক করুন, এবং নিশ্চিত হোন যে gifs সার্ভিসটি চলছে: docker compose ps gifs।
কোনো ইমেইল আসছে না
System Console › Environment › SMTP-এ কানেকশন টেস্ট ব্যবহার করুন, নোটিফিকেশন ফ্রম ঠিকানা এখনো test@example.com না সেটা চেক করুন, এবং লগে smtp বা mail সার্চ করুন।
একটি অ্যাপ "Failed to start" দেখায়
লগে তার id খুঁজুন (docker compose logs antimatter | grep <app id>)। Plugin Management-এ এটি ডিসেবল করে আবার এনেবল করুন, যাতে রিস্টার্ট হয়।
সার্ভার শুরু হয় না
তার লগের শেষ অংশ পড়ুন। সবচেয়ে সাধারণ কারণ হলো ডাটাবেসে সংযোগ করা যাচ্ছে না (antimatter db ping দিয়ে AM_SQLSETTINGS_DATASOURCE চেক করুন), ডাটাবেস মাইগ্রেশন ব্যর্থ হয়েছে (আপগ্রেডের আগে নেওয়া ব্যাকআপ রিস্টোর করুন এবং এররটি রিপোর্ট করুন), অথবা লিসেন পোর্টটি অন্য কোথাও ব্যবহৃত হচ্ছে।
অ্যাডমিনিস্ট্রেটর অ্যাকাউন্ট থেকে লকআউট
সার্ভার থেকে লোকাল মোডে কোনো পাসওয়ার্ডের প্রয়োজন নেই:
docker compose exec antimatter amctl --local user change-password admin --password 'a-new-password'
docker compose exec antimatter amctl --local user resetmfa admin
docker compose exec antimatter amctl --local roles system-admin admin
বাগ রিপোর্ট করা
Antimatter community repository-তে একটি ইস্যু খুলুন, যেখানে ভার্সন, ইনস্টল করার পদ্ধতি, আপনি যা করেছেন এবং সংশ্লিষ্ট লগ লাইনগুলো উল্লেখ করুন। নিরাপত্তা সংক্রান্ত সমস্যাগুলো প্রাইভেটলি রিপোর্ট করুন, যেমন security policy-তে বর্ণিত আছে।