1. Directus 软件介绍与功能概述 [0]

thumbnail
  1. Directus 简介:
    1. Directus 是一款“绝对超级酷”的软件 [0]。
    2. 它被视为开发软件的 “瑞士军刀” [1]。
    3. Directus 官网声称它是“构建任何或所有东西的后端” [2]。
  2. 核心特性:
    1. 它是一个 低代码 甚至 无代码 的应用系统 [3]。
    2. 它会自动创建许多 API [3]。
    3. 它提供 REST 接口 和 GraphQL API 等 [5]。
    4. 用户可以创建自己的 仪表板 和 流程 (Flows) [6]。
    5. 它与最流行的 JavaScript 框架 结合使用 [8]。

2. 频道会员与支持方式说明 [9]

thumbnail
  1. Patreon 会员等级:
    1. 有三个 Patreon 会员等级可供选择,用于支持频道 [10]。
    2. 所有 Patreon 会员都可以观看 完全无广告 的视频 [10]。
    3. Patreon 上的问题和评论会得到 优先回复 [10]。
    4. Plus 和 Plus Plus 两个更高级别提供咨询费用的 10% 或 25% 折扣 [11]。
    5. 视频描述中有预订咨询的链接 [11]。
  2. YouTube 订阅:
    1. 频道提供完全免费的 YouTube 订阅 [12]。
    2. 请点击订阅并 开启小铃铛 以接收新视频通知 [13]。
    3. 如果喜欢视频,请点赞,这有助于视频和频道在 YouTube 算法中获得更好的位置 [14]。

3. 视频内容规划与 Directus 深入介绍 [16]

thumbnail
  1. 后续内容预告:
    1. 将深入了解 Directus 是什么及其功能 [16]。
    2. 将介绍如何在 Synology 上的 Container Manager 中安装 Directus [16]。
    3. 安装将使用 Portainer 和 MacVLANs 等技术 [16]。
    4. 最后,将深入 Directus,创建表格,并进行操作演示 [17]。
  2. Directus 成熟度与应用:
    1. Directus 目前版本为 10.6 的某个点发布版本,已经相当成熟 [19]。
    2. 官网有关于 成功案例 (success stories) 的部分可供浏览 [20]。
  3. Directus 的核心机制:
    1. Directus 基本上是任何所需数据库的 “覆盖层 (overlay)” [23]。
    2. 它支持 MySQL, MariaDB, Oracle, MSSQL,特别是 Postgres (视频中将使用) [24]。
    3. 用户可以在 Directus 内部创建 数据模型 [25]。
    4. 可以精细调整终端用户的 授权、认证 和 界面布局 [26]。
    5. 可以直接从 Directus 创建 低代码/无代码应用,无需使用任何框架 [26]。
  4. Directus 的定位与文档:
    1. Directus 主要被称为 无头 CMS (headless CMS) [31]。
    2. 但它的功能远超无头 CMS,可以处理与 CMS 无关的许多事情 [32]。
    3. Directus 拥有 非常好的 且 简洁易懂 的文档 [34]。
    4. 如果不想自托管,可以选择他们的 云服务 (cloud offering) [37]。
    5. 云服务价格不便宜,因为他们面向大型公司 [38]。
  5. 自托管准备:
    1. 下一节将展示如何在 Synology 上自托管 社区版 Directus,使用 PostgreSQL [39]。

4. Directus 自托管安装准备:Docker Compose 脚本配置 [40]

thumbnail

4.1. 查找官方文档与准备 Stack 脚本 [40]

  1. 查找自托管信息:
    1. Directus 文档中有一个名为 “self-hosted” 的部分 [43]。
    2. 其中包含一个 Docker 指南 [43]。
    3. 该指南提供了使用 Docker Compose 启动的提示和示例 [44]。
  2. 定制化安装方案:
    1. 作者将超越官方指南,使用 MacVLANs 和 Portainer Stacks 进行定制化安装 [45]。
    2. 作者已准备好 Stack 脚本 (使用 VSCodium 编辑器) [47]。
    3. VSCodium 是 Microsoft VS Code 的完全开源衍生版本,保护用户隐私 [49]。
    4. 建议观众下载脚本并在自己的文本编辑器中打开,以便一起进行修改 [52]。

