Skip to main content

Környezeti titkok mentése és visszaállítása

Az egységes runtime a motherrepo gyökér .env fájlját olvassa. A .env.example karbantartott, minimális sablon, nem teljes hitelesítő-adatkészlet. A setup a számított URL-eket, az adatbázis-kapcsolatokat és a hiányzó generált auth-, proxy- és FormGen-titkokat a gyökér fájlba írja.

Új konfigurációhoz kövesd a környezeti setup útmutatót. Soha ne másold a sablont a meglévő beállítások fölé. A Google setup opcionális provider-mezőket és külön fájlokat ad hozzá.

Mit őriz meg a környezeti archívum​

A gyökér archívum a kiválasztókat és a REMOTE_* bemeneteket őrzi meg. Másik gépen a privát címek, a Docker-nevek, a portok vagy az átnézett forrásútvonalak érvénytelenek lehetnek. Indítás előtt ellenőrizd az azonosítót, az endpointokat és a kódkiválasztást. Ne generálj újra működő titkosítási kulcsokat vagy Kafka-azonosítót egy kapcsolat javításához.

Használd a fulllocal/false értéket helyi elhelyezéshez, a partialRemote/true értéket helyi szimulációhoz, és a partialRemote/false értéket valódi távoli szolgáltatásokhoz. Hiányzó kiválasztó esetén a rendszer teljes helyi módot (fulllocal) használ. A konfigurációs változtatásokat validálással és sima újraindítással alkalmazd. A gyors indítás nem alkalmaz új konfigurációt. A generált ECS_EFFECTIVE_* kimenetek nem felhasználói mentési bemenetek.

Az archívum nem menti az adatbázis-sorokat, az S3-objektumokat, a Kafka-eseményeket és offseteket, a Qdrant-pontokat vagy a named volume-okat. Az Office-aláírókulcsokat, a Google grant-kulcsokat, a személyes e-mail-kulcs mentéseket és más titkos fájlokat külön kell védeni. Új bejelentkezés vagy új kulcs nem fejti vissza a régi tartalmat.

A valódi remote elhelyezésben a PostgreSQL, az S3, az OpenSearch és a Dragonfly helyben marad. A távoli címek mentése nem visz át távoli adatot, és nem hoz létre Tailscale-hozzáférést. A forrásgyökér útvonala nem menti a pillanatképét.

Jelszóval védett ZIP​

Az envzipper.sh a saját szkriptkönyvtárából oldja fel a fájlokat. A másolatot abban a klónban futtasd, amely a kívánt konfigurációt tartalmazza. Az ENV_FILES listája 14 útvonalat fed le. A hiányzó fájlokat a rendszer kihagyja.

ÚtvonalCélja
.envEgységes gyökérkonfiguráció
mailGen/ECS_MovePST_To_TempSQL/.envOnboarding/OpenSearch Compose
mailGen/msmicroservices-architexture/.envÖnálló backend
mailGen/ECS_MovePST_To_TempSQL/OneTimeUserOnboarder/.envRégi PST-onboarding
mailGen/ECS_MovePST_To_TempSQL/GraphOneTimeUserOnboarder/.envGraph-onboarding
mailGen/msmicroservices-architexture/coolify/.env.coolifyKülön infrastruktúra-deployment
Architecture/GraphSyncExperimenter/graph-call-dashboard/.envKülön Graph-kísérletező
mailGen/ECS_MovePST_To_TempSQL/DataSearcher/.envÖnálló DataSearcher
mailGen/bff/.envÖnálló BFF
recGen/.envRecGen (VoiceNextWeb) submodule
mailGen/benchmarker/frontend/.env.demo, .env.development, .env.locsorting, .env.remotedev, .env.productionÖt benchmark frontend-profil

Készítsd elő az OpenSSL-t, a zip-et és az unzip-et. macOS-en: brew install openssl@3 zip unzip. Debian/Ubuntu rendszeren: sudo apt-get install openssl zip unzip. A szkript kiválaszthatja a Homebrew OpenSSL-t, ha a rendszer LibreSSL-je nem tartalmazza a szükséges opciókat.

A motherrepo gyökeréből, Bash-ben:

umask 077
read -r -s -p 'Archive password (at least 16 characters): ' archive_password
printf '\n'
bash envzipper.sh "$archive_password"
unset archive_password
chmod 600 secretvariables.zip

A titkosításhoz kisbetű, nagybetű, szám, speciális karakter és legalább 16 karakter szükséges. Üres vagy gyenge jelszó esetén a szkript új jelszót generál és kiír. A titkosítás után kiírja a használt jelszót is. Védd a terminálkimenetet, a tényleges jelszót pedig jelszókezelőben tárold.

A szkript felülírja a meglévő secretvariables.zip fájlt. Mielőtt újra titkosítasz, mentsd el a szükséges régi archívumot. Az archívumot és a jelszót külön, biztonságos csatornán vidd át.

A ZIP-titkosítás a rendszer zip -P parancsát használja, nem modern age/AES archívumvédelmet. A jelszó folyamatargumentumként is megjelenhet. Megbízható gépen használd, és publikus terjesztéshez ne csak erre a ZIP-re támaszkodj.

