เชเซเชฌเชฐเชจเซเชเซเชธเชฎเชพเช เชเซเชจเซเชฐเซ เชกเชฟเชชเซเชฒเซเชฏเชฎเซเชจเซเชเชจเซ เช เชฎเชฒ เชเชฐเชตเชพ เช เชจเซ เชเชชเชฏเซเช เชเชฐเชตเชพ เชฎเชพเชเซ เช เชฎเซ Gitlab CI เช เชจเซ เชฎเซเชจเซเชฏเซเช เชฒ GitOps เชจเซ เชเชชเชฏเซเช เชเชฐเซเชถเซเช
เช เชถเซเชฐเซเชฃเซเชฎเชพเชเชฅเซ เชฒเซเชเซ:
- (เช เชฒเซเช)
ArgoCI เชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชเซเชจเซเชฐเซ เชเชฎเชพเชตเช - Istio เชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชเซเชจเซเชฐเซ เชเชฎเชพเชตเช
- เชเซเชจเชเชฟเชจเซเชธ-เชเชเซเชธ เชเชธเซเชเชฟเช เชซเซเชฒเซเชเชฐเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชเซเชจเซเชฐเซ เชกเชฟเชชเซเชฒเซเชฏเชฎเซเชจเซเช
เช เชฎเซ GitOps เชฆเซเชตเชพเชฐเชพ เชเซเชจเซเชฐเซ เชเชฎเชพเชตเช เชฎเซเชจเซเชฏเซเช เชฒเซ เชเชฐเซเชถเซเช เช เชจเซ เชฎเซเชเซเชฏ เชเซเชฌเชฐเชจเซเชเซเชธ เชธเชเชธเชพเชงเชจเซ เชฌเชจเชพเชตเซ/เชธเชเชถเซเชงเชฟเชค เชเชฐเซเชถเซเช. เช เชฒเซเช เชฎเซเชเซเชฏเชคเซเชตเซ เชชเชฐเชฟเชเชฏ เชฎเชพเชเซ เชฌเชจเชพเชตเชพเชฏเซเชฒ เชเซ เชเซเชฌเชฐเชจเซเชเซเชธ เชเซเชจเซเชฐเซเชฎเชพเช เชเชฎเชพเชตเช เชเซเชตเซ เชฐเซเชคเซ เชเชพเชฐเซเชฏ เชเชฐเซ เชเซ เชคเซเชจเซ เชธเชพเชฅเซ, เชเชพเชฐเชฃ เชเซ เชคเซเชฏเชพเช เชเชเซเชฎเซเชถเชจเชจเซ เชตเชงเซ เช เชธเชฐเชเชพเชฐเช เชชเชฆเซเชงเชคเชฟเช เชเซ, เชเซเชจเซ เชเชชเชฃเซ เชจเซเชเซเชจเชพ เชฒเซเชเซเชฎเชพเช เชงเซเชฏเชพเชจเชฎเชพเช เชฒเชเชถเซเช.
เชเซเชจเซเชฐเซ เชเชฎเชพเชตเช
เชเซเชจเซเชฐเซ เชตเซเชฏเซเชนเชฐเชเชจเชพ เชธเชพเชฅเซ, เช เชชเชกเซเชเซเชธ เชชเซเชฐเชฅเชฎ เชฎเชพเชคเซเชฐ เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพเชเชจเชพ เชธเชฌเชธเซเช เชชเชฐ เชฒเชพเชเซ เชฅเชพเชฏ เชเซ. เชฎเซเชจเชฟเชเชฐเชฟเชเช, เชฒเซเช เชกเซเชเชพ, เชฎเซเชจเซเชฏเซเช เชฒ เชเซเชธเซเชเชฟเชเช เช เชฅเชตเชพ เช เชจเซเชฏ เชชเซเชฐเชคเชฟเชธเชพเชฆ เชเซเชจเชฒเซ เชฆเซเชตเชพเชฐเชพ, เชฌเชงเชพ เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพเช เชฎเชพเชเซ เชฐเชฟเชฒเซเช เชฅเชพเชฏ เชคเซ เชชเชนเซเชฒเชพเช เชคเซเชจเซเช เชชเชฐเซเชเซเชทเชฃ เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ.
เชเซเชฌเชฐเชจเซเชเซเชธ เชเชฎเชพเชตเช (เชฐเซเชฒเชฟเชเช เช เชชเชกเซเช)
เชเซเชฌเชฐเชจเซเชเซเชธ เชกเชฟเชชเซเชฒเซเชฏเชฎเซเชจเซเช เชฎเชพเชเซเชจเซ เชกเชฟเชซเซเชฒเซเช เชตเซเชฏเซเชนเชฐเชเชจเชพ เชฐเซเชฒเชฟเชเช-เช เชชเชกเซเช เชเซ, เชเซเชฏเชพเช เชเซเชเซเชเชธ เชธเชเชเซเชฏเชพเชฎเชพเช เชชเซเชกเซเชธ เชเชฎเซเชเซเชจเชพ เชจเชตเชพ เชตเชฐเซเชเชจ เชธเชพเชฅเซ เชฒเซเชจเซเช เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ. เชเซ เชคเซเช เชธเชฎเชธเซเชฏเชพเช เชตเชฟเชจเชพ เชฌเชจเชพเชตเชตเชพเชฎเชพเช เชเชตเซเชฏเชพ เชนเซเชฏ, เชคเซ เชเชฌเซเชเชจเชพ เชเซเชจเชพ เชธเชเชธเซเชเชฐเชฃเซ เชธเชพเชฅเซเชจเชพ เชถเซเชเชเซ เชธเชฎเชพเชชเซเชค เชฅเชพเชฏ เชเซ, เช เชจเซ เชจเชตเชพ เชถเซเชเชเซ เชธเชฎเชพเชเชคเชฐ เชฌเชจเชพเชตเชตเชพเชฎเชพเช เชเชตเซ เชเซ.
เชเซเชเซเชชเซเชธ
เช เชฎเซ เช เชเชฆเชพเชนเชฐเชฃเชฎเชพเช GitOps เชจเซ เชเชชเชฏเซเช เชเชฐเซเช เชเซเช เชเชพเชฐเชฃ เชเซ เช เชฎเซ:
- เชธเชคเซเชฏเชจเชพ เชเช เชธเซเชคเซเชฐเซเชค เชคเชฐเซเชเซ เชเชฟเชเชจเซ เชเชชเชฏเซเช
- เช เชฎเซ เชฌเชฟเชฒเซเชก เช เชจเซ เชเชฎเชพเชตเช เชฎเชพเชเซ เชเชฟเช เชเชชเชฐเซเชถเชจเซเชธเชจเซ เชเชชเชฏเซเช เชเชฐเซเช เชเซเช (เชเชฟเช เชเซ เช/เชฎเชฐเซเช เชธเชฟเชตเชพเชฏเชจเชพ เชเซเช เชเชฆเซเชถเซเชจเซ เชเชฐเซเชฐ เชจเชฅเซ)
เชเชฆเชพเชนเชฐเชฃ:
เชเชพเชฒเซ เชเช เชธเชพเชฐเซ เชชเซเชฐเซเชเซเชเชฟเชธ เชเชฐเซเช - เชเชชเซเชฒเชฟเชเซเชถเชจ เชเซเชก เชฎเชพเชเซ เชเช เชญเชเชกเชพเชฐ เช เชจเซ เชเช เชเชจเซเชซเซเชฐเชพเชธเซเชเซเชฐเชเซเชเชฐ เชฎเชพเชเซ.
เชเชชเซเชฒเชฟเชเซเชถเชจ เชญเชเชกเชพเชฐ
เช เชเช เชเซเชฌ เช เชธเชฐเชณ Python+Flask API เชเซ เชเซ JSON เชคเชฐเซเชเซ เชชเซเชฐเชคเชฟเชธเชพเชฆ เชเชชเซ เชเซ. เช เชฎเซ GitlabCI เชฎเชพเชฐเชซเชคเซ เชชเซเชเซเช เชฌเชจเชพเชตเซเชถเซเช เช เชจเซ เชชเชฐเชฟเชฃเชพเชฎเชจเซ Gitlab เชฐเชเชฟเชธเซเชเซเชฐเซเชฎเชพเช เชฎเซเชเชฒเซเชถเซเช. เชฐเชเชฟเชธเซเชเซเชฐเซเชฎเชพเช เช เชฎเชพเชฐเซ เชชเชพเชธเซ เชฌเซ เช เชฒเช เช เชฒเช เชชเซเชฐเชเชพเชถเชจ เชธเชเชธเซเชเชฐเชฃเซ เชเซ:
wuestkamp/k8s-deployment-example-app:v1
wuestkamp/k8s-deployment-example-app:v2
เชคเซเชฎเชจเซ เชตเชเซเชเซเชจเซ เชเช เชฎเชพเชคเซเชฐ เชคเชซเชพเชตเชค เช เชชเชฐเชค เชเชฐเซเชฒเซ JSON เชซเชพเชเชฒเชฎเชพเช เชซเซเชฐเชซเชพเชฐ เชเซ. เช เชฎเซ เช เชเชชเซเชฒเชฟเชเซเชถเชจเชจเซ เชเชชเชฏเซเช เชถเชเซเชฏ เชคเซเชเชฒเซ เชธเชฐเชณเชคเชพเชฅเซ เชเชฒเซเชชเชจเชพ เชเชฐเชตเชพ เชฎเชพเชเซ เชเชฐเซเช เชเซเช เชเซ เช เชฎเซ เชเชฏเชพ เชธเชเชธเซเชเชฐเชฃ เชธเชพเชฅเซ เชตเชพเชคเชเซเชค เชเชฐเซ เชฐเชนเซเชฏเชพ เชเซเช.
เชเชจเซเชซเซเชฐเชพเชธเซเชเซเชฐเชเซเชเชฐ เชญเชเชกเชพเชฐ
เช เชธเชฒเชเชฎเชฎเชพเช เช
เชฎเซ GitlabCI เชฎเชพเชฐเชซเชคเซ เชเซเชฌเชฐเชจเซเชเซเชธ เชธเซเชงเซ เชเชฎเชพเชตเชถเซเช, .gitlab-ci.yml
เชเชจเชพ เชเซเชตเซเช เชฒเชพเชเซ เชเซ:
image: traherom/kustomize-docker
before_script:
- printenv
- kubectl version
stages:
- deploy
deploy test:
stage: deploy
before_script:
- echo $KUBECONFIG
script:
- kubectl get all
- kubectl apply -f i/k8s
only:
- master
เชคเซเชจเซ เชเชพเชคเซ เชเชฒเชพเชตเชตเชพ เชฎเชพเชเซ เชคเชฎเชพเชฐเซ เชเซเชฒเชธเซเชเชฐเชจเซ เชเชฐเซเชฐ เชชเชกเชถเซ, เชคเชฎเซ Gcloud เชจเซ เชเชชเชฏเซเช เชเชฐเซ เชถเชเซ เชเซ:
gcloud container clusters create canary --num-nodes 3 --zone europe-west3-b
gcloud compute firewall-rules create incoming-80 --allow tcp:80
เชคเชฎเชพเชฐเซ เชเชพเชเชเซ เชเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ KUBECONFIG
GitlabCI เชฎเชพเช, เชเซเชฎเชพเช เชเชเซเชธเซเชธ เชฎเชพเชเซเชจเซ เชฐเซเชชเชฐเซเชเชพ เชนเชถเซ kubectl
เชคเชฎเชพเชฐเชพ เชเซเชฒเชธเซเชเชฐเชฎเชพเช.
เชเซเชฒเชธเซเชเชฐ (Gcloud) เชฎเชพเชเซ เชเชณเชเชชเชคเซเชฐ เชเซเชตเซ เชฐเซเชคเซ เชฎเซเชณเชตเชตเซเช เชคเซ เชตเชฟเชถเซ เชคเชฎเซ เชตเชพเชเชเซ เชถเชเซ เชเซ
เชเชจเซเชซเซเชฐเชพเชธเซเชเซเชฐเชเซเชเชฐ Yaml
เชเชจเซเชซเซเชฐเชพเชธเซเชเซเชฐเชเซเชเชฐ เชฐเชฟเชชเซเชเซเชเชฐเซเชฎเชพเช เช เชฎเชพเชฐเซ เชชเชพเชธเซ เชธเซเชตเชพ เชเซ:
apiVersion: v1
kind: Service
metadata:
labels:
id: app
name: app
spec:
ports:
- port: 80
protocol: TCP
targetPort: 5000
selector:
id: app
type: LoadBalancer
เช
เชจเซ เชฎเชพเช เชเชฎเชพเชตเช deploy.yaml
:
apiVersion: apps/v1
kind: Deployment
metadata:
name: app
spec:
replicas: 10
selector:
matchLabels:
id: app
type: main
template:
metadata:
labels:
id: app
type: main
spec:
containers:
- image: registry.gitlab.com/wuestkamp/k8s-deployment-example-app:v1
name: app
resources:
limits:
cpu: 100m
memory: 100Mi
เช
เชจเซ เชฎเชพเช เชฌเซเชเซ เชเชฎเชพเชตเช deploy-canary.yaml
:
kind: Deployment
metadata:
name: app-canary
spec:
replicas: 0
selector:
matchLabels:
id: app
type: canary
template:
metadata:
labels:
id: app
type: canary
spec:
containers:
- image: registry.gitlab.com/wuestkamp/k8s-deployment-example-app:v2
name: app
resources:
limits:
cpu: 100m
memory: 100Mi
เชจเซเชเชง เชเชฐเซ เชเซ เชเชช-เชกเชฟเชชเซเชฒเซเชฏเชฎเชพเช เชนเชเซ เชธเซเชงเซ เชเซเช เชชเซเชฐเชคเชฟเชเซเชคเชฟเช เชตเซเชฏเชพเชเซเชฏเชพเชฏเชฟเชค เชจเชฅเซ.
เชชเซเชฐเชพเชฐเชเชญเชฟเช เชเชฎเชพเชตเช เชเชฐเซ เชฐเชนเซเชฏเชพ เชเซเช
เชชเซเชฐเชพเชฐเชเชญเชฟเช เชเชฎเชพเชตเช เชถเชฐเซ เชเชฐเชตเชพ เชฎเชพเชเซ, เชคเชฎเซ เชฎเชพเชธเซเชเชฐ เชฌเซเชฐเชพเชจเซเช เชชเชฐ เชฎเซเชจเซเชฏเซเช
เชฒเซ GitlabCI เชชเชพเชเชชเชฒเชพเชเชจ เชถเชฐเซ เชเชฐเซ เชถเชเซ เชเซ. เชเชจเชพ เชชเชเซ kubectl
เชจเซเชเซเชจเชพ เชเชเชเชชเซเช เชเซเชเช:
เชเชชเชฃเซ เชเซเชเช เชเซเช app
10 เชชเซเชฐเชคเชฟเชเซเชคเชฟเช เชธเชพเชฅเซ เชเชฎเชพเชตเช เช
เชจเซ 0 เชธเชพเชฅเซ เชเชช-เชเซเชจเชฐเซ. เชคเซเชฏเชพเช เชเช เชฒเซเชกเชฌเซเชฒเซเชจเซเชธเชฐ เชชเชฃ เชเซ เชเซเชจเชพ เชฆเซเชตเชพเชฐเชพ เช
เชฎเซ เชเชเซเชธเซเชธ เชเชฐเซ เชถเชเซเช เชเซเช curl
เชฌเชพเชนเซเชฏ IP เชฆเซเชตเชพเชฐเชพ:
while true; do curl -s 35.198.149.232 | grep label; sleep 0.1; done
เช เชฎเซ เชเซเชเช เชเซเช เชเซ เช เชฎเชพเชฐเซ เชเซเชธเซเช เชเชชเซเชฒเชฟเชเซเชถเชจ เชซเชเซเชค "v1" เชชเชฐเชค เชเชฐเซ เชเซ.
เชเซเชจเซเชฐเซ เชเชฎเชพเชตเชเชจเซ เช เชฎเชฒ
เชชเชเชฒเซเช 1: เชเซเชเชฒเชพเช เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพเช เชฎเชพเชเซ เชจเชตเซเช เชธเชเชธเซเชเชฐเชฃ เชชเซเชฐเชเชพเชถเชฟเชค เชเชฐเซ
เช เชฎเซ deploy-canary.yaml เชซเชพเชเชฒ เช เชจเซ เชจเชตเซ เชเชตเซเชคเซเชคเชฟ เชเชฎเซเชเชฎเชพเช เชชเซเชฐเชคเชฟเชเซเชคเชฟเชเชจเซ เชธเชเชเซเชฏเชพ 1 เชชเชฐ เชธเซเช เชเชฐเซ เชเซ:
kind: Deployment
metadata:
name: app-canary
spec:
replicas: 1
selector:
matchLabels:
id: app
type: canary
template:
metadata:
labels:
id: app
type: canary
spec:
containers:
- image: registry.gitlab.com/wuestkamp/k8s-deployment-example-app:v2
name: app
resources:
limits:
cpu: 100m
memory: 100Mi
เชซเชพเชเชฒเชฎเชพเช deploy.yaml
เช
เชฎเซ เชชเซเชฐเชคเชฟเชเซเชคเชฟเชเชจเซ เชธเชเชเซเชฏเชพ เชฌเชฆเชฒเซเชจเซ 9 เชเชฐเซ เชเซ:
kind: Deployment
metadata:
name: app
spec:
replicas: 9
selector:
matchLabels:
id: app
...
เช เชฎเซ เช เชซเซเชฐเชซเชพเชฐเซเชจเซ เชฐเชฟเชชเซเชเซเชเชฐเซเชฎเชพเช เชฆเชฌเชพเชฃ เชเชฐเซเช เชเซเช เชเซเชฏเชพเชเชฅเซ เชเชฎเชพเชตเช เชถเชฐเซ เชฅเชถเซ (GitlabCI เชฆเซเชตเชพเชฐเชพ) เช เชจเซ เชชเชฐเชฟเชฃเชพเชฎเซ เชเซเช:
เช เชฎเชพเชฐเซ เชธเซเชตเชพ เชฌเชเชจเซ เชเชฎเชพเชตเช เชคเชฐเชซ เชจเชฟเชฐเซเชฆเซเชถ เชเชฐเชถเซ, เชเชพเชฐเชฃ เชเซ เชฌเชเชจเซ เชชเชพเชธเซ เชเชชเซเชฒเชฟเชเซเชถเชจ เชชเชธเชเชฆเชเซเชเชพเชฐ เชเซ. เชเซเชฌเชฐเชจเซเชเซเชธเชจเชพ เชกเชฟเชซเซเชฒเซเช เชฐเซเชจเซเชกเชฎเชพเชเชเซเชถเชจเชจเซ เชฒเซเชงเซ, เช เชฎเชจเซ ~10% เชตเชฟเชจเชเชคเซเช เชฎเชพเชเซ เช เชฒเช-เช เชฒเช เชชเซเชฐเชคเชฟเชธเชพเชฆเซ เชเซเชตเชพ เชเซเชเช:
เช เชฎเชพเชฐเซ เชเชชเซเชฒเชฟเชเซเชถเชจเชจเซ เชตเชฐเซเชคเชฎเชพเชจ เชธเซเชฅเชฟเชคเชฟ (GitOps, เชธเชคเซเชฏเชจเชพ เชธเชฟเชเชเชฒ เชธเซเชคเซเชฐเซเชค เชคเชฐเซเชเซ เชเชฟเชเชฎเชพเชเชฅเซ เชฒเซเชตเชพเชฎเชพเช เชเชตเซเชฒ) เช เชธเชเซเชฐเชฟเชฏ เชชเซเชฐเชคเชฟเชเซเชคเชฟเช เชธเชพเชฅเซ เชฌเซ เชเชฎเชพเชตเชเชจเซ เชนเชพเชเชฐเซ เชเซ, เชฆเชฐเซเช เชธเชเชธเซเชเชฐเชฃ เชฎเชพเชเซ เชเช.
~10% เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพเช เชจเชตเชพ เชธเชเชธเซเชเชฐเชฃเชฅเซ เชชเชฐเชฟเชเชฟเชค เชฅเชพเชฏ เชเซ เช เชจเซ เช เชเชพเชฃเชคเชพเช เชคเซเชจเซเช เชชเชฐเซเชเซเชทเชฃ เชเชฐเซ เชเซ. เชธเชฎเชธเซเชฏเชพเช เชถเซเชงเชตเชพ เชฎเชพเชเซ เชฒเซเช เช เชจเซ เชฎเซเชจเชฟเชเชฐเชฟเชเช เชกเซเชเชพเชฎเชพเช เชญเซเชฒเซ เชฎเชพเชเซ เชคเชชเชพเชธ เชเชฐเชตเชพเชจเซ เชนเชตเซ เชธเชฎเชฏ เชเซ.
เชชเชเชฒเซเช 2: เชฌเชงเชพ เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพเช เชฎเชพเชเซ เชจเชตเซเช เชธเชเชธเซเชเชฐเชฃ เชชเซเชฐเชเชพเชถเชฟเชค เชเชฐเซ
เช
เชฎเซ เชจเชเซเชเซ เชเชฐเซเชฏเซเช เชเซ เชเซ เชฌเชงเซเช เชฌเชฐเชพเชฌเชฐ เชฅเช เชเชฏเซเช เชเซ เช
เชจเซ เชนเชตเซ เช
เชฎเชพเชฐเซ เชฌเชงเชพ เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพเช เชฎเชพเชเซ เชจเชตเซเช เชธเชเชธเซเชเชฐเชฃ เชฐเชเซ เชเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ. เช เชเชฐเชตเชพ เชฎเชพเชเซ เช
เชฎเซ เชซเชเซเชค เช
เชชเชกเซเช เชเชฐเซเช เชเซเช deploy.yaml
เชเชฎเซเชเชจเซเช เชจเชตเซเช เชตเชฐเซเชเชจ เชเชจเซเชธเซเชเซเชฒ เชเชฐเชตเซเช เช
เชจเซ 10 เชเซเชเชฒเซ เชชเซเชฐเชคเชฟเชเซเชคเชฟเชเชจเซ เชธเชเชเซเชฏเชพ deploy-canary.yaml
เช
เชฎเซ เชชเซเชฐเชคเชฟเชเซเชคเชฟเชเชจเซ เชธเชเชเซเชฏเชพ 0 เชชเชฐ เชธเซเช เชเชฐเซเช เชเซเช. เชเชฎเชพเชตเช เชชเชเซ, เชชเชฐเชฟเชฃเชพเชฎ เชจเซเชเซ เชฎเซเชเชฌ เชนเชถเซ:
เช เชช เชธเชฎเชเซ
เชฎเชพเชฐเชพ เชฎเชพเชเซ, เช เชฐเซเชคเซ เชกเชฟเชชเซเชฒเซเชฏเชฎเซเชจเซเชเชจเซ เชฎเซเชจเซเชฏเซเช เชฒเซ เชเชฒเชพเชตเชตเซเช เช เชธเชฎเชเชตเชพเชฎเชพเช เชฎเชฆเชฆ เชเชฐเซ เชเซ เชเซ เชคเซ k8s เชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชเซเชเชฒเซ เชธเชฐเชณเชคเชพเชฅเซ เชเซเช เชตเซ เชถเชเชพเชฏ เชเซ. เชเซเชฌเชฐเชจเซเชเซเชธ เชคเชฎเชจเซ API เชฆเซเชตเชพเชฐเชพ เชฌเชงเซเช เช เชชเชกเซเช เชเชฐเชตเชพเชจเซ เชฎเชเชเซเชฐเซ เชเชชเซ เชเซ, เชคเซเชฅเซ เช เชชเชเชฒเชพเชเช เชธเซเชเซเชฐเชฟเชชเซเชเซเชธ เชฆเซเชตเชพเชฐเชพ เชธเซเชตเชเชพเชฒเชฟเชค เชฅเช เชถเชเซ เชเซ.
เชฌเซเชเซ เชตเชธเซเชคเซ เชเซ เชเซเชจเซ เช เชฎเชฒเชฎเชพเช เชฎเซเชเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ เชคเซ เชเซ เชเซเชธเซเชเชฐ เชเชจเซเชเซเชฐเซ เชชเซเชเชจเซเช (เชฒเซเชกเชฌเซเชฒเซเชจเซเชธเชฐ เช เชฅเชตเชพ เชเชจเซเชเซเชฐเซเชธ เชฆเซเชตเชพเชฐเชพ) เชเซเชจเชพ เชฆเซเชตเชพเชฐเชพ เชซเชเซเชค เชจเชตเชพ เชธเชเชธเซเชเชฐเชฃเชจเซ เช เชเชเซเชธเซเชธ เชเชฐเซ เชถเชเชพเชฏ เชเซ. เชคเซเชจเซ เชเชชเชฏเซเช เชฎเซเชจเซเชฏเซเช เชฒ เชฌเซเชฐเชพเชเชเชฟเชเช เชฎเชพเชเซ เชเชฐเซ เชถเชเชพเชฏ เชเซ.
เชญเชตเชฟเชทเซเชฏเชจเชพ เชฒเซเชเซเชฎเชพเช, เช เชฎเซ เช เชจเซเชฏ เชธเซเชตเชฏเชเชธเชเชเชพเชฒเชฟเชค เชเชเซเชฒเซ เชคเชชเชพเชธเซเชถเซเช เชเซ เช เชฎเซ เชเซ เชเชฐเซเชฏเซเช เชเซ เชคเซเชฎเชพเชเชฅเซ เชฎเซเชเชพ เชญเชพเชเชจเซ เช เชฎเชฒ เชเชฐเซ เชเซ.
เช เชฎเชพเชฐเชพ เชฌเซเชฒเซเช เชชเชฐ เช เชจเซเชฏ เชฒเซเชเซ เชชเชฃ เชตเชพเชเชเซ:
เช เชงเชฟเชเซเชคเชคเชพ เชธเชพเชฅเซ เชเซเชฒเชฟเชเชนเชพเชเชธเชฎเชพเชเชฅเซ เช เชงเชฟเชเซเชคเชคเชพ เชตเชฟเชจเชพ เชเซเชฒเชฟเชเชนเชพเชเชธเชฎเชพเช เชธเซเชฅเชพเชจเชพเชเชคเชฐเชฃ เชถเซเช เชคเชฐเชซ เชฆเซเชฐเซ เชเชฏเซเช? Nginx เชฎเชพเชเซ เชกเชพเชฏเชจเซเชฎเชฟเช เชฎเซเชกเซเชฏเซเชฒ เชฌเชจเชพเชตเชตเซเช เช เชชเชกเซเช เชเชฐเซ nxs-build-tools - deb เช เชจเซ rpm เชชเซเชเซเชเซ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชเซ เชธเชนเชพเชฏเช เชนเชพเชถเชฟเชเซเชฐเซเชช เชเซเชจเซเชธเซเชฏเซเชฒเชจเชพ เชเซเชฌเชฐเชจเซเชเซเชธ เชเชฅเซเชฐเชพเชเชเซเชถเชจเชจเซ เชชเชฐเชฟเชเชฏ Csync2 เชเชชเชฏเซเชเชฟเชคเชพเชจเซ เชเชชเชฏเซเช เชเชฐเชคเซ เชตเชเชคเซ เช เชฎเชพเชฐเซ เชถเซเช เชธเชพเชฎเชจเซ เชเชฐเชตเซ เชชเชกเซเชฏเซ เชนเชคเซ เชฐเซเชกเชฎเชพเชเชจ เชฎเชพเชเซ เชเซเชฒเชฟเชเซเชฐเชพเชฎ เชฌเซเช. เชคเชฎเชพเชฐเชพ เช เชจเซ เช เชจเซเชฏ เชฒเซเชเซ เชฎเชพเชเซ เชเซเชตเชจ เชเซเชตเซ เชฐเซเชคเซ เชธเชฐเชณ เชฌเชจเชพเชตเชตเซเช
เชธเซเชฐเซเชธ: www.habr.com