"แƒแƒฎแƒแƒšแƒ˜ แƒ”แƒžแƒแƒกแƒ˜". แƒกแƒžแƒ˜แƒšแƒแƒก แƒœแƒแƒฌแƒ˜แƒš-แƒœแƒแƒฌแƒ˜แƒš แƒ•แƒญแƒแƒ›แƒ—

"แƒแƒฎแƒแƒšแƒ˜ แƒ”แƒžแƒแƒกแƒ˜". แƒกแƒžแƒ˜แƒšแƒแƒก แƒœแƒแƒฌแƒ˜แƒš-แƒœแƒแƒฌแƒ˜แƒš แƒ•แƒญแƒแƒ›แƒ—

แƒแƒ› แƒกแƒขแƒแƒขแƒ˜แƒแƒจแƒ˜ แƒ›แƒ” แƒจแƒ”แƒ•แƒฅแƒ›แƒœแƒ˜ แƒกแƒแƒ›แƒฃแƒจแƒแƒ แƒ’แƒแƒ แƒ”แƒ›แƒแƒก แƒ—แƒแƒ›แƒแƒจแƒ˜แƒก "Epics"-แƒ˜แƒก แƒ’แƒแƒœแƒ•แƒ˜แƒ—แƒแƒ แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒแƒกแƒ”แƒ•แƒ” แƒ—แƒแƒ•แƒแƒ“ แƒ“แƒแƒ•แƒงแƒแƒค แƒ—แƒแƒ›แƒแƒจแƒก OpenFaaS-แƒจแƒ˜ แƒ’แƒแƒ›แƒแƒกแƒแƒงแƒ”แƒœแƒ”แƒ‘แƒšแƒแƒ“ แƒจแƒ”แƒกแƒแƒคแƒ”แƒ แƒ˜แƒก แƒœแƒแƒฌแƒ˜แƒšแƒ”แƒ‘แƒแƒ“. แƒงแƒ•แƒ”แƒšแƒ แƒ›แƒแƒœแƒ˜แƒžแƒฃแƒšแƒแƒชแƒ˜แƒแƒก แƒ’แƒแƒ•แƒแƒ™แƒ”แƒ—แƒ”แƒ‘ แƒšแƒ˜แƒœแƒฃแƒฅแƒกแƒ–แƒ”, แƒ™แƒฃแƒ‘แƒ”แƒ แƒœแƒ”แƒขแƒกแƒก minikube-แƒจแƒ˜ แƒ’แƒแƒœแƒ•แƒแƒ—แƒแƒ•แƒกแƒ”แƒ‘ VirtualBox-แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—. แƒฉแƒ”แƒ›แƒก แƒกแƒแƒ›แƒฃแƒจแƒแƒ แƒ›แƒแƒœแƒฅแƒแƒœแƒแƒก แƒแƒฅแƒ•แƒก 2 แƒžแƒ แƒแƒชแƒ”แƒกแƒแƒ แƒ˜แƒก แƒ‘แƒ˜แƒ แƒ—แƒ•แƒ˜ แƒ“แƒ 12 GB แƒแƒžแƒ”แƒ แƒแƒขแƒ˜แƒฃแƒšแƒ˜ แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒ; แƒ›แƒ” แƒ•แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘ SSD-แƒก, แƒ แƒแƒ’แƒแƒ แƒช แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ˜แƒก แƒ“แƒ˜แƒกแƒ™แƒก. แƒ›แƒ” แƒ’แƒแƒ›แƒแƒ•แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘ Debian 8-แƒก, แƒ แƒแƒ’แƒแƒ แƒช แƒฉแƒ”แƒ›แƒก แƒ›แƒ—แƒแƒ•แƒแƒ  แƒ“แƒ”แƒ•แƒ”แƒšแƒแƒžแƒ”แƒ  แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒแƒก, แƒ“แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ emacs, sudo, git แƒ“แƒ virtualbox แƒžแƒแƒ™แƒ”แƒขแƒ”แƒ‘แƒ˜แƒ—, แƒ“แƒแƒœแƒแƒ แƒฉแƒ”แƒœแƒ˜ แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒ“แƒแƒ˜แƒœแƒกแƒขแƒแƒšแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ GitHub-แƒ“แƒแƒœ แƒ“แƒ แƒกแƒฎแƒ•แƒ แƒฌแƒงแƒแƒ แƒแƒ”แƒ‘แƒ˜แƒ“แƒแƒœ แƒ’แƒแƒ“แƒ›แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ•แƒ˜แƒ—. แƒฉแƒ•แƒ”แƒœ แƒ“แƒแƒ•แƒแƒ˜แƒœแƒกแƒขแƒแƒšแƒ˜แƒ แƒ”แƒ‘แƒ— แƒแƒ› แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ”แƒ‘แƒก /usr/local/bin-แƒจแƒ˜, แƒ—แƒฃ แƒกแƒฎแƒ•แƒ แƒ แƒแƒ› แƒแƒ  แƒแƒ แƒ˜แƒก แƒ›แƒ˜แƒ—แƒ˜แƒ—แƒ”แƒ‘แƒฃแƒšแƒ˜. แฒ“แƒแƒ•แƒ˜แƒฌแƒงแƒแƒ—!

แƒกแƒแƒ›แƒฃแƒจแƒแƒ แƒ’แƒแƒ แƒ”แƒ›แƒแƒก แƒ›แƒแƒ›แƒ–แƒแƒ“แƒ”แƒ‘แƒ

Go-แƒก แƒ˜แƒœแƒกแƒขแƒแƒšแƒแƒชแƒ˜แƒ

แƒฉแƒ•แƒ”แƒœ แƒ›แƒ˜แƒ•แƒงแƒ•แƒ”แƒ‘แƒ˜แƒ— แƒ˜แƒœแƒกแƒขแƒ แƒฃแƒฅแƒชแƒ˜แƒแƒก แƒแƒคแƒ˜แƒชแƒ˜แƒแƒšแƒฃแƒ แƒ˜ แƒกแƒแƒ˜แƒขแƒ˜แƒ“แƒแƒœ:

$ curl -L0 https://dl.google.com/go/go1.13.5.linux-amd64.tar.gz -o go.tar.gz
$ sudo tar -C /usr/local -xzf go.tar.gz
$ echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.profile

แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒแƒœแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ:

$ mkdir -p ~/go/src/hello && cd ~/go/src/hello
$ echo 'package main

import "fmt"

func main() {
fmt.Printf("hello, worldn")
}' > hello.go
$ go build
$ ./hello
hello, world

แƒ›แƒ˜แƒ›แƒ“แƒ˜แƒœแƒแƒ แƒ”แƒแƒ‘แƒก faas-cli-แƒก แƒ˜แƒœแƒกแƒขแƒแƒšแƒแƒชแƒ˜แƒ

แƒฉแƒ•แƒ”แƒœ แƒ›แƒ˜แƒ•แƒงแƒ•แƒ”แƒ‘แƒ˜แƒ— แƒ˜แƒœแƒกแƒขแƒ แƒฃแƒฅแƒชแƒ˜แƒแƒก แƒแƒคแƒ˜แƒชแƒ˜แƒแƒšแƒฃแƒ แƒ˜ แƒกแƒแƒ˜แƒขแƒ˜แƒ“แƒแƒœ:

$ curl -sSL https://cli.openfaas.com | sudo -E sh
x86_64
Downloading package https://github.com/openfaas/faas-cli/releases/download/0.11.3/faas-cli as /tmp/faas-cli
Download complete.

Running with sufficient permissions to attempt to move faas-cli to /usr/local/bin
New version of faas-cli installed to /usr/local/bin
Creating alias 'faas' for 'faas-cli'.
  ___                   _____           ____
 / _  _ __   ___ _ __ |  ___|_ _  __ _/ ___|
