Dùng Appwrite thay Supabase: hướng dẫn dựng backend full-stack từ đầu
Supabase nổi mạnh vì đưa PostgreSQL, Auth, Storage, Realtime vào một bộ dễ dùng. Nhưng không phải dự án nào cũng cần SQL, row-level security, hoặc hệ sinh thái Postgres. Nếu muốn backend tự host, API rõ, tích hợp nhanh với web/mobile, có Auth, Database, Storage, Functions, Realtime trong một nơi, Appwrite là lựa chọn đáng cân nhắc.
Appwrite hợp với đội muốn dựng backend full-stack nhanh, kiểm soát hạ tầng, dùng document database, ít cấu hình SQL phức tạp. Bài này hướng dẫn dựng backend từ đầu: cài Appwrite, tạo project, cấu hình Auth, Database, Storage, Function, rồi kết nối frontend.
Appwrite khác Supabase ở đâu?
Mô hình dữ liệu
Supabase dùng PostgreSQL. Mạnh khi dữ liệu quan hệ nhiều, query phức tạp, cần transaction sâu, reporting, analytics.
Appwrite dùng Database dạng collection/document. Gần MongoDB hơn. Mỗi collection có attributes, indexes, permissions. Hợp app CRUD, dashboard, SaaS nhỏ, mobile app, prototype, nội dung user tạo.
Appwrite vẫn query được theo field, sort, paginate, filter. Nhưng không có join SQL. Muốn dữ liệu liên kết, cần thiết kế denormalized hoặc gọi nhiều query.
Quyền truy cập
Supabase mạnh với Row Level Security. Appwrite dùng permissions theo document/collection.
Cách này trực quan, dễ hiểu với app nhỏ-vừa. Nhưng nếu policy phức tạp theo nhiều điều kiện, Supabase RLS linh hoạt hơn.
Self-hosting
Appwrite thiết kế self-host tốt qua Docker. Có cloud riêng, nhưng bản self-host dễ dựng.
Supabase cũng self-host được, nhưng stack nặng hơn: Postgres, Kong, GoTrue, Realtime, Storage, Studio, v.v.
Nếu mục tiêu: “chạy một backend đầy đủ trên VPS nhỏ”, Appwrite thường nhẹ đầu hơn.
Kiến trúc full-stack với Appwrite
Một app Appwrite phổ biến gồm:
– Frontend: Next.js, React, Vue, Svelte, Flutter, React Native.
– Appwrite API: Auth, Databases, Storage, Functions.
– Appwrite Console: quản trị project.
– Functions: chạy logic server-side như gửi email, xử lý payment, webhook.
– Realtime: lắng nghe thay đổi document, session, file.
Luồng cơ bản:
1. User đăng ký/đăng nhập qua Auth.
2. Frontend gọi Database API để tạo/read document.
3. Permission kiểm soát user nào đọc/sửa được gì.
4. File upload vào Storage bucket.
5. Function xử lý logic nhạy cảm, dùng API key server-side.
Cài Appwrite bằng Docker
Cần Docker và Docker Compose. Trên VPS Linux, chạy lệnh cài chính thức:
docker run -it --rm
--volume /var/run/docker.sock:/var/run/docker.sock
--volume "$(pwd)"/appwrite:/usr/src/code/appwrite:rw
--entrypoint="install"
appwrite/appwrite:latest
Installer hỏi domain, port, SSL, SMTP. Với local dev, có thể dùng localhost. Sau khi chạy xong, mở:
– slug unique nếu mỗi bài cần slug riêng.
– authorId để query bài theo user.
– status để lọc bài published.
– createdAt để sort danh sách.
Permissions collection nên để chặt. Ví dụ:
– User authenticated được create.
– Document owner được read/update/delete.
– Public chỉ read bài published? Appwrite permission không tự kiểm tra status, nên với public read published, nên dùng Function hoặc tách collection.
Trong thực tế, cần kiểm tra user gọi function có phải author không. Có thể đọc JWT/session từ request hoặc thiết kế endpoint dùng Appwrite execution context.
Realtime cho trải nghiệm sống
Appwrite Realtime giúp frontend nghe thay đổi database:
Chỉ biến public không chứa secret. API key chỉ dùng trong server route hoặc Appwrite Function.
Checklist deploy:
– Domain frontend đã thêm vào Appwrite platform.
– HTTPS hoạt động.
– SMTP cấu hình nếu dùng email verification/password reset.
– Backup volume Appwrite.
– Rate limit/WAF nếu public lớn.
– Logs và monitoring có chỗ xem.
Khi nào nên chọn Appwrite thay Supabase?
Chọn Appwrite nếu:
– Muốn backend full-stack dễ self-host.
– App CRUD/document nhiều hơn relational query.
– Team thích permission rõ theo document.
– Cần Auth, Storage, Functions, Realtime trong một console.
– Muốn dùng chung cho web và mobile.
Giữ Supabase nếu:
– Cần PostgreSQL mạnh.
– Query nhiều join, aggregate, report.
– Cần RLS phức tạp.
– Dữ liệu quan hệ là lõi sản phẩm.
– Team đã quen SQL sâu.
Kết luận thực tế
Appwrite không phải “Supabase nhưng khác màu”. Nó là hướng backend khác: document-first, permission-first, self-host thân thiện. Với SaaS nhỏ, app nội bộ, mobile app, CMS tùy biến, MVP cần ra nhanh, Appwrite giúp giảm nhiều việc lặp: Auth, Database, Storage, Realtime, Functions.
Cách dựng tốt: bắt đầu nhỏ, thiết kế collection rõ, tạo index từ sớm, giữ permission chặt, đẩy logic nhạy cảm vào Functions, không để API key ra frontend. Nếu sau này dữ liệu cần quan hệ sâu hoặc analytics nặng, có thể ghép thêm Postgres/service riêng.
Appwrite thay Supabase tốt khi bài toán hợp mô hình. Chọn theo dữ liệu, quyền truy cập, vận hành. Không chọn theo độ hot.