Appwrite:开源后端即服务神器,快速构建Web和移动应用
Appwrite:开源后端即服务神器,快速构建Web和移动应用
背景
开发 Web 和移动应用时,后端开发往往是最耗时的部分:
- 需要搭建用户认证系统
- 需要设计数据库结构
- 需要配置文件存储服务
- 需要开发 API 接口
- 需要部署和维护服务器
传统方式需要投入大量时间和精力。后端即服务(BaaS)的出现,就是为了解决这个问题。
提到 BaaS,大多数人首先想到的是 Firebase。但 Firebase 是 Google’s 闭源服务,存在数据隐私、定价、语言限制等问题。
今天介绍一款开源的 BaaS 平台——Appwrite,它提供完整的后端解决方案,同时支持完全自托管。
什么是 Appwrite?
Appwrite 是一个开源的后端即服务(BaaS)平台,为 Web、移动端和原生应用提供完整的后端服务。
核心特性:
| 特性 | 说明 |
|---|---|
| 开源免费 | BSD-3 许可证,完全开源 |
| 自托管 | 可部署在自己的服务器 |
| 用户认证 | 支持邮箱、OAuth、SMS 等多种登录方式 |
| 数据库 | 关系型数据库,支持实时订阅 |
| 文件存储 | 图片、视频、文档存储,支持缩略图 |
| 云函数 | 支持多种语言的 Serverless 函数 |
| 消息服务 | 邮件、短信、推送通知 |
| 团队协作 | 团队和权限管理 |
GitHub 地址:https://github.com/appwrite/appwrite
官网:https://appwrite.io
Appwrite vs Firebase vs Supabase
| 对比项 | Appwrite | Firebase | Supabase |
|---|---|---|---|
| 开源 | ✅ BSD-3 | ❌ 闭源 | ✅ Apache 2.0 |
| 数据库类型 | 关系型 | NoSQL | 关系型 (PostgreSQL) |
| 数据库 | MySQL | Firestore | PostgreSQL |
| 自托管 | ✅ 完全支持 | ❌ 不支持 | ✅ 完全支持 |
| 云函数 | ✅ 多语言 | ✅ Node.js | ✅ 多语言 |
| 实时订阅 | ✅ | ✅ | ✅ |
| 文件存储 | ✅ | ✅ | ✅ |
| 邮件服务 | ✅ 内置 | ❌ 需集成 | ❌ 需集成 |
| 推送通知 | ✅ | ✅ | ❌ |
| SDK 支持 | 20+ | 10+ | 10+ |
Appwrite 的独特优势:
- 专为 Docker 设计,微服务架构
- 支持多种数据库(MySQL、PostgreSQL、MongoDB)
- 内置邮件和短信服务
- 更现代的 API 设计
- 完善的 SDK(Web、iOS、Android、Flutter、React Native 等)
快速上手
方式一:在线使用
Appwrite 提供免费的云服务,注册即可使用:
- 访问 https://cloud.appwrite.io
- 使用 GitHub 或 Google 账号登录
- 创建第一个项目
方式二:Docker 部署(推荐)
使用 Docker Compose 一键部署:
# 创建目录mkdirappwrite&&cdappwrite# 下载 docker-compose.ymlcurl-L"https://github.com/appwrite/appwrite/raw/main/docker-compose.yml"-odocker-compose.yml# 启动服务docker-composeup-d# 访问管理后台# http://localhost首次访问时,需要设置管理员邮箱和密码。
方式三:独立容器部署
dockerrun-it--rm\--nameappwrite\-p80:80\-p443:443\-p3000:3000\-p3001:3001\-v/var/run/docker.sock:/var/run/docker.sock\-v$(pwd)/data:/storage/data:rw\appwrite/appwrite:1.5核心功能详解
1. 用户认证
Appwrite 提供完整的用户认证系统:
支持的登录方式:
| 方式 | 说明 |
|---|---|
| 邮箱/密码 | 传统的邮箱密码注册登录 |
| OAuth2.0 | Google、GitHub、Facebook、Apple 等 |
| 手机号/SMS | 手机号 + 验证码登录 |
| 匿名访问 | 临时访问,适用于游客用户 |
| Magic URL | 邮箱链接登录 |
SDK 使用示例:
// Web SDKimport{Client,Account}from"appwrite";// 初始化客户端constclient=newClient();client.setEndpoint("https://cloud.appwrite.io/v1").setProject("[PROJECT_ID]");constaccount=newAccount(client);// 邮箱注册asyncfunctionregister(email,password,name){awaitaccount.create("unique()",email,password,name);awaitaccount.createEmailSession(email,password);returnawaitaccount.get();}// OAuth 登录asyncfunctionloginWithGoogle(){account.createOAuth2Session('google','http://localhost:3000/callback','http://localhost:3000/error');}// 获取当前用户asyncfunctiongetCurrentUser(){returnawaitaccount.get();}// 退出登录asyncfunctionlogout(){awaitaccount.deleteSession('current');}// iOS SDK (Swift)importAppwriteletclient=Client().setEndpoint("https://cloud.appwrite.io/v1").setProject("[PROJECT_ID]")letaccount=Account(client)// 邮箱注册funcregister(email:String,password:String,name:String)asyncthrows{tryawaitaccount.create(userId:"unique()",email:email,password:password,name:name)tryawaitaccount.createEmailSession(email:email,password:password)}2. 数据库
Appwrite 支持关系型数据库,提供集合、文档、索引管理:
核心概念:
| 概念 | 说明 |
|---|---|
| Database | 数据库 |
| Collection | 集合(相当于表) |
| Attribute | 属性(字段) |
| Index | 索引 |
| Document | 文档(记录) |
SDK 使用示例:
import{Client,Databases,ID,Query}from"appwrite";constdatabases=newDatabases(client);// 创建文档asyncfunctioncreatePost(title,content,authorId){constpost=awaitdatabases.createDocument('[DATABASE_ID]','[COLLECTION_ID]',ID.unique(),{title:title,content:content,authorId:authorId,createdAt:newDate().toISOString()});returnpost;}// 查询文档asyncfunctiongetPosts(limit=10){constposts=awaitdatabases.listDocuments('[DATABASE_ID]','[COLLECTION_ID]',[Query.orderDesc('$createdAt'),Query.limit(limit)]);returnposts.documents;}// 实时订阅functionsubscribeToPosts(callback){constunsubscribe=client.subscribe('databases.[DATABASE_ID].collections.[COLLECTION_ID].documents',(response)=>{if(response.events.includes('databases.*.collections.*.documents.*.create')){callback(response.payload);}});returnunsubscribe;}权限管理:
Appwrite 提供细粒度的文档权限控制:
// 创建时设置权限{"$id":ID.unique(),"title":"My Post","$permissions":{"read":["user:123","team:456"],"write":["user:123"],"delete":["user:123","role:admin"]}}3. 文件存储
Appwrite 提供文件上传、存储和管理功能:
import{Client,Storage,Buckets,ID}from"appwrite";conststorage=newStorage(client);// 上传文件asyncfunctionuploadFile(file){constuploaded=awaitstorage.createFile('[BUCKET_ID]',ID.unique(),file);returnuploaded;}// 获取文件预览functiongetFilePreview(fileId,width=300,height=300){return`${ENDPOINT}/storage/buckets/[BUCKET_ID]/files/${fileId}/preview?width=${width}&height=${height}`;}// 下载文件asyncfunctiondownloadFile(fileId){constresult=awaitstorage.getFileDownload('[BUCKET_ID]',fileId);returnresult;}// 删除文件asyncfunctiondeleteFile(fileId){awaitstorage.deleteFile('[BUCKET_ID]',fileId);}图片处理:
// 直接在 URL 中指定参数constimageUrl=`${ENDPOINT}/storage/buckets/[BUCKET_ID]/files/[FILE_ID]/preview? width=800& height=600& gravity=center& quality=80& borderWidth=2& borderColor=000000`;4. 云函数
Appwrite 支持 Serverless 函数,可以使用多种语言编写:
支持的运行时:
| 语言 | 版本 |
|---|---|
| Node.js | 16, 18, 20 |
| PHP | 8.0, 8.1, 8.2 |
| Ruby | 3.0, 3.1 |
| Python | 3.9, 3.10, 3.11 |
| Dart | 2.18 |
| Go | 1.18, 1.20 |
| .NET | 6.0, 7.0 |
函数示例(Node.js):
module.exports=asyncfunction(req,res){constdb=req.variables['APPWRITE_FUNCTION_DATA'];constpayload=JSON.parse(req.payload||'{}');// 处理请求constresult={success:true,message:'Hello from Appwrite Function!',input:payload,timestamp:newDate().toISOString()};// 返回响应res.json(result);};函数触发方式:
| 触发方式 | 说明 |
|---|---|
| HTTP | 通过 HTTP 请求触发 |
| 定时 | Cron 任务调度 |
| 事件 | 根据数据库/存储事件触发 |
| 手动 | 手动调用 |
5. 消息服务
Appwrite 内置消息服务,支持邮件和短信:
import{Client,Messaging}from"appwrite";constmessaging=newMessaging(client);// 发送邮件asyncfunctionsendEmail(to,subject,content){constmessage=awaitmessaging.createEmail(ID.unique(),to,subject,content);returnmessage;}// 发送短信asyncfunctionsendSMS(to,message){constresult=awaitmessaging.createSMS(ID.unique(),to,message);returnresult;}// 发送推送通知asyncfunctionsendPushNotification(userId,title,body){constnotification=awaitmessaging.createPush(ID.unique(),title,body,[userId]);returnnotification;}SDK 支持
Appwrite 提供 20+ 官方 SDK:
| 平台 | SDK |
|---|---|
| Web / React | @appwrite/sdk-for-web |
| React Native | @appwrite/sdk-for-react-native |
| Flutter | appwrite |
| iOS / Swift | appwrite |
| Android / Kotlin | appwrite |
| Node.js | @appwrite/sdk-for-node |
| Python | @appwrite/sdk-for-python |
| PHP | @appwrite/sdk-for-php |
| Ruby | @appwrite/sdk-for-ruby |
| Go | @appwrite/sdk-for-go |
| .NET | @appwrite/sdk-for-dotnet |
| Deno | @appwrite/sdk-for-deno |
管理后台
Appwrite 提供现代化的管理后台,可以可视化操作:
- 项目概览:查看 API 调用量、用户活跃度
- 数据库管理:可视化创建集合、属性、索引
- 用户管理:查看用户列表、用户详情、会话管理
- 存储管理:上传文件、管理桶、配置权限
- 函数管理:创建函数、查看日志、监控执行
- 消息管理:配置邮件/短信模板、查看发送记录
部署架构
Appwrite 采用微服务架构,每个服务独立运行:
┌─────────────────────────────────────────────────┐ │ Nginx (反向代理) │ ├─────────────────────────────────────────────────┤ │ Traefik (API 网关) │ ├────────────┬────────────┬────────────┬─────────┤ │ Appwrite │ Appwrite │ Appwrite │ Appwrite│ │ Console │ API │ Auth │ Storage │ ├────────────┴────────────┴────────────┴─────────┤ │ Redis (缓存/队列) │ ├─────────────────────────────────────────────────┤ │ InfluxDB (时序数据) │ ├─────────────────────────────────────────────────┤ │ MariaDB / MongoDB (主数据库) │ └─────────────────────────────────────────────────┘常见问题
Q:Appwrite 和 Supabase 有什么区别?
A:
- Appwrite 更注重微服务架构和 Docker 部署
- Supabase 基于 PostgreSQL,更像传统关系型数据库
- Appwrite 支持更多类型的数据库(MySQL、PostgreSQL、MongoDB)
- Appwrite 内置更多服务(邮件、短信、推送通知)
Q:性能如何?能用于生产环境吗?
A:Appwrite 已被众多公司用于生产环境。但需要注意:
- 合理配置服务器资源
- 使用合适的数据库
- 配置缓存和 CDN
- 做好监控和日志
Q:数据安全如何保证?
A:
- 所有数据传输使用 HTTPS
- 文件存储支持加密
- 细粒度的权限控制
- 支持自托管,数据完全可控
Q:如何升级 Appwrite?
A:
# 拉取最新版本dockerpull appwrite/appwrite:1.6# 停止旧容器docker-composedown# 启动新版本docker-composeup-d适用场景
推荐使用:
- 快速原型和 MVP 开发
- 移动应用后端
- SaaS 产品后端
- 需要数据隐私控制的项目
- 追求开源可控的团队
不推荐使用:
- 超大规模分布式系统
- 需要复杂 SQL 查询的场景
- 对延迟要求极高的实时应用
总结
Appwrite 用"开源 + Docker + 微服务"的架构,为后端即服务提供了一个现代化、可扩展的解决方案。
核心优势回顾:
- 完全开源:BSD-3 许可,代码透明可审计
- 自托管:数据完全可控,满足合规要求
- 功能完备:认证、数据库、存储、云函数、消息一应俱全
- 多 SDK:20+ 官方 SDK,支持所有主流平台
- 现代化架构:Docker 微服务,易于扩展
- 开发者友好:完善的文档和社区支持
对于追求开源、数据可控、快速开发的团队,Appwrite 是构建后端的绝佳选择。
本文由无边界科技技术团队分享,专注软件开发与技术解决方案。
官网:wubianj.com
© 版权归无边界科技所有,版权所有。
