IlmHamroh
JavaScript Full-stack/1-qism. Kompyuter, fayllar va terminal35/40-dars15 daqiqa
Mundarija (30)

YAML, TOML, INI va .env: sozlama fayllari va ularning tuzoqlari

Qisqacha: Sozlama (config) fayllari dasturga "qanday ishla" deb aytadi. YAML — bo'shliqlar bilan yoziladi, Docker va CI'da ko'p; tab ishlatib bo'lmaydi, NO, yes kabi so'zlar esa true/false ga aylanib ketishi mumkin. TOML — aniq turli, [bo'lim] va kalit = qiymat ko'rinishida (Rust, Python loyihalari). INI — eng sodda va eski format. .env — KALIT=qiymat qatorlari, maxfiy parol va kalitlar uchun; u hech qachon Git'ga yuklanmaydi.

Bu darsda

  • Nega JSON'dan tashqari sozlama formatlari kerakligini tushunasiz.
  • YAML'da obyekt, ro'yxat va ko'p qatorli matn yoza olasiz, anchor bilan takrorlanishdan qutulasiz.
  • YAML'ning tab, "Norvegiya muammosi" va 1.10 kabi tur tuzoqlarini taniysiz.
  • TOML va INI fayllarini o'qiy olasiz va qayerda uchrashini bilasiz.
  • .env fayl yozasiz, .env.example tayyorlaysiz va maxfiy kalitni himoya qilish qoidalarini bilasiz.

Oldin bilishingiz kerak: JSON: dasturlar tili, Muhit o'zgaruvchilari, PATH va shell sozlamalari, CSV va TSV.

1. Nega bu kerak?

Sozlama (config) — dastur kodini o'zgartirmasdan uning ishini boshqaradigan qiymatlar: qaysi portda ishlash, qaysi bazaga ulanish, qaysi tilda gapirish. Ular kodning ichida emas, alohida faylda turadi. Shunda bitta dastur kompyuteringizda bir sozlama bilan, serverda boshqasi bilan ishlaydi.

O'xshatish: konditsioner pulti. Konditsionerning ichki qismini (kodni) har safar ochib o'zgartirmaysiz. Pultda haroratni tanlaysiz — u sozlama.

JSON darsida ko'rdik: u dasturlar uchun ajoyib. Lekin odam qo'lda yozadigan sozlama uchun noqulay:

  • Izoh yozib bo'lmaydi — "bu qator nega shunday?" deb tushuntirib qo'yolmaysiz.
  • Qo'shtirnoq va qavslar juda ko'p, bitta vergul xatosi butun faylni buzadi.

Shuning uchun odam o'qishi va yozishi uchun qulayroq formatlar paydo bo'lgan. Dasturchi o'zi formatni kamdan-kam tanlaydi — odatda vosita tanlaydi: Docker Compose YAML so'raydi, Rust TOML so'raydi. Bu vositalarni kursda keyinroq ko'ramiz, hozir nomlarini bilsangiz kifoya. Sizning vazifangiz — har birini o'qiy olish va tuzoqlarini bilish.

2. YAML — bo'shliqlar bilan tuzilma

