"เดชเตเดคเดฟเดฏ เด‡เดคเดฟเดนเดพเดธเด™เตเด™เตพ". เดžเด™เตเด™เตพ เด†เดจเดฏเต† เดญเดพเด—เด™เตเด™เดณเดพเดฏเดฟ เดคเดฟเดจเตเดจเตเดจเตเดจเต

"เดชเตเดคเดฟเดฏ เด‡เดคเดฟเดนเดพเดธเด™เตเด™เตพ". เดžเด™เตเด™เตพ เด†เดจเดฏเต† เดญเดพเด—เด™เตเด™เดณเดพเดฏเดฟ เดคเดฟเดจเตเดจเตเดจเตเดจเต

เดˆ เดฒเต‡เด–เดจเดคเตเดคเดฟเตฝ, "Bylina" เดŽเดจเตเดจ เด—เต†เดฏเดฟเด‚ เดตเดฟเด•เดธเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เด’เดฐเต เดชเตเดฐเดตเตผเดคเตเดคเดจ เด…เดจเตเดคเดฐเต€เด•เตเดทเด‚ เดžเดพเตป เดธเดœเตเดœเต€เด•เดฐเดฟเด•เตเด•เตเด•เดฏเตเด‚ เด—เต†เดฏเดฟเด‚ เดคเดจเตเดจเต† OpenFaaS-เตฝ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเตป เด…เดจเตเดฏเต‹เดœเตเดฏเดฎเดพเดฏ เดญเดพเด—เด™เตเด™เดณเดพเดฏเดฟ เดตเดฟเดญเดœเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเด‚. เดŽเดฒเตเดฒเดพ เด•เตƒเดคเตเดฐเดฟเดฎเดคเตเดตเด™เตเด™เดณเตเด‚ Linux, Kubernetes ะฑัƒะดัƒ ั€ะฐะทะฒะพั€ะฐั‡ะธะฒะฐั‚ัŒ ะฒ minikube ั ะธัะฟะพะปัŒะทะพะฒะฐะฝะธะตะผ VirtualBox. ะ’ ะผะพะตะน ั€ะฐะฑะพั‡ะตะน ะผะฐัˆะธะฝะต 2 ะฟั€ะพั†ะตััะพั€ะฝั‹ั… ัะดั€ะฐ ะธ 12ะณะฑ ะพะฟะตั€ะฐั‚ะธะฒะฝะพะน ะฟะฐะผัั‚ะธ, ะฒ ะบะฐั‡ะตัั‚ะฒะต ัะธัั‚ะตะผะฝะพะณะพ ะดะธัะบะฐ ั ะฟั€ะธะผะตะฝััŽ 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

เด•เต‚เดŸเดพเดคเต†, เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดฌเดพเดทเต เดชเต‚เตผเดคเตเดคเดฟเดฏเดพเด•เตเด•เตฝ เดชเตเดฐเดตเตผเดคเตเดคเดจเด•เตเดทเดฎเดฎเดพเด•เตเด•เดพเด‚:

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

เด•เตเดฌเตผเดจเต†เดฑเตเดฑเดฟเตปเตเดฑเต† เด‡เตปเดธเตเดฑเตเดฑเดพเดณเต‡เดทเดจเตเด‚ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเดจเตเด‚

เดตเดฟเด•เดธเดจเดคเตเดคเดฟเดจเต, เดฎเดฟเดจเดฟเด•เตเดฏเต‚เดฌเต เดฎเดคเดฟ, เด…เดคเต เด‡เตปเดธเตเดฑเตเดฑเดพเตพ เดšเต†เดฏเตเดคเต /usr/local/bin-เตฝ kubelet, เด•เต‚เดŸเดพเดคเต† เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเด•เตพ เด‡เตปเดธเตเดฑเตเดฑเดพเตพ เดšเต†เดฏเตเดฏเดพเตป เดนเต†เตฝเด‚ เด‡เตปเดธเตเดฑเตเดฑเดพเตพ เดšเต†เดฏเตเดฏเตเด•:

