AFFiNE 简介
AFFiNE 是一款现代化的开源知识管理和协作平台,集成了笔记、白板、数据库等多种功能。它采用块编辑器设计,支持实时协作,提供离线优先的使用体验,是Notion、Obsidian等工具的优秀开源替代方案。
官方网站:https://affine.pro
GitHub仓库:https://github.com/toeverything/AFFiNE
主要特点
- 多功能集成:笔记、白板、数据库、任务管理一体化
- 块编辑器:现代化的块级编辑体验,支持富文本、图片、表格等
- 实时协作:多人同时编辑,实时同步更新
- 离线优先:本地优先存储,支持离线使用
- 跨平台:Web、桌面端(Windows、macOS、Linux)全覆盖
- 自托管:数据完全掌控,隐私安全有保障
准备工作
在开始部署之前,请确保您已经具备以下条件:
- 已安装 Docker 和 Docker Compose(参考本站 Linux Docker 安装教程)
- 服务器建议配置:1核 CPU, 1GB 内存, 5GB 可用存储空间以上。
- 准备域名,用于HTTPS访问(可选)
使用 Docker Compose 部署 AFFiNE
1. 创建并进入项目目录
bash
mkdir -p ~/affine
cd ~/affine
2. 创建 docker-compose.yml 文件
bash
cat > docker-compose.yml << 'EOF'
# Docker Compose 项目名称
name: affine
services:
# AFFiNE 主服务
affine:
# 使用官方镜像,版本通过环境变量控制,默认为 stable
image: ghcr.io/toeverything/affine-graphql:${AFFINE_REVISION:-stable}
# 容器名称,便于管理和识别
container_name: affine_server
# 端口映射:宿主机端口:容器端口
ports:
- '${PORT:-3010}:3010' # 默认映射到3010端口
# 服务依赖关系,确保依赖服务健康后再启动
depends_on:
redis:
condition: service_healthy # Redis 服务健康检查通过
postgres:
condition: service_healthy # PostgreSQL 服务健康检查通过
affine_migration:
condition: service_completed_successfully # 数据库迁移任务完成
# 数据卷挂载,实现数据持久化
volumes:
# 用户上传文件存储目录(图片、附件等)
- ${UPLOAD_LOCATION}:/root/.affine/storage
# 应用配置文件存储目录
- ${CONFIG_LOCATION}:/root/.affine/config
# 引用外部环境变量文件
env_file:
- .env
# 容器内环境变量设置
environment:
# Redis 服务器主机名(Docker 网络内部通信)
- REDIS_SERVER_HOST=redis
# PostgreSQL 数据库连接字符串
- DATABASE_URL=postgresql://${DB_USERNAME}:${DB_PASSWORD}@postgres:5432/${DB_DATABASE:-affine}
# 禁用索引器功能(自托管环境推荐设置)
- AFFINE_INDEXER_ENABLED=false
# 容器重启策略:除非手动停止,否则总是重启
restart: unless-stopped
# 数据库迁移服务(一次性任务)
affine_migration:
# 使用与主服务相同的镜像
image: ghcr.io/toeverything/affine-graphql:${AFFINE_REVISION:-stable}
# 迁移任务容器名称
container_name: affine_migration_job
# 挂载相同的数据卷以访问配置和存储
volumes:
# 用户上传文件存储目录
- ${UPLOAD_LOCATION}:/root/.affine/storage
# 应用配置文件存储目录
- ${CONFIG_LOCATION}:/root/.affine/config
# 执行数据库预部署脚本
command: ['sh', '-c', 'node ./scripts/self-host-predeploy.js']
# 引用外部环境变量文件
env_file:
- .env
# 容器内环境变量设置
environment:
# Redis 服务器主机名
- REDIS_SERVER_HOST=redis
# PostgreSQL 数据库连接字符串
- DATABASE_URL=postgresql://${DB_USERNAME}:${DB_PASSWORD}@postgres:5432/${DB_DATABASE:-affine}
# 禁用索引器功能
- AFFINE_INDEXER_ENABLED=false
# 依赖关系:等待数据库服务就绪
depends_on:
postgres:
condition: service_healthy # PostgreSQL 健康检查通过
redis:
condition: service_healthy # Redis 健康检查通过
# Redis 缓存服务
redis:
# 使用官方 Redis 镜像
image: redis
# Redis 容器名称
container_name: affine_redis
# 健康检查配置
healthcheck:
# 检查命令:使用 redis-cli 执行简单操作
test: ['CMD', 'redis-cli', '--raw', 'incr', 'ping']
# 检查间隔:每10秒检查一次
interval: 10s
# 超时时间:5秒内必须响应
timeout: 5s
# 重试次数:失败5次后标记为不健康
retries: 5
# 容器重启策略
restart: unless-stopped
# PostgreSQL 数据库服务
postgres:
# 使用支持 pgvector 扩展的 PostgreSQL 16 镜像
image: pgvector/pgvector:pg16
# PostgreSQL 容器名称
container_name: affine_postgres
# 数据卷挂载:持久化数据库数据
volumes:
# 数据库数据目录挂载到宿主机
- ${DB_DATA_LOCATION}:/var/lib/postgresql/data
# 数据库环境变量配置
environment:
# 数据库用户名
POSTGRES_USER: ${DB_USERNAME}
# 数据库密码
POSTGRES_PASSWORD: ${DB_PASSWORD}
# 数据库名称,默认为 affine
POSTGRES_DB: ${DB_DATABASE:-affine}
# 数据库初始化参数:启用数据校验
POSTGRES_INITDB_ARGS: '--data-checksums'
# 认证方式:信任本地连接(开发环境)
# 生产环境建议设置强密码并移除此配置
POSTGRES_HOST_AUTH_METHOD: trust
# 健康检查配置
healthcheck:
# 检查命令:使用 pg_isready 检查数据库可用性
test:
['CMD', 'pg_isready', '-U', "${DB_USERNAME}", '-d', "${DB_DATABASE:-affine}"]
# 检查间隔:每10秒检查一次
interval: 10s
# 超时时间:5秒内必须响应
timeout: 5s
# 重试次数:失败5次后标记为不健康
retries: 5
# 容器重启策略
restart: unless-stopped
EOF
3.创建 .env 文件
bash
cat > .env << 'EOF'
# 选择要部署的版本,可用值:stable(稳定版)、beta(测试版)、canary(开发版)
AFFINE_REVISION=stable
# 设置服务器容器暴露的端口
PORT=3010
# 设置服务器对外链接的主机地址
# 启用HTTPS协议(生产环境推荐)
# AFFINE_SERVER_HTTPS=true
# 设置服务器主机名(用于生成对外链接)
# AFFINE_SERVER_HOST=affine.yourdomain.com
# 或者使用完整的外部访问URL(包含协议和域名)
# AFFINE_SERVER_EXTERNAL_URL=https://affine.yourdomain.com
# 数据库数据持久化存储位置
DB_DATA_LOCATION=~/.affine/self-host/postgres/pgdata
# 上传数据(图片、文件等)持久化存储位置
UPLOAD_LOCATION=~/.affine/self-host/storage
# 配置文件持久化存储位置
CONFIG_LOCATION=~/.affine/self-host/config
# 数据库认证信息
DB_USERNAME=affine
DB_PASSWORD=
DB_DATABASE=affine
EOF
参数说明
DB_PASSWORD
= 填写的数据库密码(自定义)
4. 启动 AFFiNE 服务
bash
docker compose up -d
5. 验证部署
bash
docker ps | grep affine
如果看到所有容器状态为 Up
,说明服务已成功启动。
基本配置
1. 访问 AFFiNE
在浏览器中访问:
bash
http://你的服务器IP:3010
首次访问会进入初始化向导,按提示创建管理员账户。
2. 域名与HTTPS访问(推荐)
为了更好的使用体验,建议配置域名和HTTPS。可以使用本站的 Nginx Proxy Manager教程 来实现反向代理和SSL证书自动管理。
3. 管理界面访问
AFFiNE提供了管理界面用于系统配置:
bash
http://你的服务器IP:3010/admin
总结
通过本教程,您已成功使用 Docker 部署了 AFFiNE 知识管理平台。AFFiNE 提供了现代化、功能丰富的知识管理和协作环境,是个人和团队自托管的理想选择。
如果在使用过程中遇到任何问题,欢迎在评论区留言,我会尽快为您解答。