群晖安装Affine
网上有很多在群晖上安装Affine的教程,但是都是用ssh或者先安装第三方docker来间接的安装,这大大提升了门槛。这篇文章主要是为了给不想用SSH
或者想用原生的docker来管理
的人
配置你的群晖
我们这边假设NAS的IP是192.168.1.2
如果你没有公网IP,DDNS,或者你打算仅部署在内网,那么请跳过这一章节。
1 配置反向代理
首先进入控制面板 –> 登录门户 –> 高级 –> 反向代理服务器 –> 新增,配置如下,主机名需要填入你自己的域名地址,其他可直接按照截图填入
然后在自定义标题中新增websocket
保存,这样反向代理即设置完毕。当然如果你的群晖外面还有路由器或者光猫,记得把你设置的端口的端口转发打开,不然就没办法连接上了。
Docker配置
1 文件夹配置
打开FileStation
在docker
文件夹下新建affine
文件夹,然后再在affine
文件夹新建四个文件夹 config, db, redis, storage
2 容器配置
打开Container Manager –> 项目 –> 新建
项目名必须是小写字母,然后在docker-compose.yml
下填入
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默认是本地工作区,我们需要把工作区切换到云端。
1 登录账户
2 工作区
工作区默认是Local的,Local是存储在浏览器上,一旦退出或者清理缓存,那么所有的文件都会丢失。由于我们是Self-hosted,不用担心存储的问题,因为这里的云就是我们的NAS
打开这个工作区
然后Enable Cloud
,这样我们的文档都会写到NAS上,只要NAS不挂,文档都会在。
3 邀请用户
通常一个家庭或者一群好友之间,免不了一人一账户,那么多账户体系是必不可少的。然而现阶段Affine的Self-hosted方案对多账户支持不是很好,必须要自己调用API来添加。
3.1 API调用
这里我们假设被邀请的邮箱是[email protected]
,管理员邮箱是[email protected]
- 打开
192.168.1.2:3010/graphql
, 进入设置, 替换"request.credentials": "omit"
成"request.credentials": "include"
,然后保存设置,关闭设置页 - 依次输入并执行下方的接口
注册被邀请者的账户
mutation {
signUp(email: "[email protected]", name: "Demo", password: "123") {
id
}
}
登录管理员账户,并记下你的工作区ID,这个可以在你的浏览器地址中找到 192.168.1.2:3010/workspace/workspaceId
mutation {
signIn(email: "[email protected]", password:"123") {
id
name
}
}
通过管理员邀请,会在右边的区域内显示执行的结果,记下邀请的id
mutation {
invite(
email: "[email protected]"
permission: Admin
sendInviteMail: false
workspaceId: "xxx-xxx-xx-xxx-xxx"
)
}
登录被邀请者账户
mutation {
signIn(email: "[email protected]", password:"123") {
id
name
}
}
接受邀请,输入工作区ID和邀请ID
mutation {
acceptInviteById(
inviteId: "copy-id-from-invite-mutation"
sendAcceptMail: false
workspaceId: "your-workspace-id"
)
}
然后就可以用被邀请者的邮箱 [email protected]
登录了