ToCode
Kanalga Telegramโda oโtish
ืืืคืื ืงืฆืจืื ืืืชืื ืชืื ืืืช ืื ืื ืคืจืง
Ko'proq ko'rsatish1 419
Obunachilar
Ma'lumot yo'q24 soatlar
-17 kunlar
+230 kunlar
Postlar arxiv
1 419
# ืืื ืืืืืื ืืงืืืืืื ืืืจื reset?
ืืจืืง ืืขื ืืื ืฉื ืืื ืฉืืฆืืื ืืืืื ืืืชื ืืฉืจืง ืืชืืืชื ืืขืืื ืขื ืืืื ืืื ืืืืคื ืื ืืื ืื ืื ืืช ืืงืืืืืื ืฉืื. ืืงืฆืจื ืืืื ืื ืืืืืข ื ืฉืืจ ืืชืืจ ืืจืฃ ืฉื ืงืืืืืื, ืืืฉืจ ืื ืงืืืื "ืืฆืืืข" ืขื ืืงืืืื ืฉืื ืืคื ืื. ืืืฅ ืืืงืืืืืื ืืฉ ืื ืืืจ ืฉื ืงืจื Branch-ืื, ืฉืืคืฉืจ ืืืฉืื ืขืืืื ืืื ืืืืงืืช ืื ืกืืื ืืืช. ืชืจืฆื ืชืืืื ืืืืืืง ืืืชื ืขื ืืงืืืืืื, ืืืฉืืืืืก ืืื ืชืืืื ืืืืื ืืืชื ืืงืืืืืื ืืืจืื.
ืืืฅ ืื Branch-ืื ืื Commit-ืื ืืฉ ืขืื ืกืืื ืื ืืฉืืื ืฉื ืงืจืืช HEAD. ื HEAD ืืื ืืฆืืืข ื Branch ืืืื ืืกืื ืื ื ืื ืืงืืืื "ืื ืืืื", ืืืืืจ ืื ืืงืืืื ืฉืขืืฉืื ืื ืื ื ืขืืืืื ืขืืื.
ื ืจืื ืืช ืื ืขื ืืฉืืง ืขื ืืืืจ ืคืฉืื. ืืฆืจืชื ืืืืจ ืขื ืฉืืืฉื ืงืืืืืื ืฉืืืื ืฉืื ื ืจืื ืื:
* 8131ef2 (HEAD -> main) third commit
* 3a40bc4 second commit
* e8006f8 first commit
ืืืจืฃ ืืฉ ืฉืืืฉื ืงืืืืืื, ืืจืื ืฅ ืืื ืืฉื main ืื HEAD ืฉืื ื ืืื ืืืชื main.
ืขืืฉืื ืืฉืืื ืืืืืชืจืช ืืืืจืืง ืฉืืืื ืืงืืืช ืืืืืืฅ ืืืจืื ืืืกืืืืช. ื ืคืขืื:
$ git reset --hard HEAD~
ืืื ื ืกืชืื ืืืื:
3a40bc4 (HEAD -> main) second commit
e8006f8 first commit
ืืื! ืืื ื ืขืื ืืงืืืื ืืฉืืืฉื?
ืืชืฉืืื ืืงืฆืจื ืืื ืฉืืื ืื ื ืขืื ืืฉืื ืืงืื. ืืกื ืืื ืืืืชื ืืช main ืืืืชื ืืช HEAD ืืืื ืืฉืื ื ืืคืขืื ืขืืฉืื git log ืื ื ืืชืืื ืืช ืืกืคืืจื ืืืงืื ืืืจ - ืืืงืืืื ืืฉื ื. ืืฆืขืจื ื ืงืืืืืื ืื ืฉืืืจืื ืืฆืืืข ืืงืืืื ืฉืื ืืืจืืื (ืืืจืฃ ืืืืื ืืคืื, ืืืืืจ ืื ืงืืืื ืืืืข ืจืง ืื ืื ืืคื ืื) - ืืื ืืืืจ ืฉืื ื ืื ืงืืื ืืืืื ืื ืืงืืืื ืื ืืืื ืคืฉืื ืื ืืืืข ืืกืคืจ ืื ืืื ืืืืืข ืืงืืืื ืืขืืื ื ืืืืชืจ.
ืืื ืื ืื ืืืืจ ืฉืืืชื ืงืืืื ื ืขืื ืื ื ืืืง.
ืื ืืชื ืืืืจืื ืืช ืืืื ืืงืืืื ืืชื ืืืืืื ืืงืืืช ืืืืืจ ืืืื ืขื:
$ git reset --hard 8131ef2
ืืคืืื ืื ืืชื ืื ืืืืจืื ืืช ืืืืื ืืชื ืืืืืื ืืงืืืช ืืืืืง ืื ืืื ืืื ืขื:
$ git reflog
3a40bc4 (HEAD -> main) HEAD@{0}: reset: moving to HEAD~
8131ef2 HEAD@{1}: reset: moving to 8131ef2
3a40bc4 (HEAD -> main) HEAD@{2}: reset: moving to main
3a40bc4 (HEAD -> main) HEAD@{3}: reset: moving to HEAD~
8131ef2 HEAD@{4}: commit: third commit
3a40bc4 (HEAD -> main) HEAD@{5}: commit: second commit
e8006f8 HEAD@{6}: commit (initial): first commit
ืฉืฉืืืจ ืืืื ืฉื ืื ืืคืขืืืืช ืฉืืืฆืขื ืืฆืืื ืืืืืจ. ืืขื ืืื ืืฉืื ืื ืฉืืืืื ืืื ืื ืืงืืืืืื. ืืคืฉืจ ืืืืืง ืืืืืื ืจืฉืืืืช ืฉื ืงืืืืืื ืฉืื ืืคืฉืจ ืืืืืข ืืืืื ืขื:
$ git reflog expire --expire-unreachable=now --all
ืืื ืืืืง ืืืืืื ืื ืืชืืืกืืช ืืงืืืื 8131ef2, ืื ืฉืืืคืื ืืช ืืืจืืง ืืืจืื ืืืชืจ ืืคืืื ืืืืื ืฉืขืืฉืื ืืืื ืืจืื ืืืชืจ ืงืฉื ืืืืืข ืืืืชื ืืงืืืื (ืืื ืขืืืื ืืคืฉืจื, ืื ืืืืขืื ืืช ืืืืื ืื ืื ืืฉ ืืื ืืกืคืืง ืกืืื ืืช ืืืื ืืชืืงืืืช .git ืืื ืืืฆืื ืืช ืืืืื).
ืืืืงื ืืืืืืช ืฉื ืืืชื ืงืืืื ืืคืฉืจืืช ืขื ืืคืงืืื:
$ git gc --prune=now
ืจืง ืืืจื ืฉืืืงืชื ืืช ืืงืืืื ืื reflog ืืื ืฉืืืืช ืื ืืคืฉืจ ืืืื ืืืืืข ืืืื ืื ืืื ืงืืืื ืืืจ ืฉืืฆืืืข ืขืืื. ืืื ืืืื ืืื ืขืืื ืืฆืืช ืืชืืื ืืืืืืจ ืืืจืื ืืืืจืื ืืืืจืื ืฉืืื ืืืืืื ืืืืช.1 419
# ืืขืจืืืช ืืื ืื (ืืืืง 712)
ืืืคื ืจืืฉืืื ืืช ืื ืืคืขืืื ืฉืืชืืชื ืืืืงืชื ืืช ืืงืื ืขื ืฉืืื ืขืื? ืืืื ืืื ืขืืืื ืื ืืงื?
ืืขืจืืช ืืื ืื ืืื ืืืฉืืช ืืชืืืื ืื ืงืืื ืืืื, ืืื ืืืืื. ืืจืื ืืืขืืืช ืฉืื ืื ื ืืชืืืืืื ืืืชื ืืชืืจ ืืชืื ืชืื ืืฉ ืคืืชืจืื ืคืฉืื, ืืืชืืื ืฉื ืืืชื ืคืืชืจืื ืคืฉืื ืืืงืืช ืื ืืื ืฉืขืืช. ืขืืงืจ ืืืื ืฉืื ืื ื ืืืืื ืขื ืืขืื ืืื ืื ืืืชืืืช ืืืชื ืคืืชืจืื ืคืฉืื ืืื ืืืืขื ืืืื - ืืื ืืืื ืืงืืช ืื ืฉืืืขืืช ืื ืืืืฉืื.
ืืืืง ืืืืืื ืืืืข ืืฉืืกืชืืืื ืขื ืืงืื ืขืฆืื ืืืืื ืื ืืฉืชืงืฃ ืฉื. ืื ืืฉืืชื ืฉืืืขืืื ืขื ืืขืื, ืืื ืืื ื ืืกืืชื ืืคืชืืจ ืืืชื ืืืจื ืงืฆืช ืฉืื ื ืขื ืฉืืืจื ืฉืืืขืืื ืืืขืชื ืืคืืชืจืื ืืื, ืื ืืืืื ืช ืืงืื ืืฉืืืขืืื ืืืื ืืืื ืืคื. ืืชืื ืช ืืืจ ืืืชืจ ืืื ืืื ื, ืฉืืื ืคืืชืจ ืืช ืืืชื ืืขืื ืืื ืฉืฆืจืื ืืืื ืืจืืฉืื ืืื ืืืืฆืจ ืืช ืืืชื ืงืื ืืืืืง ืฉืื ื ืืชืืชื, ืจืง ืืจืื ืืืชืจ ืืืจ.
ืคืืชืจืื ืืช? ืืื ืืืฉ. ืืืืช ืื ืืขืื ืจืง ืฉืื ื. ืืฉืืืขืืื ืืืื ืื ืืืง ืืืืืคื ืืืื ืืช ืืืจืื ืืืฉืื ืฉืขืืืื ืื ืื ืืช ืืขืืจ, ืืื ืฉืืืคืฉ "ืืืขืืื" ืืืชื ืืืื ืฉืืื ืืกื ืืื ืคืืชืจ ืืช ืืืชื ืืขืืืช ืฉืืื ืืืจ ืืืืข ืืคืชืืจ ืฉืื ืืฉืื.
1 419
ืืืจืืช ืงืืืช ืืืชืงื ื ืืฉืืกืจืืืกืื ืืืืืื ืืืคืืกืื ืฉืื ืื, ืืืฉืืง ืงืฆืจ ืขื ืืจืืืื ืื ืืื ืชื ืขื ืืกืืฃ ืืื ืื ืืืคืืื ืืกืจืืืกืื ืฉืืืืงืื ืืืคืืกืื ืืืืืืืืช ืฉื ืืกืืชื ืืืชืื ืฉืืื ืงืฆืช ืืืชืจ ืืกืืืืืช ืืื ืฉืื ืืจืื ืืชืืขืื ืื ืขืืื ืื. ืื ืืืื ืื ืืืขืื ืืฆืื ืื ืืืจืืืื, ืืืืื ืืืืืช ืฉืืืืฉื ืื ืืฆืืื ืืืืื ืืช ืืื ื ืื ืฉืืชืืฃ ืืืืคืืกืื ืฉืืื.
ืืื ืชืืื ืื ืฉืืืืชื ืืคืจืืืงื:
1. ืืืืื ืืืืจ ืฉื ืืขืืืช - ืื ืคืขื ืฉืืืชื ืื ืืขืืช ืืจืืืื ืืฆืื ืืืืขื ืื ืืื ืคืืจืืืืืืช ืืงืื ืกืื
2. ืืืืื ืืืืจ ืืืืืืืื ืฉื ืื ืืกืจืืืกืื ืืื ืืืช ืกืืืื ืืืืืจืช ืืื ืืืื, ืืืื ืืืฉื ืืขืงื ืืืจื ืืกืจืืืกืื ืืขืืืื ืืกืืืื ืื ืืฉืื ืืฉืชื ื ืืกืจืืืกืื ืืคื ืืืืื.
3. ืืชืงื ื ืคืฉืืื ืืจื ืืืงืจ (ืื ืืชื ืืืื' ืืขืฆืื - ืืืืื' ืฉืืื ืื ืขืื).
4. ืชืืืื ืืืื ืืช ืืืืืืช ืืืืช ืืจื JWT
ืื ืฉืื ืืืืชื ืืคืจืืืงื ืืื:
1. ืืื ืืกืคืืง ืืืืืืืช ืืื ืืชืืขืื ืื ืืงืืฃ ืืืืืื.
2. ื Docker Image ืฉืื ืืกืคืงืื ืื ืขืื.
3. ืืืง ืืืืคืฉืจืืืืช ืืงืื ืคืืืืจืฆืื ืฉืื ืืืคืืขื ืืชืืขืื ืื ืขืืื.
ืื ืืืื ืื ืืืืจืื ืฉืื ืขืืื ืืื ืืืื ืฉืื ื ืื ืืืืข ืืืฉืชืืฉ ืืคืจืืืงื ืขืืืื ืื ืืืื ืฉืืืืช ืืฉ ืืื ืขืืืื ืื ืืขื ืืืืื. ืืื ืืงืจื ืืคืจืืืงื ื ืจืื ืฆืขืืจ ืืืืืื. ืื ืืืฉื ืฉืืื ืื ืืืืฅ ืืืฉืชืืฉ ืื ืืคืจืืืงืฉื ืืืงืื ืืคืืื ืืื ืืืืืืืช ืืืืืจ ืขืื ืืื ืืืืฉืื ืืืืืง ืื ืืฆืื.
ืื ืืืื ืง ืืืืืืื ืฉื ืืจืืืื:
https://github.com/movio/bramble
ืืื ืคืจืืืงื ืืืืืื ืฉืื ืฉืืฉืชืืฉ ืื ืขื ืฉื ื ืกืจืืืกืื ืืืชืืืื ื Node.JS:
https://github.com/ynonp/playing-with-bramble
1 419
# ืืืืืจ ืืกืคืจ ืฉืจืชื GraphQL ืขื Bramble
ืืคื ืืืชืจ ืฉืืื, ืืจืืืื ืื Production Ready GraphQL Federation. ืืืืจ ืืื ื ืชืืื ืฉืื ืืืืืง ืืืืคืืช ืคืฉืืืืช ืืืชืจ ื Apollo ืืืืชื ืืื ืืช ืคืจืืืงื ืืืืื ืงืื ืขื ืืจืืืื. ืงืื ืืคืจืืืงื ืืื:
https://github.com/ynonp/playing-with-bramble
ืืคืืกื ืืกืคืจ ืืื ืืจืืื ืขืืื ืืืชื ืฉืืื ืืฉืงืื ืืืชื.
## ืื ืื ืืืืจ GraphQL Federation
ื ื ืื ืฉืืฉ ืืื ืืกืคืจ ืกืจืืืกืื ืฉืื ืืื ืืื ืขืืื ื GraphQL, ืืืชื ืจืืฆืื ืืืฉืืฃ ืจืง ืืืฉืง ืืื ืืืคืืืงืฆืืืช ื Front End ืฉืืจืื ืืืคืืืงืฆืื ืชืืื ืืืฉืื ืืืืข ืืื ืืกืจืืืกืื. ืืืฆื ืืื ืืชื ืชืจืฆื ืืื ืืช ืกืจืืืก ืืื ืฉื ืงืจื GraphQL Gateway ืฉืืฉืชืืฉ ืืกืืืื ืฉืชืืื ืกืื-ืฉื-ืืืืืจ ืฉื ืื ืืกืืืืืช ืืื ืืกืจืืืกืื, ืืื ืคืขื ืฉื ืืงืฉ ืืื ื ืืืืข ืืื ืคืฉืื ืืคื ื ืืกืจืืืก ืืืชืืื ืืงืื ืืื ื ืืช ืืืืืข.
ืฉืชื ืืืจืืื ืืืจืืืืืช ืืืืจ ืกืืืืืช ื ืงืจืืืช Schema stitching ื Federation ืืฉืืืืืืื ืืืจืืืืื ื ืืืขืื ืืืืคื ืฉืื ืื ืื ื ืืชืืืกืื ืืืืคืืกืื ืืืฉืืชืคืื ืืื ืกืจืืืกืื, ืืืืื ืืืืืื ืืช ืืกืืืืืช. ืืืื ื ืืจืืื ืื ืคืืชืจืื ืืกืื Federation ืืื ืืคืจืืืงื ืืืืืื ืฉืืชืืชื ืื ืืืขืชื ืืืืงืื ืืืขื ืืื ืื ืฉื ื Federation ืฉื ืืืืื ืืืคืืกืื ืืืื ืืคืืืช ืืืืื ืช ืื ืฉื ืจืื ืืคืืกื ืื ืืื ืืืืืื ืืืืชื ืืืืข ืืงืจืื ืืื Schema Stiching. ืื ืฉืืฉืื ืืืืื ืืื ืื ืฉ Bramble ืืืื ืกืื ืฉื Gateway ืืืืืืื ืฉืคืฉืื ืืงืื ืืช ืืกืจืืืกืื ืืืืืข ืืืขืืืจ ืืงืฉืืช ืืืืืจ ืืืืข ืืฉื ืืื. ืืื ืฉืืืืชื ืื ืื ืฉืืกืืืค ืืื ืืืื ืืืื ืคืฉืื.
## ืืงืืช ืฉืจืช Bramble
ืื ืื ืฉืฆืจืื ืืฉืืื ืืืจืื ืฉืจืช Bramble ืืื ืืืจืืฅ ืืช ืืืื ืืจื (ืืชืื ื go) ืืืืขืืืจ ืื ืงืืืฅ ืงืื ืคืืืืจืฆืื ืฉืืืืจ ืืืคื ืืกืจืืืกืื ืฉืืื ืฆืจืื ืืืืจ. ืงืืืฅ ืืงืื ืคืืืืจืฆืื ืฉืื ื ืืชืืชื ื ืจืื ืื:
{
"services": [
"http://tasks-server:3000/graphql",
"http://fortune:3000/graphql"
],
"plugins": [
{
"name": "playground"
}
]
}
ืืช ืืกืืืืืช ืืจืืืื ืืงืื ืืืกืจืืืกืื ืขืฆืื ืืืื ืื ืกืจืืืก ืฉืฆืจืื ืืฉืืช ืืืืืจื ืืจืืืื ื ืืจืฉ ืืืืกืืฃ ื Query ืฉืื ืฉืืืืชื ืฉืืืืืจื ืืืคืืก ืืฉื Service.
ืืคืจืืืงื ืืืืืื ืืฉ ืื ืฉื ื ืกืจืืืกืื, ืืื ื ืงืจื fortune ืฉืืืืืจ ืืช ืืชืืฆืื ืฉื ืคืงืืืช fortune ืืืฉื ื ื ืงืจื tasks-server ืฉืืืืืจ ืจืฉืืืช ืืฉืืืืช. ืงืืืฅ ืืกืืืื ืืชืื ืกืจืืืก fortune ืฉืืื ืืงืื ืืืชืจ ื ืจืื ืื:
type Query {
fortune: String!
service: Service!
}
type Service {
name: String! # unique name for the service
version: String! # any string
schema: String! # the full schema for the service
}
ืืืืืง ืืจืืืื ืื ืืกืืืื ืืกืจืืืก ืืืฉืืืืช ื ืจืื ืื:
type Query {
tasks(done: Boolean): [Task]
task(id: String): Task
service: Service!
}
type Service {
name: String! # unique name for the service
version: String! # any string
schema: String! # the full schema for the service
}
ืื ื Resolver ืขืืืจ Service ืืื ืื ืืขืชืง-ืืืืง ืืืืืืืืืช ืฉืืื. ืื ื ืืื ืฉืืชืืชื ืืืืืื ืืกืจืืืก ืืืฉืืืืช:
service(_obj, _args, _context, info) {
return {
name: 'Tasks',
version: '1.0',
schema: require('./schema.graphql'),
}
},
ืืืกื ืืื ืื ืื ืื ืฉืฆืจืื ืืฉืืื ืฉืืจืืืื ืืขืืื.
## ืืื ืืจืืืื ืขืืื
ืืขืืืืช ืืคืจืืืงื ืืจืืืื ืืชืืืจ ืืกืจืืืกืื ืฉืืขืืจื ื ืื ืืงืืืฅ ืืงืื ืคืืืืจืฆืื, ืืืงื ืืช ืืกืืืืืช ืืื, ืืื ื ืืืืืืืืช ืกืืืื ืืฉืืชืคืช ืืืืคืฉืจ ืืืชืืื ืืืจืืฅ ืฉืืืืชืืช. ืื ืืชื ืืืจืืืื ืืช ืคืจืืืงื ืืืืืื ืืจืืฆืื ืื ืกืืช ืืช ืื ืืคืขืืื ืืืชืืงืื ืืจืืฉืืช ืฉืื:
$ docker-compose up
ืืืืจื ืื ืื ืกื ืืืคืืคื ื localhost:8082/playground.
ืืืจื ืื ืชืืืื ืืืจืืฅ ืฉืืืืชื ืืื ืื:
query a{
tasks {
text
}
}
ืืืงืื ืืช ืจืฉืืืช ืืืฉืืืืช ืื ืฉืืืืชื ืืื:
query b{
fortune
}
ืืื ืืงืื fortune ืืงืจืื.
ืื ืืืืืง ืื ืฉืชื ืืฉืืืืชืืช ืืืืืืช ืืืืชื Gateway ืืืื ืืืจ ืืืืข ืืฉืืื ืืช ืืฉืืืืชื ืืจืืฉืื ื ืืกืจืืืก ืืืฉืืืืช ืืืช ืืฉื ืื ืืกืจืืืก ื fortune.
ืืืืชื Playground ืืคืฉืจ ืืจืืืช ืื ืืช ืืกืืืื ืืืืืืจืช ืืืืืง Query ืฉืื ื ืจืื ืื:
type Query {
tasks(done: Boolean): [Task]
task(id: String): Task
fortune: String!
}
ืืืืืจ ืืื ืืืืืจ ืฉื ื Query ืืฉื ื ืืกืจืืืกืื. ืืช ืื ืื ืืจืืืื ืืฆืืื ืืขืฉืืช ืืืืืืืืช.
## ืื ืขืืืื ืื ืืฆืืืชื ืืขืฉืืช1 419
# ืืื ืืืกืืจื ืกืื ืืจื
ืืืื ืฉื ืืฉื Industry Standard ืืื ืื ืืืืจื ืืืชืจ ืืื, ืื ืืืืจื ืืืชืจ ืคืฉืื ืืื ืืืืจื ืืืชืจ ืืขืื ืืืืชืืจืื. ืืืชืจืื ืืช ืื ืืืจืื:
1. ืืืฉืื ืฉืืฉืชืืฉ ืื ืื ืจืื ืืืจ ื ืชืงื ืืจืื ืืืขืืืช ืฉืืชื ืฆืคืืืื ืืืืชืงื ืืื.
2. ืืฉ ืื ืื ืื ืืืื ื ืืืชืืืื ืขื ืืืจืืืืงืืืจื ืืืืืจื ืฉื ืืืขืจืืช ืฉืืื.
3. ืืฉ ืชืืขืื ืื ืจืข ืืืื, ืืื ืืจืื ืชืฉืืืืช ื Stack Overflow ืื Github Issues ืฉื ืืื ืฉืื ืฉืื ืืฆืืืื ืืืฆืื ืืช ืื ืฉืืืคืฉืื ืืชืืขืื.
ืืื ื Industry Standard ืืฉ ืื ืืกืจืื ืืช. ืืืื ืฉืืื ืืชืืื ืืื ืืชืขืฉืื, ืจืื ืืืื ืืื ืืืื ืืืชืจ ืืกืืื ืืื ืฉืื ื ืฆืจืื ืืคืจืืืงื ืฉืื (ืืืืืื ืืชืืืืช ืืืจื). ืืืชืจ ืืกืืื ืื ืืืืจ:
1. ืขืงืืืช ืืืืื ืืืชืจ ืงืฉื, ืื ืฆืจืื ืืงืจืื ืืจืื ืืืชืจ ืชืืขืื ืืืืืื ืืืื ืืืืืืืืช ืจืืืื ืืืืช ืืืขืจืืช ืฉืื.
2. ืืืฆืืขื ืืจืืจืช ืืืื ืคืืืช ืืืืื. ื ืืื ืฉืืืขื ืชืืื ืชืืื ืืคืฉืจืืช ืืฉืืคืืจ ืืืฆืืขืื ืืื ืืืื ืืื ืกืืฃ ืืืืจืื ืืื ืืฉืคืจ ืืืฆืืขืื, ืืื ืืจืืจืืช ืืืืื ืืืืืืช ืืืืื ืคืฉืจืืช ืฉืืชืืืื ืืืืื.
ืืฉืืืฉืื ืืกืคืจ ืื ืขื Bundler ืืืชืจ ืืื ื Webpack, ืขื Web Framework ืืืชืจ ืืื ื Express, ืขื GraphQL Federation ืืืชืจ ืืื ื Apollo ืื ืขื Orchestrator ืืืชืจ ืืื ืืงืืืจื ืืก ืื ื ืื ืืชืืืื. ืื ืขืื ืื ื ืฉืืืจ ืืขืฆืื ืืช ืืืคืฉืจืืช ืืืืืืฃ ืืขืชืื, ืื ื ืืคืืื ืฉืื ืืชืช ืืืื ืืืืฉ ืฆ'ืื ืก.
1 419
# ืืืค JavaScript: ืืืคืื ืืืืืืงื ืื Promise ืืืืชื ืคืื ืงืฆืื
ืืืจืืง ืืื ืื ืืกืืื ืืืืืืฉ ืืื ืืืื ืืืกืื ืืื ืงืฆืช if-ืื ืืฉืืชื ืืืืจืื ืืืฉืชืืฉ ืื ืืืงืืืืช ืื ืืื ืื. ืืืื ื ื ืื ืฉืืฉ ืื ืคืื ืงืฆืื ืฉืฆืจืืื ืืืคืื ืืช ืืืืช ืืจืืฉืื ื ืืื ืืืื ืืืืชืืืช ืืืืืืช, ืืฉืื ืืื:
function capitalize(item) {
return item.replace(/\b(\w)/g, c => c.toUpperCase());
}
ืืคืชืืื ืืืืข ืืืจ ืฉืจืืฆื ืืืฉืชืืฉ ืื ืืืงืื ื ืืกืฃ ืืืขืจืืช - ืืื ืืื ืื ืืื ืืืจืืืช ืืงืกื ืืื Promise ืืืืจืืืช. ืืืื ืืืืืฆืื ืืจืืฉืื ื ืืื ืืืชืขืฆืื ืขื ืืืืจ ืื ืืืงืฉ ืืื ื ืืืืกืืฃ await ืืื ืืงืื, ืืื ืื ื ืขืฆืืจ ืืืฉืื ืขื ืื ืืจืืข ื ืจืื ืฉืืฉ ืคืืชืจืื ืืจืื ืืืชืจ ืคืฉืื. ืื ืื ืฉืฆืจืื ืืื ืืขืืื ืืช ืืคืื ืงืฆืื ืฉืื ื ืฉืชืืข ืืืชืืืื ืขื ืงืืืื ืืื ืืื ื ืกืืืื:
function capitalize(itemOrPromise) {
if (itemOrPromise.then) {
return itemOrPromise.then(capitalize);
}
// Now we know it's an item
return itemOrPromise.replace(/\b(\w)/g, c => c.toUpperCase());
}
ืื ืืื ืงืืืื Promise (ืืืืืจ ืืฉืื ืฉืืฉ ืื then) ืืื ืชืชืืืฉ ืขื ื then ืืชืืฉืืจ ืืืืชื ืืืืฉืง ืื ืฉืชืืืืจ ืื Promise. ืื ืืื ืงืืืื ืืืจืืืช ืืงืกื ืขืืืื ืืื ืืื ืืืื ืชืืืืจ ืืช ืืืืจืืืช ืืืขืืืื ืช.
ืืื ืฉืืืื ืจืืฆื ืืืชืืฉื ืืืื ืืืืกืืฃ ืื ืืืคืื ืืืขืจืืื ืืขื ืืืจื ืืืขืจืืื ืฉื Promises:
function capitalize(itemOrPromise) {
if (Array.isArray(itemOrPromise)) {
return itemOrPromise.map(capitalize);
}
if (itemOrPromise.then) {
return itemOrPromise.then(capitalize);
}
// Now we know it's an item
return itemOrPromise.replace(/\b(\w)/g, c => c.toUpperCase());
}
ืื ืงืืืื ื ืืขืจื ื ืจืืฅ map ืืื ืืืคืื ืืืืชืืืช ืืืืืืช ืืช ืื ืืชืืื ืฉืื (ืืื ืืชืืื ืื Promises ืืื ืขืืืื ืืขืืื); ืื ืงืืืื ื Promise ืื ื ืืื ืฉืืื ืืกืชืืื, ืืื ืืจืงืืจืกืื ืชืืคื ืื ืืืงืจื ืฉืงืืืื ื Promise ืืืขืจื ืืืฉืืืืขืื ืืกืืฃ ืืืืจืืืช ืืงืกื ืืคืฉืจ ืืกืืื ืืืืคืื ืืช ืืืืช ืืจืืฉืื ื ืืื ืืืื ืืืืช ืืืืื.
ืืื JavaScript ืืืื, ืื ืืื ืื ืืขืื ืืืืฆืื ืืืืฆื ืืช ืื ืืืืืืงื ืืจืงืืจืกืืืืช ืืื ืฉืืืื ืงื ืืืฉืชืืฉ ืื ืขื ืืื ืคืื ืงืฆืืืช. ืื ื ืจืื ืื:
function handleAllThenThings(func) {
return function handler(itemOrPromise) {
if (Array.isArray(itemOrPromise)) {
return itemOrPromise.map(handler);
}
if (itemOrPromise.then) {
return itemOrPromise.then(handler);
}
// Now we know it's an item
return func(itemOrPromise);
};
}1 419
# ืืชื ืืืชืื ืงืื ืืจืืข
ืืืขื ืืจืืืืช ืืื ืฉืื ืื ื ืืืชืืื ืงืื ืืจืืข ืืฉืืื ืืื ืืืชืื ืงืื ืืื ืื ืืฉืฆืจืื ืืขืืื ืืื Legacy Code ืงืืื ืื ืืืชืืืฉืง ืืงืื ืืืฆืื ื ืฉืืื ืื ื ืฉืืืื ืขืืื. ืืืชืื ืชืื ืื ืื ื ืืืืืื ืืืฉืื ืฉืื ืจืง ืืื ื ืืชื ืื ืื ื ืืกืคืืง ืืื, ืืกืคืืง ืืฉืืืื ืืืืคืฉืจืื ืื ื ืืืฉืชืืฉ ืืื ืืืืื ืฉืื ืื ื ืจืืฆืื ืื ืืืื ื ืืฆืืืืื ืืืชืื ืงืื ืืขืืื.
ืื ืืขืชืื ื ืืืจืืช ืืืงืจื.
ืืคืืชืจืื ืืช ืืื ืืืืื ืฉืืชืืชื ืื ืืื ืืื ืฉืืชืืชื ืคืขื ืจืืฉืื ื, ืื ืืฉื ื ืืื ืืื ืืฉืงืขืชื ืืืืชื ืืชืืื ืจืืฉืื ื. ืืื ืื ืื ืื ืืื ืืฆืืืื ืืืื ืืืืฉืื ืฉืืฆืืืชื ืืื ืืช ืืื ืชืืฆืื ืฉื Refactoring ืืืืจื ืืื ืืืชืจ ืืืื. ืงืื ืืื ืืื ืืกื ืืื ืงืื ืืจืืข ืฉืขืืจ ืืกืคืืง ืฉืืืชืืืื ืืื ืื ืงืืช ืืื ื ืืช ืืืืืื ืืืืคื ืืื ืฉืฆืจืื ืืืงืจื ืืงืฆื. ืงืื ืื ืจื ืืื ืืกื ืืื ืงืื ืืจืืข ืฉืขืืจ ืืกืคืืง ืฉืืชืืืื ืืื ืฉืืคืขื ืืืื ืฉื ืฆืืจื ืืืืกืืฃ ืคืืฆ'ืจ ืืงืื ืืืจ ืืืื ืืืื ืืฉืื ืื.
ืื ืื ืกืชื ืฉืื Front End Framwork ืฉืืืชื ืืฉืืื ื ืืกืคืืง ืืื ืขืืจื ืืื ืกืืฃ ืกืืื Refactoring ืืืฉืื ืืกืืื ืื ืืชืืื ืืืืฉ ืืืคืก. ืืื ืืืืจ ืื ืงืจื ืืืขืืจ ืืืืจืกื 1 ื-2, ืืจืืืงื ืืืขืืจ ืืืืจืกื 15 ื 16 ืืืืื ืื ืืื ืืืขืืจ ื Vue3. ืื ืื ื ืืืืืื ืืงืฉืงืฉ ืขื ืืืจ ืขื Design Patterns ืืืชืืื ื ืืื ื, ืืื ืืกืืฃ ืืฉืืขืจืืช ืคืืืฉืช ืืช ืืขืืื ืืืจืื ืืฉืชื ืื.
ืงืื ืืื ืืื ืงืื ืื, ืืื ืงืื ืฉืื ืื ื ืื ืคืืืืื ืืืขืช ืื, ืืฉืื ืื ื ืืฉื ืื ืืืชื ืื ืืืื. ืงืื ืืื ืืืจืฉ ืืกืืจืช - ืฉื ืืืืงืืช, ืฉื ื ืืืื ืชืฆืืจื; ืืื ืืืชืจ ืืืื ืงืื ืืื ืืืจืฉ ืงืื ืืจืืข ืืื ื ืืื ืืืื ืืืชืืื ืืืชืื ืชืื ืฉืื ืืคืืืื ืืฉืืชื ืขื ืฉืืงืื ืืืื ืืกืคืืง ืืื. ืืคืืืช ืขื ืืฉืืชืื ืืื.
1 419
NAME READY STATUS RESTARTS AGE ingress-nginx-admission-create-2pz8l 0/1 Completed 0 68m ingress-nginx-admission-patch-kjrv2 0/1 Completed 0 68m ingress-nginx-controller-59b45fb494-nvkbg 1/1 Running 0 68mืืืจื ืฉืื ืื ื ืืืืขืื ืฉ nginx ืฉืื ื ืืืืืืจ ืื ืื ื ืฆืจืืืื ืืืชืื ืื ืงืืืฅ ืืืืจืืช. ืืืื ืงืืืจื ืืก ืื ืื ืืืื ืงืืืฅ ืืืืจืืช ืกืคืฆืืคื ืฉื nginx ืืื ืงืืืฅ ืืืืจืืช ืฉื ืงืืืจื ืืก ืืงืืืจื ืืก ืืชืจืื ืืืชื ืืืืืจืืช nginx (ืืืื ืืื ืฉืืื ืืื ืืขืชืื ื ืืื ืืืืืืฃ ืืช ื Gateway ืืื ืืกื ืืงืืืกืืจ ืืฆืืจื ืืืืืืืืช). ืืื ืืงืจื ืืชืื ืงืืืฅ ืืืฉ ืืชืืงืืืช k8s ืืฉื
ingress.yaml ืขื ืืชืืื ืืื:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress
spec:
rules:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: web
port:
number: 3000
ืืขืืจืืช ืื ืืืืจ ืฉืื ืคืขื ืฉืืืฉืื ื ืื ืก ืืงืืืกืืจ ืฉืื ื ืื ืชืื ืืจืืฉื ืื ืื ื ืคืฉืื ื ืฉืื ืืืชื ืืกืจืืืก web ืืคืืจื 3000. ืืขืชืื ืืฉืืืื ืื ื ืืืชืจ ืกืจืืืกืื ื ืืื ืืื ืืช ืืขืจืืช ื ืืชืื ืืืชืจ ืืชืืืืืช, ืืื ืื ืืืจ ื ืืฉื ืืคืืกื ืืืจ.
ืืคืขืืื ืฉืื:
$ kubectl apply -f k8s
ืืื:
$ kubectl get ingress
ืืื ืืื ืขืื ืืื ืฉืฆืจืื ืชืงืืื ืขื ืืืกื ืฉืืจื ืฉื ืจืืืช ืืขืจื ืื ืขื ืืชืืืช IP ืฉื ืืงืืืกืืจ ืฉืืื:
NAME CLASS HOSTS ADDRESS PORTS AGE
ingress <none> * 192.168.49.2 80 46m
ืื ืืกื ืืจื ืืืคืืคื ืื ืขื curl ืืืชืืืช ื IP ืฉืงืืืืชื ืชืืืืจ ืืช ืืืืืงื ื JSON ืืจืืง:
$ curl 192.168.49.2
{"count":null}
ืืฉืืืืช ืืงืฉืช POST ืชืขืื ืืช ืืืื ื ื-1:
$ curl -X POST 192.168.49.2
{"count":1}
$ curl -X POST 192.168.49.2
{"count":2}
$ curl -X POST 192.168.49.2
{"count":3}
## ืื ืืืื
ืื ืืืื? ืืฉ ืืื ืงืืืกืืจ ืงืืืจื ืืก ืฉืืจืืฅ ืืคืืืงืฆืื ืืจื NGINX, ืฉืืชืืืจ ื Redis ืืฉืืืจ ืืช ืืืืืข ื Persistent Volume. ืื ืขืื ืืคืฉืจ ืืจืฆืืช!?
ื ื, ืื ืืืชืจ ืืื.
ืืฉืื ืืื ืืืื ืืขืืืจ ืขื ืงืืฆื ื yaml ืืชืื ืชืืงืืืช k8s, ืืงืจืื ืืืชื ืืืืคืฉ ืืชืืขืื ืื ืื ืฉืืจื ืืื ืืืืจืช. ืืืจื ืื ืืคืฉืจ ืื ืกืืช ืืืืกืืฃ ืขืื ืกืจืืืกืื ื docker-compose.yml ืืืจืืืช ืืื kompose ืืชืจืื ืืืชื ืืื ืกืืช ืืืคืขืื ืื ืืืชื. ืืืจื ืฉืชืขืฉื ืืช ืื ืืกืคืืง ืคืขืืื ืืืื ืืชืืขืื ืฉื ืงืืืจื ืืก ืืืจ ืื ืืจืืืฉ ืื ืื ืืฉืขืื ืืชืืืื ืืคืืื ืืงืจืื ืืืชื ืืงืฆื ืืงืฆื.
ื .ื. ืฉืืื ืื ืจืง ืืฉืืจืช ืืืืจืกื ื docker-compose.yml ืฉืืื. ืืจืื ืืืงืจืื ืืืชืืืช docker-compose.yml ืื ืื ื ืืฆืืื ืื ืืืจืกื ืืื ืฉืืืชืจ ืืชืงืืืช, ืืื ืืฉืืื kompose ืฆืจืื ืืืืชืจ ืขื ืืืืง ืฉืืืจื ืื ืงืืื ืืืฆืืื ืคืฉืื:
version: "3"
ืื ืชืฉืืื ืืช ืื ืื kompose ืคืฉืื ืืืคืืก ืฉืืืื ืืืกื, ืืื ืืืืงื ื ืืื ืืฆืืื ืื ืขื ืจืื ืืืืจืื ืืื ืื ืืืจื ืืืืื.1 419
ืืื ืืจืืืืืกืืืื ืืืื ืืงืืจืืื ืืืืขืื ืฉืื ืื ืืืื ืืขืืื ืื ืื ืืงืืืช. ืืคืงืืื
kubectl apply ืคืฉืื ืืืงืืช ืงืืืฅ ืืืืจืืช ืื ืชืืงืื ืฉื ืงืืฆื ืืืืจืืช ืืื ืกื "ืืืชืงืื" ืืืชื ืขื ืืงืืืกืืจ, ืืืืืจ ืืฉื ืืช ืืช ืืฆื ืืงืืืกืืจ ืืื ืฉืื ืฉืืชืื ืืืืืจืืช ืื ืื ืื ืฉืืืื ืขืืื. ืืืขืื ืฉืื ืฉืืชืื ืืืืืจืืช ืฉ kompose ืืฆืจ ืขืืืื ืื ืืกืคืืง ืืืื.
ืืช ืื ืงืืื ืืืขืืืชืืช ืืจืืฉืื ื ืื ืื ื ืืืืืื ืืจืืืช ืืืื ืืืืฃ ืขื ืืงืืฆืื ืฉื ืืฆืจื: ืงืืืคืื ืืฆืจ ืฉื ื ืงืืฆืื ืืฉืืื ืืกืจืืืก web ืืื ืจืง ืงืืืฅ ืืื ืืฉืืื ืืกืจืืืก redis. ืืงืืฆืื ืฉื ืืฆืจื ื web ืื ืืกืื Deployment ื Service, ืื redis ื ืืฆืจ ืจืง ืงืืืฅ Deployment.
ืืชื ืืืืืื ืืจืืืช ืื ืืืืื ืืื ืฉื ื ืืืืืงืื ืืงืืืฅ docker-compose.yml ืืืงืืจื ืฉืื ื?
web:
image: ynonp/kubedemo:1.0
ports:
- "3000:3000"
deploy:
restart_policy:
condition: any
redis:
image: "redis:alpine"
volumes:
- data:/data
ืื ื ืืื ืืฉ ืืื ืืืืืื ืืื ืืืืื ืืืจืืื ืฉืืจื ืืงืืืคืื ืืืชื ืื ืืืจืช ืืื ืฉ web ืืืืืจ ืืคืชื ports ื redis ืื ืืืืืจ. ืืืืื ืช ืงืืืคืื ืื ืืื ืื ports ืื ืืคืฉืจ ืืืื ืืืชืืืจ ืืืื (ืืืจืืช ืฉื docker-compose ืืื ืืขืื ืืืชืืืจ ืืกืจืืืก ืฉืื ืืืืืจ ืืืคืื ืคืืจืืื). ืืื ืืงืจื ืืืฉืืื ืืืืืช ื ืืืืื ืืงืืืคืื ื ืขืืื ืืช ืืงืืืฅ ืืืืจืกื ืืื:
version: "3"
services:
web:
image: ynonp/kubedemo:1.0
ports:
- "3000:3000"
deploy:
restart_policy:
condition: any
redis:
image: "redis:alpine"
ports:
- "6379:6379"
volumes:
- data:/data
volumes:
data:
ืื ืจืืฅ ืืืืฉ ืืช ืงืืืคืื:
$ kompose convert -f docker-compose.yml -o k8s
INFO Kubernetes file "k8s/redis-service.yaml" created
INFO Kubernetes file "k8s/web-service.yaml" created
INFO Kubernetes file "k8s/redis-deployment.yaml" created
INFO Kubernetes file "k8s/data-persistentvolumeclaim.yaml" created
INFO Kubernetes file "k8s/web-deployment.yaml" created
ื ืืกืืื ืฉื ื ืืืชืงืื ืืช ืืงืืฆืื ืขื ืืงืืืกืืจ ืืืืืงื ืฉื ืืชืืฆืื ืืืื ืื ื:
$ kubectl apply -f k8s
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
redis-784899f6c7-mtwzs 1/1 Running 0 5s
web-675ddc94f5-gcz8s 0/1 CrashLoopBackOff 1 5s
ืืื ืฉืชืจืืฆื ืืืชืจ ืคืขืืื ืืช kubectl get pods ืชืืืื ืืจืืืช ืฉืืกื ืืื ืืื ื ื Restarts ืืขืื ืืื ืืกืจืืืก ืฉืื ื ืื ืืขืืื. ืืืืงื ืฉื ืืืืืื ืชืจืื ืืื ืฉืกืจืืืก web ืื ืืืฆื ืืช ืืกืจืืืก redis. ืืืฉื ืืืงืจ ืืกืคืจ ืืื ืฉืืกืืื ืืื ืฉืื ืืืืจื ื hostname ื docker-compose.yml. ืืืขืืจ ืืืืงืจ ืงืืืคืื ืืงืืืจื ืืก ืืืื kompose ืื ืืืืืจ ืืฉืืืืื ืืช ื hostname ืืฆืืจื ืืืืืืืืช ืื ืื ืืืืจืชื ืืืชื ืืฆืืจื ืืคืืจืฉืช ืืงืืืฅ.
ืืขืืืื ืืื ื docker-compose.yml ืืืื ืืืชื ื ืืืืจืกื ืืื:
version: "3"
services:
web:
hostname: web
image: ynonp/kubedemo:1.0
ports:
- "3000:3000"
deploy:
restart_policy:
condition: any
redis:
hostname: redis
image: "redis:alpine"
ports:
- "6379:6379"
volumes:
- data:/data
volumes:
data:
ืืืคืขื ืืชืงื ื ืืืคืขืื ืืืืฉ ืืืื ืืืจ ืขืืื:
$ kompose convert -f docker-compose.yml -o k8s
$ kubectl apply -f k8s
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
redis-f7f66c7cb-zd9r9 1/1 Running 0 68s
web-6b56cc97d7-mclw2 1/1 Running 2 74s
ืขืืฉืื ืื ื ืืืื ืืืืื ืก ืืฉืจืช ื web ืืืืฆืข ืืื ื curl ืืื ืืจืืืช ืฉืืื ืขืืื:
$ kubectl exec -it web-6b56cc97d7-mclw2 -- /bin/bash
$ curl web:3000/
{"count":null}
ืืื ืขืืืื ืื ืืืื ืืืชืืืจ ืืืขืจืืช ืืืืืฅ. ืืฉืืื ืื ืฆืจืื Ingress Controller.
## ืืืกืคืช ingress
ื Kubernetes ืืฉ ืื ืื ืื ืืืืืืื ืฉืืคืขืื ืฉืจืช Nginx ืืื ืืกื ืืงืืืกืืจ ืฉืืื ืืื ืื ืืช ืื ืืืืืืจืื ืคื ืืื. ื ืืื, ืืคืฉืจ ืืื ืืืืจ ืืช ืืกืจืืืก web ืฉืืชืืชื ืืฉืืจืืช ืืคืืจื 3000 ืฉื ืืงืืืกืืจ ืืื ืื ืืื ืืฉืขืื ืืื ืืชืืื ืืืฆื ืคืจืืืงืฉื.
ืืฉืืื ืืืืืืจ ืืช ืืืชื Nginx ืืืืืืื ืขื minikube ืื ื ืืคืขืื ืืช ืืคืงืืื:
$ minikube addons enable ingress
ืืื ืืื ืขืื ืืื ืฉืฆืจืื ืืชื ืชืืืื ืืืจืืฅ:
$ kubectl get pods -n ingress-nginx
ืืืจืืืช ืืช ืืคืื:1 419
# ืืขืืืช ืกืจืืืก ื docker-compose ื Kubernetes
ืืจื ืืืช ืืืืื ืงืืืจื ืืก ืืื ืืงืจืื ืืช ืื ืืคื ืืชืืขืื ืฉืืื, ืืื ืื ืืืงื ืืืื ืืื ืืื ืชืืื ืืืืื ืฉืื ื ืืื ืืช ืื ืฉื ืงืจื. ืืจื ืืืชืจ ืืขืฉืืช ืืื ืืงืืช ืคืจืืืงื ืคืฉืื ืืืืขืืืช ืืืชื ืขื ืงืืืกืืจ. ืืคืืกื ืื ืื ื ืืจืื ืืช ืืืจื ืืฉื ืื ืืืงืืื ืฉืืื ืชืชื ืืื ื ืงืืืช ืืชืืื ืืืื ืืขืืืื ืขื k8s.
## ืชืืืืจ ืืคืจืืืงื
ืจืฆืืชื ืืืฆืื ืคืจืืืงื ืคืฉืื ืืื ืขืืืื ืฉืืืื ืืืืืื ืืขื ืืื ืื ืฉื Deployment ืืืื ืืืจืชื ืืฉืจืช Node.JS ืฉืืฉืชืืฉ ืืืกืืก ื ืชืื ืื Redis. ืงืืืฅ ื docker-compose.yml ืฉืื ื ืืชืืื ืืืชื ื ืจืื ืื:
version: "3"
services:
web:
image: ynonp/kubedemo:1.0
ports:
- "3000:3000"
deploy:
restart_policy:
condition: any
redis:
image: "redis:alpine"
volumes:
- data:/data
volumes:
data:
ืืืืื' kubedemo ื ืืฆืจ ืื Dockerfile ืืื:
FROM node:16
# Create app directory
WORKDIR /app
# Install app dependencies
# A wildcard is used to ensure both package.json AND package-lock.json are copied
# where available (npm@5+)
COPY package*.json ./
RUN npm install
# If you are building your code for production
# RUN npm ci --only=production
# Bundle app source
COPY . .
EXPOSE 3000
CMD [ "node", "server.js" ]
ืืชืืื ืืงืืืฅ server.js ืืืืชื ืชืืงืื ืืื:
const express = require('express')
const app = express()
const port = 3000
let
redis = require('redis'),
/* Values are hard-coded for this example, it's usually best to bring these in via file or environment variable for production */
client = redis.createClient({
port : 6379,
host : 'redis', // replace with your hostanme or IP address
});
app.get('/', (req, res) => {
client.get(req.hostname, (err, count) => {
if (err) return next(err);
res.send({ count });
});
});
app.post('/', (req, res, next) => {
client.incr(req.hostname, (err, count) => {
if (err) return next(err);
res.send({ count });
});
});
app.listen(port, () => {
console.log(`Example app listening at http://localhost:${port}`)
})
ืืงืืืฅ ืืชืืืจ ืืจืืืก ืืืืืข ืืงืื ืฉื ื ืกืืื ืืงืฉืืช: ืืงืฉืช GET ืื ืชืื ืืจืืฉื ืืืืืจื ืขืจื ืืื ื ืืกืืื, ืืืงืฉืช POST ืื ืชืื ืืจืืฉื ืืืืืื ืืช ืืืื ื ื-1. ืื ืฉืืฉืื ืืืืื ืช ื Deployment ืื ืฉืืฉ ืจืง ืฉืจืช ืืืช ืฉืืงืฉืื ืขื ืคืืจื 3000 ืืืชืืืจ ืืืืื ืช ืจืืืก ืืืช. ืืกืคืืง ืคืฉืื ืืฉืืื ืคืจืืืงื ืงืืืจื ืืก ืจืืฉืื.
## ืืชืงื ื ืืืฆืืจืช ืงืืฆื yaml ืฉื Kubernetes
ืืฉ ืืืื ืืจืืื ืืงืื ืืืฉื ืืงืืืกืืจ ืงืืืจื ืืก: ืืชืจ https://labs.play-with-k8s.com/ ืืืชื ืืื ืงืืืกืืจ ืืืื ื ื-4 ืฉืขืืช. ืื ืกืคืงื ืืขื ื ืืืืืืื ืืชื ื ืืื ืงืืืกืืจ ืืืฉืืงืื ืืชืืื ืืช ืืืื ืืืช ืฉืืื ืืกืคืงื ืขื ื ืงืื ืื ืืืชืจ ืืชื ื ืืื ืงืืืกืืจ ืืชืฉืืื ืกืืื. ืืื ืืื ืืืคืฉืจืืืืช ืื ื ืืืฆื ืฉืืื ื ืืื ืืื ืืชืงื ืช minikube ืืฆืืื ืขื ืืืคืืืค. ืื ืคืฉืื ืขืืื ืืื ืืืจ ืืืื ืงื ืืืฆืื ืืขืืืช.
ืืื ืืฉ ืืืจืืืช ืืชืงื ื ืืื ืืขืจืืืช ืืืคืขืื:
https://minikube.sigs.k8s.io/docs/start/
ืืชื ืืืืขืื ืฉืืฆืืืชื ืื ืืชื ืืืืืื ืืืคืขืื:
$ kubectl config current-context
ืืืืืฉื ืืืคืืก ืืช ืืืืช ืืงืกื minikube.
ืืืื ืืฉื ื ืฉืืฉืชืืฉ ืื ืืืืืื ื ืงืจื kompose ืืืื ืืืืข ืืืคืื ืงืืืฅ docker-compose.yml ืืงืืฆื ืืืืจืืช ืฉื kubernetes. ืืชืงืื ืื ืืืชื ืืืื:
https://kompose.io/.
ืืืจื ืืชืงื ื ืืืฆืืืช ืืชื ืฆืจืืืื ืืืืืช ืืกืืืืื ืืืจืืฅ ืืฉืืจืช ืืคืงืืื:
$ kompose version
ืืืงืื ืืฉืื ืืื 1.22.0.
ืืืจื ืฉืื ืืืืื ืืืชืงื ืื ื ืฆื ืืืจื ืขื ืืคืจืืืงื.
## ืืืจืช docker-compose.yml ืืงืืฆื k8s
ืื ื ืืืฆืจ ืชืืงืื ืืืฉื ืืื ืงืืืฅ docker-compose.yml ืืงืืจื ืื k8s. ืืืจ ืื ืืคืขืื:
$ kompose convert -f docker-compose.yml -o k8s
ืืืงืื ืืช ืืืืคืกื:
INFO Kubernetes file "k8s/web-service.yaml" created
INFO Kubernetes file "k8s/redis-deployment.yaml" created
INFO Kubernetes file "k8s/data-persistentvolumeclaim.yaml" created
INFO Kubernetes file "k8s/web-deployment.yaml" created
ืขืืฉืื ืืืืคืืืืืื ืืืืื ืื ืืืจืืฅ ืืช ืืคืงืืื ืืืื ืืื ืื ืกืืช ืืืคืขืื ืืช ืืกืจืืืก ืขื ืืงืืืกืืจ ืฉืื ื:
$ kubectl apply -f k8s1 419
# ืคืจืืคืืจืฆืื
ืื ืืื ืืฉ ืืื ืกืืฃ ืคืืฆ'ืจืื ืฉืืืืฃ ืืกืืื ืืืืืื ืืืื ืื ืืฆืืชื ืืื ื Refactoring.
ืื ืฉืืืข ืืฉ ืืื ืกืืฃ ืืืืื ืฉืืืืฃ ืืคืชืืจ ืืืืืื ืืืื ืื ืืฆืืชื ืืื ืืืชืื ืืืืงืืช ืืืืืืืืืช.
ืื ืืืืฉ ืืฉ ืืื ืกืืฃ ืืฉืืืืช ืืืืคืืช ืฉืื ืืฉืืืจื ืื ืืื ืืืืื ืืืืื ืืช ืืืฉื.
ืืื ืฉื ื ืืฉ ืืื ืกืืฃ ืืฉืืืืช ืืืืชืจืืช ืฉืื ืืฉืืืจื ืื ืืื ืืืฆืืจ ืงืฉืจืื ืืืืชืืื ืขื ืื ืฉืื ืืืืฅ ืืืืจื.
ืืขืืืื-
ืื ื ืฆืืื ืื ืืื ืืืจืื ืืืืฉ ืงืฆืช ืืืงืื ืฉืื ื, ืืืืจื ืืื ืคืืชืื ืคืืฆ'ืจืื ืืืื ืืจืื ืืืชืจ ืงื.
ืื ื ืฆืืื ืื ืฉืืืข ืืืชืื ืงืฆืช ืืืืงืืช ืืืืืืืืืช, ืืืืจื ืืื ืืืื ืคืืืช ืืืืื.
ืื ื ืฆืืื ืื ืืืืฉ ืืืืื ืืคืืื ืืืง ืงืื ืืืืืื ืืช ืืืฉื, ืืืืจื ืืื ื ืืื ืืืืืช ืืจืื ืืืชืจ ืืขืืืื ืืขืืืื ืืืืืื.
ืืื ื ืฆืืื ืืืืื ืืฉื ื ืืืฆืืจ ืงืฉืจืื ืืฉืืขืืชืืื ืขื ืื ืฉืื ืืืืฅ ืืืืจื, ืืืืจื ืืื ืืืื ืื ื ืืจืื ืืืชืจ ืื ืฉืื ืืืืืืฃ ืืืชื ืจืขืืื ืืช ืืฆืืจืชืืื ืืืืื ืื ื ืืจืื ืืืชืจ ืงื ืืื ืืช ืืกืืื ืงืจืืืจื ืฉืืชืืื ืื ื.
ืฉืชืืื ืืืืื ื ืฉื ื ื ืคืืื, ืฉื ืืข ืืงืืช ืืช ืืืืจืื ืืืืืคืื ืืคืจืืคืืจืฆืื ืืืืฆืื ืืื ื Refactoring, ืืืืืงืืช ืืืืืืืืืช, ืืืืืื ืืืืื ืืืืช ืืืฉืืช ืืืืฆืืจืช ืงืฉืจืื ืืืืืชืืื ืืืืฅ ืืืขืื ืืงืจืื ืฉื ืืื ืฉืื ืฉืืืชื ื ืืืืจื.
1 419
# ืืืค ืืืงืจ: ืืื ืืืืกืืฃ ืงืื ืืืชืืื ืืืืื'
ืืขืืืื ืขื ืืืงืจ ืื ืื ื ืคืืืฉืื ืืืื'ืื ืืืืื ื Dockerhub ืฉืืื ืืืืืื ืืืืืช ืืืฉืืืื ืื ืจืง ืืื ืืงืื ืืืืกืืฃ ืขืื ืืื ืฉืืจืืช ืงืื ืืคื ื ืฉืืงืื ืืืื ืจ ืขืืื. ืื ืื ืคืืฆ'ืจ ืฉืื ืืชื ืฆืจืืืื, ืชืฉืืื ืืฉืืืข ืฉืืื ืื ืคืฉืื ืืืืืืฉ ืืขืืจืช ืฉื ื ืืืจืืงืื ืืืืื.
## ืืฆืืจืช ืืืื' ืฉืื ื ืฉืืชืืกืก ืขื ืืืื' ืงืืื
ืืคื ื ืฉืืืื ืืืืืข ืืืจืืงืื ื ืฆืืจื ืืื ืืช ืืืื' ืืื ืืืืื' ืฉืื ืื ื ืจืืฆืื ืืื ืขื ืืงืื ืฉืื ื ืืืจืืฅ ืืช ืืงืื. ืื ื ืืืงื ืืช ืืืืื' ืฉื mongo ืืฉืืื ืืืืืื ืืื ืืคืฉืจ ืืืฆืข ืืืื ืืืื ืขื ืื ืืืื' ืืืืงืจืืื.
ืืืืืืื ืื ื ืืืฆื ืืช ืชืืงืืืช ืืืงืืจ ืฉื ืืืืื'. ืฉื ืืื ืื ื ืืฆืืช ืืื:
https://github.com/docker-library/mongo
ืืืื ืืช ื Dockerfile ืฉืื ืืืืฆื ืืชืืื ืืช ืืฉืืจืืช ืฉืืืืืจืืช Entrypoint ื CMD. ืืืื ืื ืืื ืืฉืืจืืช:
COPY docker-entrypoint.sh /usr/local/bin/
ENTRYPOINT ["docker-entrypoint.sh"]
EXPOSE 27017
CMD ["mongod"]
ืื ืืืืจ ืฉื ืงืืืช ืืื ืืกื ืฉื ืืงืื ืืืื ืจ ืืื ืืงืืืฅ /usr/local/bin/docker-entrypoint.sh ืขื ืืคืจืืืจ mongod.
ื ืคืชื ืชืืงืื ืืืฉื ืื ืืฆืืจ ืืชืืื Dockerfile ืขื ืืชืืื ืืื:
FROM mongo:5
COPY docker-entrypoint.sh /my/docker-entrypoint.sh
RUN chmod +x /my/docker-entrypoint.sh
ENTRYPOINT ["/my/docker-entrypoint.sh"]
CMD ["mongod"]
ืืจืกืชื ืืช ื Entrypoint ืขื ืกืงืจืืคื ืฉืื - ืฉืื ืื ืฉืืกืงืจืืคื ืฉืื ืืขืฉื ืืื ืืืคืขืื ืืช ื entrypoint ืืืงืืจื ืฉื ืืื ืื. ืื ื ืืขืืืจ ืืช mongod ื CMD ืืืืืง ืืื ืฉืขืฉื ืืืืื' ืืืงืืจื, ืืืืจืืืช ืื ืชืขืืืจ ืืชืืจ ืคืจืืืจ ืืกืงืจืืคื ืฉืื ืืืื ื ืื ืงืืืช ืืื ืืกื ืืืงืืจืืช.
ืืกืงืจืืคื docker-entrypoint.sh ืฉืื ืืื ืืื ืืืฉ ืคืฉืื:
#!/usr/bin/env bash
/usr/local/bin/docker-entrypoint.sh "$@"
ืฉื ื ืืงืืฆืื ืืืื ืืกืคืืงืื ืืฉืืื ืืื ืืช ืืช ืืืืื' ืืื ืกืืช ืืืจืืฅ ืืืชื ืืื ืืื ืขืื ืชืงืืื ืงืื ืืืื ืจ ืฉื ืืื ืื ืืื ืืื ืฉืืืืชื ืืงืืืื ืืืจืฆืช ืืืืื' ืืืงืืจื.
## ืืจืฆืช ืงืื ืืคื ื ืฉืืืืจ ืฉืจืฆืื ื ืืืคืขืื ืขืืื
ืืืืง ืืงื ืืื ืืืคืขืื ืงืื ืืคื ื ืฉืืื ืื ืขืืื. ืื ืื ืฉืฆืจืื ืืขืฉืืช ืืื ืืืืกืืฃ ื docker-entrypoint.sh ืฉืื ื ืืชืืชื ืืช ืืงืื ืฉืจืืฆืื ืืคื ื ืฉืืคืขืืืื ืืช docker-entrypoint.sh ืฉืืื. ืืืืืื ืืชืืื ืืื ืืงืืืฅ ืืืชืื ืืืกื ืฉืืจืช ืืงืกื ืืจืง ืื ืืจืืฅ ืืช ืืื ืื:
#!/usr/bin/env bash
echo "This code runs before mongo"
/usr/local/bin/docker-entrypoint.sh "$@"
## ืืจืฆืช ืงืื ืืืจื ืฉืืืืจ ืฉืจืฆืื ื ืืืคืขืื ืขืืื
ืืจืืง ืงืฆืช ืืืชืจ ืืืจืื ืืื ืืืคืขืื ืืช ืืืืคืกื ืืืจื ืฉืืื ืื ืขืื. ืืืฉืืง ืืื ืืื ืฉืฆืจืื ืืืคืขืื ืืช ืืื ืื ืืจืงืข, ืืืืืช ืฉืืื ืืขืื, ืืืืคืืก ืืช ืื ืฉืจืืฆืื ืืื "ืืืฆืืจืฃ" ืืืื ืืื ืฉืืกืงืจืืคื docker-entrypoint.sh ืฉืื ืื ืืกืชืืื (ืกืงืจืืคื entrypoint ืฉืืฉืืืจ ืจืง ืชืืืืื ืจืงืข ืืกืชืืื ืืื ืืกืืืจ ืืืชื ืืช ืืงืื ืืืื ืจ).
ืืืืช ืืงืกื ืืื ืืืคืขืื ืคืงืืืช bash ืืจืงืข ืืื & ืืืืืช ืืงืกื ืฉืขืืฆืจืช ืืช ืืกืงืจืืคื ืขื ืฉืชืืืืื ืืจืงืข ืืกืชืืืืื ืืื wait. ืืฉืืื ืืืคืขืื ืืช ืืืืคืกื ืืืจื ืฉืืื ืื ืขืื ืื ื ืืืกืืฃ ืืงืื ืืืื ืจ ืืช wait-for-it ืืืฉืชืืฉ ืื ืืื ืืืืืช ืฉืืื ืื ืืขืื.
ืกื ืืื ื ืขืืื ืืช ื Dockerfile ืืชืืื ืืื:
FROM mongo:5
COPY docker-entrypoint.sh /my/docker-entrypoint.sh
RUN apt-get update && \
apt-get install -y wait-for-it && \
chmod +x /my/docker-entrypoint.sh
ENTRYPOINT ["/my/docker-entrypoint.sh"]
CMD ["mongod"]
ืืืช docker-entrypoint.sh ืืชืืื ืืื:
#!/usr/bin/env bash
(/usr/local/bin/docker-entrypoint.sh "$@") &
wait-for-it localhost:27017
echo "This code runs after mongo is ready"
wait
ืืืืืื ืืคืืกื ืืืชื ืขื ืืื ืื ืืื ืืื ืขืืืืช ืขื ืื ืืืื' ืฉืชืจืฆื. ืื ื ืืฉืืืื ืืงืฆืจื:
1. ืืืืื ืืช ื Entrypoint ืื CMD ืฉื ืืืืื', ืจืืฉืืื ืืืชื ืืฆื. ืืื ืืช ืืคืืจื ื EXPOSE.
2. ืืืฆืจืื ืืืื' ืฉืื ื ืฉืืฉ ืื ืกืงืจืืคื entrypoint ืฉืืคืขืื ืืช ื entrypoint ืืืงืืจื. ืืืงืืื ืื ืืช ื CMD ืืืงืืจื ืืื ืจืืฆืื ืืืืืช ื ืืืืื ืื ืืช ื EXPOSE.
3. ืื ืจืืฆืื ืืืจืืฅ ืงืื ืืคื ื ืืืืื' ืืืงืืจื ืืคืฉืจ ืคืฉืื ืืืืกืืฃ ืืช ืืงืื ื entrypoint ืืืืฉ ืฉืืฆืจื ื.
4. ืื ืจืืฆืื ืืืจืืฅ ืงืื ืืืจื ืืืืื' ืืืงืืจื ื ืืกืืฃ ืืช wait-for-it ื Dockerfile, ื ืจืืฅ ืืช ืืืืื' ืืืงืืจื ืืจืงืข, ื ืฉืชืืฉ ื wait-for-it ืืื ืืืืืช ืฉืืื ืืืื ืืืื ืืื ื ืจืืฅ ืืช ืืงืื ืฉืื ื. ืืกืืฃ ื ืงืจื ื wait ืืื ืฉืืกืงืจืืคื entrypoint ืืืืฉ ืฉืืชืื ื ืื ืืกืชืืื ืืืงืื ืืืื ืจ ืืืฉืื ืืขืืื.
Endi mavjud! Telegram Tadqiqoti 2025 โ yilning asosiy insaytlari 
