Parley: Mạng chat phi tập trung, liên hợp và nói tiếng IRC thuần
Parley là một mạng chat không có máy chủ trung tâm, nơi mỗi cá nhân hoặc tổ chức tự vận hành instance cho tên miền của mình. Các instance tự tìm thấy nhau qua DNS, trao đổi tin nhắn có chữ ký qua HTTPS và hiển thị toàn bộ mạng liên hợp cho các IRC client thông thường như irssi, WeeChat hay Textual mà không cần plugin.

Parley: Mạng chat phi tập trung, liên hợp và nói tiếng IRC thuần
Parley là một mạng chat không có trung tâm. Mỗi cá nhân hoặc nhóm tự vận hành một instance nhỏ cho tên miền của riêng mình. Các instance tìm thấy nhau qua DNS và các tài liệu định danh well-known, trao đổi tin nhắn có chữ ký qua HTTPS, rồi trình bày toàn bộ mạng liên hợp cho những IRC client thông thường như irssi, WeeChat hay Textual — hoàn toàn không cần plugin.
Giấy phép MIT
Định danh trông như email
Định danh trên Parley trông giống hệt địa chỉ email: [email protected] chạy trên foo.com, còn [email protected] chạy trên bar.com. Bob chỉ cần gõ /msg [email protected] hi là xong, kể cả khi hai instance chưa từng biết đến nhau trước đó.
Điểm đáng chú ý là cơ chế liên hợp diễn ra tức thời. Khi Bob mở một truy vấn với /msg [email protected], hai instance lập tức kết nối với nhau. Alice nhìn thấy Bob là bob on bar.com, còn Bob nhìn thấy Alice là alice on foo.com.
Trạng thái hiện tại: đây là một bản chứng minh khái niệm đang hoạt động. Nó thể hiện thiết kế từ đầu đến cuối và chạy được một instance thật, nhưng chưa được gia cố bảo mật đầy đủ.
Cách một instance vận hành
Dự án cung cấp sẵn container image prologic/parley cùng file docker-compose.example.yml làm điểm khởi đầu. Một instance cho example.com, truy cập tại chat.example.com, cần những thứ sau:
- Nơi chạy với thư mục
/datatrên bộ nhớ lưu trữ lâu dài — nơi chứa khóa của instance, bộ nhớ đệm peer, nhật ký kênh và các tài khoản. - Tài khoản tạo bằng
parleyctl(có sẵn trong image) hoặc qua trang quản trị. - HTTPS phía trước cổng 8443 trên
chat.example.com. Bất kỳ reverse proxy nào kết thúc TLS đều được; bản thânparleydchỉ phục vụ HTTP thuần trừ khi bạn truyền-tls-certvà-tls-key. - Bản ghi SRV để các instance khác tìm thấy bạn. Nếu thiếu, peer sẽ dự phòng về
https://example.com/.well-known/parley/. - IRC qua TLS cho client của bạn. Bộ lắng nghe IRC của
parleydlà plaintext, nên cần kết thúc TLS phía trước nó.
Khi chưa có token quản trị và chưa có tài khoản nào, parleyd sẽ ghi log một URL /setup dùng một lần để tạo admin đầu tiên ngay trên trình duyệt. Đăng nhập một lần qua OpenID Connect hoặc qua header định danh của reverse proxy được mô tả trong docs/AUTH.md; người dùng SSO sẽ tạo token IRC cho client của mình trên trang cài đặt.
Cấu hình không có file
Parley không có file cấu hình. Cấu hình nằm ở hai nơi, và mỗi thứ chỉ nằm ở đúng một nơi:
- Cờ dòng lệnh, mỗi cờ đi kèm một biến môi trường, dành cho những gì tiến trình cần trước khi mở được cơ sở dữ liệu, những gì mô tả máy và mạng nó chạy trên, cùng các bí mật và quyết định tin cậy về việc ai được phép khẳng định một định danh. Cờ thắng biến môi trường. Chỉ
-domainlà bắt buộc. - Cài đặt trong cơ sở dữ liệu, dành cho mọi thứ mà quản trị viên có thể thay đổi khi instance đang chạy. Chúng có hiệu lực ngay khi lưu, không cần khởi động lại, và không có cờ hay biến môi trường tương ứng.
Chỉ những giá trị khác mặc định mới được lưu, nên một bản nâng cấp thay đổi giá trị mặc định sẽ thay đổi nó cho mọi instance chưa từng đụng tới khóa đó.
Gia cố bảo mật: proxy, tốc độ và khóa định danh
Khi TLS được kết thúc phía trước bộ lắng nghe IRC, mọi client đều đến từ proxy: log ghi sai host, và các giới hạn theo địa chỉ hoặc không làm gì, hoặc khóa tất cả mọi người cùng lúc. Giải pháp là liệt kê proxy trong irc_proxies, và khi đó proxy bắt buộc phải thêm header PROXY protocol (v1 hoặc v2) vào mỗi kết nối.
Đây là hai thay đổi và không cái nào hoạt động một mình. Liệt kê một proxy không gửi header sẽ làm rớt mọi kết nối từ nó; còn gửi header từ một địa chỉ không nằm trong danh sách sẽ đẩy dữ liệu rác vào bộ phân tích IRC. Không có thứ tự an toàn nào, nên hãy đổi cả hai cùng lúc và sẵn sàng khôi phục cả hai.
Những kết nối bị từ chối được đếm trong parley_irc_proxy_rejected_total — đây là chỉ số cần theo dõi trong quá trình thay đổi.
Về phía web, /metrics phục vụ định dạng văn bản Prometheus: số kết nối, tài khoản trực tuyến, kênh, peer đã liên kết, cùng các bộ đếm cho push, sự kiện inbox, lượt đọc feed, tin nhắn tag và những gì bị từ chối. Mặc định nó cần token quản trị, vì việc có bao nhiêu người trên một instance là chuyện của người vận hành.
File /identity.key là thứ duy nhất không thể tạo lại. Định danh của tên miền chính là cặp khóa: mất nó thì mọi peer đã lưu khóa công khai cũ sẽ từ chối instance, và cách duy nhất để sửa là tạo khóa mới mà tất cả phải tin cậy lại. Hãy sao lưu nó trên host và ngoài host.
Nếu khóa bị lộ, việc thay thế là một thao tác được hỗ trợ chứ không phải thảm họa. Peer tự phục hồi: một chữ ký không xác minh được khiến chúng đọc lại tài liệu instance một lần, và đó là nơi chúng tìm thấy khóa công khai mới.
Những thay đổi gần đây cần lưu ý
Một số điều đã thay đổi trong các phiên bản gần đây, mới nhất xếp trước:
- Giới hạn tốc độ tin nhắn:
message_rate(1 tin/giây) vàmessage_burst(20 tin cùng lúc) áp dụng cho mọi người trừ bot, tính theo tài khoản. Tin nhắn bị từ chối sẽ nhận mã 439 nêu tên đích và không được gửi đi đâu cả. - Định dạng định danh từ xa: người dùng trên instance khác nay là
alice:foo.com, không còn làalice/foo.com. Dấu phân cách cũ khiến các client nghiêm ngặt hiểu nhầm toàn bộ prefix là tên server và loại bỏ mọi JOIN, PART, QUIT, NICK, AWAY từ người dùng từ xa — trong khi PRIVMSG suy giảm âm thầm, đó là lý do chat trông vẫn ổn mà roster không bao giờ cập nhật. - Biểu cảm (reaction) gửi tới peer cũ hơn v0.5.0 sẽ bị mất chứ không được xếp hàng chờ.
GET /api/v1/statuskhông còn công bố danh sách thành viên kênh nữa. Đây là endpoint không cần xác thực duy nhất, và trước đây nó nêu tên từng thành viên của mọi kênh toàn cầu — kể cả người dùng của các peer, thay mặt họ, trong khi trang chủ của chính họ chỉ công bố số lượng chứ không nêu tên.
make test chạy các kịch bản end-to-end trong tiến trình, bao phủ kênh toàn cầu và cục bộ, tin nhắn trực tiếp với việc kết nối peer tự động, trao đổi peer, bắt kịp sau thời gian ngừng hoạt động, từ chối chữ ký và những kiến thức IRC cơ bản.
Góc nhìn cho người dùng Việt Nam
Với các nhóm phát triển phần mềm, cộng đồng mã nguồn mở hay doanh nghiệp nhỏ ở Việt Nam đang tìm kiếm một giải pháp chat tự chủ dữ liệu, Parley là một hướng đáng quan tâm. Thay vì phụ thuộc vào một nền tảng tập trung nước ngoài, mỗi tổ chức có thể tự vận hành instance trên tên miền riêng, đồng thời vẫn liên lạc được với các instance khác trong mạng liên hợp.
Điểm cộng lớn là khả năng tương thích với IRC — giao thức đã có hàng chục năm lịch sử và hệ sinh thái client phong phú. Tuy nhiên, vì dự án vẫn ở giai đoạn chứng minh khái niệm và chưa được gia cố bảo mật đầy đủ, các đội ngũ nên cân nhắc kỹ trước khi triển khai cho môi trường sản xuất, đặc biệt là việc quản lý khóa định danh và cấu hình proxy đúng cách.
Docker pulls
Bài viết liên quan

Công nghệ
Nộp đơn xin việc lẽ ra nên khó hơn. Thật đấy
25 tháng 8, 2026

Công nghệ
Mô hình AI hàng đầu giỏi Vật lý đến đâu? Nghiên cứu mới chỉ ra các bài kiểm tra hiện hành đang đánh giá sai
16 tháng 9, 2026
Công nghệ
Từ Người Dùng đến Người Kiến Tạo: Đưa 200 Thành Viên Trong Đội Ngũ Trở Thành Nhà Sáng Tạo AI Agent Chỉ Trong 2 Tuần
28 tháng 9, 2026