YAML (YAML Ain't Markup Language — o'zini o'zi tushuntiradigan hazil nom) — bo'shliqlar bilan tuzilma yaratadigan format. Qavs va qo'shtirnoq deyarli yo'q. Kengaytmasi .yaml yoki .yml — ikkalasi ham bir xil.

2.1 Obyekt va ro'yxat

Mana do'kon sayti sozlamasi:

yaml
# Do'kon sozlamalari
server:
  host: localhost
  port: 8080
  faol: true

tillar:
  - uz
  - ru
  - en

Qatorma-qator o'qiymiz:

  • # — izoh. Dastur uni o'qimaydi, odam uchun yoziladi. JSON'dan birinchi farq shu.
  • server: — kalit. Undan keyingi, 2 ta bo'sh joy ichkariga surilgan qatorlar — shu kalitning ichidagilari. Bu JSON'dagi { } ning o'rnini bosadi.
  • port: 8080 — kalit va qiymat. Ikki nuqtadan keyin albatta bo'sh joy bo'ladi.
  • tillar: ostidagi - uz qatorlari — ro'yxat (massiv). Har element chiziqcha va bo'sh joy bilan boshlanadi.

Xuddi shu ma'lumot JSON'da:

json
{
  "server": { "host": "localhost", "port": 8080, "faol": true },
  "tillar": ["uz", "ru", "en"]
}

Tuzilma bir xil — faqat yozuvi boshqa. Qiziq fakt: har qanday to'g'ri JSON — bir vaqtda to'g'ri YAML ham.

YAML ham JSON'dagi turlarni biladi: 8080 — son, true — mantiqiy qiymat, localhost — satr. Satrni qo'shtirnoqsiz yozsa bo'ladi. Lekin pastroqda, «YAML tuzoqlari» bo'limida ko'rasiz: ba'zan qo'shtirnoq shart.

2.2 Bo'shliq — qat'iy qoida

YAML'da ichkariga surish (indent) — ma'noning o'zi. Bitta bo'sh joy xato tuzilmani o'zgartiradi:

  • Ichkari surish faqat bo'sh joy (probel) bilan. Tab — taqiqlangan.
  • Odatda har daraja 2 ta bo'sh joy. Asosiysi — bir darajadagi qatorlar bir xil surilgan bo'lsin.

Tab ishlatilsa, xato shunday bo'ladi:

text
YAMLException: tab characters must not be used in indentation (2:1)

Tarjimasi: "ichkari surishda tab belgisi ishlatilmasligi kerak (2-qator, 1-ustun)". Muharrir sozlamasida "Tab bosilganda bo'sh joy qo'y" (Insert Spaces) yoqilganini tekshiring.

Tekshirib ko'ring: Quyidagida port qaysi kalitning ichida?

text
server:
  host: localhost
port: 8080
Javob

Hech qaysi — port eng yuqori darajada, server bilan yonma-yon. U ichkariga surilmagan. server ichida bo'lishi uchun host kabi 2 ta bo'sh joy bilan boshlanishi kerak edi.

2.3 Ko'p qatorli matn: | va >

Uzun matn yoki buyruqlar ro'yxatini yozish uchun ikki belgi bor:

yaml
tavsif: |
  Birinchi qator.
  Ikkinchi qator.
qisqacha: >
  Bu uzun matn
  bitta qatorga
  aylanadi.

Dastur buni shunday o'qiydi:

text
tavsif   → "Birinchi qator.\nIkkinchi qator.\n"
qisqacha → "Bu uzun matn bitta qatorga aylanadi.\n"
  • | (literal — "aynan") — qator oxirlarini saqlaydi. \n — qator oxiri belgisi. Skript buyruqlari uchun aynan shu kerak.
  • > (folded — "buklangan") — qatorlarni bo'sh joy bilan bitta satrga qo'shadi. Uzun tavsifni chiroyli bo'lib yozish uchun.

Ikkalasi ham oxiriga bitta \n qo'shadi. Uni olib tashlash kerak bo'lsa, |- yoki >- yoziladi.

2.4 Anchor va alias: takrorlanmaslik

Bir xil sozlama bir necha joyda kerak bo'lsa, uni bir marta yozib, keyin havola qilsa bo'ladi:

yaml
standart: &asosiy
  timeout: 30
  urinishlar: 3

test: *asosiy
ishlab_chiqarish: *asosiy
  • &asosiy — anchor ("langar"): bu qiymatga asosiy degan nom beradi.
  • *asosiy — alias ("taxallus"): "shu yerga asosiy nomli qiymatni qo'y".

Natijada test ham, ishlab_chiqarish ham timeout: 30 va urinishlar: 3 ga ega bo'ladi. Qiymatni o'zgartirmoqchi bo'lsangiz — bitta joyda o'zgartirasiz.

Maslahat: Docker Compose va GitLab fayllarida <<: *asosiy yozuvini uchratasiz. Bu "asosiy'ni shu yerga qo'shib, yoniga yana kalitlar qo'shaman" degani. Ko'p vositalar uni tushunadi, lekin u YAML'ning eng yangi standartiga kirmagan — hamma o'quvchi ham qo'llamaydi.

3. YAML tuzoqlari: qiymat o'zi tur tanlaydi

YAML qo'shtirnoqsiz yozilgan qiymatning turini o'zi taxmin qiladi. Ko'pincha to'g'ri taxmin qiladi. Lekin ba'zan kutilmagan natija beradi.

3.1 "Norvegiya muammosi"

YAML'ning 1.1 versiyasi yes, no, on, off so'zlarini ham true/false deb tushunadi. Bu mashhur hodisaga olib keldi:

yaml
davlatlar:
  FR: Fransiya
  DE: Germaniya
  NO: Norvegiya

NO — Norvegiyaning xalqaro ikki harfli kodi. YAML 1.1 o'quvchisi (masalan, Python'dagi mashhur PyYAML kutubxonasi) esa uni false deb o'qiydi. Natija JSON ko'rinishida:

