Cadangan dan peningkatan

Apa yang harus dicadangkan, cara memulihkannya di host baru, cara melakukan peningkatan, dan cara memindahkan server Mattermost atau satu komunitas ke Antimatter.

Apa yang harus dicadangkan

ApaDengan file compose situsDengan arsip rilisDengan paket .deb atau .rpm
Basis data: pesan, pengguna, komunitas, kanal, dan, dengan file compose situs, konfigurasivolume antimatter_postgres, melalui pg_dumpbasis data PostgreSQL Andabasis data PostgreSQL Anda
File yang diunggah, gambar, dan aplikasi yang terpasangvolume antimatter_files (penyimpanan S3)FileSettings.Directory, secara bawaan ./data//var/lib/antimatter
File konfigurasi(di dalam basis data)config/config.json/etc/antimatter/config/config.json
GIF dan stikervolume antimatter_gifsdirektori data layanan GIF/var/lib/gifs-server
Rahasia.env (dan compose.override.yaml)file lingkungan Anda/etc/antimatter/antimatter.env, /etc/gifs-server
Kunci enkripsi AI, yang mengenkripsi kunci koneksi modelAM_AI_ENCRYPTION_KEY di .env (disarankan), atau file ai-encryption.key di volume antimatter_dataAM_AI_ENCRYPTION_KEY, atau data/ai-encryption.keyAM_AI_ENCRYPTION_KEY di antimatter.env, atau /var/lib/antimatter/data/ai-encryption.key

Tanpa kunci enkripsi AI, server yang dipulihkan tidak dapat membaca kunci API koneksi modelnya, dan masing-masing harus diketik ulang. Simpan salinan kunci terpisah dari cadangan database, agar satu cadangan yang dicuri tidak memuat keduanya. Lihat Kunci enkripsi.

Basis data dan file harus bersama-sama: cadangkan keduanya pada saat yang sama, dan simpan salinannya di luar server. Nama volume diawali dengan nama proyek compose, antimatter (perintah docker volume ls akan menampilkannya).

Cadangkan

Jalankan dari direktori compose.yaml. Menghentikan Antimatter terlebih dahulu menghasilkan salinan yang sepenuhnya konsisten; cadangan yang diambil saat server berjalan biasanya tidak masalah, tetapi file yang diunggah selama proses pencadangan mungkin tidak ada di dalamnya.

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"

Jika Anda belum mengatur AM_AI_ENCRYPTION_KEY, file kunci server ada di volume data, yang disimpan oleh loop di atas bersama file-file lainnya. Lebih baik, letakkan isinya di .env seperti dijelaskan dalam Kunci enkripsi, dan simpan salinannya terpisah dari cadangan database.

Jalankan melalui cron untuk cadangan harian, dan salin direktori backups/ ke mesin lain. Simpan salinan .env dengan keamanan setara server: file tersebut menyimpan kata sandi server.

Untuk menyalin file yang diunggah per objek (misalnya ke penyimpanan S3 lain), gunakan alat baris perintah AWS dari layanan bucket:

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

Dengan arsip rilis, cadangkan database dengan pg_dump -Fc, dan direktori data/ dan config/ dengan alat Anda yang biasa digunakan (data/ menyimpan file kunci AI). Dengan paket, cadangkan database dengan cara yang sama, serta /etc/antimatter, /var/lib/antimatter, /etc/gifs-server dan /var/lib/gifs-server.

Pulihkan di host baru

Letakkan compose.yaml, .env yang tersimpan, dan file cadangan di direktori baru, kemudian:

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

Gunakan .env yang sama: penyimpanan dan database harus tetap menggunakan kata sandi yang sama, dan koneksi model membutuhkan kunci enkripsi AI yang sama. Jika host baru memiliki alamat lain, perbarui SITE_URL (dan DOMAIN).

Uji cadangan Anda dengan memulihkannya di mesin lain dari waktu ke waktu.

Tingkatkan

File Compose yang diunduh sebelum 17 Oktober 2026 tidak memiliki volume data: file kunci AI ada di dalam kontainer. Sebelum Anda menggunakan compose.yaml baru, dan jika .env tidak memiliki AM_AI_ENCRYPTION_KEY, simpan kunci yang dibuat server: echo "AM_AI_ENCRYPTION_KEY=$(docker compose exec -T antimatter cat /antimatter/data/ai-encryption.key)" >> .env. Jika perintah tidak menemukan file, berarti belum ada koneksi model yang menyimpan kunci.
  1. Ambil cadangan.
  2. Ubah tag gambar di .env (ANTIMATTER_IMAGE), jika Anda menguncinya, seperti yang direkomendasikan.
  3. Tarik dan mulai ulang:
    docker compose pull
    docker compose up -d
    docker compose logs -f antimatter