$ 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 เด†เดฃเต เดซเด‚เด—เตโ€Œเดทเตปเตเดฑเต† เดซเดฒเด‚.

เด—เต†เดฏเดฟเด‚ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตฝ

เด…เด‚เด—เต€เด•เตƒเดค เด‰เดชเดฏเต‹เด•เตเดคเดพเด•เตเด•เดณเตเดฎเดพเดฏเดฟ เดฎเดพเดคเตเดฐเดฎเต‡ เดซเด‚เด—เตเดทเตป เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เต‚; เด‡เตปเดชเตเดŸเตเดŸเดฟเดฒเตเด‚ เด—เต†เดฏเดฟเด‚ เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเดฑเตเด•เดณเดฟเดฒเตเด‚ เดชเดฐเดฎเดพเดตเดงเดฟ เด•เดณเดฟเด•เตเด•เดพเดฐเต† เดธเตเดตเต€เด•เดฐเดฟเด•เตเด•เตเด‚ (เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เดˆ เด—เต†เดฏเดฟเดฎเดฟเตฝ เดเดคเต เดชเตเดฐเดคเต€เด•เด™เตเด™เตพ เดธเดœเต€เดตเดฎเดพเด•เตเด•เดฃเด‚, เดชเดฐเดฎเดพเดตเดงเดฟ เด•เดณเดฟเด•เตเด•เดพเตผ เดฎเตเดคเดฒเดพเดฏเดต). เดšเต‡เดฐเตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เด’เดฐเต เดชเดพเดธเตโ€Œเดตเต‡เดกเดฟเตปเตเดฑเต† เดธเดพเดจเตเดจเดฟเดงเตเดฏเดฎเดพเดฃเต เด—เต†เดฏเดฟเดฎเดฟเตปเตเดฑเต† เด’เดฐเต เดชเตเดฐเดคเตเดฏเต‡เด• เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเตผ, เด‡เดคเต เดชเตŠเดคเตเดฎเดฒเตเดฒเดพเดคเตเดค เด—เต†เดฏเดฟเดฎเตเด•เตพ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เดพเตป เดจเดฟเด™เตเด™เดณเต† เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดจเตเดจเต. เดธเตเดฅเดฟเดฐเดธเตเดฅเดฟเดคเดฟเดฏเดพเดฏเดฟ, เด’เดฐเต เดชเตŠเดคเต เด—เต†เดฏเดฟเด‚ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เดชเตเดชเต†เดŸเตเดจเตเดจเต. เดชเตเดฐเดตเตผเดคเตเดคเดจเดคเตเดคเดฟเตปเตเดฑเต† เดซเดฒเด‚ JSON เด†เดฃเต, เด…เดคเดฟเตฝ เด’เดฐเต เดธเตƒเดทเตโ€ŒเดŸเดฟ เดตเดฟเดœเดฏ เดซเต€เตฝเดกเตเด‚ เด’เดฐเต เด…เดฆเตเดตเดฟเดคเต€เดฏ เด—เต†เดฏเดฟเด‚ เดเดกเตปเตเดฑเดฟเดซเดฏเดฑเตเด‚ เดฎเดฑเตเดฑเต เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเดฑเตเด•เดณเตเด‚ เด…เดŸเด™เตเด™เดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต.

เด—เต†เดฏเดฟเดฎเดฟเตฝ เดšเต‡เดฐเตเดจเตเดจเต

