«Uued BĂŒlini». Söödame elevanti tĂŒkkide kaupa

«Uued BĂŒlini». Söödame elevanti tĂŒkkide kaupa

Selles artiklis seadistan mĂ€ngude arendamiseks töötava keskkonna "BĂŒliinid" ning jagan mĂ€ngu erinevateks osadeks, mida saab kasutada OpenFaaS-is. KĂ”ik toimingud teen Linuxis, Kubernetes kĂ€ivitame minikube’i abil, kasutades VirtualBoxi. Minu töömasinas on 2 protsessorituuma ja 12 GB RAM-i, sĂŒsteemi ketas on SSD. Arenduse peamise sĂŒsteemina kasutan Debian 8, millel on installitud paketid emacs, sudo, git ja virtualbox; kĂ”ik muu paigaldan GitHubist ja teistest allikatest. Need rakendused installime /usr/local/bin, kui pole teisiti mĂ€rgitud. Alustame!

Töökeskkonna ettevalmistamine

Go paigaldamine

JĂ€rgime ametlikul veebilehel olevat juhendit:

$ 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

Kontrollime töökindlust:

$ 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 paigaldamine

JĂ€rgime ametlikul veebilehel olevat juhendit:

$ curl -sSL https://cli.openfaas.com | sudo -E sh
x86_64
Laadimine paketist https://github.com/openfaas/faas-cli/releases/download/0.11.3/faas-cli as /tmp/faas-cli
Laadimine lÔpetatud.

KÀivitamine piisavate Ôigustega, et proovida faas-cli liigutada /usr/local/bin
Uus versioon faas-cli-st on installitud /usr/local/bin
Loodud alias 'faas' 'faas-cli' jaoks.
  ___                   _____           ____
 / _  _ __   ___ _ __ |  ___|_ _  __ _/ ___|
| | | | '_  / _  '_ | |_ / _` |/ _` ___ 
| |_| | |_) |  __/ | | |  _| (_| | (_| |___) |
 ___/| .__/_ ___|_| |_|_|  __,_|__,_|____/
      |_|

CLI:
 commit:  73004c23e5a4d3fdb7352f953247473477477a64
 versioon: 0.11.3

Lisaks saab lubada bash-completion kasutamise:

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

Kubernetesi installimine ja seadistamine

Arendamiseks piisab minikube’ist, nii et installime selle ja kubeleti /usr/local/bin, samuti paigaldame rakenduste jaoks 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

KĂ€ivitame minikube:

$ minikube start
  minikube v1.6.2 Debian 8.11-l
  Automaatiliselt valiti 'virtualbox' draiver (alternatiivid: [])
  Laadimine VM alglaadimisfail ...
    > 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
  Virtuaalboxi VM loomine (CPU-d=2, MĂ€lu=8192MB, Disk=20000MB) ...
  Kubernetes v1.17.0 ettevalmistamine Docker '19.03.5' ...
  kubeadm v1.17.0 laadimine
  kubelet v1.17.0 laadimine
  Pildid alla laadimine ...
  Kubernetes kÀivitamine ...  Ootame, kuni klaster on online ...
  Sooritatud! kubectl on nĂŒĂŒd konfigureeritud kasutama "minikube"

Kontrollime:

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

OpenFaaS'i installimine

Arendajad soovitavad luua 2 namespace'i tööks:

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

Lisame helm'i registri:

$ helm repo add openfaas https://openfaas.github.io/faas-netes/
"openfaas" on teie registritesse lisatud

Chart'is on vÔimalus mÀÀrata parool enne installimist, kasutame seda ja salvestame sisselogimisandmed k8s saladusena:

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

Teostame juurutamise:

$ helm repo update
Oodake, kuni saame teie chart'i registritest uusimad ...
...Edukas uuendus "openfaas" chart'i registrist
Uuendus lÔpetatud.  Head Helmingut!
$ helm upgrade openfaas --install openfaas/openfaas --namespace openfaas --set functionNamespace=openfaas-fn --set generateBasicAuth=false
VĂ€ljalaskmine "openfaas" ei eksisteeri. Paigaldame selle nĂŒĂŒd.
NIMI: openfaas
VIIMASE KORRA PAIGALDATUD: Reede, 25. dets 2019 10:28:22
NAMESPACE: openfaas
STATUS: paigaldatud
REVISION: 1
TESTI KOMPLEKT: Puudub
MÄRKUSED:
Kinnitage, et openfaas on kÀivitunud, kÀivitades:

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

MÔne aja pÀrast kÀivitame soovitatud kÀsu:

$ 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

Kontrollime töökindlust:

$ 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 installimine

Installeerime kÔik helm'i abil:

$ helm repo add stable https://kubernetes-charts.storage.googleapis.com/
"stable" on lisatud teie hoidlatesse
$ 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:
** Palun olge kannatlik, kuni skeem paigaldatakse **

MongoDB-d saab ligipÀÀseda sadama kaudu 27017 jÀrgmise DNS-nime kaudu teie klastris:

    mongodb-1577466908.default.svc.cluster.local

Root parooli saamiseks kÀivitage:

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

Andmebaasiga ĂŒhenduse loomiseks kĂ€ivitage jĂ€rgmine kĂ€sk:

    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

Selleks, et luua ĂŒhendus oma andmebaasiga klastrist vĂ€ljaspool, tĂ€itke jĂ€rgmised kĂ€sud:

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

Kontrollime:

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)
Kui te ei nÀe kÀskluse kÀivitamise kÀsurealt, proovige vajutada Enter.

