AFFiNE开源知识管理和协作平台的部署,替代Notion不是梦~

AFFiNE 是一款现代化的开源知识管理和协作平台,集成了笔记、白板、数据库等多种功能。它采用块编辑器设计,支持实时协作,提供离线优先的使用体验,是Notion、Obsidian等工具的优秀开源替代方案。

主要特点

多功能集成:笔记、白板、数据库、任务管理一体化

块编辑器:现代化的块级编辑体验,支持富文本、图片、表格等

实时协作:多人同时编辑,实时同步更新

离线优先:本地优先存储,支持离线使用

跨平台:Web、桌面端(Windows、macOS、Linux)全覆盖

自托管:数据完全掌控,隐私安全有保障

这里默认服务器已经安装好了docker,如果没有安装可以自行百度安装教程,或者直接宝塔面板安装docker。

部署 AFFiNE

1.创建并进入项目目录

mkdir -p ~/affine
cd ~/affine

2.创建 compose 文件

复制代码
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 文件

复制代码
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

4.启动 AFFiNE 服务

docker compose up -d

这里装装要挺久的,可以多等等。

5. 验证部署

docker ps | grep affine,如果看到所有容器状态为 Up,说明服务已成功启动。

基本配置

1. 访问 AFFiNE

在浏览器中访问:
http://你的服务器IP:3010

首次访问会进入初始化向导,按提示创建管理员账户。

2. 域名与HTTPS配置

为了更好的使用体验,建议配置域名和HTTPS。我是部署在nas里的,做了端口转发。

3. 管理界面访问

AFFiNE提供了管理界面用于系统配置:
http://你的服务器IP:3010/admin

至此教程结束,且行好事,莫问前程。大家加油~

相关推荐
牧子与羊6 分钟前
自学中医笔记(一)
笔记·中医
失序空间37 分钟前
DataWhale AI夏令营 Task2.2笔记
人工智能·笔记·机器学习
Eli_Optics1 小时前
《通信原理》学习笔记——第二章
笔记·学习
weixin_448119942 小时前
Datawhale AI数据分析 笔记
人工智能·笔记
ApacheSeaTunnel2 小时前
MySQL 数据同步至 S3file,并接入 Hive 访问:SeaTunnel 实践指南
大数据·mysql·开源·数据集成·s3·seatunnel·数据同步
wjpwjpwjp08312 小时前
[MySQL基础1]数据定义语言DDL与数据操作语言DML
数据库·笔记·mysql·oracle
RaLi和夕4 小时前
单片机学习笔记.IIC通信协议(根据数据手册写IIC驱动程序,这里以普中开发板上的AT24C02为例)
c语言·笔记·单片机·嵌入式硬件·学习
Love__Tay4 小时前
笔记/sklearn中的数据划分方法
笔记·机器学习·sklearn·数据划分
DDDDDBBBBBBBAAAAA4 小时前
oracle服务器定时备份Windows Server
数据库·笔记·学习·oracle·dba
Dontla6 小时前
Postgres介绍(PostgreSQL)(开源对象关系型数据库管理系统)(与Mysql对比)
数据库·postgresql·开源