text
{"davlatlar": {"FR": "Fransiya", "DE": "Germaniya", "false": "Norvegiya"}}

Norvegiya "yo'qoldi". YAML'ning yangi 1.2 versiyasida bu tuzatilgan: faqat true va false mantiqiy qiymat. Lekin qaysi vosita qaysi versiyani ishlatishini doim ham bilmaysiz.

3.2 1.10 → 1.1

yaml
versiya: 1.10

Siz "bir nuqta o'n" versiyasini nazarda tutdingiz. YAML esa buni kasr son deb o'qiydi: 1.1. Oxiridagi 0 yo'qoldi. Bu muammo YAML'ning har ikki versiyasida bor.

3.3 Yechim: shubha bo'lsa — qo'shtirnoq

yaml
davlatlar:
  "NO": Norvegiya
versiya: "1.10"
holat: "on"

Qo'shtirnoq ichidagi qiymat har doim satr. Qoida: qiymat son yoki mantiqiy qiymatga o'xshasa, lekin aslida matn bo'lsa — qo'shtirnoqqa oling. Versiyalar, kodlar, telefonlar, yes/no/on/off — shular jumlasidan.

Tekshirib ko'ring: node: 22.10 qatori qanday o'qiladi? Qanday yozish to'g'ri?

Javob

Kasr son 22.1 sifatida — oxiridagi 0 yo'qoladi. Node.js'ning 22.10 versiyasi nazarda tutilgan bo'lsa, node: "22.10" deb yozish kerak.

4. TOML — aniq turlar bilan

TOML (Tom's Obvious, Minimal Language — "Tomning aniq va minimal tili", muallifi Tom Preston-Werner nomidan) — odam uchun qulay, lekin YAML'dan ko'ra aniqroq format. Barqaror 1.0 versiyasi 2021-yilda chiqqan.

toml
# Do'kon sozlamalari
nom = "Bahor do'koni"
versiya = "1.10"

[server]
host = "localhost"
port = 8080
faol = true

[tolov]
usullar = ["Click", "Payme", "naqd"]
ochilgan = 2026-09-27

[[mahsulot]]
nom = "Non"
narx = 4000

[[mahsulot]]
nom = "Choy"
narx = 12000

Qoidalari:

  • kalit = qiymat — tenglik belgisi bilan. Satrlar doim qo'shtirnoqda. Shuning uchun NO yoki 1.10 muammosi yo'q: qo'shtirnoqsiz Ali yozsangiz, bu shunchaki xato.
  • [server] — jadval (table), ya'ni bo'lim. Undan keyingi qatorlar shu bo'limga tegishli (JSON'dagi ichki obyekt).
  • [[mahsulot]] — jadvallar massivi: har bir [[mahsulot]] ro'yxatga yangi element qo'shadi. Yuqoridagi faylda ikki mahsulot bor.
  • ochilgan = 2026-09-27 — TOML'da sana turi bor. JSON va CSV'da yo'q edi.
  • Bo'shliq ahamiyatsiz: ichkari surish faqat chiroy uchun.

