Xây dựng từ mã nguồn

Trang này giải thích cách xây dựng và chạy Antimatter từ mã nguồn của nó, để làm việc với nó hoặc để tạo các bản xây dựng của riêng bạn. Nội dung bao gồm máy chủ và các giao diện web, tất cả nằm trong một kho lưu trữ, sau đó là ảnh Docker và các ứng dụng.

Những gì bạn cần

  • Bắt đầu, ở phiên bản trong server/go.mod (1.26.7 tại thời điểm viết).
  • Node.js và npm, ở các phiên bản được ghi trong .nvmrc và webapp/package.json (Node 24.11.1 với npm 11.6.2). Với mise, tệp mise.toml của kho lưu trữ sẽ cài đặt phiên bản Node phù hợp.
  • Docker với Compose: cấu hình phát triển chạy PostgreSQL và một số dịch vụ khác trong các container.
  • make, git, và một máy chạy Linux hoặc macOS.
  • Bộ nhớ: việc xây dựng các giao diện web là phần nặng nhất. Hãy dự trù 16 GB RAM; xem Xây dựng và bộ nhớ.
git clone https://github.com/AntimatterChat/antimatter.git
cd antimatter

Kho lưu trữ chứa máy chủ trong server/, các giao diện web trong webapp/ (Fusion trong webapp/fusion, cổ điển trong webapp/channels, các gói dùng chung trong webapp/platform), và các kiểm thử đầu-cuối trong e2e-tests/.

Chạy máy chủ phát triển

cd server
make run

make run khởi động các container phát triển (PostgreSQL, Redis, một công cụ bắt thư và các công cụ giám sát), liên kết các bản xây dựng ứng dụng web vào đúng vị trí, khởi động máy chủ ở chế độ nền bằng go run, và khởi động trình theo dõi của ứng dụng web, công cụ sẽ xây dựng lại giao diện cổ điển khi bạn chỉnh sửa. Mở http://localhost:8065 và tạo một tài khoản: tài khoản đầu tiên sẽ trở thành quản trị viên hệ thống.

Lệnh (trong server/)Chức năng
make run-server, make run-clientChỉ khởi động máy chủ, hoặc chỉ khởi động trình theo dõi của ứng dụng web.
make restart-serverKhởi động lại máy chủ sau khi thay đổi mã Go.
make stopDừng máy chủ, trình theo dõi và các container.
make debug-serverChạy máy chủ dưới trình gỡ lỗi Delve.
make run-cli ARGS="-version"Chạy một lệnh của máy chủ.
make config-resetĐặt lại config/config.json về giá trị mặc định.
make clean, make nukeXóa các tệp xây dựng; nuke cũng xóa dữ liệu phát triển.

Cơ sở dữ liệu phát triển là postgres://mmuser:mostest_password@localhost/mattermost_test, nguồn dữ liệu mặc định của máy chủ. Chọn container nào sẽ khởi động bằng ENABLED_DOCKER_SERVICES, trong tệp server/config.override.mk hoặc trong môi trường của bạn (xem server/config.mk).

Các giao diện web

Trong webapp/:

npm install      # also builds the shared packages
npm run build    # the classic interface, then Fusion

Các bản build được đặt trong webapp/channels/dist (giao diện cổ điển) và webapp/fusion/dist (Fusion). Lệnh make client trong thư mục server/ sẽ liên kết chúng thành server/client và server/client-fusion, nơi máy chủ sẽ phục vụ chúng: giao diện cổ điển dưới /static/, Fusion dưới /static/fusion/.

  • npm run run (hoặc make run trong webapp/) sẽ theo dõi và xây dựng lại giao diện cổ điển. Thêm WATCH_FUSION=true để cũng xây dựng lại Fusion.
  • npm run dev-server (make dev) chạy máy chủ phát triển của webpack thay thế: giao diện cổ điển trên cổng 9005, Fusion trên cổng 9006.
  • Để xem một trong hai giao diện trong trình duyệt, hãy thêm ?webui=fusion hoặc ?webui=classic vào địa chỉ của bất kỳ trang nào.

Kiểm thử và kiểm tra

LệnhVị tríChức năng
make test-serverserver/Bộ kiểm thử của máy chủ, chạy đối với các container phát triển. Quá trình này mất khá nhiều thời gian.
make test-server-quickserver/Chỉ chạy các bài kiểm tra ngắn.
go test ./channels/app/... -run TestNameserver/Một gói hoặc một bài kiểm thử cụ thể, với các container đang chạy (make start-docker).
make check-styleserver/go vet, golangci-lint và các kiểm tra Go khác.
make testwebapp/Kiểm thử đơn vị của ứng dụng web (Jest), trong mọi gói.
npm run test -- <pattern>webapp/fusionMột số bài kiểm thử của Fusion.
make check-style, make check-typeswebapp/ESLint và TypeScript.
make i18n-extractserver/ và webapp/Cập nhật các tệp chuỗi tiếng Anh sau khi bạn thêm hoặc thay đổi chuỗi (xem Bản dịch).

Hãy chạy make modules-tidy thay vì go mod tidy trong server/.

Tệp lưu trữ phát hành

cd webapp && npm run build && cd ..
cd server
make build-linux       # the antimatter and amctl binaries
make package-linux     # dist/antimatter-linux-amd64.tar.gz and -arm64

make build xây dựng các giao diện web và các tệp nhị phân Linux cùng một lúc. Tệp lưu trữ chứa bin/antimatter, bin/amctl, một tệp config/config.json mặc định kèm README.md hướng dẫn thay đổi cài đặt, cả hai giao diện web, các mẫu, phông chữ và bản dịch. Các nền tảng khác: make package-osx, make package-windows, make package-freebsd.

Ứng dụng có sẵn

Lệnh make package-linux thông thường sẽ xây dựng tệp lưu trữ không kèm ứng dụng. Để đóng gói chúng như các bản phát hành chính thức, hãy tải trước các tệp ứng dụng đã ký và chỉ định thư mục chứa chúng:

build/package/fetch-apps.sh "$HOME/release-apps"   # needs gh, python3 and gpg
make package-linux PREPACKAGED_PLUGINS_DIR="$HOME/release-apps"

fetch-apps.sh tải bản phát hành GitHub mới nhất của từng ứng dụng được liệt kê trong plugins.json của antimatter-docker, kèm chữ ký, và kiểm tra chữ ký đó với khóa plugin của Antimatter. Mặc định, lệnh này lấy Whiteboard, Kênh thoại, Cuộc gọi, Trợ lý, Việc cần làm, Bình chọn, Ghi chú, GIF và Memes; biến AM_BUNDLED_APPS (tên kho lưu trữ, phân tách bằng khoảng trắng) dùng để thay đổi danh sách. Các ứng dụng không có bản phát hành hoặc không có chữ ký sẽ bị bỏ qua kèm cảnh báo. Các tệp ứng dụng sẽ được đặt trong thư mục prepackaged_plugins/ của tệp lưu trữ.

Gói .deb và .rpm

build/package/build-packages.sh <archive> <amd64|arm64> <version> <out-dir> chuyển đổi tệp lưu trữ phát hành thành các gói .deb và .rpm tích hợp tất cả, sử dụng nfpm. Hướng dẫn dành cho quản trị viên mô tả những gì chúng cài đặt: xem Cài đặt gói .deb hoặc .rpm.

Quy trình phát hành

Quy trình antimatter-release.yml trong kho lưu trữ máy chủ thực hiện tất cả những điều này trên GitHub: khi có thẻ v*, nó sẽ xây dựng các tệp lưu trữ và gói cho amd64 và arm64, kèm SHA256SUMS, và công bố chúng như bản phát hành GitHub của thẻ đó (bản phát hành trước cho phiên bản có chứa -). Khi chạy thủ công, quy trình này sẽ đánh số bản xây dựng là 0.9.0-dev.<run> và giữ các tệp như các sản phẩm của quy trình. Mỗi kho lưu trữ ứng dụng có một quy trình release.yml công bố tệp ứng dụng đã ký của nó theo cách tương tự.

Hình ảnh Docker

Kho antimatter-docker xây dựng các hình ảnh được phát hành, bao gồm máy chủ cùng các ứng dụng của nó, hoàn toàn bên trong Docker:

git clone https://github.com/AntimatterChat/antimatter-docker.git
cd antimatter-docker
scripts/build-all.sh                     # from the main branches on GitHub
SOURCES=local scripts/build-all.sh       # from your checkouts next to this folder
VARIANT=next scripts/build-all.sh        # the "next" image, with every Antimatter app

Cần Docker với buildx, Python 3, git và gpg, khoảng 16 GB RAM và 30 GB dung lượng đĩa. Kết quả được nạp dưới dạng ghcr.io/antimatterchat/antimatter:dev; hãy thử với ANTIMATTER_IMAGE=ghcr.io/antimatterchat/antimatter:dev docker compose -f compose.local.yml up -d. plugins.json liệt kê các ứng dụng và các phiên bản đã được xây dựng, và README của kho mã nguồn giải thích các biến thể.

build-all.sh ký các ứng dụng được đóng gói bằng khóa ký của Antimatter, và quá trình xây dựng ảnh sẽ từ chối các ứng dụng không được ký. Nếu không có khóa riêng tư đó (chỉ có các người duy trì mới có), hãy chạy riêng các bước đầu tiên: scripts/fetch-sources.sh, scripts/build-plugins.sh (các gói ứng dụng trong out/plugins/) và scripts/build-server.sh (các tệp lưu trữ máy chủ trong out/server/).

Xây dựng và bộ nhớ

Các giao diện web là các bản xây dựng webpack lớn, và việc hết bộ nhớ là lỗi xây dựng phổ biến nhất.

  • npm run build xây dựng giao diện cổ điển và Fusion lần lượt, không đồng thời, để giữ mức đỉnh thấp hơn. Không tự chạy chúng song song.
  • Bộ tối ưu hóa khởi động một worker cho mỗi bộ xử lý. Trên máy có nhiều nhân nhưng ít bộ nhớ, hãy giới hạn số bộ xử lý mà quá trình xây dựng nhìn thấy: taskset -c 0-5 npm run build.
  • Nếu Node hết bộ nhớ heap, hãy tăng giới hạn của nó: NODE_OPTIONS=--max-old-space-size=6144. Quá trình xây dựng Docker sử dụng giá trị này (BUILD_NODE_OPTIONS trong build.env).
  • Tránh chạy bộ kiểm thử đầy đủ của máy chủ, một bản xây dựng web và một bản xây dựng Docker cùng lúc trên một máy nhỏ.

Các ứng dụng

Mỗi ứng dụng (plugin) có kho mã nguồn và Makefile riêng; make dist xây dựng gói của nó. Xem Xây dựng, cài đặt và gỡ lỗi.

Ứng dụng máy tính để bàn

Ứng dụng máy tính để bàn là một ứng dụng Electron. Với Node.js 24 hoặc mới hơn:

npm install --allow-git=all
npm run build          # development build, into dist/
npm start              # run it
npm run package:linux  # packages into release/ (also package:windows, package:mac)

Các cài đặt thời điểm xây dựng, chẳng hạn như các máy chủ cần cấu hình sẵn, nằm trong src/common/config/buildConfig.ts. Nếu không có chứng chỉ Apple, hãy đặt AM_MAC_ADHOC_SIGN=true để ký ứng dụng macOS theo cách ad hoc, không qua xác thực (notarisation): các Mac dùng chip Apple silicon từ chối mã không được ký. Workflow release.yml trong kho lưu trữ sẽ xây dựng các gói không ký cho Linux, Windows và macOS khi có thẻ v*.

Ứng dụng di động

Ứng dụng di động là một ứng dụng React Native; README của nó liệt kê các lệnh (npm run ios, npm run android). Để xây dựng bản sao của riêng bạn, bạn cũng cần các khóa ký của mình, một dự án Firebase cho thông báo Android, một khóa APNs cho iOS và một push proxy lưu trữ các thông tin xác thực đó. Workflow release.yml trong kho lưu trữ sẽ xây dựng APK và AAB cho Android cùng tệp .ipa iOS không ký khi có thẻ v*, không cần tài khoản cửa hàng; README của nó liệt kê các bí mật (secrets) dùng để ký bản xây dựng Android và thiết lập Firebase.