Saat dimulai, server akan memutakhirkan skema database (pantau prosesnya di log; server besar dapat memakan waktu beberapa menit) dan menginstal versi terbaru dari aplikasi bawaan dari image. Dengan arsip rilis: hentikan server, ganti semua isi kecuali config/, data/, logs/, plugins/, dan client/plugins/ dengan konten arsip baru, lalu mulai ulang. Dengan paket .deb atau .rpm, instal paket baru seperti dijelaskan dalam Memutakhirkan paket.

Pemutakhiran hanya dapat dilakukan ke versi yang lebih baru. Setelah server versi baru memutakhirkan database, versi yang lebih lama tidak dapat menggunakannya: untuk kembali ke versi lama, pulihkan cadangan yang dibuat sebelum pemutakhiran. Hal yang sama berlaku untuk perpindahan dari antimatter-next kembali ke antimatter.

Versi

Server Antimatter melaporkan versi baris Mattermost yang menjadi dasarnya (saat ini 12.0.0). Rilis di GitHub, beserta arsip dan paketnya, memiliki nomor versi tersendiri, yaitu seri 0.9.0 selama masa beta: antimatter version menampilkannya sebagai Nomor Build. Image dibangun ulang dari cabang main: antimatter-next setiap malam (tag nightly-<YYYYMMDD>), dan kedua image pada setiap perubahan (tag sha-<commit>). Kunci salah satu tag ini, lakukan pemutakhiran secara sengaja, dan catat tag sebelumnya agar Anda tahu backup mana yang sesuai.

Versi utama PostgreSQL

Berkas compose menggunakan postgres:17-alpine. Antimatter membutuhkan PostgreSQL 15 atau lebih baru. Versi utama PostgreSQL yang baru tidak dapat membaca direktori data versi sebelumnya: untuk berpindah ke versi baru, buat dump database, mulai versi baru pada volume baru, dan pulihkan dump ke dalamnya.

Memutakhirkan ke 0.9.0

Peluncuran pertama versi 0.9.0 (atau image yang dibangun dari 17 Oktober 2026 ke atas) akan melakukan beberapa perubahan satu kali pada data. Masing-masing hanya berjalan sekali dan dicatat dalam database. Perubahan ini membawa nilai yang masih menggunakan bawaan lama ke nilai bawaan baru, dan tidak mengubah apa pun yang dipilih oleh admin. Pantau prosesnya di log.

Jika Antimatter digunakan untuk perusahaan atau organisasi, atur Jenis komunitas baru menjadi Tempat kerja sebelum Anda memutakhirkan: AM_TEAMSETTINGS_DEFAULTCOMMUNITYKIND=workplace. Pemutakhiran akan memberikan setiap komunitas jenis yang dimiliki pengaturan ini pada saat itu, dan panggilan akan nonaktif secara bawaan di kanal komunitas bertipe Komunitas. Lihat Tempat kerja atau komunitas.
ApaPerubahan
Jenis komunitasSetiap komunitas memiliki jenis, Komunitas atau Tempat kerja: nilai dari Jenis komunitas baru (TeamSettings.DefaultCommunityKind) pada peluncuran pertama. Jenis yang sudah diatur akan dipertahankan. Admin komunitas dapat mengubah jenis komunitas mereka kemudian, di Pengaturan tim › Kanal › Jenis komunitas.
Siapa yang mengarsipkan kanalAnggota kanal tidak lagi mengarsipkan kanal tempat mereka berada: admin komunitas yang melakukannya. Di lingkungan kerja, admin kanal (pembuatnya dan orang-orang yang mereka jadikan admin) juga mengarsipkan kanal tersebut. Hal ini mengubah peran skema sistem; skema izin yang dibuat oleh administrator sistem untuk beberapa komunitas tetap dibiarkan apa adanya.
Peran Moderator dari preset tata letakPeran Moderators yang diperoleh komunitas dari preset tata letak kini memiliki Keluarkan orang, yang diperlukan untuk mengeluarkan dan menghapus orang. Hanya peran yang masih persis seperti yang dibuat preset yang berubah; peran yang telah diedit oleh seseorang dibiarkan apa adanya.
Peran dengan AdministratorPeran komunitas dengan sakelar Administrator yang aktif kini memiliki semua kemampuan yang dapat dilakukan oleh admin komunitas, sesuai dengan fungsi sakelar tersebut, bukan hanya pengaturan komunitas.
Batas anggotaMaks. Anggota per Komunitas (TeamSettings.MaxUsersPerTeam) berubah dari 50 (nilai bawaan lama) menjadi 0 (tanpa batas). Nilai lain tetap dipertahankan, begitu pula batas yang diatur dengan AM_TEAMSETTINGS_MAXUSERSPERTEAM.
Koneksi modelAdministrator sistem mendapatkan pengelolaan koneksi model, dan admin komunitas (serta peran dengan Administrator) mendapatkan pengelolaan koneksi model komunitas mereka sendiri. Layanan AI dari aplikasi Agents menjadi koneksi model untuk seluruh server, lihat di bawah.
Town Square menjadi GeneralKanal bawaan setiap komunitas diubah namanya dari town-square (Town Square) menjadi general (General). Kanal ini mempertahankan ID, anggota, pesan, dan pengaturannya, serta nama tampilan yang dipilih oleh admin. Tautan lama dan pencarian berdasarkan town-square tetap mengarah ke sana. Komunitas yang sudah memiliki kanal bernama general, bahkan yang diarsipkan, tetap mempertahankan town-square sebagai kanal bawaannya, begitu pula komunitas yang town-square-nya diarsipkan: log akan menamainya, dan admin mereka dapat mengubah nama kanal tersebut.
FavoritKategori bilah samping Favorit untuk semua orang diubah namanya menjadi Favourites, sesuai dengan tampilan antarmuka saat ini. Kategori yang dibuat orang dengan nama tersebut dibiarkan apa adanya.