Qayerda uchraydi: Rust loyihasining Cargo.toml fayli, Python loyihasining pyproject.toml fayli, Netlify saytlarining netlify.toml fayli.

Kamchiligi: juda chuqur ichma-ich tuzilmada [a.b.c.d] kabi uzun sarlavhalar paydo bo'ladi. Shunday joyda YAML qulayroq.

Tekshirib ko'ring: TOML faylida shahar = Toshkent qatori bor. Bu to'g'rimi? YAML'da-chi (shahar: Toshkent)?

Javob

TOML'da — xato: satr doim qo'shtirnoqda bo'lishi kerak, to'g'risi shahar = "Toshkent". YAML'da esa to'g'ri: qo'shtirnoqsiz Toshkent satr deb o'qiladi. TOML qat'iyroq, shuning uchun unda YAML'ning tur taxmini tuzoqlari yo'q.

5. INI — eng sodda va eski

INI (initialization — "ishga tushirish" so'zidan) — eng qadimgi formatlardan biri. Windows'ning dastlabki versiyalaridan qolgan.

ini
; Ma'lumotlar bazasi sozlamasi
[baza]
host = localhost
port = 5432

[aloqa]
email = info@example.com
  • [baza] — bo'lim.
  • kalit = qiymat — qo'shtirnoq odatda shart emas.
  • ; yoki # — izoh.

INI'ning yagona rasmiy standarti yo'q. Har dastur uni o'zicha o'qiydi: biri # ni izoh deb biladi, boshqasi — yo'q. Ichma-ich tuzilma, ro'yxat va turlar ham yo'q — hamma qiymat satr. Masalan, port = 5432 dagi 5432 ni dastur o'zi songa aylantirishi kerak.

Shunga qaramay, u hamon ko'p uchraydi. Siz eng ko'p ko'radigan INI fayllar:

  • .editorconfig — loyiha bo'ylab bir xil indent va qator oxiri uchun (fayl tizimi darsida nomini ko'rgan edik).
  • .gitconfig — Git sozlamalari.
  • php.ini — PHP sozlamalari.

6. .env — maxfiy sozlamalar

6.1 Nima uchun alohida fayl

Dastur ma'lumotlar bazasiga ulanishi uchun parol kerak. To'lov tizimi bilan ishlash uchun maxfiy kalit kerak. Ularni kodning ichiga yozish — eng xavfli xatolardan biri. Kod ko'p odamga ko'rinadi: jamoadoshlarga, GitHub'ga, ba'zan hammaga.

