- PocketBase là backend mã nguồn mở dạng tệp đơn bao gồm cơ sở dữ liệu, xác thực, lưu trữ tệp và bảng điều khiển quản trị
- Cấu trúc cơ sở dữ liệu nhúng hiệu năng cao với trình dựng schema, kiểm tra dữ liệu, đăng ký thời gian thực và REST API
- Đơn giản hóa quản lý người dùng với hỗ trợ email/mật khẩu và đăng nhập OAuth2 (Google, Facebook, GitHub, GitLab)
- Lưu trữ tệp an toàn trên bộ nhớ cục bộ hoặc S3, gắn media vào bản ghi cơ sở dữ liệu và tự động tạo thumbnail
- Có thể dùng như ứng dụng độc lập hoặc framework có thể mở rộng bằng Go·JavaScript, hữu ích để xây dựng backend tùy biến gọn nhẹ
Tổng quan về PocketBase
- PocketBase là nền tảng backend mã nguồn mở hoạt động dưới dạng một tệp thực thi duy nhất
- Tích hợp cơ sở dữ liệu, xác thực, lưu trữ tệp và bảng điều khiển quản trị
- Cấu trúc có thể chạy nhanh mà không cần cấu hình máy chủ riêng
Tính năng cơ sở dữ liệu
- Bao gồm cơ sở dữ liệu nhúng hỗ trợ trình dựng schema, kiểm tra dữ liệu, đăng ký thời gian thực và REST API
- Cung cấp khả năng phát hiện và theo dõi thay đổi dữ liệu theo thời gian thực
- Có thể dễ dàng truy vấn, tạo, sửa và xóa dữ liệu thông qua REST API
Xác thực người dùng
- Hỗ trợ quản lý người dùng ứng dụng và đăng nhập bằng email/mật khẩu
- Thông qua xác thực OAuth2, có thể đăng ký và đăng nhập bằng tài khoản Google, Facebook, GitHub, GitLab
Lưu trữ tệp
- Có thể lưu trữ tệp an toàn trên bộ nhớ cục bộ hoặc S3
- Có thể đính kèm tệp media vào bản ghi cơ sở dữ liệu
- Cung cấp tính năng tự động tạo thumbnail khi tải lên
Khả năng mở rộng và hỗ trợ nhà phát triển
- PocketBase có thể được dùng như ứng dụng chạy độc lập hoặc như framework có thể mở rộng thông qua hook Go và JavaScript
- Nhà phát triển có thể thêm logic riêng để triển khai backend tùy biến
Ví dụ JavaScript SDK
- Có thể tương tác với máy chủ PocketBase thông qua JavaScript SDK
- Mã ví dụ minh họa các chức năng lấy danh sách bản ghi của collection
example, truy vấn/xóa/tạo một bản ghi, đăng ký thời gian thực và hủy đăng ký
- Cung cấp các phương thức như
pb.collection('example').getList(), getOne(), create(), delete(), subscribe()
1 bình luận
Ý kiến trên Hacker News
Câu “SQLite không có khả năng mở rộng” phần lớn là ảo giác tối ưu hóa quá sớm
Trên thực tế, hiếm khi đụng tới giới hạn tranh chấp WAL, và tôi nghĩ sự đơn giản của một binary duy nhất tốt hơn rất nhiều so với độ phức tạp của hệ thống phân tán
Dạo này ngay cả các dự án nhỏ cũng mặc định gắn thêm DB cluster và Redis cache, nhưng Pocketbase cho thấy ở 99% ứng dụng CRUD, nút thắt không phải DB mà là độ trễ mạng và thời gian quản trị của lập trình viên
Tôi đã thử bằng benchmark CLI viết bằng Rust, và hiệu năng còn tốt hơn MySQL hay Postgres trên cùng một máy
Với dự án ở quy mô này thì SQLite là tối ưu
Phải xử lý toàn bộ phép tính ở phía ứng dụng nên khá phiền
Cứ thấy Pocketbase là tôi bấm upvote ngay
Tôi đang dùng nó trong nhiều ứng dụng production và nó rất ổn định
Thỉnh thoảng có thay đổi gây vỡ tương thích, nhưng nhìn chung rất tuyệt và cũng mở rộng tốt
Khi thiếu tính năng cần thiết thì hơi khó chịu một chút, nhưng với lập trình viên có kinh nghiệm thì hoàn toàn xử lý được
Chỉ là dự án do một mình tác giả phát triển nên tôi hơi lo về việc bảo trì sau này
Dù vậy, đây vẫn là lựa chọn rất tốt khi cần tách riêng front-end và back-end
Tôi rất hay dùng Pocketbase cho dự án cá nhân và công cụ nội bộ
Dùng cùng PocketPages thì có thể dễ dàng dùng file-based routing và template
Nhờ tính năng DB migration tự động, có thể đưa thay đổi schema vào version control
Tôi thậm chí còn gắn thêm server giao thức Gemini để duyệt đồ thị tri thức cá nhân bằng Lagrange
Pocketbase là một backend server có thể cấu hình bằng GUI
Nó cho phép tạo backend hoạt động gần như không cần code, nên phù hợp cho prototype, MVP và ứng dụng đơn giản
Kiểu khái niệm này được Firebase phổ biến rộng rãi
Backend tôi viết thường cần từ vài trăm tới vài nghìn dòng code, nên tôi muốn hiểu nó thay thế phần đó như thế nào
Tôi cũng tò mò phạm vi ứng dụng có thể làm bằng loại công cụ này
Tôi đã thử dùng Pocketbase trong một side project và thật sự rất ấn tượng
Tôi đã làm việc với Django từ lâu, nhưng với các dự án nhỏ và vừa thì Pocketbase phù hợp hơn nhiều so với việc tự xây backend truyền thống
Nếu có câu hỏi thì tôi sẵn sàng trả lời
Ngoài ra nó có hỗ trợ PostgreSQL không, hay chỉ dành cho SQLite
Vì vậy tôi đã làm một Claude Skill, không biết có ai gặp trải nghiệm tương tự không
Trailbase là phiên bản hiện thực hóa cùng ý tưởng đó bằng Rust
Vì thế tôi đã chuyển sang Trailbase
Tức là nó còn có thể host cả ứng dụng hoàn chỉnh
Liên kết hướng dẫn
Tôi đang dùng Pocketbase làm lớp xác thực cho side project
Nó đang chạy tại kavla.dev, và hệ thống hook của nó rất tuyệt
Nhờ tài liệu Go event hook mà cả tự động hóa hạ tầng cũng có thể triển khai dễ dàng
Tôi đã làm MVP rất nhanh với SQLite và DuckDB, nhưng về sau lại hối hận ở giai đoạn backup và đưa vào production
Có lẽ nếu ngay từ đầu dùng Supabase thì đã nhàn hơn
Tôi đã làm OpenSOHO bằng Pocketbase, và nhờ đó tiết kiệm được rất nhiều thời gian phát triển
Tôi có chỉnh sửa một chút để tái sử dụng backend, nhưng không hề khó
Chỉ nhìn screenshot thôi cũng nhận ra ngay dấu vết của Pocketbase
Liên kết GitHub
Vì lo về chuyện backup SQLite của Pocketbase, tôi đã tự làm sqlrsync.com, một công cụ cho phép backup bằng sqlite3_rsync ngay cả khi đang chạy
MVP đã hoạt động, và vì dựa trên Cloudflare Durable Objects nên nhanh và ổn định
Rất mong nhận được phản hồi