You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

关于通过配置文件为Docker部署的Hasura设置默认角色、用户及权限的问询

通过配置文件为Docker部署的Hasura设置默认角色、用户及权限的问询

嗨,这个问题我刚好碰到过!你之所以重启Docker后角色消失,是因为通过UI添加的角色和权限都存在Hasura的临时元数据里,要是没做持久化,容器重启就会回到初始状态。不过完全可以通过配置文件来预设这些内容,我给你一步步讲怎么弄:

  • 第一步:导出已配置好的元数据
    先在Hasura控制台里把你想要的角色、权限都设置好,然后用Hasura CLI导出这些元数据:

    hasura metadata export
    

    执行完会生成一个metadata文件夹,里面的YAML文件包含了所有角色定义、权限规则、表关联等配置,这就是我们要持久化的核心内容。

  • 第二步:挂载元数据到Docker容器
    修改你的docker-compose.yml,给Hasura服务添加卷挂载,把本地的metadata文件夹映射到容器内部的指定路径,同时设置环境变量告诉Hasura加载这个目录的元数据:

    services:
      hasura:
        image: hasura/graphql-engine:latest
        ports:
          - "8080:8080"
        volumes:
          - ./metadata:/hasura-metadata  # 本地元数据文件夹挂载到容器内
        environment:
          - HASURA_GRAPHQL_METADATA_DIR=/hasura-metadata  # 指定元数据目录
          - HASURA_GRAPHQL_ADMIN_SECRET=你的管理员密钥
          # 其他必要的环境变量,比如数据库连接串等
    

    这样每次启动容器时,Hasura都会自动加载这个文件夹里的元数据,你之前设置的角色和权限就不会丢了。

  • 第三步:预设数据库层面的用户(如果需要)
    要是你还需要创建数据库级别的用户(区别于Hasura的角色),可以写个SQL初始化脚本。比如创建init/create-users.sql

    -- 创建应用用户
    CREATE USER app_user WITH PASSWORD '你的用户密码';
    -- 给用户授予public schema下所有表的查询权限
    GRANT SELECT ON ALL TABLES IN SCHEMA public TO app_user;
    -- 按需添加更多权限,比如插入、更新等
    

    然后把这个脚本挂载到数据库容器的初始化目录(以PostgreSQL为例),修改docker-compose.yml的数据库服务部分:

    services:
      postgres:
        image: postgres:14
        volumes:
          - postgres-data:/var/lib/postgresql/data  # 持久化数据库数据
          - ./init:/docker-entrypoint-initdb.d  # 挂载初始化脚本目录
        environment:
          - POSTGRES_PASSWORD=你的数据库密码
    

    数据库启动时会自动执行这些脚本,创建好预设的用户和对应的权限。

  • 最后验证配置
    重启Docker容器后,打开Hasura控制台检查角色列表,再去数据库里确认用户是否存在,权限是否生效就可以了。

要是你不想用CLI导出元数据,也可以手动编写metadata文件夹里的YAML文件,比如roles.yaml来定义角色,不过导出的方式更省心,不容易出错。

备注:内容来源于stack exchange,提问作者v-ampire

火山引擎 最新活动