开源项目如何做到不泄露配置文件中的密码信息?

2022-06-22 11:09:54 +08:00
 NipGeihou

最近因为 JetBrains 的教育许可快过期了,加上 copilot 也开始收费了,但这两个都有一个政策,开源免费,同时因为在用的一个某柚经期记录 app 广告太多,于是我(后端)打算和女友(前端)一起开发并开源一个经期小程序。

那就有一个问题,我怎么才能即上传示例配置文件,又不上传配置文件中自己的一些配置信息,如数据库密码。

类似于若依这个开源项目中 https://github.com/yangzongzhuan/RuoYi-Vue/blob/master/ruoyi-admin/src/main/resources/application-druid.yml 数据库密码写的是password,难道他的开发环境数据库密码就是password吗?

5065 次点击
所在节点    程序员
29 条回复
adoal
2022-06-22 12:41:59 +08:00
方法四,加一个命令行参数,用于指定从哪里读取配置文件。默认是从项目内部路径,可以指定覆盖。服务器上部署时,就在 systemd unit 或者其它启动机制里指定。

我自己做的小项目或者要供应商做的大项目里主要用方法三和四。
hjue
2022-06-22 13:10:06 +08:00
参数少的话用环境变量吧
newaccount
2022-06-22 13:24:22 +08:00
个人目前开发和部署使用的方法。
- 不用 spring profile 。profile 的方式感觉更适合不同 **开发** 环境的切换,生产环境的配置不应该用这个方法。
- 不用 git ignore 或者本地备份修改的方式。会忘,真的会忘,总有人不小心给提交了。
- 不用服务器环境变量。这个配置起来太繁琐,尤其是一台机器跑多个项目。
- spring boot 项目在 IDEA 中配置 override configuration properties ,不会被不小心提交到 git 。
- 如果服务器直接用 java 运行(奇怪的 windows 服务器,懒得迁移了),将需要修改的属性值放在 config/application.properties 文件中,不需要修改的不用放,这样可以一眼看出来修改了哪些。
- 如果服务器使用 docker 运行,跟上面一条一样,把配置文件映射到 container 内的 config 目录下即可。
nothingistrue
2022-06-22 13:50:10 +08:00
跟团队项目如何做到不把个人配置提交到中央仓库,是一样的原理:使用可覆盖的配置体系,本地配置覆盖默认配置;中央仓库只提交默认配置。

Spring Boot 的配置文件体系 https://docs.spring.io/spring-boot/docs/current/reference/html/features.html#features.external-config ,随便玩都行。最简单的:application.yml 弄一句 spring.profiles.active=local ,然后示例 /默认配置都放到 application.yml 一起提交;.gitignore 里面加一条*-local.yml ,然后把 .gitignore 提交了(很重要);本地直接源码 application.yml 旁边放一个 applicaltion-loacl.yml ,生产环境就 jar 的旁边放 application-local.yml ,local 当中只填写非默认的配置,这样即不用担心提交污染默认配置(或者泄露个人配置),也能让定制配置的内容更简洁。
Vindroid
2022-06-22 13:57:49 +08:00
账号密码写到系统环境变量里,就算配置文件不小心公开了也没事
kaedeair
2022-06-22 14:46:07 +08:00
使用环境变量注入,dev 里写死,prod 直接从环境变量拿
mingl0280
2022-06-22 14:46:40 +08:00
.gitignore:
config.txt
只保存 default_config.txt
haolongsun
2022-06-22 15:01:10 +08:00
真的是后端开发?入门都知道密码密钥信息要写到 env 里吧。。。
superchijinpeng
2022-06-22 15:49:27 +08:00
环境变量

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/861312

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX