Sao lưu và nâng cấp
Những gì cần sao lưu, cách khôi phục trên máy chủ mới, cách nâng cấp, và cách di chuyển máy chủ Mattermost hoặc một cộng đồng riêng lẻ sang Antimatter.
Những gì cần sao lưu
| Nội dung | Với tệp compose của trang web | Với một tệp lưu trữ phát hành | Với gói .deb hoặc .rpm |
|---|---|---|---|
| Cơ sở dữ liệu: tin nhắn, người dùng, cộng đồng, kênh và, với tệp compose của trang web, cấu hình | thể tích antimatter_postgres, thông qua pg_dump | cơ sở dữ liệu PostgreSQL của bạn | cơ sở dữ liệu PostgreSQL của bạn |
| Tệp đã tải lên, hình ảnh và các ứng dụng đã cài đặt | thể tích antimatter_files (lưu trữ S3) | FileSettings.Directory, mặc định là ./data/ | /var/lib/antimatter |
| Tệp cấu hình | (trong cơ sở dữ liệu) | config/config.json | /etc/antimatter/config/config.json |
| GIF và sticker | thể tích antimatter_gifs | thư mục dữ liệu của dịch vụ GIF | /var/lib/gifs-server |
| Thông tin bí mật | .env (và compose.override.yaml) | tệp môi trường của bạn | /etc/antimatter/antimatter.env, /etc/gifs-server |
| Khóa mã hóa AI, dùng để mã hóa các khóa của kết nối mô hình | AM_AI_ENCRYPTION_KEY trong .env (khuyến nghị), hoặc tệp ai-encryption.key trong volume antimatter_data | AM_AI_ENCRYPTION_KEY, hoặc data/ai-encryption.key | AM_AI_ENCRYPTION_KEY trong antimatter.env, hoặc /var/lib/antimatter/data/ai-encryption.key |
Nếu không có khóa mã hóa AI, máy chủ được khôi phục sẽ không thể đọc các khóa API của kết nối mô hình, và mỗi khóa phải được nhập lại. Hãy lưu một bản sao của khóa riêng biệt khỏi các bản sao lưu cơ sở dữ liệu, để một bản sao lưu bị đánh cắp không chứa cả hai. Xem Khóa mã hóa.
Cơ sở dữ liệu và tệp phải đi cùng nhau: hãy sao lưu chúng cùng một lúc và giữ các bản sao ngoài máy chủ. Tên thể tích bắt đầu bằng tên dự án compose, antimatter (docker volume ls liệt kê chúng).
Sao lưu
Từ thư mục của compose.yaml. Việc dừng Antimatter trước đó sẽ cho bản sao hoàn toàn nhất quán; bản sao lưu được thực hiện trong khi nó đang chạy thường là ổn, nhưng các tệp được tải lên trong quá trình sao lưu có thể bị thiếu trong đó.
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"
Nếu bạn chưa đặt AM_AI_ENCRYPTION_KEY, tệp khóa của máy chủ nằm trong volume data, và vòng lặp trên sẽ lưu tệp này cùng với các tệp khác. Tốt hơn, hãy đặt nội dung của tệp vào .env như Khóa mã hóa đã giải thích, và lưu một bản sao riêng biệt khỏi các bản sao lưu cơ sở dữ liệu.
Chạy nó từ cron để sao lưu hàng ngày và sao chép thư mục backups/ sang máy khác. Giữ các bản sao của .env an toàn như máy chủ: chúng chứa mật khẩu của nó.
Để sao chép các tệp đã tải lên từng đối tượng (ví dụ sang lưu trữ S3 khác), hãy sử dụng công cụ dòng lệnh AWS của dịch vụ bucket:
docker compose run --rm -v "$PWD/backups/files:/backup" bucket \
"aws --endpoint-url http://files:9000 s3 sync s3://antimatter /backup"
Với tệp lưu trữ phát hành, hãy sao lưu cơ sở dữ liệu bằng pg_dump -Fc, và các thư mục data/ và config/ bằng các công cụ thông thường của bạn (data/ chứa tệp khóa AI). Với các gói, hãy sao lưu cơ sở dữ liệu theo cách tương tự, cùng với /etc/antimatter, /var/lib/antimatter, /etc/gifs-server và /var/lib/gifs-server.
Khôi phục trên máy chủ mới
Đặt compose.yaml, .env đã lưu và các bản sao lưu vào một thư mục mới, sau đó:
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
Sử dụng cùng một tệp .env: bộ lưu trữ và cơ sở dữ liệu phải giữ nguyên mật khẩu mà chúng đã có, và các kết nối mô hình cần cùng một khóa mã hóa AI. Nếu máy chủ mới có địa chỉ khác, hãy cập nhật SITE_URL (và DOMAIN).
Kiểm tra các bản sao lưu của bạn bằng cách khôi phục chúng trên máy khác theo thời gian.
Nâng cấp
data: tệp khóa AI nằm trong container. Trước khi sử dụng tệp compose.yaml mới, và nếu .env không có AM_AI_ENCRYPTION_KEY, hãy lưu khóa do máy chủ tạo: echo "AM_AI_ENCRYPTION_KEY=$(docker compose exec -T antimatter cat /antimatter/data/ai-encryption.key)" >> .env. Nếu lệnh không tìm thấy tệp, nghĩa là chưa có kết nối mô hình nào đã lưu khóa.- Thực hiện sao lưu.
- Thay đổi thẻ hình ảnh trong
.env(ANTIMATTER_IMAGE), nếu bạn cố định một thẻ, như được khuyến nghị. - Kéo và khởi động lại:
docker compose pull docker compose up -d docker compose logs -f antimatter
Khi khởi động, máy chủ sẽ nâng cấp lược đồ cơ sở dữ liệu (theo dõi tiến trình trong nhật ký; máy chủ lớn có thể mất vài phút) và cài đặt các phiên bản mới hơn của các ứng dụng được đóng gói từ ảnh. Với bản lưu trữ phát hành: dừng máy chủ, thay thế mọi thứ ngoại trừ config/, data/, logs/, plugins/ và client/plugins/ bằng nội dung của bản lưu trữ mới, sau đó khởi động lại. Với gói .deb hoặc .rpm, hãy cài đặt gói mới như được mô tả trong Nâng cấp gói.
antimatter-next trở lại antimatter.Phiên bản
Máy chủ Antimatter báo cáo phiên bản của dòng Mattermost mà nó dựa trên (hiện tại là 12.0.0). Các bản phát hành trên GitHub, kèm theo các bản lưu trữ và gói, có số phiên bản riêng của chúng, thuộc dòng 0.9.0 trong giai đoạn beta: lệnh antimatter version hiển thị nó dưới dạng Mã phiên bản. Các ảnh được xây dựng lại từ nhánh main: antimatter-next mỗi đêm (thẻ nightly-<YYYYMMDD>), và cả hai ảnh cho mỗi thay đổi (thẻ sha-<commit>). Hãy cố định một trong những thẻ này, nâng cấp một cách có chủ đích và ghi chú lại thẻ trước đó để bạn biết bản sao lưu nào tương ứng với nó.
Các phiên bản chính của PostgreSQL
Tệp compose sử dụng postgres:17-alpine. Antimatter yêu cầu PostgreSQL 15 hoặc mới hơn. Một phiên bản chính mới của PostgreSQL không thể đọc thư mục dữ liệu của phiên bản trước đó: để chuyển sang phiên bản mới, hãy xuất (dump) cơ sở dữ liệu, khởi động phiên bản mới trên một volume mới và khôi phục bản dump vào đó.
Nâng cấp lên 0.9.0
Lần khởi động đầu tiên của phiên bản 0.9.0 (hoặc của một ảnh được xây dựng từ ngày 17 tháng 10 năm 2026 trở đi) sẽ thực hiện một số thay đổi một lần đối với dữ liệu. Mỗi thay đổi chỉ chạy một lần và được ghi lại trong cơ sở dữ liệu. Chúng đưa những gì còn lại ở mặc định cũ sang mặc định mới, và giữ nguyên những gì quản trị viên đã chọn. Hãy theo dõi chúng trong nhật ký.
AM_TEAMSETTINGS_DEFAULTCOMMUNITYKIND=workplace. Quá trình nâng cấp sẽ gán cho mọi cộng đồng loại mà cài đặt này có tại thời điểm đó, và các cuộc gọi sẽ bị tắt theo mặc định trong các kênh của các cộng đồng thuộc loại Cộng đồng. Xem Nơi làm việc hoặc cộng đồng.| Nội dung | Thay đổi |
|---|---|
| Các loại cộng đồng | Mọi cộng đồng đều có một loại, Cộng đồng hoặc Nơi làm việc: giá trị của Loại cộng đồng mới (TeamSettings.DefaultCommunityKind) tại lần khởi động đầu tiên. Loại đã được đặt sẽ được giữ lại. Quản trị viên cộng đồng có thể thay đổi loại của cộng đồng của họ sau đó, trong Cài đặt nhóm › Kênh › Loại cộng đồng. |
| Ai lưu trữ các kênh | Thành viên kênh không còn lưu trữ các kênh mà họ tham gia: quản trị viên cộng đồng sẽ thực hiện việc này. Trong môi trường làm việc, quản trị viên của kênh (người tạo kênh và những người được họ bổ nhiệm làm quản trị viên) cũng sẽ lưu trữ kênh. Thay đổi này ảnh hưởng đến các vai trò của lược đồ hệ thống; các lược đồ phân quyền do quản trị viên hệ thống tạo cho một số cộng đồng sẽ được giữ nguyên. |
| Vai trò Moderator trong các mẫu bố cục | Vai trò Moderators mà các cộng đồng nhận được từ mẫu bố cục sẽ có thêm quyền Gỡ người dùng, điều cần thiết để cho người dùng nghỉ và gỡ họ ra. Chỉ những vai trò vẫn giữ nguyên như mẫu bố cục đã tạo sẽ được thay đổi; các vai trò đã được người dùng chỉnh sửa sẽ được giữ nguyên. |
| Các vai trò có Quản trị viên | Vai trò cộng đồng có công tắc Quản trị viên bật giờ đây sẽ có tất cả các quyền mà quản trị viên của cộng đồng có thể thực hiện, như công tắc đã nêu, chứ không chỉ giới hạn trong cài đặt của cộng đồng. |
| Giới hạn thành viên | Số thành viên tối đa cho mỗi cộng đồng (TeamSettings.MaxUsersPerTeam) sẽ thay đổi từ 50 (mặc định cũ) thành 0 (không giới hạn). Các giá trị khác sẽ được giữ nguyên, bao gồm cả giới hạn được đặt bằng AM_TEAMSETTINGS_MAXUSERSPERTEAM. |
| Kết nối mô hình | Quản trị viên hệ thống sẽ quản lý các kết nối mô hình, và quản trị viên cộng đồng (cùng các vai trò có Quản trị viên) sẽ quản lý kết nối mô hình của cộng đồng của họ. Các dịch vụ AI của ứng dụng Agents sẽ trở thành kết nối mô hình trên toàn máy chủ, xem bên dưới. |
| Town Square trở thành General | Kênh mặc định của mọi cộng đồng sẽ được đổi tên từ town-square (Town Square) thành general (General). Kênh sẽ giữ nguyên ID, thành viên, tin nhắn và cài đặt, cùng với tên hiển thị do quản trị viên chọn. Các liên kết cũ và tra cứu bằng town-square vẫn sẽ dẫn đến kênh này. Một cộng đồng đã có kênh tên là general, kể cả đã lưu trữ, sẽ giữ town-square làm kênh mặc định của mình, và điều này cũng áp dụng cho cộng đồng có town-square đã lưu trữ: nhật ký sẽ ghi lại tên của chúng, và quản trị viên có thể đổi tên các kênh. |
| Favourites | Danh mục Favorites trong thanh bên của mọi người sẽ được đổi tên thành Favourites, như giao diện hiện đang hiển thị. Các danh mục do người dùng tạo với tên đó sẽ được giữ nguyên. |
Các dịch vụ của ứng dụng Agents
Quá trình nâng cấp sẽ sao chép mỗi dịch vụ AI của ứng dụng Agents thành một kết nối model trên toàn bộ máy chủ, được chia sẻ cho mọi cộng đồng và có thể được mọi người sử dụng, ngoại trừ khách (bật Cả khách để cho phép họ). Các khóa sẽ được mã hóa trong quá trình sao chép, do đó máy chủ cần có khóa mã hóa AI: đối với cụm có tệp lưu trong S3, hãy đặt AM_AI_ENCRYPTION_KEY trước, nếu không bản sao sẽ chờ đến lần khởi động tiếp theo. Sau đó, kiểm tra Bảng điều khiển Hệ thống › AI › Kết nối model:
- Mỗi kết nối sẽ giữ lại ID của dịch vụ tương ứng, do đó các trợ lý của ứng dụng và bộ dịch tự động được đặt cho dịch vụ Agents vẫn sẽ tìm thấy nó.
- Các dịch vụ OpenAI, tương thích OpenAI, Anthropic, Mistral, Cohere và Gemini sẽ trở thành các kết nối đến điểm cuối tương thích OpenAI (hoặc Anthropic) của chúng. Dịch vụ Azure sẽ trở thành kết nối đến điểm cuối tương thích OpenAI của tài nguyên: hãy kiểm tra thử.
- Các dịch vụ AWS Bedrock, Google Vertex AI và Cohere North, cùng các loại không xác định, sẽ được đánh dấu là Cần xử lý, kèm theo lý do. Thông tin xác thực đám mây của chúng sẽ không được sao chép: hãy trỏ chúng đến điểm cuối tương thích OpenAI của nhà cung cấp hoặc một cổng như LiteLLM, sau đó lưu lại.
- Dịch vụ embedding sẽ trở thành model Embeddings của kết nối có cùng địa chỉ và khóa, hoặc một kết nối riêng. Dịch vụ chuyển văn bản thành chữ sẽ nhận model
whisper-1. - Khi phần viết lại và tóm tắt chưa có kết nối, chúng sẽ nhận dịch vụ và model của trợ lý mặc định của ứng dụng.
Cài đặt và dữ liệu riêng của ứng dụng Agents được giữ nguyên: các trợ lý của nó vẫn tiếp tục sử dụng các dịch vụ của nó.
Các thay đổi khác về mặc định
- Gọi: Chế độ thử nghiệm sẽ tắt và Bật video sẽ bật theo mặc định. Lựa chọn đã lưu trong cấu hình sẽ được giữ lại. Các cuộc gọi cũng sẽ tuân theo loại cộng đồng (xem Cuộc gọi và thoại).
- Việc ghim tin nhắn lên đầu chỉ dành cho quản trị viên của kênh, quản trị viên và người điều phối của cộng đồng (có quyền Quản lý tin nhắn); thành viên của tin nhắn trực tiếp hoặc nhóm vẫn có thể thực hiện.
- Các kênh đã lưu trữ có thể nhận thành viên mới, những người này sẽ đọc lịch sử của kênh. Không ai được đăng bài, phản ứng hoặc thay đổi bất cứ điều gì trong đó.
Chuyển từ Mattermost
Antimatter sử dụng lược đồ cơ sở dữ liệu của Mattermost và thêm các bảng của riêng nó, do đó nó có thể tiếp quản cơ sở dữ liệu PostgreSQL và tệp của máy chủ Mattermost. Hãy thử trên một bản sao trước:
- Sao lưu cơ sở dữ liệu Mattermost, bộ lưu trữ tệp của nó (
data/hoặc bucket S3) vàconfig.json, sau đó dừng Mattermost. - Khôi phục cơ sở dữ liệu vào PostgreSQL của Antimatter, hoặc trỏ Antimatter đến một bản sao của nó (
AM_SQLSETTINGS_DATASOURCE). - Sao chép các tệp vào bộ lưu trữ của Antimatter, giữ nguyên đường dẫn của chúng: vào bucket
antimatterbằng công cụ S3, hoặc vàodata/bằng bản phát hành dạng lưu trữ. - Tái sử dụng cài đặt của bạn: sao chép
config.json, hoặc di chuyển nó vào cơ sở dữ liệu bằngamctl --local config migrate(xem Cấu hình). Các biến môi trườngMM_của bạn vẫn hoạt động; đổi tên chúng thànhAM_khi thuận tiện. - Khởi động Antimatter và theo dõi nhật ký trong khi nó nâng cấp cơ sở dữ liệu. Sau đó, kiểm tra Bảng điều khiển Hệ thống › Các plugin › Quản lý Plugin. Antimatter sẽ tự cài đặt các bản dựng riêng của mình cho Calls, Playbooks, Kanban (Boards), Agents và các tích hợp khi chúng mới hơn phiên bản đã cài đặt. Nếu Mattermost có phiên bản mới hơn của một trong những ứng dụng này, hãy xóa ứng dụng đó và khởi động lại Antimatter để bản dựng của Antimatter được cài đặt.
- Thiết lập lại thông báo đẩy bằng máy chủ proxy thông báo đẩy của riêng bạn: Antimatter không bao giờ gửi thông báo đến các dịch vụ thông báo đẩy của Mattermost, dù là thử nghiệm hay có sẵn, vì chúng chỉ phân phối đến các ứng dụng của chính Mattermost. Cho đến khi bạn thay đổi Máy chủ thông báo đẩy, máy chủ sẽ không gửi bất kỳ thông báo đẩy nào (xem Thông báo đẩy).
Antimatter không liên lạc với bất kỳ dịch vụ nào do Mattermost, Inc. vận hành (xem Kết nối đến các dịch vụ bên ngoài), ngay cả khi cấu hình của bạn vẫn đề cập đến một trong số đó:
- máy chủ thông báo đẩy của Mattermost được giữ trong cài đặt nhưng không bao giờ được sử dụng;
- các địa chỉ của Mattermost cho thị trường ứng dụng (URL thị trường) và cho thông báo sản phẩm bị để trống;
- các liên kết tải xuống ứng dụng mặc định của Mattermost (Liên kết trang tải xuống ứng dụng Antimatter, Liên kết tải xuống ứng dụng Android và Liên kết tải xuống ứng dụng iOS) sẽ được thay thế bằng các trang tải xuống ứng dụng của Antimatter trên GitHub; các liên kết do bạn tự đặt sẽ được giữ lại;
- ứng dụng Calls sử dụng máy chủ STUN công khai của Cloudflare thay vì của Mattermost, mà không thay đổi cài đặt đã lưu (xem Cuộc gọi);
- kiểm tra cập nhật bảo mật và báo cáo sự cố đã bị loại bỏ, cùng với các cài đặt Bảng điều khiển Hệ thống tương ứng (Bật Cảnh báo Bảo mật, Bật Báo cáo Chẩn đoán và Lỗi) và trang Thông báo.
Socket chế độ cục bộ hiện là /var/tmp/antimatter_local.socket; amctl cũng sẽ thử socket cũ /var/tmp/mattermost_local.socket. Mattermost chỉ hỗ trợ PostgreSQL trong các phiên bản gần đây, và Antimatter cũng vậy: hãy di chuyển cơ sở dữ liệu MySQL sang PostgreSQL trước. Quay lại Mattermost sau khi Antimatter đã nâng cấp cơ sở dữ liệu có nghĩa là khôi phục bản sao lưu Mattermost của bạn.
Xuất và nhập dữ liệu
Định dạng xuất hàng loạt cho phép di chuyển dữ liệu giữa các máy chủ: toàn bộ máy chủ, một số cộng đồng, hoặc một số kênh, kèm theo tệp đính kèm, ảnh hồ sơ và biểu tượng cảm xúc tùy chỉnh nếu bạn muốn.
# 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
Theo dõi các tác vụ bằng amctl export job list và amctl import job list. Đối với xuất hoặc nhập một cộng đồng hoặc kênh, tham số --imported-users là bắt buộc: dùng active khi người dùng chuyển sang máy chủ này, và inactive khi nhập vào máy chủ mà họ đã có tài khoản, để các tài khoản được tạo từ các khớp không chắc chắn sẽ ở trạng thái tắt cho đến khi quản trị viên kiểm tra. Tham số --destination-team-name dùng để nhập vào một cộng đồng hiện có. Các tệp xuất và nhập được lưu trên bộ nhớ của máy chủ (ExportSettings.Directory, ImportSettings.Directory) trong 30 ngày theo mặc định.
Trên chính máy chủ, lệnh antimatter export bulk và antimatter import bulk --apply thực hiện các thao tác tương tự từ tệp, mà không cần dùng API.