Maxfiy kalit (secret) — tizimga kirish huquqini beradigan qiymat: parol, API kaliti (boshqa xizmatdan, masalan to'lov tizimidan foydalanish uchun berilgan maxfiy satr), token. Bunday qiymatlar kod ichida emas, .env faylida saqlanadi:

text
# Ilova sozlamalari
PORT=3000
DATABASE_URL=postgresql://ilova:PAROLNI_SHU_YERGA@localhost:5432/dokon
JWT_SECRET=bu-yerga-uzun-tasodifiy-satr-yoziladi

Bu yerda DATABASE_URL — ma'lumotlar bazasiga ulanish manzili (ichida parol ham bor), JWT_SECRET — foydalanuvchi kirganini tasdiqlash uchun ishlatiladigan maxfiy satr. Ikkalasini ham kursda keyinroq ishlatamiz.

Qoidalari juda oddiy:

  • Har qatorda bitta KALIT=qiymat. Tenglik atrofida bo'sh joy yo'q.
  • Kalitlar odatda katta harf va pastki chiziq bilan: DATABASE_URL.
  • # bilan boshlangan qator — izoh.
  • Qiymatda bo'sh joy bo'lsa, qo'shtirnoqqa olinadi: DOKON_NOMI="Bahor do'koni".

Nomi — environment ("muhit") so'zidan. Muhit o'zgaruvchilari darsida export PORT=3000 ni ko'rgan edik. .env — o'sha o'zgaruvchilarni har safar qo'lda yozmaslik uchun ularni faylda saqlash usuli. Dastur ishga tushganda faylni o'qib, qiymatlarni muhit o'zgaruvchilariga aylantiradi.

flowchart LR
    A[".env fayli<br/>(faqat sizning kompyuteringizda)"] --> B["Dastur ishga tushganda<br/>faylni o'qiydi"]
    B --> C["Muhit o'zgaruvchilari<br/>PORT, DATABASE_URL"]
    C --> D["Kod qiymatni<br/>nomi bilan oladi"]

.env ni shell o'zi o'qimaydi — uni dastur yoki maxsus kutubxona o'qiydi. Masalan, Node.js 20.6 va undan yangi versiyalari buni --env-file flagi bilan qiladi: node --env-file=.env app.js. Node.js'ni kursda keyinroq o'rnatamiz.

6.2 Oltin qoida: .env Git'ga tushmaydi

Qidiruv darsida .gitignore faylini ko'rgan edik: unga yozilgan fayllarni Git e'tiborsiz qoldiradi va GitHub'ga ham yuklamaydi. Git'ni kursda alohida qismda o'rganamiz. Yangi loyihaning birinchi ishlaridan biri — .gitignore ga shu qatorni yozish:

text
.env

Jamoadoshlaringiz qaysi sozlamalar kerakligini bilishi uchun esa .env.example fayli yaratiladi. U Git'ga yuklanadi, lekin ichida haqiqiy qiymatlar yo'q — faqat kalit nomlari:

text
PORT=3000
DATABASE_URL=
JWT_SECRET=

Yangi dasturchi loyihani oladi, .env.example dan nusxa olib .env yaratadi va o'z qiymatlarini yozadi:

bash
cp .env.example .env

Diqqat: Maxfiy kalit bir marta GitHub'ga chiqib qolsa, faylni o'chirish yetarli emas. Git tarixida u qoladi, avtomatik botlar esa ochiq omborlarni bir necha daqiqada skanerlaydi. Yagona to'g'ri yo'l — kalitni darhol almashtirish: yangi parol yoki yangi API kalit olish, eskisini bekor qilish.

Tekshirib ko'ring: .env va .env.example — qaysi biri Git'ga yuklanadi va nega?

Javob

Faqat .env.example. Unda kalit nomlari bor, lekin qiymatlar bo'sh — hech narsa sirni ochmaydi. .env da haqiqiy parol va kalitlar bor, shuning uchun u .gitignore ga yoziladi va faqat sizning kompyuteringiz yoki serverda qoladi.

7. Hujumchi nigohi

.env — hujumchi uchun eng qimmat fayl: unda bazaga, to'lov tizimiga, botga kirish kalitlari bor. Uni ikki yo'l bilan qidirishadi:

  1. Ochiq omborlarni skanerlash. Maxsus botlar GitHub'dagi har bir yangi yuklanishni kuzatadi va .env, API_KEY=, TOKEN= kabi satrlarni qidiradi. Topilgan kalit bir necha daqiqada ishlatiladi.
  2. Saytdan so'rab ko'rish. Botlar minglab saytlarga https://example.com/.env so'rovini yuboradi. Server noto'g'ri sozlangan va .env sayt fayllari yonida tursa, u oddiy matn bo'lib yuklab olinadi.

Himoya — shu darsdagi qoidalar:

  • .env doim .gitignore da. Git'ga faqat .env.example tushadi.
  • .env sayt orqali ochiq beriladigan papkaga (masalan, public/) qo'yilmaydi.
  • Kalit tashqariga chiqsa — o'chirish emas, darhol almashtirish.

Tekshirib ko'ring: Server loglarida GET /.env so'rovlari ko'p. Bu nima degani?

Javob

Botlar saytingizda ochiq qolgan .env faylini qidiryapti. Brauzerda o'z saytingiz manzili oxiriga /.env qo'shib ochib ko'ring (masalan, https://example.com/.env o'rniga o'z domeningiz): fayl yuklanmasa yoki "topilmadi" xatosi chiqsa — hammasi joyida. Fayl ochilsa — uni darhol yashiring va ichidagi barcha kalitlarni almashtiring.

8. Formatlar solishtirmasi

Format Kuchli tomoni Asosiy tuzog'i Qayerda
YAML Toza, izohli, chuqur tuzilma Bo'shliq, tur taxmini Docker Compose, GitHub Actions, Kubernetes
TOML Aniq turlar, sana turi Chuqur tuzilmada uzun sarlavha Cargo.toml, pyproject.toml
INI Juda sodda Standart yo'q, tur yo'q .editorconfig, .gitconfig, php.ini
.env Muhit o'zgaruvchilariga mos Faqat tekis KALIT=qiymat Maxfiy kalitlar, port, manzillar
JSON Dasturlar uchun qat'iy Izoh yo'q, vergul xatosi API, package.json

Docker Compose, GitHub Actions va Kubernetes — dasturlarni serverda ishga tushirish va avtomatlashtirish vositalari. Ularni kursning DevOps qismida o'rganamiz.

9. Ko'p uchraydigan xatolar

9.1 YAML'da tab

Xato: tab characters must not be used in indentation. Tabni bo'sh joyga almashtiring. bat -A tablarni ko'rinadigan qilib ko'rsatadi.

9.2 YAML'da ikki nuqtadan keyin bo'sh joy yo'q

port:8080 — YAML buni kalit–qiymat emas, bitta "port:8080" satri deb o'qiydi. Agar u server: ostida tursa, server ning qiymati shunchaki shu satrga aylanadi. To'g'risi: port: 8080. Xato chiqmaydi, lekin sozlama ishlamaydi — shuning uchun topish qiyin.

9.3 Noto'g'ri indent

Bitta qator bir bo'sh joy ko'p yoki kam surilsa, u boshqa kalitga "ko'chib" qoladi yoki xato chiqadi:

text
YAMLException: bad indentation of a mapping entry

Tarjimasi: "kalit–qiymat yozuvining ichkari surilishi noto'g'ri". Ko'rsatilgan qator va undan oldingi qatorning boshini solishtiring.

9.4 .env da bo'sh joy

PORT = 3000 — ba'zi vositalar bo'sh joyni kechiradi, ba'zilari esa yo'q. Masalan, bash'da source .env qilsangiz, PORT: command not found xatosi chiqadi: bash PORT ni buyruq deb o'ylaydi. Hamma joyda ishlashi uchun bo'sh joysiz yozing: PORT=3000.

9.5 .env ni Git'ga yuklash

Eng qimmat xato. Oldini olish: loyiha boshida .gitignore ga .env yozing. Sodir bo'lsa: kalitlarni darhol almashtiring — «Oltin qoida» bo'limidagi ogohlantirishni eslang.

10. Mashqlar

1-mashq (oson): Norvegiyani qutqaring

Quyidagi YAML'da ikki qiymat kutilmagan turga aylanadi. Qaysilari va qanday tuzatiladi?

yaml
mamlakat_kodi: NO
versiya: 2.10
Yechim
  • NO — YAML 1.1 o'quvchisida false bo'ladi.
  • 2.10 — kasr son 2.1 bo'ladi, oxirgi 0 yo'qoladi.

Ikkalasini qo'shtirnoqqa olamiz:

yaml
mamlakat_kodi: "NO"
versiya: "2.10"

2-mashq (o'rta): JSON'dan YAML'ga

Quyidagi JSON'ni YAML'ga o'giring. Izoh ham qo'shing: # Kurs ma'lumoti.

json
{
  "kurs": "Full-stack",
  "darslar": 1610,
  "tillar": ["uz", "ru"],
  "muallif": { "ism": "Malika", "tajriba": 5 }
}
Yechim
yaml
# Kurs ma'lumoti
kurs: Full-stack
darslar: 1610
tillar:
  - uz
  - ru
muallif:
  ism: Malika
  tajriba: 5

Qavslar o'rniga ichkari surish, massiv o'rniga - ro'yxat. Full-stack qo'shtirnoqsiz ham satr bo'lib qoladi — u son yoki mantiqiy qiymatga o'xshamaydi. Tekshirish: faylni kurs.yml deb saqlab, npx --yes js-yaml kurs.yml bajarsangiz, yuqoridagi JSON chiqadi (bu buyruq Node.js o'rnatilgandan keyin ishlaydi). Hozircha "YAML validator" deb qidirib, onlayn tekshirsangiz ham bo'ladi — faqat sirli ma'lumotsiz fayl bilan.

3-mashq (qiyin): Xavfsiz loyiha

Siz Telegram bot yozyapsiz. Botga uchta sozlama kerak: bot tokeni (maxfiy), administrator ID raqami va port (8080). Tokenni BotFather beradi — Telegram'da bot yaratadigan rasmiy bot.

  1. .env faylini yozing (token o'rniga namuna qiymat qo'ying).
  2. .env.example faylini yozing.
  3. .gitignore ga nima yoziladi?
  4. Hamkasbingiz tokenni tasodifan ochiq GitHub omboriga yukladi va 5 daqiqadan keyin o'chirdi. Endi xavf yo'qmi?
Yechim
  1. .env:
text
BOT_TOKEN=bu-yerga-BotFather-bergan-token
ADMIN_ID=123456789
PORT=8080
  1. .env.example:
text
BOT_TOKEN=
ADMIN_ID=
PORT=8080

PORT maxfiy emas — uning qiymatini namunada qoldirish qulay. Token va ID bo'sh.

  1. .gitignore ga bitta qator: .env.

  2. Xavf bor. 5 daqiqa — botlar uchun yetarli vaqt, token Git tarixida ham qolgan. BotFather'da tokenni darhol almashtirish (revoke) kerak. Eski token shunda ishlamay qoladi.

11. Real ishda

  • Docker va CI. Docker Compose (bir necha dasturni birga ishga tushiradigan vosita) — compose.yaml. GitHub Actions (kodni avtomatik tekshiradigan xizmat) — .github/workflows/ ichidagi YAML fayllar. Ikkalasini kursda alohida o'rganamiz. Ulardagi xatolarning katta qismi — indent va qo'shtirnoq.
  • Sirlarni boshqarish. .env — boshlang'ich daraja. Katta kompaniyalar maxsus "sirlar ombori" xizmatlaridan foydalanadi. Buni sirlarni boshqarish darsida ko'ramiz.
  • Loyiha fayllari. Yangi loyihani ochsangiz, ildizida .editorconfig (INI), .env.example, package.json (JSON), ba'zan pyproject.toml ni ko'rasiz. Endi ularning hammasini o'qiy olasiz.
  • Intervyu. "Parol va API kalitlarni qayerda saqlaysiz?" — "kodda emas, muhit o'zgaruvchilarida; lokal .env da, u .gitignore da; namuna uchun .env.example".

Xulosa

  • Sozlama fayllari dastur ishini kodsiz boshqaradi; odam uchun JSON'dan qulayroq formatlar bor.
  • YAML — bo'shliq bilan tuzilma, - ro'yxat, | va > ko'p qatorli matn, &/* takrorlanmaslik uchun. Tab — taqiqlangan.
  • YAML turni o'zi taxmin qiladi: NO, yes, on, 1.10 kabi qiymatlarni qo'shtirnoqqa oling.
  • TOML — kalit = qiymat, [bo'lim], satrlar doim qo'shtirnoqda, sana turi bor; INI — eng sodda, standartsiz.
  • .env — KALIT=qiymat, maxfiy kalitlar uchun; .gitignore ga yoziladi, jamoaga .env.example beriladi.
  • Kalit tashqariga chiqsa — o'chirish emas, almashtirish kerak.

Keyingi dars: XML va uning vorislari — HTML'ning qat'iy "qarindoshi" XML, uning qoidalari hamda sitemap, RSS va SVG'da qanday yashashini o'rganamiz.

Ulashish:Telegram'da

Izohlar (0)

Izoh yozish uchun kiring.

  • Hozircha izoh yo'q. Birinchi bo'ling!
YAML, TOML, INI va .env: sozlama fayllari va ularning tuzoqlari — IlmHamroh