欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

rails 密钥管理 - 部署到主机

最编程 2024-07-06 15:03:10
...

核心文件:master.key(主密钥)

  • Web应用中的对称加密
JWT 加密解密需要一个 key1
SessionID 加密解密需要一个 key2
(上述就是keys)
  • 那么 Key 们存在哪里:Rails 帮我们想好了
  1. 先汇总:将各个keymaster.key进行加密生成encrypted信息;使用的时候再通过encrypted信息进行解密得到所有的key
master.key + keys => encrypted
encrypted + master.key => keys
  1. 运行rails命令生成一个yml临时文件,这个文件定义一系列 key,关闭该文件rails就会删除该临时文件,然后会生成两个文件:credentials.yml.enc(加密后的encrypted,可传到git)master.key(不能传到git)
EDITOR="code --wait" bin/rails credentials:edit(在vscode中打开)
or
bin/rails credentials:edit(在vim中打开)
  1. 还有问题, key 们被删了,那怎么读写 key 们呢,用控制台:
  • 打开控制台:
bin/rails console
or
bin/rails c
  • 输入代码:
Rails.application.credentials.xxx
Rails.application.credentials.config(得到所有)
  1. 还有问题,还是需要把 master.key 复制给生产环境和实习生,不安全。因此Rails支持多环境秘钥,即使泄露了开发环境的,生产环境也不会受影响。运行如下命令生成生产环境的对应的文件:production.key(和之前的master,key类似)production.yml.enc
EDITOR="code --wait" bin/rails credentials:edit --environment production
  1. 读生产环境的key:
 RAILS_ENV=production bin/rails c
  1. production.key 复制到生产环境,不要给实习生
  2. 最后可以删掉production.key(但要备份)
  3. 最终结果:
  • 开发环境:
使用master.key和credentials.yml.enc
master.key 被 git ignore
如果 .enc 不被ignore,那么多人就共用 master.key
如果 .enc 被ignore,那么每个人就创建自己 maskter.key (注:每个人的key例如jwt的key不一定要一样,只要符合对应的生产规则即可,因此每个人可以生产不一样的master.key)
  • 生产环境:
使用 production.key 和 production.yml.enc
.key 被 ignore,内容写到环境变量
.enc 不被 ignore
读取key 们的方式和开发环境一样
  1. 把开发环境的key_base复制给生产环境,然后开发环境的删掉,重新生成一套,不然生产的就相当于暴露了
  2. setup_host时候把 .key 作为环境变量传过去,不然服务器解析不了
  3. 服务器运行:
 DB_HOST=db-for-mangosteen DB_PASSWORD=123456 RAILS_MASTER_KEY=6de8a9b8bace9454c87e34d79e6ac4f9 mangosteen_deploy/setup_host.sh
docker exec -it mangosteen-prod-1 bin/rails db:create db:migrate

(注:改端口的话,在puma.rbport ENV.fetch("PORT") { 3030 }地方改)

推荐阅读