如何在不上传Git仓库的情况下使用凭证JSON文件(Hasura及微服务)
解决方案:不提交凭证文件到Git却在服务中正常使用
针对你提出的两个问题,我分别整理了可行的解决办法:
1. 不将credential.json推送到Git远程仓库,却上传至Hasura集群
Hasura CLI提供了直接上传本地文件到集群的功能,完全绕开Git的追踪机制,步骤如下:
- 第一步先把
credential.json加入你的.gitignore文件,确保Git不会追踪到它; - 打开终端,用Hasura CLI登录你的集群:
hasura login(如果已经登录过可以跳过); - 切换到项目根目录,执行文件上传命令:
这里的hasura files upload ./credential.json --destination /your/service/workdir/credential.json/your/service/workdir/需要替换成你的程序在集群中能访问到的实际路径,比如自定义服务的工作目录; - 最后在你的代码或配置中,直接引用集群上的这个文件路径即可。
2. 微服务中使用credvalue.json,不提交到GitHub却避免文件未找到错误
你遇到的问题核心是:加入.gitignore后,Git不再追踪该文件,导致通过Git同步构建Docker镜像时,文件没有被包含到镜像中,进而运行时找不到。结合你无法使用Hasura Secrets的限制,推荐以下几种方案:
方案一:Docker构建时直接复制本地文件
如果是本地构建Docker镜像而非依赖Git自动同步,可以利用Docker的上下文复制能力:
- 确保你的
.dockerignore文件没有排除credvalue.json(如果没有.dockerignore就不用管); - 在Dockerfile中添加复制指令,把本地的
credvalue.json复制到镜像内的指定路径:COPY ./credvalue.json ./src/credvalue.json - 之后本地构建镜像并部署到微服务,这样即使Git不追踪该文件,Docker构建时依然会把它打包进镜像,程序就能正常访问。
方案二:通过环境变量生成文件
如果不想把凭证文件打包进镜像,可以将文件内容通过环境变量传入容器,再在启动时生成文件:
- 把
credvalue.json的内容转成字符串(注意转义双引号),设置为环境变量,比如CRED_VALUE_CONTENT; - 在微服务的启动脚本中添加一行命令,将环境变量内容写入目标文件:
echo "$CRED_VALUE_CONTENT" > ./src/credvalue.json - 启动你的应用,容器启动时会自动生成所需的
credvalue.json文件,API就能正常读取路径了。
方案三:使用存储卷挂载文件
如果是可控的部署环境(比如本地开发或私有集群),可以将credvalue.json放在宿主机或云存储卷中,部署容器时通过挂载方式让容器访问:
- 部署命令中添加挂载参数(以Docker为例):
这样容器内的指定路径就会直接映射到本地的凭证文件,既不用提交到Git,也不会出现文件未找到的问题。docker run -v /local/path/to/credvalue.json:/container/src/credvalue.json your-service-image
内容的提问来源于stack exchange,提问作者Divyanshu Kumar
相关产品推荐
相关产品推荐

