群晖安装Affine

网上有很多在群晖上安装Affine的教程,但是都是用ssh或者先安装第三方docker来间接的安装,这大大提升了门槛。这篇文章主要是为了给不想用SSH或者想用原生的docker来管理 的人

配置你的群晖

我们这边假设NAS的IP是192.168.1.2

如果你没有公网IP,DDNS,或者你打算仅部署在内网,那么请跳过这一章节。

首先进入控制面板 –> 登录门户 –> 高级 –> 反向代理服务器 –> 新增,配置如下,主机名需要填入你自己的域名地址,其他可直接按照截图填入

r7SaZwIMjJ9A3fjQ3P5eQtRXt4kc0XBsXaL0RVEyxSI=.blob.webp

然后在自定义标题中新增websocket

006gbWwQHQuw43ix_mjt2nHwW6bm8qoL--So6whUmcw=.blob.webp

保存,这样反向代理即设置完毕。当然如果你的群晖外面还有路由器或者光猫,记得把你设置的端口的端口转发打开,不然就没办法连接上了。

Docker配置

打开FileStation

docker文件夹下新建affine文件夹,然后再在affine文件夹新建四个文件夹 config, db, redis, storage

打开Container Manager –> 项目 –> 新建

Oa8xHEj5uwIz__OGQNcg0za-bA1LVk0E9PXKa9SFP4U=.blob.webp

项目名必须是小写字母,然后在docker-compose.yml下填入

yaml

version: '3.9'
services:
  affine:
    image: ghcr.io/toeverything/affine-graphql:stable
    container_name: AFFINE
    healthcheck:
      test: timeout 10s bash -c ':> /dev/tcp/127.0.0.1/3010' || exit 1
      interval: 10s
      timeout: 5s
      retries: 3
      start_period: 90s
    command:
      ['sh', '-c', 'node ./scripts/self-host-predeploy && node ./dist/index.js']
    ports:
      - 3010:3010
      - 5555:5555
    depends_on:
      redis:
        condition: service_healthy
      postgres:
        condition: service_healthy
    volumes:
      - /volume1/docker/affine/config:/root/.affine/config:rw
      - /volume1/docker/affine/storage:/root/.affine/storage:rw
    logging:
      driver: 'json-file'
      options:
        max-size: '1000m'
    restart: on-failure:5
    environment:
      - NODE_OPTIONS="--import=./scripts/register.js"
      - AFFINE_CONFIG_PATH=/root/.affine/config
      - REDIS_SERVER_HOST=redis
      - DATABASE_URL=postgres://affineuser:affinepass@postgres:5432/affine
      - NODE_ENV=production
      - [email protected]
      - AFFINE_ADMIN_PASSWORD=barPassword
  redis:
    image: redis:latest
    container_name: AFFINE-REDIS
    restart: on-failure:5
    volumes:
      - /volume1/docker/affine/redis:/data:rw
    healthcheck:
      test: ['CMD', 'redis-cli', '--raw', 'incr', 'ping']
      interval: 10s
      timeout: 5s
      retries: 5
  postgres:
    image: postgres:16
    container_name: AFFINE-DB
    restart: on-failure:5
    volumes:
      - /volume1/docker/affine/db:/var/lib/postgresql/data:rw
    healthcheck:
      test: ["CMD", "pg_isready", "-q", "-d", "affine", "-U", "affinesuser"]
      interval: 10s
      timeout: 5s
      retries: 5
    environment:
      POSTGRES_USER: affineuser
      POSTGRES_PASSWORD: affinepass
      POSTGRES_DB: affine
      PGDATA: /var/lib/postgresql/data/pgdata

其中AFFINE_ADMIN_EMAIL填入你想要的邮箱,这个不需要验证,所以可以是任意邮箱。然后AFFINE_ADMIN_PASSWORD是管理员密码。

至此,配置就完成了,一直下一步就可以编译启动你的Affine容器了。

最后在你的浏览器输入192.168.1.2:3010就可以看到Affine的界面了。

Affine配置

打开Affine默认是本地工作区,我们需要把工作区切换到云端。

3VJ_XMf0If288xfeojhly8R5ZLVIfkOR4y-NF6J2Yew=.blob.webp hndmkP3Xxu7EDQ6xonf47sqCWlp0O0N6WtdU_Zuw3uQ=.blob.webp

工作区默认是Local的,Local是存储在浏览器上,一旦退出或者清理缓存,那么所有的文件都会丢失。由于我们是Self-hosted,不用担心存储的问题,因为这里的云就是我们的NAS

rbQFKo_BEewPeyyPtoWzwWmcYE9_5y5M_PF2L9Zlc9o=.blob.webp

打开这个工作区

JIWRV9SOydZX5I4hX8pAyVh1Gnu4gC-3ZWIVP7tCm6Y=.blob.webp

然后Enable Cloud,这样我们的文档都会写到NAS上,只要NAS不挂,文档都会在。

通常一个家庭或者一群好友之间,免不了一人一账户,那么多账户体系是必不可少的。然而现阶段Affine的Self-hosted方案对多账户支持不是很好,必须要自己调用API来添加。

这里我们假设被邀请的邮箱是[email protected],管理员邮箱是[email protected]

sIKjYFb_RBLnMOHpfn15vCXcHbIdCH5h8drAtSMiAnU=.blob.webp
  • 打开192.168.1.2:3010/graphql, 进入设置, 替换 "request.credentials": "omit""request.credentials": "include",然后保存设置,关闭设置页
  • 依次输入并执行下方的接口

注册被邀请者的账户

graphql

mutation {
     signUp(email: "[email protected]", name: "Demo", password: "123") {
         id
     }
}

登录管理员账户,并记下你的工作区ID,这个可以在你的浏览器地址中找到 192.168.1.2:3010/workspace/workspaceId

yaml

mutation {
  signIn(email: "[email protected]", password:"123") {
    id
    name
  }
}

通过管理员邀请,会在右边的区域内显示执行的结果,记下邀请的id

yaml

mutation {
  invite(
    email: "[email protected]"
    permission: Admin
    sendInviteMail: false
    workspaceId: "xxx-xxx-xx-xxx-xxx"
  )
}

登录被邀请者账户

yaml

mutation {
  signIn(email: "[email protected]", password:"123") {
    id
    name
  }
}

接受邀请,输入工作区ID和邀请ID

yaml

mutation {
  acceptInviteById(
    inviteId: "copy-id-from-invite-mutation"
    sendAcceptMail: false
    workspaceId: "your-workspace-id"
  )
}

然后就可以用被邀请者的邮箱 [email protected] 登录了

相关内容