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

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: affineservices:# AFFiNE 主服务affine:# 使用官方镜像,版本通过环境变量控制,默认为 stableimage: 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}# 数据库名称,默认为 affinePOSTGRES_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

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

http://www.lryc.cn/news/589863.html

相关文章:

  • Linux Ubuntu apt包管理器安装K8s1.30.1+Ingress-Nginx
  • 【Vue】tailwindcss + ant-design-vue + vue-cropper 图片裁剪功能(解决遇到的坑)
  • flink sql读hive catalog数据,将string类型的时间戳数据排序后写入kafka,如何保障写入kafka的数据是有序的
  • Clip微调系列:《coOp: learning to prompt for vision-language models》
  • Python 进阶学习之全栈开发学习路线
  • Excel处理控件Aspose.Cells教程:使用 Python 在 Excel 中创建甘特图
  • Apache RocketMQ + “太乙” = 开源贡献新体验
  • 【C#】实体类定义的是long和值识别到的是Int64,实体类反射容易出现Object does not match target type
  • 查看.bin二进制文件的方式(HxD十六进制编辑器的安装)
  • Golang学习之常见开发陷阱完全手册
  • 【深度学习】神经网络-part3
  • 第一章 【vue】基础(超详细)
  • 解锁高效Excel技能:摆脱鼠标,快速编辑单元格
  • Git远程仓库与协作技巧详解
  • 如何关闭Elasticsearch的安全认证的解决方法
  • 机器学习sklearn入门:归一化和标准化
  • CG--资料分析1
  • 【后端】配置SqlSugar ORM框架并添加仓储
  • Three.js 实战:使用 PBR 贴图打造真实地面材质
  • 《Qt实战开发》:从计算器到音乐播放器的全栈实现指南
  • 从理论到实践:操作系统进程状态的核心逻辑与 Linux 实现
  • echarts 自定义图例,并且一个图列控制多个系列
  • 在 kubernetes 上安装 jenkins
  • argo-rollouts部署
  • 分块(chunked) vs 滑动窗口(windowed)
  • 开源模型应用落地-qwen模型小试-Qwen3-Embedding 模型集成 vLLM 实战解析(二)
  • 产品更新丨谷云科技 iPaaS 集成平台 V7.6 版本发布
  • Grok 系列大模型:xAI 的智能宇宙探秘
  • 使用 CrewAI 进行股票分析:自动化投资决策的新途径
  • 压力测试Apache Bench(ab)