เด…เด‚เด—เต€เด•เตƒเดค เด‰เดชเดฏเต‹เด•เตเดคเดพเด•เตเด•เดณเตเดฎเดพเดฏเดฟ เดฎเดพเดคเตเดฐเดฎเต‡ เดซเด‚เด—เตโ€Œเดทเตป เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เต‚, เด‡เตปเดชเตเดŸเตเดŸเต เด—เต†เดฏเดฟเด‚ เดเดกเดฟเดฏเตเด‚ เด…เดคเดฟเตปเตเดฑเต† เดชเดพเดธเตโ€Œเดตเต‡เดกเตเด‚ เด†เดฃเต, เด‡เดคเตŠเดฐเต เดจเต‹เตบ-เดชเดฌเตเดฒเดฟเด•เต เด—เต†เดฏเดฟเดฎเดพเดฃเต†เด™เตเด•เดฟเตฝ, เด—เต†เดฏเดฟเด‚ เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเดฑเตเด•เดณเตเดณเตเดณ เด”เดŸเตเดŸเตโ€ŒเดชเตเดŸเตเดŸเต JSON เด†เดฃเต. เด—เต†เดฏเดฟเดฎเดฟเตฝ เดšเต‡เตผเดจเตเดจ เด…เด‚เด—เต€เด•เตƒเดค เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเดฟเดจเต†เดฏเตเด‚ เด—เต†เดฏเดฟเดฎเดฟเตปเตเดฑเต† เดธเตเดฐเดทเตเดŸเดพเดตเดฟเดจเต†เดฏเตเด‚ เด‡เดจเดฟ เดฎเตเดคเตฝ เด—เต†เดฏเดฟเด‚ เดชเด™เตเด•เดพเดณเดฟเด•เตพ เดŽเดจเตเดจเต เดตเดฟเดณเดฟเด•เตเด•เตเดจเตเดจเต.

เด—เต†เดฏเดฟเด‚ เด‡เดตเตปเตเดฑเตเด•เตพ เด•เดพเดฃเตเดจเตเดจเต

เด…เด‚เด—เต€เด•เตƒเดคเดฎเดฒเตเดฒเดพเดคเตเดค เดเดคเตŠเดฐเต เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเดฟเดจเตเด‚ เดจเดฟเดทเตโ€Œเด•เตเดฐเดฟเดฏ เด—เต†เดฏเดฟเดฎเตเด•เตพเด•เตเด•เดพเดฏเดฟ เด‡เดตเตปเตเดฑเตเด•เดณเตเดŸเต† เด’เดฐเต เดฒเดฟเดธเตเดฑเตเดฑเต เด…เดญเตเดฏเตผเดคเตเดฅเดฟเด•เตเด•เดพเด‚, เด•เต‚เดŸเดพเดคเต† เด…เด‚เด—เต€เด•เตƒเดค เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเดฟเดจเต เดธเดœเต€เดตเดฎเดพเดฏ เดเดคเตŠเดฐเต เด—เต†เดฏเดฟเดฎเดฟเดจเตเด‚ เด‡เดตเตปเตเดฑเตเด•เดณเตเดŸเต† เด’เดฐเต เดฒเดฟเดธเตเดฑเตเดฑเต เดฒเดญเดฟเด•เตเด•เตเด‚. เดซเด‚เด—เตโ€Œเดทเดจเดฟเดฒเต‡เด•เตเด•เตเดณเตเดณ เด’เดฐเต เด…เดงเดฟเด• เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเตผ เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเดฟเดจเต เด‡เดคเดฟเดจเด•เด‚ เด‰เดณเตเดณ เด‡เดตเตปเตเดฑเต เดจเดฎเตเดชเดฑเดพเดฏเดฟเดฐเดฟเด•เตเด•เดพเด‚. เดˆ เดธเดพเดนเดšเดฐเตเดฏเดคเตเดคเดฟเตฝ, เดชเดฟเดจเตเดจเต€เดŸเต เดธเด‚เดญเดตเดฟเดšเตเดš เดธเด‚เดญเดตเด™เตเด™เตพ เดฎเดพเดคเตเดฐเดฎเต‡ เดฒเดฟเดธเตเดฑเตเดฑเดฟเตฝ เดคเดฟเดฐเดฟเด•เต† เดจเตฝเด•เต‚. เด†เดจเตเด•เดพเดฒเดฟเด•เดฎเดพเดฏเดฟ เดˆ เดซเด‚เด—เตเดทเตป เดธเดฎเดพเดฐเด‚เดญเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดฒเต‚เดŸเต†, เด’เดฐเต เด…เด‚เด—เต€เด•เตƒเดค เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเต เด—เต†เดฏเดฟเดฎเดฟเตฝ เดŽเดจเตเดคเดพเดฃเต เดธเด‚เดญเดตเดฟเด•เตเด•เตเดจเตเดจเดคเต†เดจเตเดจเต เดจเดฟเดฐเต€เด•เตเดทเดฟเด•เตเด•เตเดจเตเดจเต. เด—เต†เดฏเดฟเดฎเดฟเตปเตเดฑเต† เด‡เดตเตปเตเดฑเต เดกเดฟเดธเตโ€Œเดชเดพเดšเตเดšเต เดซเด‚เด—เตโ€Œเดทเตป เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเดฟเดจเต เดชเตเดฐเดคเดฟเด•เดฐเดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเดจเตเดจ เด’เดฐเต เดชเตเดฐเดตเตผเดคเตเดคเดจ เด…เดญเตเดฏเตผเดคเตเดฅเดจเดฏเตเด‚ เดˆ เดซเด‚เด—เตโ€Œเดทเตป เดจเตฝเด•เตเดจเตเดจเต.

