"Epics Mpya". Tunakula tembo kwa sehemu

"Epics Mpya". Tunakula tembo kwa sehemu

Katika makala hii, nitaweka mazingira ya kufanya kazi kwa ajili ya kuendeleza mchezo "Epics", na pia nitavunja mchezo yenyewe katika sehemu zinazofaa kwa matumizi katika OpenFaaS. Nitafanya udanganyifu wote kwenye Linux, nitapeleka Kubernetes katika minikube kwa kutumia VirtualBox. Mashine yangu ya kazi ina cores 2 za processor na 12GB ya RAM; Ninatumia SSD kama diski ya mfumo. Nitatumia debian 8 kama mfumo wangu mkuu wa ukuzaji, na emacs, sudo, git na vifurushi vya kisanduku kimewekwa, kila kitu kingine kitasanikishwa kwa kupakua kutoka kwa GitHub na vyanzo vingine. Tutasakinisha programu hizi katika /usr/local/bin isipokuwa kubainishwa vinginevyo. Tuanze!

Kuandaa mazingira ya kazi

Inasakinisha Go

Tunafuata maagizo kutoka kwa wavuti rasmi:

$ 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

Kuangalia utendaji:

$ 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

Inasakinisha faas-cli

Tunafuata maagizo kutoka kwa wavuti rasmi:

$ 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

Kwa kuongeza, unaweza kuwezesha kukamilika kwa bash:

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

Kusakinisha na Kusanidi Kubernetes

Kwa maendeleo, minikube inatosha, kwa hivyo isakinishe na kubelet ndani /usr/local/bin, na usakinishe usukani ili kusakinisha programu:

$ 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

Zindua minikube:

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

Tunaangalia:

$ 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

Inasakinisha OpenFaaS

Watengenezaji wanapendekeza kuunda nafasi 2 za majina za kufanya kazi nazo:

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

Ongeza hazina ya usukani:

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

Chati ina uwezo wa kuweka nenosiri kabla ya kusakinisha, hebu tuitumie na tuhifadhi data ya ufikiaji kama siri ya 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

Wacha tupeleke:

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

Baada ya muda, tunaendesha amri iliyopendekezwa:

$ 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

Kuangalia utendaji:

$ 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

Inaweka Mongodb

Tunaweka kila kitu kwa kutumia helm:

$ 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

Tunaangalia:

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

Bonyeza ctrl+D ili kuondoka kwenye chombo.

Kuanzisha emacs

Kimsingi, kila kitu kilikuwa tayari kimeundwa kulingana na Makala hii, kwa hivyo sitaingia kwa undani.

Kugawanya mchezo katika vitendaji

Mwingiliano na utendakazi unafanywa kupitia itifaki ya http, uthibitishaji wa mwisho-hadi-mwisho kati ya utendaji tofauti hutolewa na JWT. Mongodb hutumiwa kuhifadhi ishara, pamoja na hali ya mchezo, data ya mchezaji, mlolongo wa hatua za michezo yote na taarifa nyingine. Hebu tuchunguze kwa undani vipengele vya kuvutia zaidi.

Usajili

Ingizo la chaguo hili la kukokotoa ni JSON lenye jina la utani la mchezo na nenosiri. Chaguo hili la kukokotoa linapoitwa, huangaliwa kuwa lakabu hii haiko kwenye hifadhidata; ikiwa hundi imefaulu, lakabu na neno la siri huingizwa kwenye hifadhidata. Usajili unahitajika ili kushiriki kikamilifu katika mchezo.

Pembejeo

Ingizo la chaguo la kukokotoa ni JSON yenye jina la utani la mchezo na nenosiri; ikiwa kuna jina la utani kwenye hifadhidata na nenosiri limethibitishwa kwa ufanisi na lile lililohifadhiwa hapo awali kwenye hifadhidata, JWT inarejeshwa, ambayo lazima ipitishwe kwa utendaji kazi mwingine wakati imehifadhiwa. kuitwa. Rekodi mbalimbali za huduma pia huingizwa kwenye hifadhidata, kwa mfano, wakati wa mwisho wa kuingia, nk.

Tazama orodha ya michezo

Mtumiaji yeyote ambaye hajaidhinishwa anaweza kuomba orodha ya michezo yote isipokuwa inayotumika. Mtumiaji aliyeidhinishwa pia huona orodha ya michezo inayotumika. Matokeo ya chaguo hili ni JSON iliyo na orodha za michezo (Kitambulisho cha mchezo, jina linaloweza kusomeka na binadamu, n.k.).