4.2. 数据库配置 (PostgreSQL) [54]

  1. 数据库服务启动:
    1. 脚本从数据库部分开始,建议使用 PostGIS [55]。
    2. 支持所有长期版本,版本 15 应该没问题 [56]。
  2. 数据持久化 (Volume Mapping):
    1. Directus 的所有内容都存储在数据库中,因此需要持久化数据库数据 [57]。
    2. 卷映射中,右侧是容器内部路径,无需编辑 [59]。
    3. 左侧冒号前是需要更改并提供 自定义卷 的部分 [59]。
  3. 创建 Synology 共享文件夹:
    1. 登录 Synology DSM,打开 File Station [61]。
    2. 进入安装 Container Manager 时自动创建的 Docker 共享文件夹 [62]。
    3. (提示: 如果不熟悉 Docker/Container Manager,请观看作者的新手视频) [63]。
    4. 在 Docker 共享文件夹中,创建 Directus 主文件夹,命名为 Directus-demo [69]。
    5. 进入 Directus-demo 文件夹,创建子文件夹 data (用于数据库数据) [72]。
  4. 获取并粘贴路径:
    1. 右键点击新创建的 data 文件夹,选择 属性 [79]。
    2. 复制 位置 (location) 旁边的完整路径 [80]。
    3. 切换回编辑器,将脚本中数据库卷映射左侧的字符串替换为复制的路径 [82]。
  5. 环境变量配置:
    1. 数据库部分有三个环境变量 [84]。
    2. 用户 (user) 可以保持为 Directus [85]。
    3. 密码 (password) 建议更改为更难猜的 [86]。
    4. 数据库名称 (DB name) 保持为 Directus [87]。
    5. 如果更改了密码,请务必记住 [90]。
  6. 网络配置 (MacVLANs):
    1. 在网络部分,将使用 MacVLANs [92]。
    2. (提示: 如果不了解 MacVLANs,请观看作者的详细介绍视频) [94]。
    3. 在 IPv4 address 处,必须输入 MacVLAN 中一个可用的 IPv4 地址 [99]。
    4. 可以通过登录 Portainer,查看容器列表中的 IP 地址来找到可用 IP [100]。

4.3. Redis 缓存配置 [104]

  1. Redis 持久化 (可选):
    1. 作者认为 Redis 数据持久化不是必需的 [105]。
    2. 如果需要持久化,可以取消注释 volumes 和相关行 [105]。
    3. 如果启用,必须在 Synology 的 Directus 文件夹中创建相应的 子文件夹 [106]。
  2. Redis 网络配置:
    1. 必须为 Redis 服务提供一个 可用 IP 地址 (来自 MacVLAN) [107]。

5. Directus 服务配置与部署 [108]

thumbnail

5.1. Directus 镜像与端口配置 [108]

  1. Directus 镜像版本:
    1. Directus 镜像通常使用 Directus:latest,以便更新时获取最新版本 [109]。
  2. PostgreSQL 镜像版本 (注意):
    1. PostgreSQL 版本通常应 指定,而不是使用 latest [111]。
    2. 使用 latest 可能导致更新到不兼容的新版本,造成启动问题 [111]。
  3. 端口映射:
    1. 由于使用了 MacVLAN,不需要端口映射 [114]。
    2. 如果不使用 MacVLAN,则必须输入端口映射 [115]。