> db.version();
4.0.14

VĂ€ljumiseks vajutage ctrl+D.

Emacsi seadistamine

PĂ”himĂ”tteliselt oli kĂ”ik juba seadistatud selles artiklis, nii et ma ei hakka seda ĂŒksikasjalikult kirjeldama.

MĂ€ngu jagamine funktsioonideks

Funktsioonide vahelise suhtlemise tagab HTTP-protokoll, samas kui erinevate funktsioonide vahelise autentimise tagab JWT. Tokenite, mÀngu staatuse, mÀngijate andmete, mÀngude kÀikude sekvenste ja muu teabe salvestamiseks kasutatakse MongoDB-d. Vaatame lÀhemalt mÔned huvitavad funktsioonid.

Registreerimine

Selle funktsiooni sisendiks on JSON mĂ€ngu hĂŒĂŒdnime ja parooliga. Funktsiooni vĂ€ljakutsumise korral kontrollitakse, kas hĂŒĂŒdnime ei ole andmebaasis, ja eduka kontrolli korral lisatakse hĂŒĂŒdnimi ja parooli hash andmebaasi. Registreerimine on vajalik aktiivseks osalemiseks mĂ€ngus.

SissepÀÀs

Funktsiooni sisendiks on JSON mĂ€ngu hĂŒĂŒdnime ja parooli, mille olemasolu korral andmebaasis ja paroolikontrolli eduka sooritamise korral tagastatakse JWT, mida tuleb edastada teistele funktsioonidele nende kutsumisel. Samuti tehakse andmebaasi erinevate teenusrekordite sisestamine, nĂ€iteks viimase sisenemise aeg jms.

MĂ€ngude nimekirja vaatamine

Igasugune autoriseerimata kasutaja vĂ”ib kĂŒsida kĂ”igi mĂ€ngude nimekirja, vĂ€lja arvatud aktiivsed. Autoriseeritud kasutaja nĂ€eb ka aktiivsete mĂ€ngude nimekirja. Funktsiooni tulemuseks on JSON, mis sisaldab mĂ€ngude loendeid (mĂ€ngu identifikaator, loetav nimi jms).

MĂ€ngu loomine