เด’เดฐเต เด—เต†เดฏเดฟเด‚ เด‡เดตเตปเตเดฑเต เด…เดฏเดฏเตเด•เตเด•เตเดจเตเดจเต

เด—เต†เดฏเดฟเด‚ เดชเด™เตเด•เต†เดŸเตเด•เตเด•เตเดจเตเดจเดตเตผเด•เตเด•เต เดฎเดพเดคเตเดฐเดฎเต‡ เดซเด‚เด—เตเดทเตป เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เต‚: เด—เต†เดฏเดฟเด‚ เด†เดฐเด‚เดญเดฟเด•เตเด•เดพเดจเตเด‚ เด’เดฐเต เดจเต€เด•เตเด•เด‚ เดจเดŸเดคเตเดคเดพเดจเตเด‚ เดตเต‹เดŸเตเดŸเตเดšเต†เดฏเตเดฏเดพเดจเตเด‚ เด—เต†เดฏเดฟเด‚ เด‡เดตเตปเตเดฑเตเด•เดณเตเดŸเต† เดชเดŸเตเดŸเดฟเด•เดฏเดฟเตฝ เดชเตเดฐเดฆเตผเดถเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจ เด’เดฐเต เดตเดพเดšเด• เดธเดจเตเดฆเต‡เดถเด‚ เดŽเดดเตเดคเดพเดจเตเด‚ เด•เดดเดฟเดฏเตเด‚.
เด—เต†เดฏเดฟเด‚ เดธเตƒเดทเตโ€ŒเดŸเดฟเดšเตเดš เด…เด‚เด—เต€เด•เตƒเดค เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเต เดคเด™เตเด™เตพ เด‰เตพเดชเตเดชเต†เดŸเต† เด—เต†เดฏเดฟเดฎเดฟเดฒเต† เดŽเดฒเตเดฒเดพ เดชเด™เตเด•เดพเดณเดฟเด•เตพเด•เตเด•เตเด‚ เดฑเต‹เดณเตเด•เตพ เดตเดฟเดคเดฐเดฃเด‚ เดšเต†เดฏเตเดฏเดพเตป เดคเตเดŸเด™เตเด™เตเดจเตเดจเต, เด…เดคเต‡ เดซเด‚เด—เตโ€Œเดทเตป เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เด…เดตเตผ เด…เดตเดฐเตเดŸเต† เดฑเต‹เตพ เดธเตเดฅเดฟเดฐเต€เด•เดฐเดฟเด•เตเด•เดฃเด‚. เดŽเดฒเตเดฒเดพ เดฑเต‹เดณเตเด•เดณเตเด‚ เดธเตเดฅเดฟเดฐเต€เด•เดฐเดฟเดšเตเดšเตเด•เดดเดฟเดžเตเดžเดพเตฝ, เด—เต†เดฏเดฟเด‚ เดฏเดพเดจเตเดคเตเดฐเดฟเด•เดฎเดพเดฏเดฟ เดฐเดพเดคเตเดฐเดฟ เดฎเต‹เดกเดฟเดฒเต‡เด•เตเด•เต เดฎเดพเดฑเตเดจเตเดจเต.

