E2E 인프라의 관리자는 종이 흔적을 보유해서는 안 됩니다.
종단 간 암호화는 강력한 주장입니다. 중계의 호스터가 청구 측 KYC로 정확히 어느 법적 사람이 이 홈서버를 세웠는지 아는 순간 그것은 훼손됩니다. 암호화폐 전용 청구와 함께하는 KYC 없는 가입은 중계의 관리 메타데이터를 중계의 페이로드 메타데이터만큼이나 불투명하게 유지합니다: "이 이메일 뒤의 선불 잔액", 이야기 끝.

월 $23.90의 Ravelin 위 Synapse + Postgres + Element. 귀하의 홈서버는 중계하고 연합합니다; 자신의 E2E 트래픽을 읽을 수 없습니다; 노르딕 관할권은 누구도 정중하게 시도를 시작하도록 요청할 수 없음을 의미합니다.
월 $23.90의 Ravelin은 약 100개 방의 잘 연합된 Synapse를 편안하게 운반합니다 — Postgres, Redis, Synapse 워커, 방 상태 캐시 — 모두 동일한 박스에.
종단 간 암호화는 구조적입니다 — 홈서버는 복호화할 수 없는 암호문을 중계합니다. KYC 없는 관리자 가입은 운영자도 종이 흔적을 보유하지 않음을 의미합니다.
노르딕 관할권 + 설계상 로그 없음 + 무제한 업링크. 활성 방 세트에 대한 페더레이션 잡담은 실제 볼륨입니다; 여기서 추가 청구되지 않습니다.
matrix.org에 가입하는 것은 대부분의 사람에게 올바른 답입니다. 자신의 홈서버를 운영하는 것은 귀하의 핸들, 방 멤버십 및 메시지 메타데이터가 다른 사람의 관리 패널에 살아서는 안 될 때 올바른 답입니다. 프로토콜은 연합되어 있고, 암호화는 종단 간입니다; 누락된 부분은 "내 계정이 고정된 박스를 누가 통제하는가"이며, 그 답이 위협 모델을 실질적으로 변화시킵니다.
Matrix의 페더레이션 모델은 관대합니다: 어떤 홈서버도 다른 어떤 홈서버와도 통신할 수 있고, 방은 서버를 가로지르며, 암호화는 사용자를 따르며, 참여하는 데 중앙 디렉터리가 필요하지 않습니다. 귀하의 홈서버가 실행되고 페더레이션 테스터에서 검증되면, 귀하의 계정은 네트워크의 일급 시민입니다 — @user:matrix.org나 @user:mozilla.org와 동일하며, 단지 귀하의 도메인에 있을 뿐입니다.
Synapse의 운영 이야기는 잘 닦여 있습니다: 업스트림 Docker Compose 템플릿, 상태를 위한 Postgres, 워커 풀을 위한 Redis, 대량 페더레이션을 위한 선택적 샤딩 워커. 그 중 어느 것도 새롭지 않습니다; 모두 문서화되어 있습니다; 실패 모드는 알려져 있습니다.
올바른 질문은 추상적으로 "자체 호스팅 또는 matrix.org"가 아닙니다 — "내가 관리하는 박스에 내 페더레이션 신원이 고정되기를 원하는가"입니다. 답이 예라면, 이 페이지의 나머지가 레시피입니다.
약 100개 방을 가진 커뮤니티 홈서버 (소규모 DM과 외향적으로 연합된 잘 채워진 공개 방 몇 개의 혼합)에는 Ravelin (월 $23.90, 8 vCPU, 16 GB, 480 GB NVMe)이 올바른 등급입니다. Synapse의 Python 데이터 경로는 페더레이션 폭주 하에 RAM을 갈망합니다 — 5만 사용자를 가진 서버가 가입한 인기 방은 여유 공간을 원하는 일시적인 상태 해결 급증을 일으킵니다. 16 GB가 그것을 편안하게 흡수합니다.
약 1000개 이상의 활성 방, 또는 페더레이션 트래픽이 Synapse가 샤딩 워커 모드를 필요로 하게 푸시하면, Bulwark 등급은 전용 federation_sender, synchrotron 및 event_persister 워커를 실행할 코어를 제공합니다 — 단일 박스 내 Synapse의 수평 확장 이야기. 그 시점에 Postgres가 자신의 VPS에 있어야 하는지 생각해보고 싶으실 것입니다; 두 박스 레이아웃에 대해 이야기할 수 있습니다.
개인 홈서버 — 귀하의 계정, 몇 개의 DM, 작은 비공개 방 몇 개 — 에는 Garrison (월 $11.90, 4 vCPU, 8 GB, 240 GB NVMe)이면 충분합니다. Sentinel의 Conduit은 단일 사용자 설정으로 기술적으로 가능하지만, Garrison의 Synapse는 마이그레이션 없이 성장할 공간을 제공합니다.
이것들 중 어느 것도 아닌 것: 천 명 테넌트 매니지드 Matrix 제공. NordBastion은 자신이 아는 사람들을 위해 자신의 홈서버를 운영하시는 운영자를 위해 만들어졌습니다 — 낯선 사람들에게 Matrix 계정을 판매하기 위함이 아닙니다.
골격 스케치 — 업스트림 element-hq Synapse 문서가 homeserver.yaml 튜닝과 워커 모드의 권위 있는 참조로 남아 있습니다.
공식 Docker 엔진 + Compose v2 플러그인. Element-HQ는 태그로 고정할 수 있는 유지되는 Synapse 이미지를 게시합니다.
curl -fsSL get.docker.com \
| sh
apt install \
docker-compose-plugin
Synapse 이미지의 일회성 "generate" 모드는 귀하의 server_name에 키링된 시작 구성을 작성합니다. 같은 패스에서 공개 등록을 비활성화하십시오.
docker run --rm \
-v ./data:/data \
-e SYNAPSE_SERVER_NAME=example.org \
matrixdotorg/synapse:latest \
generate
Postgres는 운영 저장소입니다; SQLite는 테스트 전용입니다. Redis는 단일 프로세스로 시작하시더라도 워커 풀에 필요합니다.
# docker-compose.yml에 추가postgres: postgres:15
redis: redis:7-alpine
# 그런 다음 homeserver.yaml에서: 데이터베이스 드라이버 psycopg2
귀하의 apex 도메인의 /.well-known/matrix/{client,server}에 두 개의 작은 JSON 파일. CORS Access-Control-Allow-Origin: *과 함께 application/json으로 제공.
# /.well-known/matrix/server
{"m.server": "matrix.example.org:443"}
# /.well-known/matrix/client
{"m.homeserver":{"base_url":"https://matrix.example.org"}}
federationtester.matrix.org는 well-known, 인증서 체인, TLS 핸드셰이크, 버전 핸드셰이크 및 키 교환을 확인합니다. 녹색이 될 때까지 사용자를 초대하지 마십시오.
# server_name을 다음에 붙여넣기:# federationtester.matrix.org
# 모든 확인이 녹색이어야 함
homeserver.yaml의 registration_shared_secret + register_new_matrix_user CLI = 공개 가입을 열지 않고 관리자 계정.
docker compose exec synapse \
register_new_matrix_user \
-a -c /data/homeserver.yaml \
http://localhost:8008
종단 간 암호화는 강력한 주장입니다. 중계의 호스터가 청구 측 KYC로 정확히 어느 법적 사람이 이 홈서버를 세웠는지 아는 순간 그것은 훼손됩니다. 암호화폐 전용 청구와 함께하는 KYC 없는 가입은 중계의 관리 메타데이터를 중계의 페이로드 메타데이터만큼이나 불투명하게 유지합니다: "이 이메일 뒤의 선불 잔액", 이야기 끝.
Matrix의 종단 간 암호화는 이미 중계가 페이로드를 읽는 것을 산술적으로 방지합니다. 노르딕 관할권은 두 번째 계층을 추가합니다: 호스터가 연결 메타데이터를 기록하도록 강제하는 데이터 보유 명령 없음, 시행된 클라이언트 측 스캐닝 법안 없음, 그리고 누군가 수학을 바꾸려고 시도하면 무엇이 일어날지 설명하는 공표된 영장 카나리아 (저희는 할 수 없습니다). "아니오" 두 계층이 하나를 이깁니다.
잘 채워진 공개 방 몇 개에 있는 연합 홈서버는 많은 작은 페더레이션 이벤트를 푸시합니다 — 모든 가입, 모든 상태 변경, 모든 메시지 수신은 N개 서버로 전달하는 팬아웃입니다. 총량은 거대하지 않지만 지속적이며, GB-아웃으로 청구하는 어떤 호스터도 운영자를 긴장시킵니다. 무제한 업링크는 인지적 오버헤드를 제거합니다: 프로토콜이 요구하는 만큼 연합하십시오; 청구서는 동일합니다.
Matrix 홈서버를 자체 호스팅하는 것은 작은 그룹이 자신의 메시징을 위해 할 수 있는 가장 깨끗한 주권 행보 중 하나입니다. 단일 SaaS 채팅 도구 좌석 가격으로 연합되고 종단 간 암호화된 홈서버를 얻으실 수 있습니다 — 핸들이 어떤 플랫폼보다 오래 지속되고, 조정이 귀하의 것이며, 호스팅이 데이터 보유 명령도 시행된 클라이언트 측 스캐닝 법안도 없는 관할권에 있는.
NordBastion은 이 특정 작업에 중요한 부분에 대해 의견이 있습니다 — KYC 없는 관리자 가입, 노르딕 관할권, 무제한 업링크 — 그리고 나머지에 대해서는 의도적으로 평범합니다. Docker는 Docker입니다. Synapse는 Synapse입니다. Element-HQ는 이미지를 제공합니다; 저희는 박스를 제공합니다.
저녁 시간을 내어 6단계를 거치시고, 페더레이션 테스터에서 검증하시고, 관리자를 발행하십시오. 홈서버는 그 저녁보다 수년간 오래 지속됩니다.
Matrix 관리자들이 docker compose up 전에 실제로 씨름하는 여덟 가지 질문. Well-known 위임이 두 번째 질문인 데는 이유가 있습니다.
서버는 하나의 머신이고 메시지는 영원히 살기 때문입니다. 디스크 접근권을 가진 누구든 — 스냅샷 사고, 포렌식 이미지, 변절한 공동 관리자, 결국 박스를 넘기실 때의 후임자 — 가 방이 암호화되지 않으면 평문을 봅니다. 종단 간 암호화는 홈서버를 유용하게 유지하면서 (중계하고, 연합하고, UI를 제시함) 메시지 페이로드를 참가자의 기기 키를 제외하고는 산술적으로 읽을 수 없게 만듭니다. 자체 호스팅과 E2E는 벨트 + 멜빵입니다: 귀하가 중계를 통제하시고 중계도 자신의 트래픽을 읽을 수 없습니다.
Matrix는 https://example.org/.well-known/matrix/client 및 /.well-known/matrix/server에서 두 개의 작은 JSON 파일을 제공함으로써 귀하의 사용자 대면 도메인 (example.org)이 서버 대면 도메인 (matrix.example.org)과 다를 수 있게 합니다. client 파일은 Element에게 어느 홈서버 URL을 사용할지 알려줍니다; server 파일은 연합 피어에게 s2s API를 위해 Synapse에 도달할 위치를 알려줍니다. 사람들은 세 가지에서 걸려 넘어집니다: 잘못된 Content-Type으로 파일을 제공하는 것, CORS가 다른 인스턴스의 가져오기를 허용하지 않는 것, 또는 server 파일이 방화벽이 실제로 노출하지 않는 포트를 가리키는 것. 방을 게시하시기 전에 federationtester.matrix.org로 검증하십시오.
Synapse (Python, 참조 구현)는 공개 홈서버의 95%가 실행하는 것입니다; 가장 많이 테스트된 페더레이션 피어이며 명세가 정의하는 모든 기능을 지원하는 유일한 것입니다. Conduit (Rust, 단일 바이너리, RocksDB)와 Dendrite (Go, 마이크로서비스)는 더 가볍습니다 — Conduit은 Raspberry Pi에서 실행되는 것으로 유명합니다. 사용자가 있는 공개 대면 연합 홈서버에는 Synapse가 답입니다; 취미 단일 사용자 서버에는 Sentinel에서 Conduit으로 실험하실 수 있습니다. 이 사설은 Synapse를 가정합니다.
homeserver.yaml에서 enable_registration: false를 설정하시고 실제로 원하시는 사람들을 위해 admin API를 통해 계정을 발행하는 registration_shared_secret에 의존하십시오. 또는, 하드코딩된 공유 시크릿 초대 흐름과 결합된 enable_registration_without_verification: false. Matrix 페더레이션은 어떤 공개 등록 홈서버라도 며칠 내에 스팸봇 계정 농장이 될 만큼 충분히 큽니다; 표준 답변은 "등록은 관리자 큐레이션, 페더레이션은 개방"입니다.
아니오 — Matrix C-S API가 프로토콜 계약이며, 모든 적합한 클라이언트는 모든 적합한 서버와 통신합니다. Element는 기본이며 가장 많이 테스트되었습니다; Cinny는 일부 자체 호스터가 번들로 묶기를 선호하는 더 가벼운 웹 클라이언트입니다; SchildiChat은 Telegram 스타일 UI를 가진 Element 포크입니다; FluffyChat은 모바일 우선을 목표로 합니다. 홈서버는 사용자가 어느 클라이언트에 있는지 보거나 신경 쓰지 않습니다. 귀하의 커뮤니티가 선호하는 것을 선택하시고, 나중에 변경하시면 됩니다, 마이그레이션이 관련되지 않습니다.
각 Matrix 사용자는 기기 키 세트 (기기별, 일시적)와 교차 서명 키 (계정별, 장기 유지)를 가집니다. 교차 서명 마스터 키는 사용자가 모든 것을 재검증하지 않고 새 기기를 추가할 수 있게 하는 것입니다; 이를 잃으시면 사용자는 다시 키를 발행할 때까지 과거 E2E 메시지에서 잠금 해제됩니다. Element의 "Secure Backup" 기능은 교차 서명 키를 패스프레이즈나 복구 키로 암호화하고 불투명 암호문으로 서버 측에 저장합니다 — 홈서버는 그 blob을 보유하지만 읽을 수 없습니다. 가입 시 사용자에게 복구 키 단계를 문서화하십시오; 그것이 피할 수 있는 잠금 해제를 방지하는 단일 UX 요소입니다.
직접적으로는 아닙니다 — 방은 서버별 레코드가 아닌 연합된 객체이므로, 방을 "이동"한다는 것은 그것을 업그레이드 (후속 방을 만들고 이전 방에 리디렉션으로 스텁을 만드는 Matrix 네이티브 프리미티브)하고 동일한 참가자 세트를 초대하는 것을 의미합니다. 방 ID는 변경되며, 별칭은 따라갈 수 있습니다. 홈서버 간의 직접 사용자 계정 마이그레이션은 오랜 Matrix 위시리스트 항목입니다 (계정 이식성은 명세 로드맵에 있습니다); 오늘은 귀하의 서버에 새 계정을 만드시고 사람들에게 귀하를 다시 추가하시도록 요청하십시오.
Matrix는 방별 조정 프리미티브 (kick, ban, redact, 방 관리자)와 서버별 조정 프리미티브 (Synapse 모듈 API를 통한 거부 목록, 관리된 거부 목록을 위한 MJOLNIR 봇, 초대 전용 페더레이션을 위한 서버 수준 허용 목록 모드)를 가집니다. 커뮤니티 홈서버의 경우, MJOLNIR 스타일 거부 목록 구독이 표준 답변입니다 — 유지되는 거부 목록 커뮤니티에 스팸/남용 식별을 위임하고 로컬에서 정책을 적용합니다. 귀하의 주권: 어느 거부 목록을 따를지 귀하가 선택합니다.