5.2. Directus 卷映射与环境变量配置 [117]

  1. 创建 Directus 子文件夹:
    1. 在 volumes 部分,需要创建两个子文件夹:uploads 和 extension [117]。
    2. 在 DSM 中创建这两个文件夹 [119]。
    3. 像之前一样,获取并复制这两个文件夹的完整路径 [121]。
    4. 将路径粘贴到编辑器中,替换脚本中的相应字符串 [122]。
  2. 依赖关系:
    1. Directus 依赖于 Redis (depends_on: redis) 和数据库 (database) [125]。
  3. 安全密钥配置:
    1. 必须调整 KEY 和 SECRET 环境变量 [127]。
    2. 作者使用其主页上的 IT Tools 来生成两个 UUID [129]。
    3. 将生成的第一个 UUID 复制粘贴作为 KEY [136]。
    4. 将生成的第二个 UUID 复制粘贴作为 SECRET [138]。
  4. 数据库连接参数:
    1. 前三个参数可以保持不变 [142]。
    2. 如果之前在数据库部分更改了 用户、密码或数据库名,则必须相应调整这三个变量 [143]。
  5. Redis 和缓存:
    1. Redis 和缓存部分的环境变量可以保持原样 [144]。
  6. 管理员信息:
    1. 必须调整 管理员邮箱 (admin email) 和 密码 (password) [145]。
  7. 邮件发送配置 (可选):
    1. 可以通过经典的 SMTP 参数 发送邮件 [147]。
    2. 如果使用 SMTP,请 移除哈希符号 (#) 否则不会生效 [149]。
    3. 如果使用 Amazon SES,可以使用提供的三个变量进行配置 [150]。
    4. 请务必用自己的 SES 账户数据替换示例数据 [153]。
  8. Watchtower 标签 (可选):
    1. labels 部分用于 Watchtower 工具 [155]。
    2. Watchtower 可用于自动通知或执行容器更新 [156]。
    3. 如果希望 Watchtower 自动更新 Directus,可以保留 label enable [158]。
    4. 如果不希望使用 Watchtower,请在两行前添加 哈希符号 (#) 或删除它们 [159]。
  9. Directus 网络配置:
    1. 为 Directus 服务提供一个 可用 IP 地址 [162]。
    2. 在 networks 的最后部分,提供 正确的 MacVLAN 名称 (可能不是 MVL 200) [163]。

5.3. 部署 Stack [165]

  1. 复制脚本:
    1. 完成所有配置后,全选 (Command A/Control A) 并复制 (Command C/Control C) 整个脚本 [165]。
  2. 在 Portainer 中创建 Stack:
    1. 切换到 Portainer,进入 Stacks,点击 Add stack [167]。
    2. 为 Directus Stack 命名,例如 Directus-demo [171]。
    3. 在 Web 编辑器中粘贴脚本 (Command V/Control V) [173]。
    4. 可以再次检查所有配置是否正确 [174]。
  3. 部署:
    1. 点击 deploy the stack [175]。
    2. 如果是首次部署,下载和创建容器可能需要几分钟 [176]。
    3. 部署完成后,Directus Stack 将被列出,并包含三个处于 running 状态的子容器 [179]。

6. 权限问题解决与服务重启 [181]

thumbnail
  1. 检查日志:
    1. 通常建议查看日志文件,以防出现无法打开的问题 [181]。
  2. 发现权限问题:
    1. 日志中显示一个问题:The upload directory is not read-writable [182]。
    2. 这适用于所有新创建的子文件夹 [182]。
    3. 这是 Synology 共享文件夹权限机制与某些容器不兼容导致的 [183]。
  3. 命令行解决权限:
    1. 需要打开命令行并登录到 Synology [184]。
    2. 切换到 Docker 和 Directus 共享文件夹 [185]。
    3. 查看权限,发现虽然对每个人都是读写,但末尾的 小加号 (+) 表示 Synology 的特殊权限,阻止了机制工作 [187]。
    4. 只有 data 文件夹工作正常,因为 PostgreSQL 容器可以处理这些权限 [189]。
  4. 修改权限:
    1. 使用 change mod -r 777 命令递归地修改 extensions 和 uploads 文件夹的权限 [190]。
    2. 再次查看权限,小加号已消失,现在可以正确写入这些文件夹 [191]。
    3. (注意: 777 权限虽然丑陋,但目前没有更好的解决方案) [192]。
  5. 重启服务:
    1. 回到 Portainer,重启 Directus demo 主容器 [194]。
    2. 查看日志文件,权限问题应该不再存在 [195]。
    3. 服务现在运行正常 [196]。

7. Directus 登录与用户界面探索 [198]

thumbnail

7.1. 首次登录 Directus [198]

  1. 访问 Directus:
    1. 使用 Directus 容器的 IP 地址和端口 8055 访问 (例如 HTTP://192.168.20.10:8055) [199]。
  2. 登录:
    1. 使用管理员邮箱 (admin@example.com) 和密码 (geheim - 德语“秘密”) 登录 [202]。
    2. 成功登录后进入 Directus 界面 [205]。
  3. 核心概念:
    1. 当前没有内容 [206]。
    2. Directus 中的 Collection (集合) 相当于普通数据库中的 Table (表) [207]。

7.2. 左侧导航栏功能介绍 [208]

  1. 用户目录 (User directory):
    1. 当前只有管理员用户,可以稍后创建更多用户 [209]。
  2. 文件库 (File library):
    1. 用于上传、下载和传播文件 [211]。
  3. 洞察 (Insights):
    1. 用于创建 仪表板 (dashboards) 的地方 [212]。
  4. 文档 (Documentation):
    1. 提供 Directus 文档的链接 [213]。
  5. 设置 (Settings):
    1. 许多配置发生的地方 [216]。

7.3. 项目设置 (Project Settings) 配置 [217]

  1. 数据模型 (Data Model):
    1. 可以立即创建集合,但先推迟 [218]。
  2. 项目设置 (Project Settings):
    1. 可以自定义许多内容 [220]。
    2. 可以设置 项目名称 (如 Directus demo) 和 描述符 [221]。
    3. 可以设置 URL,使其可从外部互联网访问 (超出本视频范围) [223]。
    4. 可以设置 默认语言 (默认为英语) [225]。
    5. 可以为正在创建的应用使用 翻译 功能 [227]。
    6. 可以自定义 样式,例如设置项目颜色 (如蓝色) [229]。
    7. 可以上传 Logo [231]。
    8. 可以设置公共区域的颜色、公共注释和自定义 CSS 变量 [232]。
    9. 可以自定义侧边菜单 [233]。
  3. 安全策略 (Security Policies):
    1. 可以设置 密码策略 [234]。
    2. 可以设置 登录尝试次数 (开发环境 25 次很慷慨) [235]。
  4. 文件和存储 (Files and Storage):
    1. 可以设置文件和存储参数 [238]。
    2. 可以设置上传图片时的处理指令 [239]。
  5. 保存更改:
    1. 更改后,点击右上角的图标保存设置 [242]。
    2. 保存后,项目颜色从紫色变为蓝色 [244]。

7.4. 角色与权限 (Roles and Permissions) [247]

  1. 权限控制:
    1. 权限控制在 集合/表级别,控制谁可以对数据做什么 [248]。
  2. 创建新角色:
    1. 创建一个名为 test 的新角色 [249]。
    2. 可以启用 App 访问 (访问立方体后面的内容) [249]。
    3. 可以包含特定集合并给予 精细的权限 [250]。
    4. 可以启用 管理员访问 (允许角色几乎对应用做任何事) [251]。
    5. 可以限制该角色成员只能从 特定 IP 环境 访问 [253]。
    6. 可以要求该角色成员必须使用 双因素认证 登录 [254]。
    7. 可以向该角色添加现有用户或创建新用户 [255]。

7.5. 其他设置功能 [256]

  1. 预设和书签 (Presets and Bookmarks):
    1. 目前无法使用,需要先创建集合 [256]。
  2. 自定义翻译 (Custom Translations):
    1. 可以为项目设置中的多种语言创建特定的 键值对 翻译 [258]。
  3. Web Hooks:
    1. 当发生某些事件时,可以触发互联网上其他应用程序的动作 [260]。
    2. 例如,发送通知或触发 n8n 等工作流引擎 [261]。
  4. 流程 (Flows):
    1. Directus 内部的工作流引擎 [263]。
    2. 这是版本 10 中新集成的功能,仍在开发中 [266]。
  5. 开发链接:
    1. 可以报告 Bug 或请求功能,链接到 GitHub [267]。

8. 数据模型构建:国家与城市集合 [270]

thumbnail

8.1. 创建“国家 (Countries)”集合 [270]

  1. 进入数据模型:
    1. 点击 Data Model [271]。
    2. 数据库中的表在 Directus 中称为集合 [272]。
    3. 将创建 国家 (countries) 和 城市 (cities) 的简单示例,展示它们如何关联 [273]。
  2. 创建集合:
    1. 创建名为 countries 的集合 [275]。
    2. 启用所有 标准字段 (更容易删除而非重新创建) [279]。
    3. 国家不需要 status 字段,但 sort field, created on, created by, updated on, updated by 字段对于合规性很有用 [281]。
    4. 点击 finish setup [284]。
  3. 创建字段:名称 (Name):
    1. 创建一个普通输入字段,类型为 文本 (normal text) [285]。
    2. 字段名为 name,类型为 String [286]。
    3. name 字段是 必需的 (absolutely required) [287]。
    4. 在用户界面中,可以设置 占位符 (如 enter country name) [288]。
    5. 可以设置图标,但此处选择跳过 [290]。
    6. 保存字段 [292]。
  4. 配置集合设置:
    1. 可以给集合添加 注释 (note) [297]。
    2. 可以设置 图标 (通过搜索选择一个图标) [299]。
    3. 可以设置 颜色 (例如绿色) [304]。
    4. 可以设置 显示模板 (display template) (用于列表视图中显示的内容) [307]。
    5. 可以设置 多语言集合名称 (例如德语的 Länder 和 Land) [310]。
    6. 可以设置 预览 URL (类似于显示模板) [316]。
    7. 可以设置 归档 (archived) 方式和 排序字段 (使用 sort field 自身) [318]。
    8. 保存设置 [322]。
  5. 添加内容:
    1. 切换到 内容 (content) 页面,现在有了 countries 集合 [323]。
    2. 创建项目,输入 意大利 (Italy), 德国 (Germany), 美国 (United States) [325]。

8.2. 创建“城市 (Cities)”集合 [328]

  1. 创建集合:
    1. 点击加号创建新集合,命名为 cities [329]。
    2. 启用大部分标准字段,但不需要 status [332]。
  2. 创建字段:名称 (Name):
    1. 创建字段 name,类型为 String [333]。
    2. 设置占位符为 please enter the city name [333]。
    3. 点击 continue in advanced field creation mode [335]。
  3. 高级字段配置:
    1. 可以设置 最大长度 (例如 255 个字符) [336]。
    2. Default value 和 allow value 保持默认 [338]。
    3. Unique 属性不适合城市名称 (例如有多个海德堡) [339]。
  4. 字段设置 (Field):
    1. 可以设置为 只读 (read only) [342]。
    2. 设置为 必需 (required) [343]。
    3. 可以隐藏在详情页 [345]。
    4. 可以翻译字段名称 (例如德语的 Name) [346]。
  5. 界面设置 (Interface):
    1. 已设置占位符 [350]。
    2. 可以添加图标、设置 软限制 (soft limit)、更改字体 [351]。
    3. 可以修剪开头和结尾的空格 [351]。
    4. 可以进行 slugify (超出本视频范围) [351]。
  6. 显示设置 (Display):
    1. 可以更改值的显示方式 (此处跳过) [352]。
  7. 验证和条件:
    1. 可以根据规则进行 验证 (validate) [354]。
    2. 可以设置特定条件 [355]。
    3. 保存字段 [356]。

9. 集合关联与内容创建 [358]

thumbnail

9.1. 创建多对一关联 (城市到国家) [358]

  1. 创建关联字段:
    1. 城市属于国家,因此创建关联字段 [358]。
    2. 在 cities 集合中,点击 create field [360]。
    3. 在 Relational section 中,选择 Many to One (多对一) (一个国家可以有多个城市) [362]。
  2. 关联配置:
    1. 字段命名为 country [365]。
    2. 选择 相关集合 (related collection) 为 countries [366]。
    3. 显示模板只显示国家的 name [367]。
    4. 启用 从城市界面创建项目 的选项 [368]。
    5. 这意味着如果城市没有对应的国家,可以直接创建新国家 [370]。
    6. 保存关联 [372]。

9.2. 城市内容创建与显示问题 [375]

  1. 创建城市内容:
    1. 进入 Content 部分的 cities 集合,创建项目 [375]。
    2. 创建 Heidelberg,选择国家 Germany [376]。
    3. 创建 New York,选择国家 United States [380]。
    4. 创建 Rome,选择国家 Italy [382]。
  2. 关联创建演示:
    1. 创建新城市 London [387]。
    2. 点击国家选择框旁的 加号 (+),直接进入国家编辑器 [389]。
    3. 创建国家 UK (或 United Kingdom) [389]。
  3. 调整显示顺序:
    1. 将字段顺序调整为 城市名称在前,国家在后 [392]。
  4. 解决关联显示问题:
    1. 在城市列表中,国家显示为数字 (如 2),而不是国家名称 [379]。
    2. 编辑 country 字段,进入 Display 设置 [395]。
    3. 选择 Related values [396]。
    4. 在 Display template 中输入 name [397]。
    5. 保存后,国家名称现在正确显示 [400]。

9.3. 创建一对多关联 (国家到城市) [402]

  1. 创建反向关联:
    1. 希望在查看国家时,能看到城市列表 [402]。
    2. 回到 countries 集合,创建字段 [404]。
    3. 选择 One to Many (一对多) (一个国家,多个城市) [406]。
  2. 关联配置:
    1. 相关集合是 cities [408]。
    2. 外键 (foreign key) 是 country,因为两者通过 country 键关联 [408]。
    3. 保存关联 [409]。
  3. 查看结果:
    1. 在国家内容详情页,现在有一个城市列表,显示数量 (例如 three) [410]。
    2. 但城市列表显示为数字 (如 3, 5) [415]。
    3. 添加一个新城市 Milan (属于 Italy) 进行测试 [412]。
    4. 回到国家列表,Italy 下显示 3, 5 [416]。
  4. 解决城市列表显示问题:
    1. 调整字段顺序,将城市列表拖到下方 [417]。
    2. 回到 cities 集合,编辑 country 字段的 Display 设置 [419]。
    3. 选择 Related values,Display template 设置为 name [420]。
    4. 回到国家列表,现在显示 two items [421]。
    5. 点击后,可以看到城市名称 (如 Rome, Milan) [422]。
    6. Directus 提供了许多选项来显示和交互数据 [424]。

10. 权限与预设的最终调整 [425]

thumbnail
  1. 精细化权限控制:
    1. 回到 Roles and Permissions,查看之前创建的 test 角色 [425]。
    2. 现在可以看到新创建的 countries 和 cities 两个表 [427]。
    3. 可以为该角色设置精细权限 [428]。
    4. 例如,test 角色可以 显示 (display) 城市和国家 [429]。
    5. 但他们 不允许添加、编辑或删除 它们 [430]。
    6. 甚至可以控制是否允许他们 分享链接 [431]。
    7. 权限设计可以非常精细 [431]。
  2. 预设和书签 (Presets and Bookmarks):
    1. 现在查看 Presets and Bookmarks,可以看到字段集合 [432]。
    2. 可以看到针对 cities 和 countries 的视图字段顺序预设 [434]。
    3. 可以将预设设置为 所有用户 (all users) 可用,而不是仅限管理员 [435]。
    4. 管理员可以创建自己的布局,也可以将该布局设为 所有人的默认布局 [437]。
  3. 无代码成果:
    1. 所有这些操作都 没有编写一行代码 [438]。
    2. 通过几次鼠标点击,就完成了强大的后端系统搭建 [439]。

11. 视频总结与结束语 [440]

thumbnail
  1. 总结:
    1. 本视频介绍了 Directus 的安装和初步使用 [440]。
    2. 观众学习了如何在系统上进行安装和迈出第一步 [441]。
  2. 支持呼吁:
    1. 如果视频有帮助或有趣,请点赞,这对频道有益 [442]。
    2. 再次提及 Patreon 会员选项,包括无广告观看和优先回复 [444]。
    3. Plus 和 Plus Plus 会员提供咨询折扣 [446]。
    4. 请订阅 YouTube 频道并开启小铃铛以接收通知 [447]。
  3. 结束:
    1. 感谢观看,再见 [448]。