Uumbaji wa mchezo

Chaguo za kukokotoa hufanya kazi na watumiaji walioidhinishwa pekee; idadi ya juu zaidi ya wachezaji inakubaliwa kwenye ingizo, pamoja na vigezo vya mchezo (kwa mfano, ni wahusika gani wa kuwezesha katika mchezo huu, idadi ya juu zaidi ya wachezaji, n.k.). Kigezo tofauti cha mchezo ni uwepo wa nenosiri la kujiunga, ambayo inakuwezesha kuunda michezo isiyo ya umma. Kwa chaguo-msingi, mchezo wa umma huundwa. Matokeo ya chaguo hili la kukokotoa ni JSON, ambayo ina sehemu ya mafanikio ya uundaji, kitambulisho cha kipekee cha mchezo na vigezo vingine.

Kujiunga na mchezo

Chaguo za kukokotoa hufanya kazi na watumiaji walioidhinishwa pekee, ingizo ni kitambulisho cha mchezo na nenosiri lake, ikiwa huu ni mchezo usio wa umma, matokeo ni JSON yenye vigezo vya mchezo. Mtumiaji aliyeidhinishwa aliyejiunga na mchezo, pamoja na mtayarishaji wa mchezo, wataitwa washiriki wa mchezo baadaye.

Kuangalia matukio ya mchezo

Mtumiaji yeyote ambaye hajaidhinishwa anaweza kuomba orodha ya matukio ya michezo isiyotumika, na mtumiaji aliyeidhinishwa anaweza kupokea orodha ya matukio ya mchezo wowote unaoendelea. Kigezo cha ziada cha chaguo za kukokotoa kinaweza kuwa nambari ya tukio ambayo mtumiaji tayari anayo. Katika kesi hii, matukio hayo tu yaliyotokea baadaye yatarejeshwa kwenye orodha. Kwa kuzindua kipengele hiki mara kwa mara, mtumiaji aliyeidhinishwa hutazama kinachotokea kwenye mchezo. Chaguo hili la kukokotoa pia hurejesha ombi la kitendo, ambalo mtumiaji anaweza kujibu kwa kutumia kipengele cha kutuma tukio la mchezo.

Inatuma tukio la mchezo

Kazi inafanya kazi tu kwa washiriki wa mchezo: inawezekana kuanza mchezo, kufanya hatua, kupiga kura, kuandika ujumbe wa maandishi unaoonyeshwa kwenye orodha ya matukio ya mchezo, nk.
Mtumiaji aliyeidhinishwa aliyeunda mchezo huanza kusambaza majukumu kwa washiriki wote kwenye mchezo, wakiwemo wao wenyewe, lazima wathibitishe jukumu lao kwa kutumia utendakazi sawa. Mara majukumu yote yanapothibitishwa, mchezo hubadilika kiotomatiki hadi modi ya usiku.

Takwimu za mchezo

Chaguo hufanya kazi kwa washiriki wa mchezo pekee; inaonyesha hali ya mchezo, orodha na idadi ya wachezaji (majina ya utani), majukumu na hali zao (kusonga au la), pamoja na habari zingine. Kama ilivyo kwa chaguo la awali, kila kitu hufanya kazi kwa washiriki wa mchezo tu.

Vitendaji vilivyozinduliwa mara kwa mara

Ikiwa mchezo haujazinduliwa kwa muda uliobainishwa wakati wa kuunda mchezo, utaondolewa kiotomatiki kutoka kwa orodha ya michezo inayotumika kwa kutumia kitendakazi wazi.

Kazi nyingine ya mara kwa mara ni kubadili kwa lazima kwa hali ya mchezo kutoka usiku hadi mchana na kurudi kwa michezo ambayo hii haikufanyika wakati wa zamu (kwa mfano, mchezaji ambaye anahitaji kuguswa na tukio la mchezo hakutuma suluhisho lake kwa sababu fulani. )

Tangazo

  • Utangulizi
  • Kuweka mazingira ya maendeleo, kuvunja kazi katika kazi
  • Kazi ya nyuma
  • Kazi ya mbele
  • Kuanzisha CICD, kuandaa upimaji
  • Anzisha kipindi cha mchezo wa majaribio
  • Matokeo ya

Chanzo: mapenzi.com

Kuongeza maoni