577_Appwrite后端服务
一句话概述:Appwrite 是开源自托管的 BaaS(Backend as a Service)平台,提供认证、数据库、存储、函数、消息推送等一站式后端服务,用 Docker 一键部署,替代 Firebase/Supabase。
核心知识点表
| 概念 | 白话解释 |
|---|
| BaaS | Backend as a Service,后端即服务,不用自己写后端,平台帮你搞定 |
| 自托管 | 跑在你自己的服务器上,数据完全由你掌控 |
| SDK | 官方提供的开发工具包,前端直接调API就能用 |
| Realtime | 实时订阅,数据一变前端立刻收到通知(类似微信消息推送) |
| Functions | 无服务器函数,写一段代码上传就能跑,不用管服务器 |
| Sites | Appwrite 1.8+ 新增的网站托管功能,直接部署前端应用 |
安装配置
环境要求
# 最低要求:4GB RAM + Docker
# 当前最新版本:1.9.x(2026年)
# Appwrite 会运行 20+ 个容器,所以内存要求较高
一键安装(Docker)
# 用官方安装器自动生成 docker-compose.yml 并启动
docker run -it --rm \
--publish 20080:20080 \ # 安装器的临时端口
--volume /var/run/docker.sock:/var/run/docker.sock \ # 让安装器能控制 Docker
--volume "$(pwd)"/appwrite:/usr/src/code/appwrite:rw \ # 配置文件保存位置
--entrypoint="install" \ # 运行安装模式
appwrite/appwrite # 官方镜像
安装过程中的配置项
# 安装器会交互式询问以下配置:
# 1. HTTP 端口(默认 80)
# 2. HTTPS 端口(默认 443)
# 3. 域名(默认 localhost)
# 4. 是否启用 HTTPS(生产环境建议开启)
启动与停止
cd appwrite # 进入 Appwrite 目录
docker compose up -d # 后台启动所有服务
docker compose down # 停止所有服务
docker compose logs -f # 查看实时日志
基本使用
访问管理面板
# 浏览器打开(默认端口)
# http://localhost(HTTP)或 https://localhost(HTTPS)
# 首次访问需要注册管理员账号
# 然后创建项目 → 添加平台(Web/iOS/Android)→ 开始开发
创建数据库和集合
# 在管理面板中操作:
# 1. 进入项目 → Databases → Create Database
# 2. 在数据库中创建 Collection(类似数据表)
# 3. 定义 Attributes(字段),如 name(string)、age(integer)
# 4. 设置 Indexes(索引)提升查询性能
Web SDK 使用示例
// 安装 SDK
// npm install appwrite
import { Client, Databases, ID } from 'appwrite'; // 导入 Appwrite 模块
const client = new Client() // 创建客户端实例
.setEndpoint('https://your-domain/v1') // 设置 API 地址
.setProject('your-project-id'); // 设置项目 ID
const databases = new Databases(client); // 初始化数据库服务
// 创建文档(插入一条数据)
const result = await databases.createDocument(
'database-id', // 数据库 ID
'collection-id', // 集合 ID
ID.unique(), // 自动生成唯一 ID
{ name: '张三', age: 25 } // 数据内容
);
// 查询文档列表
const docs = await databases.listDocuments(
'database-id', // 数据库 ID
'collection-id' // 集合 ID
);
console.log(docs.documents); // 打印查询结果
用户认证示例
import { Client, Account, ID } from 'appwrite'; // 导入认证模块
const client = new Client()
.setEndpoint('https://your-domain/v1')
.setProject('your-project-id');
const account = new Account(client); // 初始化认证服务
// 注册新用户
await account.create(
ID.unique(), // 用户 ID
'user@example.com', // 邮箱
'password123', // 密码
'张三' // 用户名
);
// 登录(创建会话)
await account.createEmailPasswordSession(
'user@example.com', // 邮箱
'password123' // 密码
);
// 获取当前用户信息
const user = await account.get(); // 获取登录用户详情
console.log(user.name); // 输出:张三
高级用法
云函数(Functions)
// 在管理面板创建函数:
// Functions → Create Function → 选择运行时(Node.js/Python/Go 等)
// 示例:Node.js 函数代码
export default async ({ req, res, log }) => { // 接收请求和响应对象
const name = req.body.name || 'World'; // 获取请求参数
log(`收到请求,name = ${name}`); // 记录日志
return res.json({ // 返回 JSON 响应
message: `Hello, ${name}!`,
timestamp: new Date().toISOString()
});
};
实时订阅(Realtime)
import { Client } from 'appwrite';
const client = new Client()
.setEndpoint('https://your-domain/v1')
.setProject('your-project-id');
// 订阅文档变化(类似聊天室的消息推送)
const unsubscribe = client.subscribe(
'databases.db-id.collections.col-id.documents', // 订阅的频道
(response) => { // 收到变化时的回调
console.log('数据变化了:', response.payload); // 打印变化的数据
console.log('事件类型:', response.events); // create/update/delete
}
);
// 取消订阅
// unsubscribe();
生产环境配置(.env)
# 关键环境变量配置
_APP_DOMAIN=your-domain.com # 你的域名
_APP_OPENSSL_KEY_V1=your-secret-key # 加密密钥(必须修改!)
_APP_SMTP_HOST=smtp.gmail.com # 邮件服务器
_APP_SMTP_PORT=587 # 邮件端口
_APP_SMTP_USERNAME=your@email.com # 邮箱账号
_APP_SMTP_PASSWORD=your-app-password # 邮箱密码
_APP_STORAGE_LIMIT=30000000 # 单文件上传限制(30MB)
版本升级
cd appwrite # 进入 Appwrite 目录
docker compose pull # 拉取最新镜像
docker compose up -d # 重启服务
docker compose exec appwrite migrate # 执行数据库迁移
常见报错
| 报错信息 | 原因 | 解决方案 |
|---|
Error: Connection refused | Docker 服务未启动或端口被占用 | systemctl start docker 并检查端口 |
Error: Insufficient memory | 内存不足(需要 4GB+) | 增加服务器内存或减少其他容器 |
Error: SSL certificate error | HTTPS 配置错误 | 检查域名 DNS 解析和证书路径 |
Error: Permission denied | Docker socket 权限不够 | sudo chmod 666 /var/run/docker.sock |
CORS error | 未添加前端平台 | 在项目设置中添加 Web 平台和域名 |
429 Too Many Requests | 触发速率限制 | 调整 _APP_OPTIONS_ABUSE 配置 |
速查表
# === Appwrite 常用命令 ===
docker compose up -d # 启动
docker compose down # 停止
docker compose logs -f # 查看日志
docker compose exec appwrite migrate # 数据库迁移
docker compose pull # 更新镜像
# === API 端点 ===
# POST /v1/account # 注册
# POST /v1/account/sessions/email # 登录
# GET /v1/account # 获取用户信息
# POST /v1/databases/{db}/collections/{col}/documents # 创建文档
# GET /v1/databases/{db}/collections/{col}/documents # 查询文档
# POST /v1/storage/buckets/{id}/files # 上传文件
# === 支持的认证方式 ===
# Email/Password | OAuth2 | Magic Link | Phone/SMS
# Anonymous | JWT | API Key
同类对比
| 特性 | Appwrite | Supabase | Firebase | PocketBase |
|---|
| 开源协议 | MIT | Apache 2.0 | 闭源 | MIT |
| 自托管 | 支持 | 支持 | 不支持 | 支持 |
| 数据库 | MariaDB | PostgreSQL | 文档数据库 | SQLite |
| 实时功能 | 支持 | 支持 | 支持 | 支持 |
| 云函数 | 15种运行时 | Edge Functions | Cloud Functions | Go扩展 |
| 内存需求 | 4GB+ | 2GB+ | N/A | 256MB |
| 适合场景 | 中大型项目 | 中大型项目 | 快速原型 | 小型项目/MVP |
| 学习曲线 | 中等 | 中等 | 低 | 低 |
选型建议:想要完全自主可控且功能全面选 Appwrite;需要 PostgreSQL 生态选 Supabase;极简单文件部署选 PocketBase。