Funktsioon töötab ainult autoriseeritud kasutajatega, sisendiks on maksimaalne mĂ€ngijate arv ja mĂ€ngu parameetrid (nĂ€iteks milliseid tegelasi selles mĂ€ngus aktiveerida, maksimaalne mĂ€ngijate arv jms). Üks eraldi mĂ€ngu parameeter on sisenemisparooli olemasolu, mis vĂ”imaldab luua mitteavalikke mĂ€nge. Vaikimisi luuakse avalik mĂ€ng, funktsiooni tĂ€itmise tulemusena saadakse JSON, milles on edukuse mÀÀratlemise vĂ€li, mĂ€ngu unikaalne identifikaator ja muud parameetrid.

MĂ€nguga liitumine

Funktsioon töötab ainult autoriseeritud kasutajatega, sisendiks on mÀngu identifikaator ja selle parool, kui see on mitteavalik mÀng, vÀljundiks on mÀngu parameetritega JSON. Autoriseeritud kasutajat, kes on mÀnguga liitunud, ning mÀngu looja nimetatakse edaspidi mÀngu osalisteks.

MĂ€ngu sĂŒndmuste vaatamine

Igasugune autoriseerimata kasutaja vĂ”ib kĂŒsida mitteaktiivsete mĂ€ngude sĂŒndmuste nimekirja, aga autoriseeritud kasutaja saab saada aktiivsete mĂ€ngude sĂŒndmuste nimekirja. Funktsiooni lisaparameetrina vĂ”ib edastada sĂŒndmuse numbri, mis kasutajal juba on. Sellisel juhul tagastatakse ainult need sĂŒndmused, mis on toimunud hiljem. Autoriseeritud kasutaja vaatab perioodiliselt, mis mĂ€ngus toimub, kĂ€ivitades selle funktsiooni. Samuti tagastab see funktsioon toimingu taotluse, millele kasutaja saab reageerida mĂ€ngu sĂŒndmuse saatmise funktsiooniga.

MĂ€ngu sĂŒndmuse saatmine

Funktsioon töötab ainult mĂ€ngijatele: vĂ”imalus mĂ€ngu alustada, kĂ€iku teha, hÀÀletada, kirjutada tekstisĂ”num, mis kuvatakse mĂ€ngu sĂŒndmuste loendis jne.
Autoriseeritud kasutaja, kes on mĂ€ngu loonud, jagab rolle kĂ”igile mĂ€ngijatele, sealhulgas endale, nad peavad kinnitama oma rolli sama funktsiooni kaudu. Kui kĂ”ik rollid on kinnitatud, lĂ€heb mĂ€ng automaatselt ööreĆŸiimi.

MĂ€ngu statistika

Funktsioon töötab ainult mĂ€ngijatele, nĂ€itab mĂ€ngu staatust, mĂ€ngijate nimekirja ja arvu (pseudonĂŒĂŒmid), rolle ja nende staatust (kas on kĂ€ik tehtud vĂ”i mitte) ning muud teavet. Nagu eelneva funktsiooni puhul, toimib kĂ”ik ainult mĂ€ngijate jaoks.

Perioodiliselt kÀitatavad funktsioonid

Kui mÀngu ei ole teatud aja jooksul, mis mÀÀratakse mÀngu loomisel, kÀitatud - eemaldatakse see automaatselt aktiivsete mÀngude loendist koristusfunktsiooni abil.

Veel ĂŒks perioodiline ĂŒlesanne - sundida mĂ€ngu reĆŸiimi ööst pĂ€eva ja vastupidi, kui see ei ole kĂ€igul aset leidnud (nĂ€iteks mĂ€ngija, kes peab reageerima mĂ€ngusĂŒndmustele, ei ole mingil pĂ”hjusel oma lahendust esitanud).

Teade

  • Sissejuhatus
  • Arenduskeskkonna seadistamine, ĂŒlesande jagamine funktsioonideks
  • Backend tööde teostamine
  • Frontend tööde teostamine
  • CICD seadistamine, testimise korraldamine
  • MĂ€ngu prooviseansi korraldamine
  • Summary

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster