ব্যাকআপ এবং আপগ্রেড

কী কী ব্যাকআপ করতে হবে, নতুন হোস্টে কীভাবে রিস্টোর করবেন, কীভাবে আপগ্রেড করবেন এবং Mattermost সার্ভার বা একটি নির্দিষ্ট কমিউনিটি Antimatter-এ কীভাবে স্থানান্তর করবেন।

কী কী ব্যাকআপ করতে হবে

কীসাইটের compose ফাইলের মাধ্যমেএকটি রিলিজ আর্কাইভের মাধ্যমে.deb বা .rpm প্যাকেজের মাধ্যমে
ডেটাবেস: ম্যাসেজ, ব্যবহারকারী, কমিউনিটি, চ্যানেলসমূহ এবং সাইটের compose ফাইলের মাধ্যমে কনফিগারেশনভলিউম antimatter_postgres, pg_dump এর মাধ্যমেআপনার PostgreSQL ডেটাবেসআপনার PostgreSQL ডেটাবেস
আপলোড করা ফাইল, ছবি এবং ইনস্টল করা অ্যাপসভলিউম antimatter_files (S3 স্টোরেজ)FileSettings.Directory, ডিফল্টরূপে ./data//var/lib/antimatter
কনফিগারেশন ফাইল(ডেটাবেসে)config/config.json/etc/antimatter/config/config.json
GIF এবং স্টিকারভলিউম antimatter_gifsGIF সার্ভিসের ডেটা ডিরেক্টরি/var/lib/gifs-server
সিক্রেটস.env (এবং compose.override.yaml)আপনার এনভাইরনমেন্ট ফাইল/etc/antimatter/antimatter.env, /etc/gifs-server
AI এনক্রিপশন কী, যা মডেল সংযোগের কীগুলো এনক্রিপ্ট করে.env-এ AM_AI_ENCRYPTION_KEY (প্রস্তাবিত), অথবা antimatter_data ভলিউমে ai-encryption.key ফাইলAM_AI_ENCRYPTION_KEY, অথবা data/ai-encryption.keyantimatter.env-এ AM_AI_ENCRYPTION_KEY, অথবা /var/lib/antimatter/data/ai-encryption.key

AI এনক্রিপশন কী ছাড়া একটি পুনরুদ্ধারকৃত সার্ভার তার মডেল সংযোগগুলোর API কী পড়তে পারে না, এবং প্রতিটি কী আবার টাইপ করতে হয়। ডেটাবেস ব্যাকআপ থেকে আলাদাভাবে কীটির একটি কপি রাখুন, যাতে একটি চুরি হওয়া ব্যাকআপে দুটোই থাকে না। এনক্রিপশন কী দেখুন।

ডেটাবেস এবং ফাইল একে অপরের সাথে সম্পর্কিত: একই সময়ে এগুলোর ব্যাকআপ নিন এবং কপিগুলো সার্ভারের বাইরে রাখুন। ভলিউমের নাম compose প্রজেক্টের নাম, antimatter দিয়ে শুরু হয় (docker volume ls এগুলোর তালিকা দেখায়)।

ব্যাকআপ নিন

compose.yaml এর ডিরেক্টরি থেকে। প্রথমে Antimatter বন্ধ করলে একটি সম্পূর্ণ সামঞ্জস্যপূর্ণ কপি পাওয়া যায়; চলমান অবস্থায় নেওয়া ব্যাকআপ সাধারণত ঠিক থাকে, তবে ব্যাকআপ নেওয়ার সময় আপলোড করা ফাইলগুলো সেটিতে অনুপস্থিত থাকতে পারে।

stamp=$(date +%Y%m%d-%H%M%S)
mkdir -p backups
docker compose stop antimatter
# Database
docker compose exec -T postgres pg_dump -U antimatter -d antimatter -Fc \
    > "backups/antimatter-db-$stamp.dump"
# File storage, GIF service and the data directory (the AI key file)
for v in files gifs data; do
    docker run --rm -v "antimatter_$v:/data:ro" -v "$PWD/backups:/backup" \
        alpine tar -czf "/backup/antimatter-$v-$stamp.tar.gz" -C /data .
done
docker compose start antimatter
# Secrets
cp .env "backups/env-$stamp"

আপনি যদি AM_AI_ENCRYPTION_KEY সেট করেন না, তবে সার্ভারের কী ফাইলটি data ভলিউমে থাকে, যা উপরের লুপ ফাইলগুলোর সাথে সেভ করে। আরও ভালো হবে, এনক্রিপশন কী অনুযায়ী এর কন্টেন্ট .env-এ রাখুন এবং ডাটাবেস ব্যাকআপের আলাদা জায়গায় এর একটি কপি সংরক্ষণ করুন।

দৈনিক ব্যাকআপের জন্য cron থেকে এটি চালান এবং backups/ ডিরেক্টরিটি অন্য একটি মেশিনে কপি করুন। .env এর কপিগুলো সার্ভারের মতোই নিরাপদ রাখুন: এতে এর পাসওয়ার্ড থাকে।

আপলোড করা ফাইলগুলো অবজেক্ট-বাই-অবজেক্ট কপি করতে (যেমন অন্য S3 স্টোরেজে), bucket সার্ভিসের AWS কমান্ড-লাইন টুল ব্যবহার করুন:

docker compose run --rm -v "$PWD/backups/files:/backup" bucket \
    "aws --endpoint-url http://files:9000 s3 sync s3://antimatter /backup"

একটি রিলিজ আর্কাইভের ক্ষেত্রে, pg_dump -Fc দিয়ে ডেটাবেস ব্যাকআপ করুন, এবং আপনার স্বাভাবিক টুল দিয়ে data/ ও config/ ডিরেক্টরি ব্যাকআপ করুন (data/-তে AI কী ফাইল থাকে)। প্যাকেজের ক্ষেত্রে, একইভাবে ডেটাবেস ব্যাকআপ করুন, এবং /etc/antimatter, /var/lib/antimatter, /etc/gifs-server ও /var/lib/gifs-server।

নতুন হোস্টে রিস্টোর করুন

compose.yaml, সংরক্ষিত .env এবং ব্যাকআপগুলো একটি নতুন ডিরেক্টরিতে রাখুন, তারপর:

stamp=20261016-030000          # the backup to restore
docker compose create           # creates the volumes, starts nothing
docker compose up -d postgres
docker compose exec -T postgres pg_restore -U antimatter -d antimatter --no-owner \
    < "backups/antimatter-db-$stamp.dump"
for v in files gifs data; do
    docker run --rm -v "antimatter_$v:/data" -v "$PWD/backups:/backup" \
        alpine tar -xzf "/backup/antimatter-$v-$stamp.tar.gz" -C /data
done
docker compose up -d

একই .env ব্যবহার করুন: স্টোরেজ এবং ডেটাবেসকে তাদের আগের পাসওয়ার্ডগুলো রাখতে হবে, এবং মডেল সংযোগগুলোর একই AI এনক্রিপশন কী প্রয়োজন। যদি নতুন হোস্টের অন্য ঠিকানা থাকে, তবে SITE_URL (এবং DOMAIN) আপডেট করুন।

কখনো কখনো অন্য একটি মেশিনে রিস্টোর করে আপনার ব্যাকআপগুলোর পরীক্ষা করুন।

আপগ্রেড

১৭ অক্টোবর ২০২৬-এর আগে ডাউনলোড করা Compose ফাইলে data ভলিউম ছিল না: AI কী ফাইলটি কন্টেইনারের মধ্যে ছিল। নতুন compose.yaml ব্যবহার করার আগে, এবং যদি .env-এ AM_AI_ENCRYPTION_KEY না থাকে, তবে সার্ভার তৈরি করা কীটি সেভ করুন: echo "AM_AI_ENCRYPTION_KEY=$(docker compose exec -T antimatter cat /antimatter/data/ai-encryption.key)" >> .env। যদি কমান্ডটি কোনো ফাইল না খুঁজে পায়, তবে এখনও কোনো মডেল কানেকশন কী সেভ করেনি।
  1. একটি ব্যাকআপ নিন।
  2. যদি আপনি একটি পিন করেন (যেমনটি পরামর্শিত), তবে .env এ ইমেজ ট্যাগ (ANTIMATTER_IMAGE) পরিবর্তন করুন।
  3. পুল এবং রিস্টার্ট করুন:
    docker compose pull
    docker compose up -d
    docker compose logs -f antimatter

শুরুর সময় সার্ভার ডেটাবেস স্কিমা আপগ্রেড করে (লগে এটি অনুসরণ করুন; একটি বড় সার্ভারের জন্য কয়েক মিনিট লাগতে পারে) এবং ইমেজ থেকে বান্ডল করা অ্যাপগুলোর নতুন ভার্সন ইনস্টল করে। একটি রিলিজ আর্কাইভের ক্ষেত্রে: সার্ভার থামান, config/, data/, logs/, plugins/ এবং client/plugins/ ছাড়া সবকিছু নতুন আর্কাইভের কনটেন্ট দিয়ে প্রতিস্থাপন করুন, এবং আবার চালু করুন। .deb বা .rpm প্যাকেজের ক্ষেত্রে, প্যাকেজ আপগ্রেড যেভাবে ব্যাখ্যা করে, সেই অনুযায়ী নতুন প্যাকেজ ইনস্টল করুন।

আপগ্রেড শুধুমাত্র সামনের দিকে যায়। একবার নতুন সার্ভার ডাটাবেস আপগ্রেড করে ফেললে, পুরনো ভার্সনটি আর তা ব্যবহার করতে পারে না: ফিরে যেতে হলে আপগ্রেডের আগে নেওয়া ব্যাকআপটি রিস্টোর করুন। antimatter-next থেকে antimatter তে ফিরে যাওয়ার ক্ষেত্রেও একই নিয়ম প্রযোজ্য।

ভার্সনসমূহ

Antimatter-এর সার্ভার Mattermost-এর কোন ভার্সনের ওপর ভিত্তি করে তৈরি তা রিপোর্ট করে (বর্তমানে 12.0.0)। GitHub-এর রিলিজসমূহ, তাদের আর্কাইভ এবং প্যাকেজসহ, তাদের নিজস্ব ভার্সন নম্বর রয়েছে; বেটা চলাকালীন এটি 0.9.0 সিরিজে রয়েছে: antimatter version এটি বিল্ড নম্বর হিসেবে দেখায়। ইমেজগুলো main ব্রাঞ্চ থেকে পুনরায় তৈরি করা হয়: প্রতি রাতে antimatter-next (ট্যাগ nightly-<YYYYMMDD>), এবং প্রতিটি পরিবর্তনে উভয় ইমেজ (ট্যাগ sha-<commit>)। এই ট্যাগগুলোর একটি পিন করুন, উদ্দেশ্যমূলকভাবে আপগ্রেড করুন, এবং কোন ব্যাকআপ কোনটির সাথে যায় তা জানতে আগের ট্যাগটি নোট করে রাখুন।

PostgreSQL মেজর ভার্সনসমূহ

কম্পোজ ফাইলে postgres:17-alpine ব্যবহার করা হয়। Antimatter-এর জন্য PostgreSQL 15 বা তার নতুন ভার্সন প্রয়োজন। PostgreSQL-এর একটি নতুন মেজর ভার্সন পূর্বের ভার্সনের ডাটা ডিরেক্টরি পড়তে পারে না: একে সরিয়ে নিতে ডাটাবেস ডাম্প করুন, নতুন ভার্সনটি একটি নতুন ভলিউমে চালু করুন এবং ডাম্পটি সেখানে রিস্টোর করুন।

0.9.0-এ আপগ্রেড করা

0.9.0 ভার্সনের (অথবা ১৭ অক্টোবর ২০২৬ বা তার পরে তৈরি ইমেজের) প্রথম চালু হওয়া ডেটায় কিছু এককালীন পরিবর্তন করে। প্রতিটি পরিবর্তন একবারই চলে এবং ডেটাবেজে রেকর্ড করা হয়। এগুলো পুরনো ডিফল্টে যা ছিল তা নতুন ডিফল্টে নিয়ে আসে, এবং অ্যাডমিনিস্ট্রেটর যে নির্বাচন করেছেন তা অপরিবর্তিত রাখে। লগে এগুলোর অনুসরণ করুন।

যদি Antimatter কোনো কোম্পানি বা সংস্থার জন্য হয়, আপগ্রেড করার আগে Kind of new communities সেটিংটি Workspace করে দিন: AM_TEAMSETTINGS_DEFAULTCOMMUNITYKIND=workplace। আপগ্রেডের সময় এই সেটিংটি যে মান বহন করে, সেই অনুযায়ী প্রতিটি কমিউনিটির ধরন নির্ধারণ করা হয়। Guild ধরনের কমিউনিটির চ্যানেলসমূহে কল ডিফল্টভাবে বন্ধ থাকে। আরও জানতে দেখুন Guild or workspace।
কীপরিবর্তন
কমিউনিটির ধরনপ্রতিটি কমিউনিটির একটি ধরন থাকে, Guild অথবা Workspace: প্রথমবার চালু করার সময় Kind of new communities (TeamSettings.DefaultCommunityKind) সেটিংটির মান অনুযায়ী এটি নির্ধারিত হয়। আগে থেকেই নির্ধারিত থাকলে সেই ধরনই বজায় থাকে। পরবর্তীতে কমিউনিটি অ্যাডমিনরা Community settings › General থেকে তাদের কমিউনিটির ধরন পরিবর্তন করতে পারেন।
কে চ্যানেল আর্কাইভ করেচ্যানেলের সদস্যরা আর তাদের চ্যানেলসমূহ আর্কাইভ করতে পারবেন না; এটি এখন কমিউনিটি অ্যাডমিনরা করবেন। একটি ওয়ার্কস্পেসে, চ্যানেলের অ্যাডমিনরাও (যারা এটি তৈরি করেছেন এবং যাদের তারা অ্যাডমিন করেছেন) এটি আর্কাইভ করতে পারেন। এটি সিস্টেম স্কিমের ভূমিকা পরিবর্তন করে; সিস্টেম অ্যাডমিনরা কিছু কমিউনিটির জন্য যে পারমিশন স্কিম তৈরি করেছেন, সেগুলো অপরিবর্তিত থাকে।
লেআউট প্রিসেটের মডারেটর ভূমিকাকমিউনিটি যে লেআউট প্রিসেট থেকে মডারেটর ভূমিকা পেয়েছিল, সেটিতে লোকজনকে সরানো যোগ করা হয়, যা লোকজনকে সময়সীমা দেওয়া এবং সরানোর জন্য প্রয়োজন। শুধুমাত্র সেই ভূমিকাগুলো পরিবর্তিত হয় যা এখনও প্রিসেটের মতো ঠিক আছে; কেউ যদি কোনো ভূমিকা সম্পাদনা করে থাকে তবে তা অপরিবর্তিত থাকে।
অ্যাডমিনিস্ট্রেটর সহ ভূমিকাঅ্যাডমিনিস্ট্রেটর সুইচ চালু থাকা কমিউনিটি রোল এখন কমিউনিটির অ্যাডমিনরা যা করতে পারেন, তাই সবকিছুই করতে পারে, শুধু কমিউনিটির সেটিংস নয়।
সদস্য সীমাপ্রতিটি কমিউনিটির সর্বোচ্চ সদস্য সংখ্যা (TeamSettings.MaxUsersPerTeam) ৫০ (পুরোনো ডিফল্ট) থেকে ০ (কোনো সীমা নেই) হয়ে যায়। অন্য যেকোনো মান অপরিবর্তিত থাকে, এবং AM_TEAMSETTINGS_MAXUSERSPERTEAM দিয়ে সেট করা সীমাও অপরিবর্তিত থাকে।
মডেল কানেকশনসিস্টেম অ্যাডমিনিস্ট্রেটররা মডেল কানেকশনের ব্যবস্থাপনা পান, এবং কমিউনিটি অ্যাডমিনরা (এবং অ্যাডমিনিস্ট্রেটর রোলসহ) তাদের নিজস্ব কমিউনিটির মডেল কানেকশনের ব্যবস্থাপনা পান। এজেন্টস অ্যাপের AI সার্ভিসগুলো সার্ভার-ওয়াইড মডেল কানেকশন হয়ে যায়, নিচে দেখুন।
টোয়ন স্কয়ার জেনারেল হয়ে যায়প্রতিটি কমিউনিটির ডিফল্ট চ্যানেলের নাম town-square (টোয়ন স্কয়ার) থেকে general (জেনারেল) হয়ে যায়। এটি তার আইডি, সদস্য, ম্যাসেজ এবং সেটিংস, এবং অ্যাডমিনদের বেছে নেওয়া ডিসপ্লে নাম ধরে রাখে। পুরোনো লিংক এবং town-square দিয়ে সার্চ এখনও এখানে নিয়ে যায়। এমন একটি কমিউনিটি যার আগে থেকেই general নামের একটি চ্যানেল আছে (আরকাইভ করা হলেও), তার town-square ডিফল্ট চ্যানেল হিসেবে থাকে; এবং এমন একটি কমিউনিটির town-square আরকাইভ করা থাকলেও তাই হয়: লগে তাদের নাম উল্লেখ করা থাকে, এবং তাদের অ্যাডমিনরা চ্যানেলগুলোর নাম পরিবর্তন করতে পারেন।
ফেভারিটসসবার ফেভারিটস সাইডবার ক্যাটাগরির নাম Favourites হয়ে যায়, যেমন ইন্টারফেস এখন দেখায়। যেসব ক্যাটাগরি মানুষ এই নাম দিয়ে তৈরি করেছে, সেগুলো অপরিবর্তিত থাকে।

এজেন্টস অ্যাপের সার্ভিস

আপগ্রেডের সময় Agents অ্যাপের প্রতিটি AI সার্ভার-ব্যাপী একটি মডেল কানেকশনে কপি করা হয়, যা সব কমিউনিটির সাথে শেয়ার করা এবং অতিথি ছাড়া সবাই ব্যবহার করতে পারেন (অতিথিদের ব্যবহারের সুযোগ দিতে Guests too চালু করুন)। কপি করার সময় কীগুলো এনক্রিপ্ট করা হয়, তাই সার্ভারের AI এনক্রিপশন কী প্রয়োজন: S3-এ ফাইল থাকা ক্লাস্টারের ক্ষেত্রে প্রথমে AM_AI_ENCRYPTION_KEY সেট করুন, নতুবা কপিটি পরবর্তী স্টার্টের জন্য অপেক্ষা করবে। এরপর System Console › AI › Connections and agents পরীক্ষা করুন:

  • প্রতিটি কানেকশন তার সার্ভিসের আইডি ধরে রাখে, তাই অ্যাপের এজেন্ট এবং এজেন্টস সার্ভিসে সেট করা অটো-ট্রান্সলেসন এখনও তা খুঁজে পায়।
  • OpenAI, OpenAI-সম্পাদিত, Anthropic, Mistral, Cohere এবং Gemini সার্ভিসগুলো তাদের OpenAI-সম্পাদিত (বা Anthropic) এন্ডপয়েন্টে কানেকশন হয়ে যায়। একটি Azure সার্ভিস রিসোর্সের OpenAI-সম্পাদিত এন্ডপয়েন্টে কানেকশন হয়ে যায়: এটি পরীক্ষা করুন।
  • AWS Bedrock, Google Vertex AI এবং Cohere North সার্ভিসসমূহ, এবং অজানা টাইপসমূহ Needs attention হিসেবে চিহ্নিত হয়, কারণসহ। এদের ক্লাউড ক্রেডেনশিয়াল কপি করা হয় না: প্রোভাইডারের OpenAI-compatible endpoint-এ বা LiteLLM-এর মতো একটি গেটওয়ে-তে ইঙ্গিত করুন, তারপর সেভ করুন।
  • এমবেডিং সার্ভিসটি একই ঠিকানা এবং কী সহ সংযোগের Embeddings মডেল হয়ে যায়, অথবা নিজস্ব একটি সংযোগ। ট্রান্সক্রিপশন সার্ভিসটি whisper-1 মডেল পায়।
  • যখন রিরাইট এবং রিক্যাপসমূহের কোনো সংযোগ নেই, তখন তারা অ্যাপের ডিফল্ট এজেন্টের সার্ভিস এবং মডেল পায়।

Agents অ্যাপের এজেন্টসমূহ

সার্ভিসগুলোর পর, আপগ্রেড Agents অ্যাপের (যা এখন AI chat অ্যাপ) প্রতিটি এজেন্টকে একই অ্যাকাউন্টে একটি সার্ভার-ব্যাপী agent এ রূপান্তর করে: এর কানেকশন (সার্ভিস থেকে কপি করাটি), মডেল, নির্দেশনা, রিজনিং, টুল টার্নস এবং কে এটি ব্যবহার করতে পারবেন। এরপর সার্ভার এই এজেন্টদের পক্ষে উত্তর দেয়। যেসব ক্ষেত্রে অ্যাপটি এমনভাবে এজেন্টকে সীমাবদ্ধ করেছিল যা সার্ভারের এজেন্টরা প্রকাশ করে না (যে চ্যানেলগুলোতে এটি উত্তর দিত, ব্লক লিস্ট, অ্যাট্রিবিউট-ভিত্তিক অ্যাক্সেস), সেই এজেন্টগুলোকে সেই চ্যানেলসমূহের সদস্যদের জন্য সংকুচিত করা হয়, অথবা কারও জন্যই নয়, এবং এগুলোকে 'মনোযোগ প্রয়োজন' হিসেবে চিহ্নিত করা হয়, যেমনটি করা হয় সেই এজেন্টের ক্ষেত্রে যার সার্ভিসটি কানেকশনে রূপান্তরিত হয়নি। এগুলো System Console › AI › Connections and agents থেকে পরীক্ষা করুন। অ্যাপের অন্যান্য সেটিংস অপরিবর্তিত থাকে।

ডিফল্টের অন্যান্য পরিবর্তন

  • কলসমূহ: Test mode বন্ধ এবং Enable video ডিফল্টভাবে চালু। কনফিগারেশনে সেভ করা একটি পছন্দ সংরক্ষিত থাকে। কলসমূহ কমিউনিটির ধরন অনুসরণ করে (দেখুন কলসমূহ এবং ভয়েস)।
  • ম্যাসেজসমূহ উপরে রাখা চ্যানেলের অ্যাডমিনসমূহ, কমিউনিটির অ্যাডমিন এবং মডারেটরদের (যাদের ম্যাসেজ পরিচালনা আছে) জন্য; ডাইরেক্ট বা গ্রুপ ম্যাসেজের সদস্যরা এখনও তা করতে পারে।
  • আর্কাইভ করা চ্যানেলে নতুন সদস্য যোগ হতে পারে, যারা তাদের ইতিহাস পড়তে পারে। কেউ তাদের মধ্যে পোস্ট, রিঅ্যাকশন বা কিছু পরিবর্তন করতে পারে না।

Mattermost থেকে সরানো

Antimatter Mattermost-এর ডাটাবেস স্কিমা ব্যবহার করে এবং নিজের টেবিল যোগ করে, তাই এটি Mattermost সার্ভারের PostgreSQL ডাটাবেস এবং ফাইলগুলি নিতে পারে। প্রথমে একটি কপিতে এটি চেষ্টা করুন:

  1. Mattermost ডাটাবেস, এর ফাইল স্টোরেজ (data/ বা S3 বাক্স) এবং config.json ব্যাকআপ করুন, তারপর Mattermost বন্ধ করুন।
  2. ডাটাবেসটি Antimatter-এর PostgreSQL-এ রিস্টোর করুন, বা Antimatter-কে এর একটি কপিতে নির্দেশ করুন (AM_SQLSETTINGS_DATASOURCE)।
  3. ফাইলগুলি Antimatter-এর স্টোরেজে কপি করুন, তাদের পাথ বজায় রেখে: S3 টুল দিয়ে antimatter বাক্সে, বা রিলিজ আর্কাইভের ক্ষেত্রে data/ ডিরেক্টরিতে।
  4. আপনার সেটিংস পুনর্ব্যবহার করুন: config.json কপি করুন, বা amctl --local config migrate দিয়ে এটি ডাটাবেসে সরান (দেখুন কনফিগারেশন)। আপনার MM_ এনভায়রনমেন্ট ভেরিয়েবলগুলি কাজ করতে থাকে; সুবিধামতো এগুলির নাম AM_ হিসেবে পরিবর্তন করুন।
  5. Antimatter চালু করুন এবং ডেটাবেস আপগ্রেড করার সময় লগ ফলো করুন। এরপর সিস্টেম কনসোল › প্লাগইনসমূহ › প্লাগইন ম্যানেজমেন্ট পরীক্ষা করুন। ইনস্টল করা সংস্করণের চেয়ে নতুন হলে Antimatter Calls, AI chat এবং integrations-এর নিজস্ব বিল্ড ইনস্টল করে, এবং Mattermost সার্ভারে আগে থেকেই Playbooks বা Kanban (Boards) ইনস্টল করা থাকলে সেগুলোরও নিজস্ব বিল্ড ইনস্টল করে (নতুন সার্ভারে আর কোনোটিই বান্ডেল করা থাকে না: Bundled apps দেখুন)। যদি Mattermost-এর কাছে তাদের কোনোটির নতুন সংস্করণ থাকে, তবে সেই অ্যাপটি সরিয়ে Antimatter রিস্টার্ট করুন, যাতে Antimatter-এর নিজস্ব বিল্ড ইনস্টল হয়।
  6. আপনার নিজস্ব পুশ প্রক্সি দিয়ে পুশ নোটিফিকেশন আবার সেটআপ করুন: Antimatter কখনোই Mattermost-এর পুশ সার্ভিসে নোটিফিকেশন পাঠায় না, পরীক্ষামূলক বা হোস্টেড, যা শুধুমাত্র Mattermost-এর নিজস্ব অ্যাপসমূহে ডেলিভারি করে। আপনি পুশ নোটিফিকেশন সার্ভার পরিবর্তন না করা পর্যন্ত, সার্ভার কোনো পুশ নোটিফিকেশন পাঠায় না (দেখুন পুশ নোটিফিকেশন)।

Antimatter Mattermost, Inc. দ্বারা পরিচালিত কোনো সার্ভিসের সাথে যোগাযোগ করে না (দেখুন Connections to outside services), এমনকি আপনার কনফিগারেশনে যদি এখনও একটি সার্ভিসের নাম থাকে:

  • Mattermost-এর একটি পুশ নোটিফিকেশন সার্ভার সেটিংসে রাখা থাকে কিন্তু কখনোই ব্যবহার করা হয় না;
  • Mattermost-এর অ্যাপ মার্কেটপ্লেসের (মার্কেটপ্লেস URL) এবং প্রোডাক্ট নোটিশের ঠিকানা খালি করা হয়;
  • Mattermost-এর ডিফল্ট ছিল এমন অ্যাপ ডাউনলোড লিংকসমূহ (Antimatter Apps Download Page Link, Android অ্যাপ ডাউনলোড লিংক এবং iOS অ্যাপ ডাউনলোড লিংক) Antimatter-এর অ্যাপসমূহের GitHub-এর ডাউনলোড পেজ দিয়ে প্রতিস্থাপিত হয়; আপনি নিজে সেট করা লিংকসমূহ সংরক্ষিত থাকে;
  • Calls অ্যাপটি Mattermost-এর পরিবর্তে Cloudflare-এর পাবলিক STUN সার্ভার ব্যবহার করে, সংরক্ষিত সেটিং পরিবর্তন না করে (দেখুন Calls);
  • সিকিউরিটি আপডেট চেক এবং ক্র্যাশ রিপোর্টিং সরিয়ে ফেলা হয়েছে, এবং তাদের System Console সেটিংস (Enable Security Alerts, Enable Diagnostics and Error Reporting) ও নোটিশসমূহ পেজও।