| | | | '_  / _  '_ | |_ / _` |/ _` ___ 
| |_| | |_) |  __/ | | |  _| (_| | (_| |___) |
 ___/| .__/ ___|_| |_|_|  __,_|__,_|____/
      |_|

CLI:
 commit:  73004c23e5a4d3fdb7352f953247473477477a64
 version: 0.11.3

แƒ’แƒแƒ แƒ“แƒ แƒแƒ›แƒ˜แƒกแƒ, แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒฉแƒแƒ แƒ—แƒแƒ— bash-แƒ“แƒแƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒ:

faas-cli completion --shell bash | sudo tee /etc/bash_completion.d/faas-cli

Kubernetes-แƒ˜แƒก แƒ˜แƒœแƒกแƒขแƒแƒšแƒแƒชแƒ˜แƒ แƒ“แƒ แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ

แƒ’แƒแƒœแƒ•แƒ˜แƒ—แƒแƒ แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒกแƒแƒ™แƒ›แƒแƒ แƒ˜แƒกแƒ˜แƒ minikube, แƒแƒ›แƒ˜แƒขแƒแƒ› แƒ“แƒแƒแƒ˜แƒœแƒกแƒขแƒแƒšแƒ˜แƒ แƒ”แƒ— แƒ“แƒ kubelet /usr/local/bin-แƒจแƒ˜ แƒ“แƒ แƒ“แƒแƒแƒ˜แƒœแƒกแƒขแƒแƒšแƒ˜แƒ แƒ”แƒ— helm แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒกแƒแƒงแƒ”แƒœแƒ”แƒ‘แƒšแƒแƒ“:

$ curl https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 -o minikube && chmod +x minikube && sudo mv minikube /usr/local/bin/
$ curl https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl -o kubectl && chmod +x kubectl && sudo mv kubectl /usr/local/bin/
$ curl https://get.helm.sh/helm-v3.0.2-linux-amd64.tar.gz | tar -xzvf - linux-amd64/helm --strip-components=1; sudo mv helm /usr/local/bin

แƒ›แƒ˜แƒœแƒ˜แƒ™แƒฃแƒ‘แƒ˜แƒก แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒ:

$ minikube start
  minikube v1.6.2 on Debian 8.11
  Automatically selected the 'virtualbox' driver (alternates: [])
  Downloading VM boot image ...
    > minikube-v1.6.0.iso.sha256: 65 B / 65 B [--------------] 100.00% ? p/s 0s
    > minikube-v1.6.0.iso: 150.93 MiB / 150.93 MiB [-] 100.00% 5.67 MiB p/s 27s
  Creating virtualbox VM (CPUs=2, Memory=8192MB, Disk=20000MB) ...
  Preparing Kubernetes v1.17.0 on Docker '19.03.5' ...
  Downloading kubeadm v1.17.0
  Downloading kubelet v1.17.0
  Pulling images ...
  Launching Kubernetes ...  Waiting for cluster to come online ...
  Done! kubectl is now configured to use "minikube"

แƒฉแƒ•แƒ”แƒœ แƒจแƒ”แƒแƒ›แƒแƒฌแƒ›แƒแƒ—:

$ kubectl get pods --all-namespaces
NAMESPACE     NAME                               READY   STATUS    RESTARTS   AGE
kube-system   coredns-6955765f44-knlcb           1/1     Running   0          29m
kube-system   coredns-6955765f44-t9cpn           1/1     Running   0          29m
kube-system   etcd-minikube                      1/1     Running   0          28m
kube-system   kube-addon-manager-minikube        1/1     Running   0          28m
kube-system   kube-apiserver-minikube            1/1     Running   0          28m
kube-system   kube-controller-manager-minikube   1/1     Running   0          28m
kube-system   kube-proxy-hv2wc                   1/1     Running   0          29m
kube-system   kube-scheduler-minikube            1/1     Running   0          28m
kube-system   storage-provisioner                1/1     Running   1          29m

OpenFaaS-แƒ˜แƒก แƒ˜แƒœแƒกแƒขแƒแƒšแƒแƒชแƒ˜แƒ

แƒ“แƒ”แƒ•แƒ”แƒšแƒแƒžแƒ”แƒ แƒ”แƒ‘แƒ˜ แƒ’แƒ˜แƒ แƒฉแƒ”แƒ•แƒ”แƒœ แƒจแƒ”แƒฅแƒ›แƒœแƒแƒœ 2 แƒกแƒแƒฎแƒ”แƒšแƒ—แƒ แƒกแƒ˜แƒ•แƒ แƒชแƒ”, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ—แƒแƒœแƒแƒช แƒ˜แƒ›แƒฃแƒจแƒแƒแƒ—:

$ kubectl apply -f https://raw.githubusercontent.com/openfaas/faas-netes/master/namespaces.yml
namespace/openfaas created
namespace/openfaas-fn created

แƒ“แƒแƒแƒ›แƒแƒขแƒ”แƒ— แƒกแƒแƒชแƒแƒ•แƒ˜ แƒกแƒแƒญแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก:

$ helm repo add openfaas https://openfaas.github.io/faas-netes/
"openfaas" has been added to your repositories

แƒกแƒฅแƒ”แƒ›แƒแƒก แƒแƒฅแƒ•แƒก แƒ˜แƒœแƒกแƒขแƒแƒšแƒแƒชแƒ˜แƒแƒ›แƒ“แƒ” แƒžแƒแƒ แƒแƒšแƒ˜แƒก แƒ“แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒšแƒแƒ‘แƒ, แƒ›แƒแƒ“แƒ˜แƒ— แƒ’แƒแƒ›แƒแƒ•แƒ˜แƒงแƒ”แƒœแƒแƒ— แƒ“แƒ แƒจแƒ”แƒ•แƒ˜แƒœแƒแƒฎแƒแƒ— แƒฌแƒ•แƒ“แƒแƒ›แƒ˜แƒก แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜ k8s แƒกแƒแƒ˜แƒ“แƒฃแƒ›แƒšแƒแƒ“:

$ PASSWORD=verysecurerandompasswordstring
$ kubectl -n openfaas create secret generic basic-auth --from-literal=basic-auth-user=admin --from-literal=basic-auth-password="$PASSWORD"
secret/basic-auth created

แƒ›แƒแƒ“แƒ˜แƒ— แƒ’แƒแƒœแƒ•แƒแƒ—แƒแƒ•แƒกแƒแƒ—:

$ helm repo update
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "openfaas" chart repository
Update Complete.  Happy Helming!
$ helm upgrade openfaas --install openfaas/openfaas --namespace openfaas --set functionNamespace=openfaas-fn --set generateBasicAuth=false
Release "openfaas" does not exist. Installing it now.
NAME: openfaas
LAST DEPLOYED: Fri Dec 25 10:28:22 2019
NAMESPACE: openfaas
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
To verify that openfaas has started, run:

  kubectl -n openfaas get deployments -l "release=openfaas, app=openfaas"

แƒ’แƒแƒ แƒ™แƒ•แƒ”แƒฃแƒšแƒ˜ แƒžแƒ”แƒ แƒ˜แƒแƒ“แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’, แƒฉแƒ•แƒ”แƒœ แƒ•แƒแƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒ— แƒจแƒ”แƒ›แƒแƒ—แƒแƒ•แƒแƒ–แƒ”แƒ‘แƒฃแƒš แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒแƒก:

$ kubectl -n openfaas get deployments -l "release=openfaas, app=openfaas"
NAME                READY   UP-TO-DATE   AVAILABLE   AGE
alertmanager        1/1     1            1           114s
basic-auth-plugin   1/1     1            1           114s
faas-idler          1/1     1            1           114s
gateway             1/1     1            1           114s
nats                1/1     1            1           114s
prometheus          1/1     1            1           114s
queue-worker        1/1     1            1           114s

แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒแƒœแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ:

$ kubectl rollout status -n openfaas deploy/gateway
deployment "gateway" successfully rolled out
$ kubectl port-forward -n openfaas svc/gateway 8080:8080 &
[1] 6985
Forwarding from 127.0.0.1:8080 -> 8080
$ echo -n $PASSWORD | faas-cli login --username admin --password-stdin
Calling the OpenFaaS server to validate the credentials...
Handling connection for 8080
WARNING! Communication is not secure, please consider using HTTPS. Letsencrypt.org offers free SSL/TLS certificates.
credentials saved for admin http://127.0.0.1:8080
$ faas-cli list
Function                        Invocations     Replicas

Mongodb-แƒ˜แƒก แƒ˜แƒœแƒกแƒขแƒแƒšแƒแƒชแƒ˜แƒ

แƒฉแƒ•แƒ”แƒœ แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒก แƒ•แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ— แƒกแƒแƒญแƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—:

$ helm repo add stable https://kubernetes-charts.storage.googleapis.com/
"stable" has been added to your repositories
$ helm install stable/mongodb --generate-name
NAME: mongodb-1577466908
LAST DEPLOYED: Fri Dec 25 11:15:11 2019
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
** Please be patient while the chart is being deployed **

MongoDB can be accessed via port 27017 on the following DNS name from within your cluster:

    mongodb-1577466908.default.svc.cluster.local

To get the root password run:

    export MONGODB_ROOT_PASSWORD=$(kubectl get secret --namespace default mongodb-1577466908 -o jsonpath="{.data.mongodb-root-password}" | base64 --decode)

To connect to your database run the following command:

    kubectl run --namespace default mongodb-1577466908-client --rm --tty -i --restart='Never' --image bitnami/mongodb --command -- mongo admin --host mongodb-1577466908 --authenticationDatabase admin -u root -p $MONGODB_ROOT_PASSWORD

To connect to your database from outside the cluster execute the following commands:

    kubectl port-forward --namespace default svc/mongodb-1577466908 27017:27017 &
    mongo --host 127.0.0.1 --authenticationDatabase admin -p $MONGODB_ROOT_PASSWORD

แƒฉแƒ•แƒ”แƒœ แƒจแƒ”แƒแƒ›แƒแƒฌแƒ›แƒแƒ—:

kubectl run --namespace default mongodb-1577466908-client --rm --tty -i --restart='Never' --image bitnami/mongodb --command -- mongo admin --host mongodb-1577466908 --authenticationDatabase admin -u root -p $(kubectl get secret --namespace default mongodb-1577466908 -o jsonpath="{.data.mongodb-root-password}" | base64 --decode)
If you don't see a command prompt, try pressing enter.

> db.version();
4.0.14

แƒ“แƒแƒแƒญแƒ˜แƒ แƒ”แƒ— ctrl+D แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒ˜แƒ“แƒแƒœ แƒ’แƒแƒกแƒแƒกแƒ•แƒšแƒ”แƒšแƒแƒ“.

emacs-แƒ˜แƒก แƒ“แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ

แƒžแƒ แƒ˜แƒœแƒชแƒ˜แƒžแƒจแƒ˜, แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒฃแƒ™แƒ•แƒ” แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ˜แƒงแƒ แƒจแƒ”แƒกแƒแƒ‘แƒแƒ›แƒ˜แƒกแƒแƒ“ แƒ”แƒก แƒ›แƒฃแƒฎแƒšแƒ˜, แƒแƒ›แƒ˜แƒขแƒแƒ› แƒ“แƒ”แƒขแƒแƒšแƒ”แƒ‘แƒก แƒแƒ  แƒฉแƒแƒ•แƒฃแƒฆแƒ แƒ›แƒแƒ•แƒ“แƒ”แƒ‘แƒ˜.

แƒ—แƒแƒ›แƒแƒจแƒ˜แƒก แƒ“แƒแƒงแƒแƒคแƒ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ”แƒ‘แƒแƒ“

แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ—แƒแƒœ แƒฃแƒ แƒ—แƒ˜แƒ”แƒ แƒ—แƒฅแƒ›แƒ”แƒ“แƒ”แƒ‘แƒ แƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ“แƒ”แƒ‘แƒ http แƒžแƒ แƒแƒขแƒแƒ™แƒแƒšแƒ˜แƒก แƒ›แƒ”แƒจแƒ•แƒ”แƒแƒ‘แƒ˜แƒ—, แƒกแƒฎแƒ•แƒแƒ“แƒแƒกแƒฎแƒ•แƒ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ”แƒ‘แƒก แƒจแƒแƒ แƒ˜แƒก แƒแƒ•แƒ—แƒ”แƒœแƒขแƒ˜แƒคแƒ˜แƒ™แƒแƒชแƒ˜แƒ แƒกแƒ แƒฃแƒšแƒ“แƒ”แƒ‘แƒ JWT-แƒ˜แƒก แƒ›แƒ˜แƒ”แƒ . Mongodb แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒขแƒแƒ™แƒ”แƒœแƒ”แƒ‘แƒ˜แƒก, แƒแƒกแƒ”แƒ•แƒ” แƒ—แƒแƒ›แƒแƒจแƒ˜แƒก แƒ›แƒ“แƒ’แƒแƒ›แƒแƒ แƒ”แƒแƒ‘แƒ˜แƒก, แƒ›แƒแƒ—แƒแƒ›แƒแƒจแƒ˜แƒก แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒก, แƒงแƒ•แƒ”แƒšแƒ แƒ—แƒแƒ›แƒแƒจแƒ˜แƒก แƒกแƒ•แƒšแƒ˜แƒก แƒ—แƒแƒœแƒ›แƒ˜แƒ›แƒ“แƒ”แƒ•แƒ แƒแƒ‘แƒ˜แƒกแƒ แƒ“แƒ แƒกแƒฎแƒ•แƒ แƒ˜แƒœแƒคแƒแƒ แƒ›แƒแƒชแƒ˜แƒ˜แƒก แƒจแƒ”แƒกแƒแƒœแƒแƒฎแƒแƒ“. แƒ›แƒแƒ“แƒ˜แƒ— แƒฃแƒคแƒ แƒ แƒแƒฎแƒšแƒแƒก แƒ›แƒ˜แƒ•แƒฎแƒ”แƒ“แƒแƒ— แƒงแƒ•แƒ”แƒšแƒแƒ–แƒ” แƒกแƒแƒ˜แƒœแƒขแƒ”แƒ แƒ”แƒกแƒ แƒ›แƒแƒฎแƒแƒกแƒ˜แƒแƒ—แƒ”แƒ‘แƒšแƒ”แƒ‘แƒก.

แƒ แƒ”แƒ’แƒ˜แƒกแƒขแƒ แƒแƒชแƒ˜แƒ˜แƒก

แƒแƒ› แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ˜แƒก แƒจแƒ”แƒงแƒ•แƒแƒœแƒ แƒแƒ แƒ˜แƒก JSON แƒ—แƒแƒ›แƒแƒจแƒ˜แƒก แƒ›แƒ”แƒขแƒกแƒแƒฎแƒ”แƒšแƒ˜แƒ— แƒ“แƒ แƒžแƒแƒ แƒแƒšแƒ˜แƒ—. แƒแƒ› แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ˜แƒก แƒ’แƒแƒ›แƒแƒซแƒแƒฎแƒ”แƒ‘แƒ˜แƒกแƒแƒก แƒ›แƒแƒฌแƒ›แƒ“แƒ”แƒ‘แƒ, แƒ แƒแƒ› แƒ”แƒก แƒ›แƒ”แƒขแƒกแƒแƒฎแƒ”แƒšแƒ˜ แƒแƒ  แƒแƒ แƒ˜แƒก แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ‘แƒแƒ–แƒแƒจแƒ˜; แƒ—แƒฃ แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ แƒฌแƒแƒ แƒ›แƒแƒขแƒ”แƒ‘แƒฃแƒšแƒ˜แƒ, แƒแƒšแƒ˜แƒแƒกแƒ˜ แƒ“แƒ แƒžแƒแƒ แƒแƒšแƒ˜แƒก แƒฐแƒ”แƒจแƒ˜ แƒฉแƒแƒกแƒ›แƒฃแƒšแƒ˜แƒ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ‘แƒแƒ–แƒแƒจแƒ˜. แƒ—แƒแƒ›แƒแƒจแƒจแƒ˜ แƒแƒฅแƒขแƒ˜แƒฃแƒ แƒ˜ แƒ›แƒแƒœแƒแƒฌแƒ˜แƒšแƒ”แƒแƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒกแƒแƒญแƒ˜แƒ แƒแƒ แƒ แƒ”แƒ’แƒ˜แƒกแƒขแƒ แƒแƒชแƒ˜แƒ.

แƒจแƒ”แƒงแƒ•แƒแƒœแƒ˜แƒก

แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ˜แƒก แƒจแƒ”แƒงแƒ•แƒแƒœแƒ แƒแƒ แƒ˜แƒก JSON แƒ—แƒแƒ›แƒแƒจแƒ˜แƒก แƒ›แƒ”แƒขแƒกแƒแƒฎแƒ”แƒšแƒ˜แƒ—แƒ แƒ“แƒ แƒžแƒแƒ แƒแƒšแƒ˜แƒ—; แƒ—แƒฃ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ‘แƒแƒ–แƒแƒจแƒ˜ แƒแƒ แƒ˜แƒก แƒ›แƒ”แƒขแƒกแƒแƒฎแƒ”แƒšแƒ˜ แƒ“แƒ แƒžแƒแƒ แƒแƒšแƒ˜ แƒฌแƒแƒ แƒ›แƒแƒขแƒ”แƒ‘แƒ˜แƒ— แƒ“แƒแƒ“แƒแƒกแƒขแƒฃแƒ แƒ“แƒ”แƒ‘แƒ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ‘แƒแƒ–แƒแƒจแƒ˜ แƒแƒ“แƒ แƒ” แƒจแƒ”แƒœแƒแƒฎแƒฃแƒšแƒ—แƒแƒœ, แƒ‘แƒ แƒฃแƒœแƒ“แƒ”แƒ‘แƒ JWT, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒฃแƒœแƒ“แƒ แƒ’แƒแƒ“แƒแƒ”แƒชแƒ”แƒก แƒกแƒฎแƒ•แƒ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ”แƒ‘แƒก, แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒ˜แƒกแƒ˜แƒœแƒ˜ แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒฃแƒšแƒ˜แƒ. แƒ“แƒแƒฃแƒ แƒ”แƒ™แƒ. แƒกแƒฎแƒ•แƒแƒ“แƒแƒกแƒฎแƒ•แƒ แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ˜แƒก แƒฉแƒแƒœแƒแƒฌแƒ”แƒ แƒ”แƒ‘แƒ˜ แƒแƒกแƒ”แƒ•แƒ” แƒฉแƒแƒกแƒ›แƒฃแƒšแƒ˜แƒ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ‘แƒแƒ–แƒแƒจแƒ˜, แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“, แƒ‘แƒแƒšแƒ แƒจแƒ”แƒกแƒ•แƒšแƒ˜แƒก แƒ“แƒ แƒ แƒ“แƒ แƒ.แƒจ.

แƒ˜แƒฎแƒ˜แƒšแƒ”แƒ— แƒ—แƒแƒ›แƒแƒจแƒ”แƒ‘แƒ˜แƒก แƒกแƒ˜แƒ

แƒœแƒ”แƒ‘แƒ˜แƒกแƒ›แƒ˜แƒ”แƒ  แƒแƒ แƒแƒแƒ•แƒขแƒแƒ แƒ˜แƒ–แƒ”แƒ‘แƒฃแƒš แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ”แƒšแƒก แƒจแƒ”แƒฃแƒซแƒšแƒ˜แƒ แƒ›แƒแƒ˜แƒ—แƒฎแƒแƒ•แƒแƒก แƒงแƒ•แƒ”แƒšแƒ แƒ—แƒแƒ›แƒแƒจแƒ˜แƒก แƒกแƒ˜แƒ, แƒ’แƒแƒ แƒ“แƒ แƒแƒฅแƒขแƒ˜แƒฃแƒ แƒ˜ แƒ—แƒแƒ›แƒแƒจแƒ”แƒ‘แƒ˜แƒกแƒ. แƒแƒ•แƒขแƒแƒ แƒ˜แƒ–แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ”แƒšแƒ˜ แƒแƒกแƒ”แƒ•แƒ” แƒฎแƒ”แƒ“แƒแƒ•แƒก แƒแƒฅแƒขแƒ˜แƒฃแƒ แƒ˜ แƒ—แƒแƒ›แƒแƒจแƒ”แƒ‘แƒ˜แƒก แƒกแƒ˜แƒแƒก. แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ˜แƒก แƒจแƒ”แƒ“แƒ”แƒ’แƒ˜แƒ JSON, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒจแƒ”แƒ˜แƒชแƒแƒ•แƒก แƒ—แƒแƒ›แƒแƒจแƒ”แƒ‘แƒ˜แƒก แƒกแƒ˜แƒ”แƒ‘แƒก (แƒ—แƒแƒ›แƒแƒจแƒ˜แƒก ID, แƒแƒ“แƒแƒ›แƒ˜แƒแƒœแƒ˜แƒก แƒ›แƒ˜แƒ”แƒ  แƒฌแƒแƒกแƒแƒ™แƒ˜แƒ—แƒฎแƒ˜ แƒกแƒแƒฎแƒ”แƒšแƒ˜ แƒ“แƒ แƒ.แƒจ.).

แƒ—แƒแƒ›แƒแƒจแƒ˜แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒ

แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก แƒ›แƒฎแƒแƒšแƒแƒ“ แƒแƒ•แƒขแƒแƒ แƒ˜แƒ–แƒ”แƒ‘แƒฃแƒš แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒšแƒ”แƒ‘แƒ—แƒแƒœ; แƒจแƒ”แƒงแƒ•แƒแƒœแƒ˜แƒกแƒแƒก แƒ›แƒ˜แƒ˜แƒฆแƒ”แƒ‘แƒ แƒ›แƒแƒ—แƒแƒ›แƒแƒจแƒ”แƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒฅแƒกแƒ˜แƒ›แƒแƒšแƒฃแƒ แƒ˜ แƒ แƒแƒแƒ“แƒ”แƒœแƒแƒ‘แƒ, แƒแƒกแƒ”แƒ•แƒ” แƒ—แƒแƒ›แƒแƒจแƒ˜แƒก แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ”แƒ‘แƒ˜ (แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“, แƒ แƒแƒ›แƒ”แƒšแƒ˜ แƒกแƒ˜แƒ›แƒ‘แƒแƒšแƒแƒ”แƒ‘แƒ˜ แƒฃแƒœแƒ“แƒ แƒ’แƒแƒแƒฅแƒขแƒ˜แƒฃแƒ แƒ“แƒ”แƒก แƒแƒ› แƒ—แƒแƒ›แƒแƒจแƒจแƒ˜, แƒ›แƒแƒ—แƒแƒ›แƒแƒจแƒ”แƒ—แƒ แƒ›แƒแƒฅแƒกแƒ˜แƒ›แƒแƒšแƒฃแƒ แƒ˜ แƒ แƒแƒแƒ“แƒ”แƒœแƒแƒ‘แƒ แƒ“แƒ แƒ.แƒจ.). แƒ—แƒแƒ›แƒแƒจแƒ˜แƒก แƒชแƒแƒšแƒ™แƒ” แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ˜แƒ แƒจแƒ”แƒ”แƒ แƒ—แƒ”แƒ‘แƒ˜แƒก แƒžแƒแƒ แƒแƒšแƒ˜แƒก แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒ, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒแƒก แƒ’แƒแƒซแƒšแƒ”แƒ•แƒ— แƒจแƒ”แƒฅแƒ›แƒœแƒแƒ— แƒแƒ แƒ-แƒกแƒแƒฏแƒแƒ แƒ แƒ—แƒแƒ›แƒแƒจแƒ”แƒ‘แƒ˜. แƒœแƒแƒ’แƒฃแƒšแƒ˜แƒกแƒฎแƒ›แƒ”แƒ•แƒแƒ“, แƒ˜แƒฅแƒ›แƒœแƒ”แƒ‘แƒ แƒกแƒแƒฏแƒแƒ แƒ แƒ—แƒแƒ›แƒแƒจแƒ˜. แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ˜แƒก แƒจแƒ”แƒ“แƒ”แƒ’แƒ˜แƒ JSON, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒจแƒ”แƒ˜แƒชแƒแƒ•แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒ˜แƒก แƒฌแƒแƒ แƒ›แƒแƒขแƒ”แƒ‘แƒ˜แƒก แƒ•แƒ”แƒšแƒก, แƒ—แƒแƒ›แƒแƒจแƒ˜แƒก แƒฃแƒœแƒ˜แƒ™แƒแƒšแƒฃแƒ  แƒ˜แƒ“แƒ”แƒœแƒขแƒ˜แƒคแƒ˜แƒ™แƒแƒขแƒแƒ แƒก แƒ“แƒ แƒกแƒฎแƒ•แƒ แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ”แƒ‘แƒก.

แƒ—แƒแƒ›แƒแƒจแƒจแƒ˜ แƒ’แƒแƒฌแƒ”แƒ•แƒ แƒ˜แƒแƒœแƒ”แƒ‘แƒ

แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก แƒ›แƒฎแƒแƒšแƒแƒ“ แƒแƒ•แƒขแƒแƒ แƒ˜แƒ–แƒ”แƒ‘แƒฃแƒš แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒšแƒ”แƒ‘แƒ—แƒแƒœ, แƒจแƒ”แƒงแƒ•แƒแƒœแƒ˜แƒšแƒ˜แƒ แƒ—แƒแƒ›แƒแƒจแƒ˜แƒก ID แƒ“แƒ แƒ›แƒ˜แƒกแƒ˜ แƒžแƒแƒ แƒแƒšแƒ˜, แƒ—แƒฃ แƒ”แƒก แƒแƒ แƒ˜แƒก แƒแƒ แƒ แƒกแƒแƒฏแƒแƒ แƒ แƒ—แƒแƒ›แƒแƒจแƒ˜, แƒ’แƒแƒ›แƒแƒ›แƒแƒ•แƒแƒšแƒ˜ แƒแƒ แƒ˜แƒก JSON แƒ—แƒแƒ›แƒแƒจแƒ˜แƒก แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ”แƒ‘แƒ˜แƒ—. แƒแƒ•แƒขแƒแƒ แƒ˜แƒ–แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ”แƒšแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒจแƒ”แƒฃแƒ”แƒ แƒ—แƒ“แƒ แƒ—แƒแƒ›แƒแƒจแƒก, แƒ˜แƒกแƒ”แƒ•แƒ” แƒ แƒแƒ’แƒแƒ แƒช แƒ—แƒแƒ›แƒแƒจแƒ˜แƒก แƒจแƒ”แƒ›แƒฅแƒ›แƒœแƒ”แƒšแƒก, แƒจแƒ”แƒ›แƒ“แƒ’แƒแƒ›แƒจแƒ˜ แƒ—แƒแƒ›แƒแƒจแƒ˜แƒก แƒ›แƒแƒœแƒแƒฌแƒ˜แƒšแƒ”แƒ”แƒ‘แƒก แƒฃแƒฌแƒแƒ“แƒ”แƒ‘แƒ”แƒœ.

แƒ—แƒแƒ›แƒแƒจแƒ˜แƒก แƒ›แƒแƒ•แƒšแƒ”แƒœแƒ”แƒ‘แƒ˜แƒก แƒœแƒแƒฎแƒ•แƒ

แƒœแƒ”แƒ‘แƒ˜แƒกแƒ›แƒ˜แƒ”แƒ  แƒแƒ แƒแƒแƒ•แƒขแƒแƒ แƒ˜แƒ–แƒ”แƒ‘แƒฃแƒš แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ”แƒšแƒก แƒจแƒ”แƒฃแƒซแƒšแƒ˜แƒ แƒ›แƒแƒ˜แƒ—แƒฎแƒแƒ•แƒแƒก แƒ›แƒแƒ•แƒšแƒ”แƒœแƒ”แƒ‘แƒ˜แƒก แƒกแƒ˜แƒ แƒแƒ แƒแƒแƒฅแƒขแƒ˜แƒฃแƒ แƒ˜ แƒ—แƒแƒ›แƒแƒจแƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒฎแƒแƒšแƒ แƒแƒ•แƒขแƒแƒ แƒ˜แƒ–แƒ”แƒ‘แƒฃแƒš แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ”แƒšแƒก แƒจแƒ”แƒฃแƒซแƒšแƒ˜แƒ แƒ›แƒ˜แƒ˜แƒฆแƒแƒก แƒ›แƒแƒ•แƒšแƒ”แƒœแƒ”แƒ‘แƒ˜แƒก แƒกแƒ˜แƒ แƒœแƒ”แƒ‘แƒ˜แƒกแƒ›แƒ˜แƒ”แƒ แƒ˜ แƒแƒฅแƒขแƒ˜แƒฃแƒ แƒ˜ แƒ—แƒแƒ›แƒแƒจแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก. แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ˜แƒ—แƒ˜ แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ˜ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ˜แƒงแƒแƒก แƒ›แƒแƒ•แƒšแƒ”แƒœแƒ˜แƒก แƒœแƒแƒ›แƒ”แƒ แƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ”แƒšแƒก แƒฃแƒ™แƒ•แƒ” แƒแƒฅแƒ•แƒก. แƒแƒ› แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜, แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ˜แƒก แƒ›แƒแƒ•แƒšแƒ”แƒœแƒ”แƒ‘แƒ˜, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒ›แƒแƒ’แƒ•แƒ˜แƒแƒœแƒ”แƒ‘แƒ˜แƒ— แƒ›แƒแƒฎแƒ“แƒ, แƒ“แƒแƒ‘แƒ แƒฃแƒœแƒ“แƒ”แƒ‘แƒ แƒกแƒ˜แƒแƒจแƒ˜. แƒแƒ› แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ˜แƒก แƒžแƒ”แƒ แƒ˜แƒแƒ“แƒฃแƒšแƒ˜ แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒ˜แƒ—, แƒแƒ•แƒขแƒแƒ แƒ˜แƒ–แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ”แƒšแƒ˜ แƒฃแƒงแƒฃแƒ แƒ”แƒ‘แƒก แƒ แƒ แƒฎแƒ“แƒ”แƒ‘แƒ แƒ—แƒแƒ›แƒแƒจแƒจแƒ˜. แƒ”แƒก แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ แƒแƒกแƒ”แƒ•แƒ” แƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒก แƒ›แƒแƒฅแƒ›แƒ”แƒ“แƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒแƒก, แƒ แƒแƒ›แƒ”แƒšแƒ–แƒ”แƒช แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ”แƒšแƒก แƒจแƒ”แƒฃแƒซแƒšแƒ˜แƒ แƒฃแƒžแƒแƒกแƒฃแƒฎแƒแƒก แƒ—แƒแƒ›แƒแƒจแƒ˜แƒก แƒ›แƒแƒ•แƒšแƒ”แƒœแƒ˜แƒก แƒ’แƒแƒ’แƒ–แƒแƒ•แƒœแƒ˜แƒก แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—.

แƒ—แƒแƒ›แƒแƒจแƒ˜แƒก แƒฆแƒแƒœแƒ˜แƒกแƒซแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ’แƒ–แƒแƒ•แƒœแƒ

แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ—แƒแƒ›แƒแƒจแƒ˜แƒก แƒ›แƒแƒœแƒแƒฌแƒ˜แƒšแƒ”แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก: แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ แƒ—แƒแƒ›แƒแƒจแƒ˜แƒก แƒ“แƒแƒฌแƒงแƒ”แƒ‘แƒ, แƒœแƒแƒ‘แƒ˜แƒฏแƒ˜แƒก แƒ’แƒแƒ“แƒแƒ“แƒ’แƒ›แƒ, แƒฎแƒ›แƒ˜แƒก แƒ›แƒ˜แƒชแƒ”แƒ›แƒ, แƒขแƒ”แƒฅแƒกแƒขแƒฃแƒ แƒ˜ แƒจแƒ”แƒขแƒงแƒแƒ‘แƒ˜แƒœแƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒฌแƒ”แƒ แƒ, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒœแƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒ˜แƒ แƒ—แƒแƒ›แƒแƒจแƒ˜แƒก แƒ›แƒแƒ•แƒšแƒ”แƒœแƒ”แƒ‘แƒ˜แƒก แƒกแƒ˜แƒแƒจแƒ˜ แƒ“แƒ แƒ.แƒจ.
แƒแƒ•แƒขแƒแƒ แƒ˜แƒ–แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ”แƒšแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ›แƒแƒช แƒจแƒ”แƒฅแƒ›แƒœแƒ แƒ—แƒแƒ›แƒแƒจแƒ˜, แƒ˜แƒฌแƒงแƒ”แƒ‘แƒก แƒ แƒแƒšแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒœแƒแƒฌแƒ˜แƒšแƒ”แƒ‘แƒแƒก แƒ—แƒแƒ›แƒแƒจแƒ˜แƒก แƒงแƒ•แƒ”แƒšแƒ แƒ›แƒแƒœแƒแƒฌแƒ˜แƒšแƒ”แƒ–แƒ”, แƒ›แƒแƒ— แƒจแƒแƒ แƒ˜แƒก แƒ—แƒแƒ•แƒแƒ“แƒแƒช, แƒ›แƒแƒ— แƒฃแƒœแƒ“แƒ แƒ“แƒแƒแƒ“แƒแƒกแƒขแƒฃแƒ แƒแƒœ แƒ—แƒแƒ•แƒ˜แƒแƒœแƒ—แƒ˜ แƒ แƒแƒšแƒ˜ แƒ˜แƒ›แƒแƒ•แƒ” แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—. แƒงแƒ•แƒ”แƒšแƒ แƒ แƒแƒšแƒ˜แƒก แƒ“แƒแƒ“แƒแƒกแƒขแƒฃแƒ แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’, แƒ—แƒแƒ›แƒแƒจแƒ˜ แƒแƒ•แƒขแƒแƒ›แƒแƒขแƒฃแƒ แƒแƒ“ แƒ’แƒแƒ“แƒแƒ“แƒ˜แƒก แƒฆแƒแƒ›แƒ˜แƒก แƒ แƒ”แƒŸแƒ˜แƒ›แƒจแƒ˜.

แƒ—แƒแƒ›แƒแƒจแƒ˜แƒก แƒกแƒขแƒแƒขแƒ˜แƒกแƒขแƒ˜แƒ™แƒ

แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ—แƒแƒ›แƒแƒจแƒ˜แƒก แƒ›แƒแƒœแƒแƒฌแƒ˜แƒšแƒ”แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก; แƒ˜แƒก แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒก แƒ—แƒแƒ›แƒแƒจแƒ˜แƒก แƒ›แƒ“แƒ’แƒแƒ›แƒแƒ แƒ”แƒแƒ‘แƒแƒก, แƒ›แƒแƒ—แƒแƒ›แƒแƒจแƒ”แƒ—แƒ แƒกแƒ˜แƒแƒก แƒ“แƒ แƒ แƒแƒแƒ“แƒ”แƒœแƒแƒ‘แƒแƒก (แƒ›แƒ”แƒขแƒกแƒแƒฎแƒ”แƒšแƒ”แƒ‘แƒก), แƒ แƒแƒšแƒ”แƒ‘แƒก แƒ“แƒ แƒ›แƒแƒ— แƒกแƒขแƒแƒขแƒฃแƒกแƒก (แƒ’แƒแƒ“แƒแƒแƒ“แƒ’แƒ˜แƒšแƒ”แƒ‘แƒ แƒ—แƒฃ แƒแƒ แƒ), แƒแƒกแƒ”แƒ•แƒ” แƒกแƒฎแƒ•แƒ แƒ˜แƒœแƒคแƒแƒ แƒ›แƒแƒชแƒ˜แƒแƒก. แƒ แƒแƒ’แƒแƒ แƒช แƒฌแƒ˜แƒœแƒ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ˜แƒ—, แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ—แƒแƒ›แƒแƒจแƒ˜แƒก แƒ›แƒแƒœแƒแƒฌแƒ˜แƒšแƒ”แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก.

แƒžแƒ”แƒ แƒ˜แƒแƒ“แƒฃแƒšแƒแƒ“ แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜

แƒ—แƒฃ แƒ—แƒแƒ›แƒแƒจแƒ˜ แƒแƒ  แƒแƒ แƒ˜แƒก แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ’แƒแƒ แƒ™แƒ•แƒ”แƒฃแƒšแƒ˜ แƒ“แƒ แƒแƒ˜แƒก แƒ’แƒแƒœแƒ›แƒแƒ•แƒšแƒแƒ‘แƒแƒจแƒ˜ แƒ—แƒแƒ›แƒแƒจแƒ˜แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒ˜แƒกแƒแƒก แƒ›แƒ˜แƒ—แƒ˜แƒ—แƒ”แƒ‘แƒฃแƒšแƒ˜, แƒ˜แƒก แƒแƒ•แƒขแƒแƒ›แƒแƒขแƒฃแƒ แƒแƒ“ แƒฌแƒแƒ˜แƒจแƒšแƒ”แƒ‘แƒ แƒแƒฅแƒขแƒ˜แƒฃแƒ แƒ˜ แƒ—แƒแƒ›แƒแƒจแƒ”แƒ‘แƒ˜แƒก แƒกแƒ˜แƒ˜แƒ“แƒแƒœ แƒฌแƒ›แƒ˜แƒœแƒ“แƒ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—.

แƒ™แƒ˜แƒ“แƒ”แƒ• แƒ”แƒ แƒ—แƒ˜ แƒžแƒ”แƒ แƒ˜แƒแƒ“แƒฃแƒšแƒ˜ แƒ“แƒแƒ•แƒแƒšแƒ”แƒ‘แƒ แƒแƒ แƒ˜แƒก แƒ—แƒแƒ›แƒแƒจแƒ˜แƒก แƒ แƒ”แƒŸแƒ˜แƒ›แƒ˜แƒก แƒ˜แƒซแƒฃแƒšแƒ”แƒ‘แƒ˜แƒ—แƒ˜ แƒ’แƒแƒ“แƒแƒ แƒ—แƒ•แƒ แƒฆแƒแƒ›แƒ˜แƒ“แƒแƒœ แƒ“แƒฆแƒ”แƒ–แƒ” แƒ“แƒ แƒฃแƒ™แƒแƒœ แƒ˜แƒ› แƒ—แƒแƒ›แƒแƒจแƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒจแƒ˜แƒช แƒ”แƒก แƒแƒ  แƒ›แƒแƒ›แƒฎแƒ“แƒแƒ แƒ แƒ›แƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒ˜แƒก แƒ“แƒ แƒแƒก (แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“, แƒ›แƒแƒ—แƒแƒ›แƒแƒจแƒ”แƒก, แƒ แƒแƒ›แƒ”แƒšแƒกแƒแƒช แƒฃแƒœแƒ“แƒ แƒ›แƒแƒ”แƒฎแƒ“แƒ˜แƒœแƒ แƒ แƒ”แƒแƒ’แƒ˜แƒ แƒ”แƒ‘แƒ แƒ—แƒแƒ›แƒแƒจแƒ˜แƒก แƒ›แƒแƒ•แƒšแƒ”แƒœแƒแƒ–แƒ”, แƒ แƒแƒขแƒแƒ›แƒฆแƒแƒช แƒแƒ  แƒ’แƒแƒฃแƒ’แƒ–แƒแƒ•แƒœแƒ แƒ’แƒแƒ›แƒแƒกแƒแƒ•แƒแƒšแƒ˜. ).

แƒแƒœแƒแƒœแƒกแƒ˜

  • แƒจแƒ”แƒกแƒแƒ•แƒแƒšแƒ˜
  • แƒ’แƒแƒœแƒ•แƒ˜แƒ—แƒแƒ แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ แƒ”แƒ›แƒแƒก แƒ“แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ, แƒแƒ›แƒแƒชแƒแƒœแƒ˜แƒก แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ”แƒ‘แƒแƒ“ แƒ“แƒแƒงแƒแƒคแƒ
  • Backend แƒกแƒแƒ›แƒฃแƒจแƒแƒ
  • แƒคแƒ แƒแƒœแƒขแƒ”แƒœแƒ“แƒ˜แƒก แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ
  • CICD-แƒ˜แƒก แƒ“แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ, แƒขแƒ”แƒกแƒขแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒแƒ แƒ’แƒแƒœแƒ˜แƒ–แƒ”แƒ‘แƒ
  • แƒ“แƒแƒ˜แƒฌแƒงแƒ”แƒ— แƒกแƒแƒชแƒ“แƒ”แƒšแƒ˜ แƒ—แƒแƒ›แƒแƒจแƒ˜แƒก แƒกแƒ”แƒกแƒ˜แƒ
  • แƒจแƒ”แƒ“แƒ”แƒ’แƒ”แƒ‘แƒ˜

แƒฌแƒงแƒแƒ แƒ: www.habr.com

แƒแƒฎแƒแƒšแƒ˜ แƒ™แƒแƒ›แƒ”แƒœแƒขแƒแƒ แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