เด—เต†เดฏเดฟเด‚ เดธเตเดฅเดฟเดคเดฟเดตเดฟเดตเดฐเด•เตเด•เดฃเด•เตเด•เตเด•เตพ

เด—เต†เดฏเดฟเด‚ เดชเด™เตเด•เต†เดŸเตเด•เตเด•เตเดจเตเดจเดตเตผเด•เตเด•เดพเดฏเดฟ เดฎเดพเดคเตเดฐเด‚ เดซเด‚เด—เตเดทเตป เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเต, เด‡เดคเต เด—เต†เดฏเดฟเดฎเดฟเตปเตเดฑเต† เด…เดตเดธเตเดฅ, เด•เดณเดฟเด•เตเด•เดพเดฐเตเดŸเต† เดฒเดฟเดธเตเดฑเตเดฑเตเด‚ เดŽเดฃเตเดฃเดตเตเด‚ (เดตเดฟเดณเดฟเดชเตเดชเต‡เดฐเตเด•เตพ), เดฑเต‹เดณเตเด•เดณเตเด‚ เด…เดตเดฐเตเดŸเต† เดจเดฟเดฒเดฏเตเด‚ (เดจเต€เด•เตเด•เด‚ เดจเดŸเดคเตเดคเดฟเดฏเต‹ เด…เดฒเตเดฒเดฏเต‹) เดฎเดฑเตเดฑเต เดตเดฟเดตเดฐเด™เตเด™เดณเตเด‚ เด•เดพเดฃเดฟเด•เตเด•เตเดจเตเดจเต. เดฎเตเดฎเตเดชเดคเตเดคเต† เดซเด‚เด—เตเดทเตป เดชเต‹เดฒเต†, เดŽเดฒเตเดฒเดพเด‚ เด—เต†เดฏเดฟเด‚ เดชเด™เตเด•เดพเดณเดฟเด•เตพเด•เตเด•เต เดฎเดพเดคเตเดฐเด‚ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเต.

เด†เดจเตเด•เดพเดฒเดฟเด•เดฎเดพเดฏเดฟ เดธเดฎเดพเดฐเด‚เดญเดฟเดšเตเดš เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เตพ

เด—เต†เดฏเดฟเด‚ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ เด•เตเดฑเดšเตเดšเต เดธเดฎเดฏเดคเตเดคเต‡เด•เตเด•เต เด—เต†เดฏเดฟเด‚ เดธเดฎเดพเดฐเด‚เดญเดฟเดšเตเดšเดฟเดŸเตเดŸเดฟเดฒเตเดฒเต†เด™เตเด•เดฟเตฝ, เดตเตเดฏเด•เตเดคเดฎเดพเดฏ เดซเด‚เด—เตเดทเตป เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดธเดœเต€เดต เด—เต†เดฏเดฟเดฎเตเด•เดณเตเดŸเต† เดชเดŸเตเดŸเดฟเด•เดฏเดฟเตฝ เดจเดฟเดจเตเดจเต เด…เดคเต เดธเตเดตเดฏเดฎเต‡เดต เดจเต€เด•เตเด•เด‚เดšเต†เดฏเตเดฏเดชเตเดชเต†เดŸเตเด‚.