Layanan aplikasi Agents

Pembaruan menyalin setiap layanan AI dari aplikasi Agents ke koneksi model yang berlaku di seluruh server, yang dibagikan ke setiap komunitas dan dapat digunakan oleh semua orang kecuali tamu (aktifkan Tamu juga untuk mengizinkan mereka). Kunci dienkripsi saat proses penyalinan, sehingga server memerlukan kunci enkripsi AI: pada kluster yang file-nya berada di S3, tetapkan AM_AI_ENCRYPTION_KEY terlebih dahulu, atau penyalinan akan menunggu hingga server dimulai ulang. Kemudian periksa Konsol Sistem › AI › Koneksi model:

  • Setiap koneksi mempertahankan ID layanannya, sehingga agen aplikasi dan set penerjemahan otomatis yang diatur ke layanan Agents tetap dapat menemukannya.
  • Layanan OpenAI, kompatibel OpenAI, Anthropic, Mistral, Cohere, dan Gemini menjadi koneksi ke endpoint kompatibel OpenAI (atau Anthropic) mereka. Layanan Azure menjadi koneksi ke endpoint kompatibel OpenAI dari resource tersebut: uji coba.
  • Layanan AWS Bedrock, Google Vertex AI, dan Cohere North, serta tipe yang tidak dikenal, ditandai Perlu perhatian, beserta alasannya. Kredensial cloud mereka tidak disalin: arahkan ke endpoint kompatibel OpenAI dari penyedia atau gerbang seperti LiteLLM, lalu simpan.
  • Layanan embedding menjadi model Embeddings dari koneksi dengan alamat dan kunci yang sama, atau koneksi tersendiri. Layanan transkripsi mendapatkan model whisper-1.
  • Jika penulisan ulang dan ringkasan belum memiliki koneksi, mereka akan menggunakan layanan dan model dari agen default aplikasi.

Pengaturan dan data milik aplikasi Agents sendiri dibiarkan seperti semula: agen-agennya tetap menggunakan layanannya.

Perubahan lain pada nilai default

  • Panggilan: Mode uji nonaktif dan Aktifkan video aktif secara default. Pilihan yang disimpan dalam konfigurasi akan dipertahankan. Panggilan juga mengikuti jenis komunitas (lihat Panggilan dan suara).
  • Menempatkan pesan di atas hanya untuk admin kanal, admin komunitas, dan moderator (dengan Kelola pesan); anggota pesan langsung atau grup masih dapat melakukannya.
  • Kanal yang diarsipkan dapat menerima anggota baru, yang membaca riwayatnya. Tidak ada yang dapat mengirim, bereaksi, atau mengubah apa pun di dalamnya.

Beralih dari Mattermost

Antimatter menggunakan skema database Mattermost dan menambahkan tabelnya sendiri, sehingga dapat mengambil alih database PostgreSQL dan file server Mattermost. Coba dulu pada salinannya:

  1. Cadangkan database Mattermost, penyimpanan file-nya (data/ atau bucket S3), dan config.json, lalu hentikan Mattermost.
  2. Pulihkan database ke PostgreSQL Antimatter, atau arahkan Antimatter ke salinannya (AM_SQLSETTINGS_DATASOURCE).
  3. Salin file ke penyimpanan Antimatter, pertahankan jalur mereka: ke bucket antimatter dengan alat S3, atau ke data/ dengan arsip rilis.
  4. Gunakan ulang pengaturan Anda: salin config.json, atau pindahkan ke database dengan amctl --local config migrate (lihat Pengaturan). Variabel lingkungan MM_ Anda tetap berfungsi; ganti namanya menjadi AM_ jika memungkinkan.
  5. Jalankan Antimatter dan pantau log saat database ditingkatkan. Kemudian periksa Konsol Sistem › Plugin › Manajemen Plugin. Antimatter menginstal build miliknya sendiri untuk Calls, Playbooks, Kanban (Papan), Agents, dan integrasi jika versi tersebut lebih baru daripada versi yang terpasang. Jika Mattermost memiliki versi yang lebih baru untuk salah satu dari aplikasi tersebut, hapus aplikasi itu dan mulai ulang Antimatter agar build miliknya sendiri terpasang.
  6. Atur ulang notifikasi push dengan proxy push Anda sendiri: Antimatter tidak pernah mengirim notifikasi ke layanan push Mattermost, baik yang uji coba maupun yang dihosting, karena layanan tersebut hanya mengirim ke aplikasi milik Mattermost. Selama Anda belum mengubah Server Notifikasi Push, server tidak mengirim notifikasi push (lihat Notifikasi push).

Antimatter tidak menghubungi layanan apa pun yang dijalankan oleh Mattermost, Inc. (lihat Koneksi ke layanan eksternal), bahkan jika konfigurasi Anda masih menyebutkan salah satu layanan tersebut:

  • server notifikasi push di Mattermost tetap disimpan dalam pengaturan tetapi tidak pernah digunakan;
  • alamat Mattermost untuk marketplace aplikasi (URL Marketplace) dan untuk pemberitahuan produk dikosongkan;
  • tautan unduhan aplikasi yang merupakan default Mattermost (Antimatter Apps Download Page Link, Tautan Unduhan Aplikasi Android, dan Tautan Unduhan Aplikasi iOS) diganti dengan halaman unduhan aplikasi Antimatter di GitHub; tautan yang Anda atur sendiri dipertahankan;
  • aplikasi Calls menggunakan server STUN publik Cloudflare alih-alih milik Mattermost, tanpa mengubah pengaturan yang tersimpan (lihat Calls);
  • periksa pembaruan keamanan dan pelaporan crash dihapus, begitu juga pengaturan Konsol Sistem-nya (Aktifkan Peringatan Keamanan, Aktifkan Diagnostik dan Pelaporan Error) serta halaman Pemberitahuan.

Socket mode lokal sekarang adalah /var/tmp/antimatter_local.socket; amctl juga mencoba /var/tmp/mattermost_local.socket yang lama. Mattermost hanya mendukung PostgreSQL dalam versi-versi terbarunya, dan Antimatter juga demikian: pindahkan database MySQL ke PostgreSQL terlebih dahulu. Kembali ke Mattermost setelah Antimatter meningkatkan database berarti memulihkan cadangan Mattermost Anda.

Ekspor dan impor data

Format ekspor massal memindahkan data antar server: seluruh server, beberapa komunitas, atau beberapa kanal, lengkap dengan lampiran, foto profil, dan emoji kustom jika Anda menginginkannya.

# 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

Pantau pekerjaan dengan amctl export job list dan amctl import job list. Untuk ekspor komunitas atau kanal, --imported-users wajib diisi: active jika orang-orang tersebut pindah ke server ini, inactive saat mengimpor ke server tempat mereka sudah memiliki akun, sehingga akun yang dibuat dari kecocokan yang tidak pasti tetap nonaktif sampai admin memeriksanya. --destination-team-name mengimpor ke komunitas yang sudah ada. Ekspor dan impor disimpan di penyimpanan server (ExportSettings.Directory, ImportSettings.Directory) selama 30 hari secara bawaan.

Di server itu sendiri, antimatter export bulk dan antimatter import bulk --apply melakukan hal yang sama dari file, tanpa menggunakan API.