Back to articles
Technology Insight

Xây dựng Trạm trung chuyển Dữ liệu Phi tập trung Nostr Relay bằng Rust trên VPS Cấu hình Thấp

June 5, 2026

Giới thiệu về Giao thức Nostr và Vai trò của Relay

Trong kỷ nguyên số hiện nay, sự phụ thuộc vào các nền tảng mạng xã hội tập trung đã bộc lộ nhiều hạn chế về quyền riêng tư, kiểm duyệt dữ liệu và quyền sở hữu danh tính số. Nostr (Notes and Other Stuff Transmitted by Relays) nổi lên như một giải pháp thay thế đột phá. Đây là một giao thức mạng mở, phi tập trung, cho phép truyền tải thông tin mã hóa một cách an toàn mà không cần đến bất kỳ máy chủ trung tâm nào điều phối.

Kiến trúc của Nostr hoạt động dựa trên hai thành phần cốt lõi: Clients (Ứng dụng người dùng) và Relays (Trạm trung chuyển dữ liệu). Trong khi Client chịu trách nhiệm ký số và hiển thị dữ liệu, thì Relay đóng vai trò như các nút mạng lưu trữ và phân phối các sự kiện (events). Bất kỳ ai cũng có thể tự dựng một Relay cho riêng mình hoặc cho cộng đồng. Việc tự vận hành một Nostr Relay không chỉ giúp bạn chủ động kiểm soát luồng dữ liệu, tăng tốc độ truy cập cá nhân mà còn góp phần gia tăng tính bền vững và khả năng chống kiểm duyệt cho toàn bộ hệ sinh thái phi tập trung này.

Tại sao nên lựa chọn Rust cho Nostr Relay trên VPS 1 vCPU?

Khi triển khai dịch vụ trên các máy chủ có tài nguyên hạn chế như VPS gói cơ bản (chỉ với 1 vCPU và 1GB đến 2GB RAM), việc lựa chọn ngôn ngữ lập trình và phần mềm nền tảng là yếu tố quyết định sự sống còn của hệ thống. Các giải pháp viết bằng Node.js hoặc Python thường tiêu tốn nhiều tài nguyên bộ nhớ và có độ trễ lớn khi xử lý lượng kết nối đồng thời cao.

Rust là sự lựa chọn hoàn hảo cho bài toán này nhờ vào những ưu điểm vượt trội:

  • Hiệu năng tối đa: Rust không sử dụng bộ thu gom rác (Garbage Collector), giúp giải phóng bộ nhớ ngay lập tức và giảm thiểu tối đa độ trễ phản hồi.
  • Quản lý tài nguyên nghiêm ngặt: Cơ chế kiểm soát quyền sở hữu (Ownership) của Rust đảm bảo an toàn bộ nhớ, ngăn chặn triệt để các lỗi rò rỉ RAM thường gặp.
  • Xử lý bất đồng bộ mạnh mẽ: Với hệ sinh thái Tokio, một Relay viết bằng Rust có thể dễ dàng xử lý hàng ngàn kết nối WebSocket đồng thời chỉ với một phần nhỏ tài nguyên của 1 vCPU.

Trong bài viết này, chúng ta sẽ sử dụng nostr-rs-relay, một trong những mã nguồn mở triển khai Nostr Relay bằng Rust phổ biến và tối ưu nhất hiện nay.

Chuẩn bị Môi trường và Yêu cầu Hệ thống

Để bắt đầu triển khai, bạn cần chuẩn bị một máy chủ ảo VPS với cấu hình tối thiểu như sau:

  • CPU: 1 vCPU
  • RAM: 1 GB (Khuyến khích 2 GB nếu lưu trữ lượng dữ liệu lớn)
  • Hệ điều hành: Ubuntu 22.04 LTS hoặc Ubuntu 24.04 LTS
  • Tên miền (Domain): Đã trỏ bản ghi A về địa chỉ IP của VPS để thiết lập kết nối mã hóa SSL/TLS an toàn (WSS).

Quy trình Từng bước Triển khai Nostr Relay bằng Rust

Bước 1: Cập nhật Hệ thống và Cài đặt Docker

Để đơn giản hóa quá trình cài đặt và quản lý các phụ thuộc của Rust, chúng ta sẽ sử dụng Docker và Docker Compose. Cách tiếp cận này giúp cô lập ứng dụng và đảm bảo tính nhất quán.

sudo apt update && sudo apt upgrade -y
sudo apt install docker.io docker-compose -y
sudo systemctl enable --now docker

Bước 2: Cấu hình nostr-rs-relay

Tạo một thư mục làm việc riêng cho trạm trung chuyển của bạn và tiến hành thiết lập tệp cấu hình cấu trúc dữ liệu:

mkdir ~/nostr-relay && cd ~/nostr-relay
nano config.toml

