AFFiNE Docker部署完整教程

AFFiNE Docker部署完整教程

【免费下载链接】AFFiNE AFFiNE 是一个开源、一体化的工作区和操作系统,适用于组装您的知识库等的所有构建块 - 维基、知识管理、演示和数字资产。它是 Notion 和 Miro 的更好替代品。 【免费下载链接】AFFiNE 项目地址: https://gitcode.com/GitHub_Trending/af/AFFiNE

前言:为什么选择Docker部署AFFiNE?

在知识管理和协作工具领域,AFFiNE正迅速成为Notion和Miro的强大替代品。作为一款开源的一体化工作区操作系统,它集成了维基、知识管理、演示和数字内容管理等功能。通过Docker部署AFFiNE,您可以获得:

  • 环境一致性:消除"在我机器上能运行"的问题
  • 快速部署:几分钟内完成从零到生产环境的搭建
  • 易于维护:版本升级、备份恢复变得简单
  • 资源隔离:数据库、缓存、应用服务独立运行
  • 高可用性:支持水平扩展和负载均衡

本文将为您提供从零开始的AFFiNE Docker部署完整指南,包含单机部署、生产环境配置、性能优化等实用内容。

环境准备与系统要求

硬件要求

资源类型最低配置推荐配置生产环境
CPU2核4核8核+
内存4GB8GB16GB+
存储20GB50GB100GB+
网络100Mbps1Gbps1Gbps+

软件要求

  • Docker Engine: 20.10.0+
  • Docker Compose: 2.0.0+
  • 操作系统: Linux (Ubuntu 20.04+, CentOS 7+), macOS, Windows WSL2

端口要求

端口服务说明
3010AFFiNE Server主应用服务端口
5432PostgreSQL数据库服务端口
6379Redis缓存服务端口

快速开始:单机部署

步骤1:创建部署目录

mkdir affine-docker && cd affine-docker

步骤2:创建环境配置文件

创建 .env 文件:

# 数据库配置
DB_USERNAME=affineuser
DB_PASSWORD=your_secure_password_here
DB_DATABASE=affine_db

# 存储路径配置
UPLOAD_LOCATION=./storage
CONFIG_LOCATION=./config
DB_DATA_LOCATION=./postgres_data

# 应用版本
AFFINE_REVISION=stable

# 服务端口
PORT=3010

步骤3:创建Docker Compose文件

创建 docker-compose.yml

version: '3.8'

