የአካባቢ ተለዋዋጮችና ሚስጥሮች ምንድን ናቸው? ቀላል መመሪያ
Environment variable ማለት እንደ DATABASE_URL ወይም STRIPE_SECRET_KEY ያለ ስም ያለው ቅንብር ነው፤ አፕዎ ሲሰራ ወደ ኮዱ ውስጥ ከመጻፍ ይልቅ የሚሰጠው። Secret ደግሞ እሴቱ ግል ሆኖ መቆየት ያለበት environment variable ነው፦ API ቁልፍ፣ የይለፍ ቃል ወይም የፊርማ ቁልፍ። እነዚህን እሴቶች ከኮዱ ውጭ ማስቀመጥ አፑን ሳታርትዑ ለመቀየር፣ ለሙከራና ለእውነተኛ ደንበኞች የተለያዩ እሴቶችን ለመጠቀም እንዲሁም ኮዳችሁን ሲያጋሩ ወይም ሲያትሙ እንዳይፈስ ያደርጋል።
ለAI ግንባታ ለምን ያስፈልጋል
አፓችሁ ከሌላ አገልግሎት ጋር ጠቃሚ ነገር መስራት እንደጀመረ፣ ለምሳሌ ክፍያ መቀበል፣ ኢሜይል መላክ ወይም AI ሞዴል መጥራት፣ ቁልፍ ያስፈልገዋል። AI መገንቢያዎች እነዚህን ቁልፎች ደጋግመው ይጠይቃሉ፤ ቁልፉ በመጨረሻ የሚገኝበት ቦታ አፑ ደህንነቱ የተጠበቀ መሆን አለመሆኑን ይወስናል።
በAI የተገነቡ አፖች ውስጥ ሁለት ነገሮች ብዙ ጊዜ ይሳሳታሉ፦
- ቁልፉ ወደ ቻቱ ወይም ኮዱ ውስጥ ይለጠፋል። ከዚያ በቻት ታሪኩ፣ በፕሮጀክቱ ፋይሎች እና በማንኛውም ኤክስፖርት ወይም ሪፖዚቶሪ ውስጥ ይቀራል። ያየው ሁሉ የመለያችሁን አገልግሎት መጠቀም ይችላል።
- ቁልፉ በብራውዘር ውስጥ ጥቅም ላይ ይውላል። Stripe ወይም OpenAI የሚጠራው ኮድ በገጹ ውስጥ የሚሰራ ከሆነ፣ ቁልፉ ለእያንዳንዱ ጎብኚ ይላካል። ሰዎች ይመለከታሉ፤ ራስ-ሰር ስካነሮችም የተጋለጡ ቁልፎችን ያለማቋረጥ ይፈልጋሉ።
Environment variables ምን እንደሆኑ ማወቅ ሁለቱንም ለይታችሁ እንድታውቁ እና መፍትሄውን እንድትጠይቁ ይረዳችኋል።
የዕለት ተዕለት ምሳሌ፦ የሆቴል ካዝና
የአፑ ኮድ እንደ የሆቴል ክፍል ነው። እንግዶች (እንዲሁም ጽዳተኞችና የካርድ ቁልፍ የሰጣችሁት ሁሉ) በውስጡ ያልፋሉ። ፓስፖርታችሁን ጠረጴዛ ላይ አትተዉም።
Environment variables የክፍሉ ካዝና ናቸው። ክፍሉ ካዝና እንዳለ እና ሲፈለግ እንዴት እንደሚከፈት ያውቃል፤ ፓስፖርቱ ግን ተዘርግቶ አይቀርም። ከሙከራ ቅንብራችሁ ወደ እውነተኛ ድረ-ገጻችሁ ስትሄዱ ክፍሉን ሳትቀይሩ በካዝናው ውስጥ ሌላ ፓስፖርት ታስቀምጣላችሁ።
እንዴት ይሰራል
ኮዳችሁ ስም ይጠቅሳል እንጂ እሴቱን አያውቅም። በJavaScript በሰርቨር ላይ ይህ process.env.STRIPE_SECRET_KEY ሆኖ ይታያል። አፑ ሲጀምር፣ የሚሰራበት መድረክ ለዚያ ስም እሴቱን ይሞላል። እሴቱን በመድረኩ ቅንብሮች ውስጥ ቀይራችሁ፣ ዳግም ብታስጀምሩ ወይም እንደገና ብታሰማሩ አፑ አዲሱን ይጠቀማል፤ ኮድ መቀየር አያስፈልግም።
እሴቶቹ ከየት እንደሚመጡ የሚወሰነው አፑ የት እንደሚሰራ ነው፦
| የሚሰራበት ቦታ | እሴቶቹ የሚቀመጡበት |
|---|---|
| በገንቢ ላፕቶፕ ላይ | ብዙ ጊዜ .env የሚባል የአካባቢ ፋይል፤ በgit ፈጽሞ መጨመር የለበትም |
| በAI መገንቢያ ቅድመ-እይታ | የፕሮጀክቱ ሚስጥሮች ወይም ቅንብሮች ፓነል |
| በሆስቲንግ መድረክ ላይ | የዚያ መድረክ environment variables ቅንብር |
| በGitHub Actions ወይም ሌላ አውቶሜሽን | የአገልግሎቱ የተመሰጠረ የሚስጥር ማከማቻ |
ይፋዊ እና ሚስጥራዊ ተለዋዋጮች
ሁሉም environment variable ሚስጥር አይደለም። በሁለት ቡድን መከፋፈሉ ይረዳል፦
| ዓይነት | ምሳሌዎች | ብራውዘሩ ማየት ይችላል? |
|---|---|---|
| ይፋዊ ቅንብር | የድረ-ገጽ ስም፣ ይፋዊ የትንታኔ ID፣ Stripe publishable ቁልፍ፣ የባህሪ መቀያየሪያዎች | አዎ፣ ችግር የለውም |
| ሚስጥሮች | Stripe secret ቁልፍ፣ OpenAI ወይም Anthropic API ቁልፍ፣ የዳታቤዝ ግንኙነት ሕብረቁምፊ፣ የኢሜይል አቅራቢ ቁልፍ፣ የዌብሁክ ፊርማ ቁልፍ | በፍጹም አይደለም |
የድር ፍሬምወርኮች ይህን ክፍፍል በግልጽ ያሳያሉ። በVite ውስጥ VITE_ የሚል ቅድመ-ቅጥያ ያላቸው ተለዋዋጮች ብቻ ወደ ብራውዘር ኮድ ይገባሉ፤ በNext.js ቅድመ-ቅጥያው NEXT_PUBLIC_ ነው። ይህ የደህንነት ጥበቃ ነው፤ በእነዚህ ቅድመ-ቅጥያዎች የተሰየመ ማንኛውም ነገር ጎብኚ ሁሉ በሚያወርዳቸው ፋይሎች ውስጥ ይገባል፣ ስለዚህ ሚስጥር ቅድመ-ቅጥያ ፈጽሞ መሰጠት የለበትም።
ምሳሌ፦ የAI ማጠቃለያ ቁልፍ
«ይህን ማስታወሻ አጠቃልል» የሚል ቁልፍ ይፈልጋችኋል፤ ቁልፉ AI ሞዴል ይጠራል።
ያልተጠበቀው መንገድ፦ በብራውዘር ውስጥ የሚሰራው የቁልፍ ኮድ የAI አቅራቢውን በቀጥታ ይጠራል፣ ኤፒአይ ቁልፉም በኮዱ ውስጥ ተጽፏል። በቅድመ-እይታ ይሰራል። ነገር ግን ማንኛውም ሰው የብራውዘሩን የገንቢ መሳሪያዎች ከፍቶ ቁልፉን ገልብጦ በመለያችሁ ሂሳብ ሊያስገባ ይችላል።
የተጠበቀው መንገድ፦
- ቁልፉን ከAI አቅራቢው ፈጥራችሁ በፕሮጀክት ቅንብሮቻችሁ ውስጥ እንደ
OPENAI_API_KEY(ወይም ተመሳሳይ) ሚስጥር አስቀምጡት። - የኋላ-ጫፉ
POST /api/summariseየሚል መንገድ ይኖረዋል፤process.env.OPENAI_API_KEYን ያነባል፣ ተጠቃሚው መግባቱን ያረጋግጣል፣ ከዚያም አቅራቢውን ይጠራል። - ቁልፉ የራሳችሁን መንገድ ይጠራል፣ አቅራቢውን በቀጥታ አይጠራም። ብራውዘሩ ቁልፉን ፈጽሞ አያየውም።
- ተመሳሳዩን ሚስጥር በታተመው አፕ ቅንብሮች ላይ ጨምሩ እና እንደገና አሰማሩ፤ ቀጥታው ድረ-ገጽ ደግሞ እንዲኖረው።
ይህ ንድፍ፦ ብራውዘሩ ሰርቨራችሁን ይጠራል፣ ሰርቨሩ ቁልፉን ይዞ አገልግሎቱን ይጠራል፤ ለክፍያ፣ ለኢሜይል፣ ለካርታና ለእያንዳንዱ የሚከፈልበት API ይሠራል። ለAI ጉዳይ ጥልቅ ማብራሪያ በLLM API አጠቃቀም መመሪያ ውስጥ ይገኛል።
ቁልፍ ቃላት
.envፋይል፦ በአካባቢ ልማት የሚያገለግልNAME=valueመስመሮች ያሉት የጽሑፍ ፋይል። እንዳይጣመር በ.gitignoreውስጥ ይዘርዝሩት።.env.example፦ ስሞቹን ያለ እውነተኛ እሴቶች የያዘ ቅጂ፤ ሌሎች ምን ማስቀመጥ እንዳለባቸው እንዲያውቁ ይጣመራል።- Rotate (መቀየር)፦ ሚስጥርን በአዲስ መተካትና ያለውን መሰረዝ።
- Scope / ፈቃዶች፦ ብዙ አቅራቢዎች ለተወሰኑ ነገሮች ብቻ የሚሰሩ ቁልፎችን እንዲፈጥሩ ይፈቅዳሉ። ኢሜይል ብቻ መላክ የሚችል ቁልፍ ሁሉን ማድረግ ከሚችል ያነሰ አደገኛ ነው።
- Test vs live ቁልፎች፦ እንደ Stripe ያሉ አቅራቢዎች ለሙከራና ለእውነተኛ ገንዘብ የተለያዩ ቁልፎች ይሰጣሉ። እስክትጀምሩ ድረስ የሙከራ ቁልፎችን ተጠቀሙ።
- Signing secret፦ መልዕክት፣ ለምሳሌ ዌብሁክ፣ በእውነት ከላኪው መምጣቱን ለማረጋገጥ የሚያገለግል ሚስጥር።
የተለመዱ ስህተቶችና ግንዛቤዎች
- «ማከማቻዬ ግል ስለሆነ ቁልፎቹ በውስጡ ችግር የላቸውም።» ግል ማከማቻዎችም ይጋራሉ፣ ይቀዳሉ፣ ወደ ላፕቶፖች ይወርዳሉ። ቁልፎች እዚያ መሆን የለባቸውም። ፕሮጀክት ከGitHub ጋር ካገናኛችሁ
.envፋይል እንዳልተካተተ አረጋግጡ። - «ሰርዤዋለሁ፣ ስለዚህ ጠፍቷል።» Git ታሪክ ይይዛል፣ የቻት መልዕክቶችም ይቀመጣሉ። ቁልፉ ከወጣ ቀይሩት።
- ሚስጥር በይፋዊ ቅድመ-ቅጥያ ማስጀመር።
VITE_OPENAI_KEYቁልፋችሁን በብራውዘር ጥቅል ውስጥ ያስቀምጠዋል። - እንደገና ማሰማራት መርሳት። በቅንብሮች ውስጥ ተለዋዋጭን መቀየር ብዙ ጊዜ የሚተገበረው አፑ ዳግም ሲጀምር ወይም እንደገና ሲታተም ብቻ ነው።
- ለሁሉም አንድ ቁልፍ። ለሙከራና ለእውነተኛ፣ እንዲሁም ለእያንዳንዱ አፕ የተለየ ቁልፍ ማድረግ አንዱን ሌላውን ሳያፈርስ መሰረዝ ያስችላል።
- የወጪ ገደብ አለመኖር። ለሚከፈልባቸው APIs በአቅራቢው ዳሽቦርድ በጀት ወይም ገደብ አስቀምጡ፤ ቁልፉ ቢወጣ ለመከላከል።
ከAI መገንቢያችሁ ምን ብላችሁ ጠይቁ
- «ስትሪፕ ሚስጥር ቁልፉን
STRIPE_SECRET_KEYከተባለ environment variable አንብብ። በሰርቨር ላይ ብቻ ተጠቀምበት።» - «ምንም ሚስጥር በclient-side ኮድ ውስጥ እንዳይጠቀም እና
VITE_ወይምNEXT_PUBLIC_ቅድመ-ቅጥያ እንዳይሰጠው አረጋግጥ።» - «አፑ የሚፈልጋቸውን ተለዋዋጮች ሁሉ ያለ እሴቶች የሚዘረዝር
.env.exampleፍጠር፣ እና.envበgit እንዳይጨመር አድርግ።» - «የተገነባውን frontend ፋይሎች ኤፒአይ ቁልፍ የሚመስል ማንኛውንም ጽሑፍ ፈትሽ።»
በAI የተገነቡ አፖች የደህንነት ዝርዝር ውስጥ ከሌሎች የማስጀመሪያ ፍተሻዎች ጋር ሚስጥሮችም ተካተዋል።
በMythex ያሉ ሚስጥሮች
በMythex ሚስጥሮች የፕሮጀክት environment variables ሲሆኑ ወደ ቅድመ-እይታ ሳጥኑም ወደ ታተመው አፕም ይገባሉ። በproject settings → Secrets ወይም በቻት ውስጥ /secrets በመጠቀም ትጨምሯቸዋላችሁ። ወኪሉ ቁልፍ ሲፈልግ በቻት ውስጥ የሚስጥር ካርድ ያሳያል፤ እሴቱም ወደ መልዕክቱ ታሪክ ሳይሆን ወደ ቅጽ መስክ ይገባል። ለቀጥታ አፕ ሚስጥር ከቀየራችሁ፣ ማሰማራቱ እንዲይዘው እንደገና ያትሙ። የፕሮጀክት ኤክስፖርቶች ሚስጥሮችን አያካትቱም፤ የገቡ .env ፋይሎች ይጸዳሉ፣ ስለዚህ በቅንብሮች ውስጥ እንደገና ጨምሩዋቸው። ዝርዝሩ በሰነዶቹ environment variables and secrets እና secrets in chat ውስጥ ይገኛል።
ጥያቄዎች
Environment variable ምንድን ነው?
Environment variable ፕሮግራም ሲሰራ ወደ ኮዱ ውስጥ ከመጻፍ ይልቅ የሚሰጠው ስም ያለው ቅንብር ነው፤ ለምሳሌ STRIPE_SECRET_KEY ወይም DATABASE_URL። ተመሳሳዩ ኮድ በልማትና በእውነተኛ አገልግሎት ላይ የተለያዩ እሴቶችን መጠቀም ይችላል።
በ environment variable እና በsecret መካከል ያለው ልዩነት ምንድን ነው?
Secret እሴቱ ግል ሆኖ መቆየት ያለበት environment variable ነው፤ ለምሳሌ API ቁልፍ፣ የዳታቤዝ የይለፍ ቃል ወይም የዌብሁክ ፊርማ ቁልፍ። ሌሎች environment variables፣ ለምሳሌ የድረ-ገጹ ስም ወይም የባህሪ መቀያየሪያ፣ ይፋዊ ሊሆኑ ይችላሉ።
API ቁልፎችን በfrontend ኮዴ ውስጥ ማስቀመጥ ደህንነቱ የተጠበቀ ነው?
አይደለም። በfrontend ኮድ ውስጥ ያለ ማንኛውም ነገር ወደ እያንዳንዱ ጎብኚ ብራውዘር ይወርዳል፤ ማንም ሊያነበው ይችላል። ሚስጥራዊ ቁልፎች መጠቀም ያለባቸው በሰርቨር ላይ ብቻ ነው፤ ብራውዘሩ ሰርቨራችሁን መጥራት፣ ሰርቨሩም አቅራቢውን መጥራት አለበት።
የAPI ቁልፌ ቢወጣ ምን ላድርግ?
ወዲያውኑ በአቅራቢው ዘንድ ሰርዙት ወይም ቀይሩት፣ አዲስ ቁልፍ ፍጠሩ፣ አፑ ሚስጥሮቹን የሚያስቀምጥበትን ቦታ አዘምኑ፣ እና እንደገና ማሰማራት። ቁልፉን ከኮዳችሁ ወይም ከቻት ታሪካችሁ ላይ መሰረዝ ብቻውን በቂ አይደለም፤ ቅጂዎቹ ቀድሞ ሊኖሩ ይችላሉ።