เดฎเดฑเตเดฑเตŠเดฐเต เด†เดจเตเด•เดพเดฒเดฟเด• เดŸเดพเดธเตโ€Œเด•เต, เด—เต†เดฏเดฟเด‚ เดฎเต‹เดกเต เดฐเดพเดคเตเดฐเดฟเดฏเดฟเตฝ เดจเดฟเดจเตเดจเต เดชเด•เดฒเดฟเดฒเต‡เด•เตเด•เตเด‚ เดคเดฟเดฐเดฟเดšเตเดšเตเด‚ เด—เต†เดฏเดฟเดฎเตเด•เตพเด•เตเด•เดพเดฏเดฟ เดจเดฟเตผเดฌเดจเตเดงเดฟเดคเดฎเดพเดฏเดฟ เดฎเดพเดฑเตเดจเตเดจเดคเดพเดฃเต, เด…เดคเดฟเดจเดพเดฏเดฟ เดŸเต‡เตบ เดธเดฎเดฏเดคเตเดคเต เด‡เดคเต เดธเด‚เดญเดตเดฟเด•เตเด•เตเดจเตเดจเดฟเดฒเตเดฒ (เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เด’เดฐเต เด—เต†เดฏเดฟเด‚ เด‡เดตเตปเตเดฑเดฟเดจเต‹เดŸเต เดชเตเดฐเดคเดฟเด•เดฐเดฟเด•เตเด•เต‡เดฃเตเดŸ เด’เดฐเต เด•เดณเดฟเด•เตเด•เดพเดฐเตป เดšเดฟเดฒ เด•เดพเดฐเดฃเด™เตเด™เดณเดพเตฝ เดชเดฐเดฟเดนเดพเดฐเด‚ เด…เดฏเดšเตเดšเดฟเดฒเตเดฒ. ).

เดชเตเดฐเด–เตเดฏเดพเดชเดจเด‚

  • เด†เดฎเตเด–เด‚
  • เดตเดฟเด•เดธเดจ เด…เดจเตเดคเดฐเต€เด•เตเดทเด‚ เดธเดœเตเดœเต€เด•เดฐเดฟเด•เตเด•เตเด•, เดšเตเดฎเดคเดฒเดฏเต† เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เดณเดพเดฏเดฟ เดตเดฟเดญเดœเดฟเด•เตเด•เตเดจเตเดจเต
  • เดฌเดพเด•เตเด•เตเดŽเตปเดกเต เดตเตผเด•เตเด•เต
  • เดฎเตเตปเดตเดถเดคเตเดคเต† เดœเต‹เดฒเดฟ
  • CICD เดธเดœเตเดœเต€เด•เดฐเดฟเด•เตเด•เตเดจเตเดจเต, เดŸเต†เดธเตเดฑเตเดฑเดฟเด‚เด—เต เดธเด‚เด˜เดŸเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเต
  • เด’เดฐเต เดŸเตเดฐเดฏเตฝ เด—เต†เดฏเดฟเด‚ เดธเต†เดทเตป เด†เดฐเด‚เดญเดฟเด•เตเด•เตเด•
  • เดซเดฒเด™เตเด™เตพ

เด…เดตเดฒเด‚เดฌเด‚: www.habr.com

DDoS เดชเดฐเดฟเดฐเด•เตเดทเดฏเตเดณเตเดณ เดธเตˆเดฑเตเดฑเตเด•เตพเด•เตเด•เดพเดฏเดฟ เดตเดฟเดถเตเดตเดธเดจเต€เดฏเดฎเดพเดฏ เดนเต‹เดธเตเดฑเตเดฑเดฟเด‚เด—เต เดตเดพเด™เตเด™เตเด•, VPS VDS เดธเต†เตผเดตเดฑเตเด•เตพ ๐Ÿ”ฅ DDoS เดชเดฐเดฟเดฐเด•เตเดท, VPS VDS เดธเต†เตผเดตเดฑเตเด•เตพ เด‰เดณเตเดณ เดตเดฟเดถเตเดตเดธเดจเต€เดฏเดฎเดพเดฏ เดตเต†เดฌเตโ€Œเดธเตˆเดฑเตเดฑเต เดนเต‹เดธเตเดฑเตเดฑเดฟเด‚เด—เต เดตเดพเด™เตเด™เต‚ | ProHoster