Sao chép cấu hình cơ bản sau vào tệp config.toml để giới hạn tải và tối ưu hóa cho VPS 1 vCPU:

[info] relay_url = "wss://nostr.yourdomain.com/" name = "Trạm Nostr Phi Tập Trung Của Tôi" description = "Nostr Relay cá nhân chạy bằng Rust trên VPS tối ưu" pubkey = "pubkey_hex_cua_ban_o_day" [network] address = "0.0.0.0" port = 8080 [database] data_directory = "./data" in_memory = false [limits] max_event_size = 65536 max_ws_message_size = 131072 max_filters = 100

Lưu ý: Hãy thay thế relay_url bằng tên miền của bạn và điền khóa công khai (pubkey) định dạng Hex để định danh bạn là quản trị viên của Relay.

Bước 3: Khởi chạy Relay bằng Docker Compose

Tạo tệp docker-compose.yml để định nghĩa dịch vụ:

nano docker-compose.yml

Thêm nội dung cấu hình dưới đây:

version: '3'
services:
  relay:
    image: scinfra/nostr-rs-relay:latest
    ports:
      - "8080:8080"
    volumes:
      - ./config.toml:/usr/src/app/config.toml
      - ./data:/usr/src/app/data
    restart: always

Khởi chạy dịch vụ ở chế độ chạy ngầm (detached mode):

sudo docker-compose up -d

Cấu hình Reverse Proxy với Nginx và SSL để Bảo mật Kết nối

Các Client của Nostr yêu cầu kết nối bảo mật qua giao thức WebSocket Secure (WSS). Do đó, chúng ta cần thiết lập Nginx làm Reverse Proxy và sử dụng Let's Encrypt để cấp chứng chỉ SSL miễn phí.

Cài đặt Nginx và Certbot

sudo apt install nginx certbot python3-certbot-nginx -y

Cấu hình Nginx

Tạo tệp cấu hình ảo cho tên miền của bạn:

sudo nano /etc/nginx/sites-available/nostr

Nhập cấu hình chuyển tiếp WebSocket sau:

server {
    server_name nostr.yourdomain.com;

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $$http_upgrade;
        proxy_set_header Connection "Upgrade";
        proxy_set_header Host $$host;
        proxy_set_header X-Real-IP $$remote_addr;
        proxy_set_header X-Forwarded-For $$proxy_add_x_forwarded_for;
    
        # Tối ưu hóa bộ đệm cho kết nối thời gian thực
        proxy_buffering off;
        proxy_read_timeout 86400s;
        proxy_send_timeout 86400s;
    }
}

Kích hoạt cấu hình và khởi động lại Nginx:

sudo ln -s /etc/nginx/sites-available/nostr /etc/nginx/sites-enabled/
sudo systemctl restart nginx

Cấp chứng chỉ SSL Let's Encrypt

sudo certbot --nginx -d nostr.yourdomain.com

Certbot sẽ tự động cấu hình và tích hợp chứng chỉ SSL vào Nginx. Giờ đây, trạm trung chuyển dữ liệu của bạn đã sẵn sàng hoạt động tại địa chỉ wss://nostr.yourdomain.com.

Kiểm tra và Tối ưu hóa Hiệu năng trên 1 vCPU

Sau khi thiết lập thành công, bạn có thể truy cập vào các ứng dụng Nostr Client phổ biến như Amethyst (Android), Damus (iOS), hoặc Coracle (Web) để thêm địa chỉ Relay của mình vào danh sách kết nối. Kiểm tra khả năng gửi và nhận tin nhắn để đảm bảo luồng dữ liệu thông suốt.

Để giám sát tài nguyên của VPS 1 vCPU, hãy sử dụng lệnh htop hoặc docker stats. Bạn sẽ nhận thấy một sự thật kinh ngạc: nhờ vào kiến trúc tối ưu của Rust, lượng CPU tiêu thụ ở trạng thái nghỉ gần như bằng 0%, và dung lượng RAM chiếm dụng thường chỉ dao động từ vài chục đến dưới 100MB cho các tác vụ cơ bản. Đây là minh chứng rõ ràng nhất cho sức mạnh của việc tối ưu hóa mã nguồn ở cấp độ hệ thống.

Lời kết

Việc tự xây dựng một Nostr Relay bằng Rust trên VPS 1 vCPU không hề phức tạp như nhiều người lầm tưởng. Bằng cách kết hợp tính hiệu quả của ngôn ngữ Rust và sự tiện lợi của Docker, chúng ta đã tối ưu hóa triệt để phần cứng có chi phí thấp để tạo ra một nút mạng hoạt động bền bỉ, an toàn và độc lập. Hành động nhỏ này đóng góp một phần quan trọng vào việc bảo vệ quyền tự do thông tin và củng cố hạ tầng cho một internet phi tập trung trong tương lai.