[Open Source] #136 - Gokapi: Hệ thống chia sẻ tệp tin tự lưu trữ với kiến trúc Go-WASM, mã hóa E2E và tư duy Cloud-native "Zero-dependency"
Trong bối cảnh các dịch vụ chia sẻ tệp tin trực tuyến thường xuyên thu thập dữ liệu người dùng hoặc giới hạn dung lượng, Gokapi xuất hiện như một giải pháp thay thế hoàn hảo cho Firefox Send (đã ngừng hoạt động). Dự án tập trung vào ba trụ cột: Bảo mật tuyệt đối (E2E), Hiệu suất cực cao trên phần cứng yếu (Raspberry Pi), và Khả năng triển khai "chạy ngay" (Portable binary).
Dưới góc độ kỹ thuật, Gokapi là một minh chứng xuất sắc cho việc sử dụng WebAssembly (WASM) để đồng bộ hóa logic mã hóa giữa Client và Server, đồng thời tối ưu hóa tài nguyên thông qua cơ chế Chunked Streaming.
Github: https://github.com/Forceu/Gokapi
🛠️ 1. Nền tảng công nghệ: Go v1.24+ và Kỹ thuật CGO-free
Gokapi được xây dựng để trở thành một "Single Binary" mạnh mẽ, có thể chạy trên mọi kiến trúc mà không cần cài đặt thêm thư viện phụ thuộc:
- Backend (Golang): Tận dụng Go v1.24/1.25 để biên dịch ra file thực thi tĩnh. Việc sử dụng phiên bản Go mới giúp tối ưu hóa bộ dọn rác (GC) và tăng hiệu suất xử lý I/O.
- WebAssembly (WASM): Đây là điểm "Pro" nhất của dự án. Gokapi sử dụng Go để biên dịch sang WASM, cho phép trình duyệt chạy mã nguồn Go để thực hiện mã hóa/giải mã tệp tin, đảm bảo tính nhất quán của thuật toán ở cả hai đầu.
- CGO-free SQLite: Sử dụng
modernc.org/sqlite(phiên bản SQLite viết hoàn toàn bằng Go). Kỹ thuật này loại bỏ sự phụ thuộc vào các thư viện C hệ thống, cho phép biên dịch chéo (cross-compile) sang ARM64 (cho NAS) hay Windows cực kỳ đơn giản. - DARE Encryption: Tích hợp
sio-gođể mã hóa dữ liệu theo chuẩn DARE (Data-At-Rest-Encryption), bảo vệ tệp tin ngay từ khi chúng nằm trên đĩa cứng của server.
🏗️ 2. Trụ cột kiến trúc: Trừu tượng hóa lưu trữ và Mã hóa đa tầng
Kiến trúc của Gokapi được thiết kế để thích ứng với mọi quy mô từ cá nhân đến doanh nghiệp:
- Storage & DB Abstraction: Hệ thống định nghĩa các Interface linh hoạt cho tầng lưu trữ. Bạn có thể lưu file tại local hoặc đẩy lên các đám mây tương thích S3 (Cloudflare R2, Backblaze B2) mà không cần thay đổi code nghiệp vụ. Tương tự, hệ thống hỗ trợ hoán đổi giữa SQLite (cho cá nhân) và Redis (cho hiệu suất cao).
- Memory-efficient Chunking: Thay vì nạp toàn bộ tệp tin vào RAM, Gokapi chia nhỏ tệp thành các chunk (mặc định 45MB) và xử lý theo dạng luồng (Stream). Điều này cho phép server chỉ có 512MB RAM vẫn có thể tải lên/xuống các tệp tin hàng chục GB mượt mà.
- 4-Level Security Model: Từ "No Encryption" đến "End-to-End Encryption". Ở cấp độ cao nhất, key mã hóa được lưu trong URL (phần hash
#) và không bao giờ được gửi lên server, biến server thành một "kho chứa mù" đúng nghĩa.
🔄 3. Workflow: Quy trình tải lên mã hóa E2E (Sequence Diagram)
Sơ đồ mô tả cách Gokapi phối hợp giữa WASM trên trình duyệt và Go trên Server:

⚡ 4. Các kỹ thuật "Pro-level" trong mã nguồn
- Symmetry in Cryptography (Go-WASM Synergy): Việc sử dụng Go cho cả WASM và Backend đảm bảo rằng các cấu trúc dữ liệu và logic mã hóa là bản sao hoàn hảo của nhau. Điều này loại bỏ các lỗi sai lệch (mismatch) thường thấy khi kết hợp giữa JavaScript (Client) và các ngôn ngữ khác (Server).
- Smart Hotlinking: Gokapi có logic xử lý HTTP Header cực kỳ thông minh (
Content-Disposition,ETag,Cache-Control). Điều này cho phép người dùng nhúng trực tiếp ảnh từ Gokapi vào trang web khác (Hotlink) mà vẫn đảm bảo hiệu suất cache của trình duyệt. - Data Deduplication: Trước khi lưu trữ, hệ thống thực hiện kiểm tra Hash. Nếu tệp tin đã tồn tại trên server (từ người dùng khác), Gokapi chỉ tạo một liên kết trỏ đến tệp hiện có, giúp tiết kiệm dung lượng lưu trữ tối đa.
- Graceful Orchestration: Mã nguồn trong
internal/được tách biệt rõ rệt giữa logic nghiệp vụ và logic hạ tầng, cho phép hệ thống thực hiện "Graceful Shutdown" — đóng mọi kết nối và flush dữ liệu xuống đĩa trước khi dừng hẳn.
⚖️ 5. So sánh chiến lược
| Tiêu chí | Gokapi | Firefox Send (Clone) | WeTransfer (SaaS) |
|---|---|---|---|
| Bảo mật | E2E (Key ở Client) | E2E | Chỉ TLS/SSL (SaaS) |
| Triển khai | Single Binary (Rất dễ) | Node.js (Phức tạp hơn) | N/A |
| Lưu trữ | Local / S3 / R2 | Local | Cloud của họ |
| Xác thực | OIDC / User / Admin | Thường không có | Email/Tài khoản |
| Phần cứng | Tối ưu cho ARM/Raspberry Pi | Tốn RAM hơn | N/A |
✅ Kết luận: Tại sao Gokapi là hình mẫu cho ứng dụng Go hiện đại?
Gokapi chứng minh rằng một ứng dụng lưu trữ không nhất thiết phải cồng kềnh. Bằng cách làm chủ WebAssembly và kiến trúc Interface-driven, dự án đã tạo ra một công cụ vừa có tính pháp lý (không biết nội dung file), vừa có tính thực dụng (nhẹ và nhanh).
Đối với các kỹ sư Backend, nghiên cứu Gokapi giúp bạn hiểu sâu về:
- Kỹ thuật Biên dịch chéo và CGO-free trong Go.
- Cách triển khai Mã hóa luồng (Streaming Encryption) an toàn.
- Tư duy Đồng bộ logic Client-Server thông qua WASM.
All rights reserved