লোকাল মোড সকেট এখন /var/tmp/antimatter_local.socket; amctl পুরনো /var/tmp/mattermost_local.socketও চেষ্টা করে। Mattermost শুধুমাত্র তার সাম্প্রতিক ভার্সনগুলোতে PostgreSQL সাপোর্ট করে, এবং Antimatter-ও তাই: প্রথমে MySQL ডাটাবেসটি PostgreSQL-এ সরিয়ে নিন। Antimatter ডাটাবেস আপগ্রেড করার পর Mattermost-এ ফিরে যাওয়া মানে আপনার Mattermost ব্যাকআপ রিস্টোর করা।

ডেটা এক্সপোর্ট এবং ইমপোর্ট

বাল্ক এক্সপোর্ট ফরম্যাট সার্ভারগুলোর মধ্যে ডেটা স্থানান্তর করে: পুরো সার্ভার, কিছু কমিউনিটি, বা কিছু চ্যানেল, চাইলে আটাচমেন্টসমূহ, প্রোফাইল ছবি এবং কাস্টম ইমোজিসহ।

# on the source server
amctl export create --team-name design --include-profile-pictures
amctl export list
amctl export download <export file> design.zip
# on the destination server
amctl import upload design.zip
amctl import list available
amctl import process <uploaded file> --imported-users active

জবগুলো দেখতে amctl export job list এবং amctl import job list ব্যবহার করুন। কমিউনিটি বা চ্যানেল এক্সপোর্টের জন্য --imported-users আবশ্যক: লোকজন এই সার্ভারে চলে গেলে active, আর এমন সার্ভারে ইমপোর্ট করার জন্য যেখানে তাদের ইতিমধ্যে অ্যাকাউন্ট আছে সেখানে inactive, যাতে অনিশ্চিত ম্যাচ থেকে তৈরি অ্যাকাউন্টগুলো অ্যাক্টিভ না হয় যতক্ষণ না একজন অ্যাডমিন তা যাচাই করে নেয়। --destination-team-name ব্যবহার করে একটি বিদ্যমান কমিউনিটিতে ইমপোর্ট করা যায়। ডিফল্টভাবে এক্সপোর্ট এবং ইমপোর্টগুলো সার্ভারের স্টোরেজে (ExportSettings.Directory, ImportSettings.Directory) ৩০ দিন পর্যন্ত রাখা থাকে।

সার্ভারের নিজের ওপর, antimatter export bulk এবং antimatter import bulk --apply ফাইল থেকে একই কাজটি করে, API ছাড়াই।

এক্সপোর্টে চ্যানেলের লাইনে তার টাইপ এবং সেটিংস থাকে (am_type, am_mode, am_root_posts এবং ফোরামের ক্ষেত্রে am_forum_view); এগুলো ছাড়া লাইনটি একটি সাধারণ টেক্সট Chat চ্যানেল হিসেবে ইমপোর্ট হয়। একটি ফোরাম চ্যানেলে রুট পোস্টের লাইনে props.am_thread_title প্রয়োজন, যা থ্রেডের শিরোনাম; এটি না থাকলে সেই লাইনটি ইমপোর্ট ব্যর্থ হয়।