소스에서 빌드하기
이 페이지는 Antimatter를 소스 코드에서 빌드하고 실행하는 방법을 설명하며, 개발 작업이나 자체 빌드를 생성하려는 경우를 위해 작성되었습니다. 하나의 저장소에 포함된 서버와 웹 인터페이스, 그리고 Docker 이미지와 앱을 다룹니다.
필요한 것
- Go,
server/go.mod에 명시된 버전(작성 시점 기준 1.26.7). - Node.js와 npm,
.nvmrc와webapp/package.json에 명시된 버전(Node 24.11.1, npm 11.6.2). mise를 사용하면 저장소의mise.toml가 올바른 Node를 설치합니다. - Docker와 Compose: 개발 환경 설정은 PostgreSQL과 기타 몇 가지 서비스를 컨테이너에서 실행합니다.
- make, git, 그리고 Linux 또는 macOS 머신.
- 메모리: 웹 인터페이스 빌드가 가장 부담이 큰 부분입니다. RAM 16GB를 권장하며, 빌드와 메모리를 참고하세요.
git clone https://github.com/AntimatterChat/antimatter.git
cd antimatter
저장소에는 server/에 서버, webapp/에 웹 인터페이스(Fusion은 webapp/fusion, 클래식은 webapp/channels, 공용 패키지는 webapp/platform), 그리고 e2e-tests/에 엔드투엔드 테스트가 포함되어 있습니다.
개발 서버 실행
cd server
make run
make run은 개발 컨테이너(PostgreSQL, Redis, 메일 캐처 및 모니터링 도구)를 시작하고, 웹 앱 빌드를 지정된 위치에 연결하며, go run을 사용하여 백그라운드에서 서버를 시작하고, 편집 시 클래식 인터페이스를 다시 빌드하는 웹 앱 워처를 시작합니다. http://localhost:8065를 열고 계정을 생성하세요: 첫 번째 계정이 시스템 관리자가 됩니다.
명령어(server/ 내) | 기능 |
|---|---|
make run-server, make run-client | 서버만 또는 웹 앱 워처만 시작합니다. |
make restart-server | Go 코드를 변경한 후 서버를 다시 시작합니다. |
make stop | 서버, 워처 및 컨테이너를 중지합니다. |
make debug-server | Delve 디버거에서 서버를 실행합니다. |
make run-cli ARGS="-version" | 서버 명령을 실행합니다. |
make config-reset | config/config.json을 기본값으로 초기화합니다. |
make clean, make nuke | 빌드 파일을 삭제합니다. nuke는 개발 데이터도 함께 삭제합니다. |
개발 데이터베이스는 postgres://mmuser:mostest_password@localhost/mattermost_test이며, 서버의 기본 데이터 소스입니다. server/config.override.mk 파일이나 환경 변수( server/config.mk 참고)에서 ENABLED_DOCKER_SERVICES를 사용하여 시작할 컨테이너를 선택할 수 있습니다.
웹 인터페이스
webapp/ 내:
npm install # also builds the shared packages
npm run build # the classic interface, then Fusion
빌드 산출물은 webapp/channels/dist(클래식)와 webapp/fusion/dist(Fusion)에 생성됩니다. server/에서 make client를 실행하면 각각 server/client와 server/client-fusion로 연결되며, 서버는 클래식 인터페이스를 /static/ 아래, Fusion 인터페이스를 /static/fusion/ 아래에서 제공합니다.
npm run run(또는webapp/에서make run)을 실행하면 클래식 인터페이스를 감시하여 다시 빌드합니다.WATCH_FUSION=true를 추가하면 Fusion도 함께 다시 빌드됩니다.npm run dev-server(make dev)를 실행하면 webpack 개발 서버 대신 실행됩니다. 클래식은 포트 9005, Fusion은 포트 9006에서 실행됩니다.- 브라우저에서 두 인터페이스 중 하나를 보려면, 해당 페이지 주소에
?webui=fusion또는?webui=classic를 추가하세요.
테스트 및 검사
| 명령 | 위치 | 기능 |
|---|---|---|
make test-server | server/ | 개발 컨테이너를 대상으로 하는 서버 테스트 스위트입니다. 실행에 상당한 시간이 소요됩니다. |
make test-server-quick | server/ | 짧은 테스트만 실행합니다. |
go test ./channels/app/... -run TestName | server/ | 컨테이너가 실행 중인 상태에서(make start-docker) 특정 패키지 또는 테스트를 실행합니다. |
make check-style | server/ | go vet, golangci-lint 및 기타 Go 검사 항목을 실행합니다. |
make test | webapp/ | 모든 패키지에 대한 웹 앱 단위 테스트(Jest)를 실행합니다. |
npm run test -- <pattern> | webapp/fusion | Fusion의 일부 테스트를 실행합니다. |
make check-style, make check-types | webapp/ | ESLint 및 TypeScript 검사를 실행합니다. |
make i18n-extract | server/ 및 webapp/ | 문자열을 추가하거나 변경한 후 영어 문자열 파일을 업데이트합니다(자세한 내용은 번역 참고). |
server/에서 go mod tidy 대신 make modules-tidy를 실행하세요.
릴리스 아카이브
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는 웹 인터페이스와 Linux 바이너리를 한 번에 빌드합니다. 아카이브에는 bin/antimatter, bin/amctl, 설정 변경에 대한 README.md가 포함된 기본 config/config.json, 두 가지 웹 인터페이스, 템플릿, 폰트 및 번역 파일이 포함됩니다. 다른 플랫폼: make package-osx, make package-windows, make package-freebsd.
번들 앱
단순한 make package-linux은 앱이 없는 아카이브를 빌드합니다. 공개된 릴리스처럼 앱을 포함하려면, 먼저 서명된 앱 번들을 가져와 해당 폴더를 전달해야 합니다:
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는 antimatter-docker의 plugins.json에 나열된 각 앱의 최신 GitHub 릴리스를 서명과 함께 다운로드하고, 서명을 Antimatter의 플러그인 키와 대조하여 검증합니다. 기본적으로 Whiteboard, Voice channels, Calls, Agents, Todo, Polls, Notes, GIFs, Memes를 포함하며, AM_BUNDLED_APPS(공백으로 구분된 저장소 이름)로 목록을 변경할 수 있습니다. 릴리스가 없거나 서명이 없는 앱은 경고와 함께 건너뜁니다. 번들은 아카이브의 prepackaged_plugins/에 배치됩니다.
.deb 및 .rpm 패키지
build/package/build-packages.sh <archive> <amd64|arm64> <version> <out-dir>는 릴리스 아카이브를 nfpm을 사용하여 올인원 .deb 및 .rpm 패키지로 변환합니다. 설치되는 내용에 대한 설명은 관리자 가이드를 참고하세요: .deb 또는 .rpm 패키지 설치.
릴리스 워크플로
서버 저장소의 antimatter-release.yml 워크플로는 GitHub에서 이 모든 작업을 수행합니다: v* 태그가 생성되면 amd64 및 arm64용 아카이브와 패키지를 SHA256SUMS와 함께 빌드하여 해당 태그의 GitHub 릴리스로 게시합니다(버전에 -가 포함된 경우 사전 릴리스로 게시). 수동으로 실행하면 빌드 번호를 0.9.0-dev.<run>로 지정하고 파일을 워크플로 아티팩트로 유지합니다. 각 앱 저장소에는 동일한 방식으로 서명된 번들을 게시하는 release.yml 워크플로가 있습니다.
Docker 이미지
antimatter-docker 저장소는 서버와 그 앱이 포함된 공개 이미지를 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
Docker buildx, Python 3, git, gpg가 필요하며, 약 16GB의 RAM과 30GB의 디스크 공간이 필요합니다. 생성된 이미지는 ghcr.io/antimatterchat/antimatter:dev로 로드되며, ANTIMATTER_IMAGE=ghcr.io/antimatterchat/antimatter:dev docker compose -f compose.local.yml up -d를 실행하여 테스트할 수 있습니다. plugins.json에는 빌드된 앱과 버전이 나열되어 있으며, 저장소의 README에서 변형(variants)에 대한 설명을 찾을 수 있습니다.
build-all.sh는 번들된 앱에 Antimatter 서명 키를 적용하여 서명하며, 이미지 빌드는 서명되지 않은 앱을 거부합니다. 유지보수자만 보유한 해당 개인 키가 없다면, 첫 단계만 단독으로 실행하세요: scripts/fetch-sources.sh, scripts/build-plugins.sh(out/plugins/에 앱 번들 생성) 및 scripts/build-server.sh(out/server/에 서버 아카이브 생성).빌드 및 메모리
웹 인터페이스는 대규모 webpack 빌드이며, 메모리 부족은 가장 흔한 빌드 실패 원인입니다.
npm run build는 피크 메모리 사용량을 낮추기 위해 클래식 인터페이스와 Fusion을 순차적으로 빌드하며, 동시에 빌드하지 않습니다. 직접 병렬로 실행하지 마세요.- 미나이저는 프로세서당 워커를 하나씩 시작합니다. 코어가 많고 메모리가 적은 머신에서는 빌드가 인식하는 프로세서 수를 제한하세요:
taskset -c 0-5 npm run build. - Node가 힙 메모리를 초과하면 한도를 높여야 합니다:
NODE_OPTIONS=--max-old-space-size=6144. Docker 빌드는 이 값을 사용합니다(build.env의BUILD_NODE_OPTIONS). - 작은 머신에서는 서버 전체 테스트 스위트, 웹 빌드, Docker 빌드를 동시에 실행하지 마세요.
앱
각 앱(플러그인)은 자체 저장소와 Makefile을 가지며, make dist를 실행하면 번들이 빌드됩니다. 빌드, 설치 및 디버깅을 참고하세요.
데스크톱 앱
데스크톱 앱은 Electron 앱입니다. Node.js 24 이상을 사용하세요:
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)
서버 사전 구성과 같은 빌드 시 설정은 src/common/config/buildConfig.ts에 있습니다. Apple 인증서가 없으면 AM_MAC_ADHOC_SIGN=true를 설정하여 macOS 앱을 노타리제이션 없이 어드혹으로 서명할 수 있습니다. Apple 실리콘 Mac은 서명되지 않은 코드를 거부합니다. 저장소의 release.yml 워크플로우는 v* 태그에서 Linux, Windows, macOS용 서명되지 않은 패키지를 빌드합니다.
모바일 앱
모바일 앱은 React Native 앱이며, README에 명령어(npm run ios, npm run android)가 나열되어 있습니다. 자체 카피를 빌드하려면 자체 서명 키, Android 알림용 Firebase 프로젝트, iOS용 APNs 키, 그리고 해당 자격 증명을 보관하는 푸시 프록시도 필요합니다. 저장소의 release.yml 워크플로우는 v* 태그에서 스토어 계정 없이 Android APK와 AAB, 서명되지 않은 iOS .ipa를 빌드합니다. README에는 Android 빌드를 서명하고 Firebase를 설정하는 시크릿이 나열되어 있습니다.