当前位置: 首页 > news >正文

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

对比项AppwriteFirebaseSupabase
开源✅ BSD-3❌ 闭源✅ Apache 2.0
数据库类型关系型NoSQL关系型 (PostgreSQL)
数据库MySQLFirestorePostgreSQL
自托管✅ 完全支持❌ 不支持✅ 完全支持
云函数✅ 多语言✅ Node.js✅ 多语言
实时订阅
文件存储
邮件服务✅ 内置❌ 需集成❌ 需集成
推送通知
SDK 支持20+10+10+

Appwrite 的独特优势:

  • 专为 Docker 设计,微服务架构
  • 支持多种数据库(MySQL、PostgreSQL、MongoDB)
  • 内置邮件和短信服务
  • 更现代的 API 设计
  • 完善的 SDK(Web、iOS、Android、Flutter、React Native 等)

快速上手

方式一:在线使用

Appwrite 提供免费的云服务,注册即可使用:

  1. 访问 https://cloud.appwrite.io
  2. 使用 GitHub 或 Google 账号登录
  3. 创建第一个项目

方式二: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.0Google、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.js16, 18, 20
PHP8.0, 8.1, 8.2
Ruby3.0, 3.1
Python3.9, 3.10, 3.11
Dart2.18
Go1.18, 1.20
.NET6.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
Flutterappwrite
iOS / Swiftappwrite
Android / Kotlinappwrite
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

© 版权归无边界科技所有,版权所有。

http://www.cnnetsun.cn/news/1371518.html

相关文章:

  • nodejs+vue基于springboot的安全生产培训管理系统
  • 【异常】OpenClaw LLM请求超时故障全链路排查与解决方案 LLM request timed out. 网络连接超时了
  • Ubuntu 22.04换国内源保姆级教程(附清华/阿里云/中科大源对比)
  • 股票预测避坑指南:为什么你的Transformer模型跑不过LSTM?(含数据集+超参配置)
  • C++游戏毕设从零起步:新手避坑指南与最小可运行架构实践
  • SpringBoot微服务性能调优实战:SkyWalking链路追踪深度集成指南
  • 【优选算法篇】快速排序模型——从数组划分到快速选择
  • 【数据结构与算法】 二叉树做题
  • YOLOv11模型调参指南:如何让交通灯检测准确率提升15%(附训练曲线分析)
  • 知识图谱在教育领域的5个创新应用:从个性化推荐到自适应学习(含Django实现案例)
  • 3.5%稳增!全球电子引信2032年锚定12.41亿美元
  • 2026 年 8 款安卓数据擦除软件和应用对比
  • ESP32玩转SSD1306 OLED:Adafruit_GFX与u8g2库实战对比(附避坑指南)
  • 3大向量索引终极指南:如何在Milvus中选择最适合你的AI应用方案
  • 如何为Steam打造专属交互体验:SFP工具的深度探索
  • TDengine连接池配置实战:HikariCP与Java应用的高效集成指南
  • 三边封制袋机程序(采用松下PLC及威纶通触摸屏控制,前后双伺服送料,高效温控模块常州汇邦
  • 告别重复劳动:用快马AI自动化你的Python数据分析周报任务
  • Mirage Flow 科学计算应用:与MATLAB协同进行数据分析
  • 【Frida Android】实战篇:Java层Hook进阶——拦截与篡改普通方法参数
  • 基于快马平台提升java八股文复习与知识整理效率
  • 回归商业本质,全面升级“三横一纵”出海战略!
  • springboot项目对接质检管理系统
  • Minio+Nginx+Https访问:从零搭建安全文件存储服务
  • AMD Ryzen SDT调试工具:如何精准掌控CPU性能与能效平衡?
  • 个人创作者首选!主流知识付费平台真实体验测评
  • Tesla HW4.0拆解:从5MP摄像头到自研4D雷达,硬件升级全解析
  • RMBG-2.0与爬虫技术结合:自动化采集处理网络图片
  • 构建“T型”AI能力:横向广度与纵向深度的动态平衡,抵御技术迭代风险
  • 脉冲神经网络(SNN)的演进:从基础特性到前沿突破