services:
  affine:
    image: ghcr.io/toeverything/affine:${AFFINE_REVISION:-stable}
    container_name: affine_server
    ports:
      - '${PORT:-3010}:3010'
    depends_on:
      redis:
        condition: service_healthy
      postgres:
        condition: service_healthy
      affine_migration:
        condition: service_completed_successfully
    volumes:
      - ${UPLOAD_LOCATION}:/root/.affine/storage
      - ${CONFIG_LOCATION}:/root/.affine/config
    env_file:
      - .env
    environment:
      - REDIS_SERVER_HOST=redis
      - 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:${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_SERVER_HOST=redis
      - DATABASE_URL=postgresql://${DB_USERNAME}:${DB_PASSWORD}@postgres:5432/${DB_DATABASE:-affine}
      - AFFINE_INDEXER_ENABLED=false
    depends_on:
      postgres:
        condition: service_healthy
      redis:
        condition: service_healthy

  redis:
    image: redis:alpine
    container_name: affine_redis
    healthcheck:
      test: ['CMD', 'redis-cli', '--raw', 'incr', 'ping']
      interval: 10s
      timeout: 5s
      retries: 5
    restart: unless-stopped

  postgres:
    image: pgvector/pgvector:pg16
    container_name: affine_postgres
    volumes:
      - ${DB_DATA_LOCATION}:/var/lib/postgresql/data
    environment:
      POSTGRES_USER: ${DB_USERNAME}
      POSTGRES_PASSWORD: ${DB_PASSWORD}
      POSTGRES_DB: ${DB_DATABASE:-affine}
      POSTGRES_INITDB_ARGS: '--data-checksums'
      POSTGRES_HOST_AUTH_METHOD: trust
    healthcheck:
      test:
        ['CMD', 'pg_isready', '-U', "${DB_USERNAME}", '-d', "${DB_DATABASE:-affine}"]
      interval: 10s
      timeout: 5s
      retries: 5
    restart: unless-stopped

步骤4:启动服务

# 创建必要的目录
mkdir -p storage config postgres_data

# 启动所有服务
docker-compose up -d

# 查看服务状态
docker-compose logs -f

步骤5:验证部署

访问 http://localhost:3010,您应该能看到AFFiNE的欢迎界面。

生产环境部署配置

高级环境配置

创建 config/production.json

{
  "server": {
    "name": "AFFiNE Production Server",
    "host": "0.0.0.0",
    "port": 3010,
    "workers": 4,
    "maxMemory": "512MB"
  },
  "database": {
    "poolSize": 20,
    "connectionTimeout": 30000,
    "idleTimeout": 60000
  },
  "redis": {
    "maxRetriesPerRequest": 3,
    "enableReadyCheck": true
  },
  "storage": {
    "maxFileSize": "100MB",
    "allowedMimeTypes": [
      "image/*",
      "application/pdf",
      "text/plain",
      "application/msword",
      "application/vnd.openxmlformats-officedocument.wordprocessingml.document"
    ]
  }
}

优化版Docker Compose

version: '3.8'

services:
  affine:
    image: ghcr.io/toeverything/affine:${AFFINE_REVISION:-stable}
    container_name: affine_production
    ports:
      - '${PORT:-3010}:3010'
    deploy:
      resources:
        limits:
          memory: 1G
          cpus: '2'
        reservations:
          memory: 512M
          cpus: '1'
    depends_on:
      redis:
        condition: service_healthy
      postgres:
        condition: service_healthy
      affine_migration:
        condition: service_completed_successfully
    volumes:
      - ${UPLOAD_LOCATION}:/root/.affine/storage
      - ${CONFIG_LOCATION}:/root/.affine/config
      - ./config/production.json:/root/.affine/config/production.json
    env_file:
      - .env
    environment:
      - NODE_ENV=production
      - REDIS_SERVER_HOST=redis
      - DATABASE_URL=postgresql://${DB_USERNAME}:${DB_PASSWORD}@postgres:5432/${DB_DATABASE:-affine}
      - AFFINE_INDEXER_ENABLED=true
    restart: unless-stopped
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:3010/api/health"]
      interval: 30s
      timeout: 10s
      retries: 3

  # 其他服务配置保持不变...

性能优化与监控

数据库优化配置

-- 在PostgreSQL中执行以下优化
ALTER SYSTEM SET shared_buffers = '1GB';
ALTER SYSTEM SET effective_cache_size = '3GB';
ALTER SYSTEM SET work_mem = '16MB';
ALTER SYSTEM SET maintenance_work_mem = '512MB';
ALTER SYSTEM SET max_connections = 100;

Redis性能配置

创建 redis.conf

maxmemory 1gb
maxmemory-policy allkeys-lru
save 900 1
save 300 10
save 60 10000

监控配置

集成Prometheus监控:

# 在docker-compose中添加监控服务
monitoring:
  image: prom/prometheus:latest
  ports:
    - 9090:9090
  volumes:
    - ./prometheus.yml:/etc/prometheus/prometheus.yml
  restart: unless-stopped

grafana:
  image: grafana/grafana:latest
  ports:
    - 3000:3000
  environment:
    - GF_SECURITY_ADMIN_PASSWORD=admin
  restart: unless-stopped

备份与恢复策略

数据库备份脚本

创建 scripts/backup.sh

#!/bin/bash
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="./backups"

mkdir -p $BACKUP_DIR

# 备份PostgreSQL
docker exec affine_postgres pg_dump -U affineuser affine_db > $BACKUP_DIR/affine_db_$DATE.sql

# 备份上传文件
tar -czf $BACKUP_DIR/storage_$DATE.tar.gz ./storage/

# 备份配置文件
tar -czf $BACKUP_DIR/config_$DATE.tar.gz ./config/

echo "Backup completed: $BACKUP_DIR/affine_db_$DATE.sql"

自动恢复脚本

创建 scripts/restore.sh

#!/bin/bash
BACKUP_FILE=$1

if [ -z "$BACKUP_FILE" ]; then
    echo "Usage: $0 <backup_file.sql>"
    exit 1
fi

# 停止服务
docker-compose stop affine

# 恢复数据库
cat $BACKUP_FILE | docker exec -i affine_postgres psql -U affineuser affine_db

# 启动服务
docker-compose start affine

echo "Restore completed from $BACKUP_FILE"

安全加固措施

SSL/TLS配置

# 生成自签名证书
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes

# 在Nginx配置中启用SSL
server {
    listen 443 ssl;
    server_name your-domain.com;
    
    ssl_certificate /path/to/cert.pem;
    ssl_certificate_key /path/to/key.pem;
    
    location / {
        proxy_pass http://affine:3010;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

防火墙规则

# 只开放必要端口
ufw allow 22/tcp    # SSH
ufw allow 443/tcp   # HTTPS
ufw allow 80/tcp    # HTTP重定向
ufw enable

故障排除与常见问题

常见问题解决方案

问题现象可能原因解决方案
服务启动失败端口冲突修改PORT环境变量
数据库连接失败密码错误检查.env文件中的DB_PASSWORD
存储权限问题目录权限chmod 755 ./storage
内存不足资源限制增加Docker内存分配

日志查看命令

# 查看实时日志
docker-compose logs -f affine

# 查看特定服务的日志
docker logs affine_production

# 查看数据库日志
docker logs affine_postgres

# 查看Redis日志
docker logs affine_redis

扩展与集群部署

多节点部署架构

mermaid

水平扩展配置

# 在docker-compose中扩展服务
affine:
  image: ghcr.io/toeverything/affine:stable
  deploy:
    replicas: 3
    resources:
      limits:
        memory: 512M
        cpus: '0.5'
  environment:
    - AFFINE_CLUSTER_MODE=true
    - REDIS_CLUSTER_ENABLED=true

总结与最佳实践

通过本教程,您已经掌握了AFFiNE的Docker部署全流程。以下是关键最佳实践:

  1. 定期备份:设置自动化备份策略,确保数据安全
  2. 监控告警:集成监控系统,实时掌握服务状态
  3. 版本控制:使用明确的版本标签,便于回滚和升级
  4. 安全加固:定期更新镜像,配置适当的网络策略
  5. 性能优化:根据实际使用情况调整资源分配

AFFiNE的Docker化部署不仅简化了运维工作,更为团队协作和知识管理提供了稳定可靠的基础平台。现在就开始您的AFFiNE之旅,体验下一代知识工作区的强大功能吧!

提示:部署过程中如遇问题,可查看详细日志或参考AFFiNE官方文档获取更多支持。

【免费下载链接】AFFiNE AFFiNE 是一个开源、一体化的工作区和操作系统,适用于组装您的知识库等的所有构建块 - 维基、知识管理、演示和数字资产。它是 Notion 和 Miro 的更好替代品。 【免费下载链接】AFFiNE 项目地址: https://gitcode.com/GitHub_Trending/af/AFFiNE

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值