Im Laufe der Zeit änderten sich die CI / CD-Tools, die Anzahl der Projekte, Umgebungen und Schlüsselspeicherorte vervielfachte sich und die Angst, dass ein Schlüssel irgendwo veraltet ist, nahm zu. Nun, das ist schon genug ... Kann ich die Schlüssel einfach im Repository lassen? Es stellt sich heraus, ja, Sie können. Und das ist eine Größenordnung bequemer als alles, was ich zuvor getan habe.
Lassen Sie uns die herzzerreißende Geschichte über die Probleme überspringen, mit denen wir alle konfrontiert sind, wenn es um alle möglichen Geheimnisse in Projekten geht, und gleich zur Sache kommen.
Ziele
- , /
- , ,
- CI ,
- .
: encrypt.sh
decrypt.sh
.
encrypt.sh
:
#!/bin/bash
# sh encrypt.sh <./path/to/file.js> <environment> <password>
LOCAL_IP_REMOVED='Y'
if [[ $2 == 'local' ]]; then
read -p "You are encrypting local environment. \
Did you remove your local ip address from configs? Y/n" LOCAL_IP_REMOVED
fi
if [[ $LOCAL_IP_REMOVED != 'Y' ]]; then
echo "Well, go on and remove it then! Aborting encryiption"
exit 1
fi
echo "encrypting $1"
openssl enc -aes-128-cbc -a -salt -pass pass:$3 -in $1 -out $1.${2}-enc -md md5
echo "done"
decrypt.sh
:
#!/bin/bash
# sh decrypt.sh <environment> <password>
echo "decrypting $1 environment"
for file in $(find . -not -path "*/node_modules/*" -name "*.$1-enc")
do
echo "decrypting $file to ${file//.$1-enc}"
openssl enc -aes-128-cbc -a -d -salt -pass pass:$2 -in $file -out "${file//.$1-enc}" -md md5
done
if [[ $1 == 'local' ]]; then
LOCAL_IP=`ifconfig | sed -En 's/127.0.0.1//;s/.*inet (addr:)?(([0-9]*\.){3}[0-9]*).*/\2/p'`
echo "Also replacing localhost with your local machine ip: $LOCAL_IP"
# optionally, add logic to replace "localhost" with your machine IP
sed -i '' "s|localhost|$LOCAL_IP|g" './src/env.js'
fi
, . .env
, env.js
.
.gitignore
.
encrypt.sh
:
sh encrypt.sh ./src/env.js <environment> <very_secure_password>
. ./src/env.js.production-enc
.
Ich rate Ihnen , mit drei zu starten environment
s: local
, staging
, production
.
Die Besonderheit der local
Umgebung ist , dass das Skript decrypt.sh
auch ersetzen kann localhost
in Ihrem configs mit der lokalen IP - Adresse Ihres Computers. Dies ist beispielsweise in der mobilen Entwicklung erforderlich, wenn das Smartphone eine Verbindung zu einem lokalen Server herstellen muss.
Vielen Dank für Ihre Aufmerksamkeit!