Hiányzó fájlok visszaállítása​

Helyezd az archívumot a célgép motherrepo gyökerébe. A visszafejtő unzip -n módot használ. Megőrzi a meglévő fájlokat, és csak a hiányzókat állítja vissza. Mezőket nem egyesít, a meglévő hitelesítő adatokat nem frissíti. Kihagyja az elavult .env.root fájlt.

Mentsd el a célkonfigurációt, és hasonlítsd össze a szándékolt verziókat az operátorral. Ne töröld a működő konfigurációt csak azért, hogy a kibontás felülírja.

read -r -s -p 'Archive password: ' archive_password
printf '\n'
bash envzipper.sh "$archive_password" --decrypt
unset archive_password
chmod 600 .env

A visszafejtés a megadott jelszót változatlanul fogadja el. Nem ír elő új erősségi követelményt. Ellenőrizd ennek a gépnek az azonosítóját, a domaineket és a regisztrált callbackeket, miközben megőrzöd a titkosítási kulcsokat.

Jelszótokenek és L2-mód​

A szkript támogatja a karakterlánc-titkosítást és a jelszótoken-segédeket is:

bash envzipper.sh chip <passphrase> <ciphertext> --decrypt
bash envzipper.sh passenc <zip-password> <chip-passphrase>
bash envzipper.sh passdec <encrypted-password> <chip-passphrase>
bash envzipper.sh --l2 <zip-password> <chip-passphrase>
bash envzipper.sh -dl2 <encrypted-password> <chip-passphrase>

A --l2 titkosítja a ZIP-et, és egy titkosított jelszótokent ír ki. A -dl2 ezt a tokent fogadja el a visszaállításhoz. A --decrypt --l2 alias. A tokenbe csomagolás nem emeli meg a ZIP alapul szolgáló titkosítását, és nem teszi privátissá a parancssori titkos argumentumokat.

Age-titkosított környezeti fájlok​

Az envsecreter/ könyvtár tartalmazza az envcrypter eszközt, amely rekurzívan titkosítja a .env* fájlokat. Bun és age-kulcspár kell hozzá. Az age-t macOS-en a brew install age, Debian/Ubuntu alatt a sudo apt-get install age paranccsal szerezd be. A Bunt a hivatalos disztribúcióján keresztül szerezd be.

A privát kulcsot tartsd a repositoryn kívül, csak a saját felhasználód olvashassa. Új kulcshoz:

umask 077
mkdir -p "$HOME/.config/envcrypter"
chmod 700 "$HOME/.config/envcrypter"
if [ ! -e "$HOME/.config/envcrypter/key.txt" ]; then
age-keygen -o "$HOME/.config/envcrypter/key.txt"
fi
age-keygen -y "$HOME/.config/envcrypter/key.txt"

Az utolsó parancs kiírja a nyilvános age1... címzettet. A privát fájlt külön mentsd. Régi titkosított fájlok visszaállításához soha ne írd felül a meglévő kulcsot.

Egyszer futtasd a bun install parancsot az envsecreter könyvtárban. Ezután a motherrepo gyökeréből:

export AGE_PUBLIC_KEY='YOUR_PUBLIC_AGE_KEY'
bun run ./envsecreter/index.ts encrypt --dry-run
bun run ./envsecreter/index.ts encrypt

Visszaállításhoz ugyanebből a gyökérből:

export AGE_SECRET_KEY_FILE='/YOUR/PRIVATE/PATH/key.txt'
bun run ./envsecreter/index.ts decrypt --dry-run
bun run ./envsecreter/index.ts decrypt

Az eszköz .encrypted másolatokat hoz létre. A sima szövegű fájlokat továbbra is védeni kell. Az .env.example alapértelmezés szerint kimarad. Az envcrypter.json állítja be a mappa-, fájl- és kulcskizárásokat. A meglévő célfájloknál alapértelmezés szerint interaktív összevonás fut. Az egyező értékek változatlanok maradnak, a hiányzó kulcsok bekerülnek, az ütköző értékekhez pedig választás kell.

Először ellenőrizd a dry-run hatókörét. Működő példányon ne válassz automatikus cserét. Az eszköz repository README-je tartalmazza a pontos opciókat.

Külön Google-hitelesítő adatok mentése​

Sem az envzipper, sem az envcrypter nem menti automatikusan a .docker-state/google/oauth-client-secret és a .docker-state/google/mailbox-grant.key fájlt. Mindkettőt külön őrizd meg titkosított jelszókezelőben vagy jóváhagyott titokmentésben.

Állítsd vissza őket a privát könyvtárba, 700 könyvtár- és 600 fájljogosultsággal. A grant-kulcs újragenerálása olvashatatlanná teszi a régi titkosított grantokat. A hitelesített push szolgáltatásfióknak nincs szüksége JSON privát kulcsra.

A .env, a .docker-state, a privát kulcsok és a secretvariables.zip ne kerüljön commitba. Az önálló dokumentációhoz ezek egyikére sincs szükség.