Seiring berjalannya waktu, alat CI / CD berubah, jumlah proyek, lingkungan, dan lokasi penyimpanan utama berlipat ganda, tingkat kecemasan bahwa kunci di suatu tempat yang sudah ketinggalan zaman meningkat. Nah, itu sudah cukup ... Bisakah saya meninggalkan kunci di repositori? Ternyata, ya, Anda bisa. Dan ini adalah urutan besarnya lebih nyaman daripada apa pun yang pernah saya lakukan sebelumnya.
Mari kita lewati cerita memilukan tentang masalah yang kita semua hadapi ketika berhubungan dengan semua jenis rahasia dalam proyek dan langsung ke intinya.
Tujuan
- , /
- , ,
- 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.

Saya menyarankan Anda untuk memulai dengan tiga environments: local, staging, production.
Keunikan locallingkungan adalah bahwa skrip decrypt.shjuga dapat menggantikan localhostkonfigurasi Anda dengan IP lokal komputer Anda. Ini diperlukan, misalnya, dalam pengembangan seluler, ketika smartphone perlu terhubung ke server lokal.
Terima kasih atas perhatiannya!