"Epics Newydd". Rydyn ni'n bwyta'r eliffant mewn rhannau

"Epics Newydd". Rydyn ni'n bwyta'r eliffant mewn rhannau

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ я Π±ΡƒΠ΄Ρƒ Π½Π°ΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‡Π΅Π΅ ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΠ³Ρ€Ρ‹ Β«Π‘Ρ‹Π»ΠΈΠ½Ρ‹Β», Π° Ρ‚Π°ΠΊΠΆΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡŽ Ρ€Π°Π·Π±ΠΈΠ΅Π½ΠΈΠ΅ самой ΠΈΠ³Ρ€Ρ‹ Π½Π° части, ΠΏΡ€ΠΈΠ³ΠΎΠ΄Π½Ρ‹Π΅ для использования Π² OpenFaaS. Byddaf yn gwneud yr holl driniaethau ar Linux, byddaf yn defnyddio Kubernetes yn Minikube gan ddefnyddio VirtualBox. Mae gan fy mheiriant gwaith 2 greiddiau prosesydd a 12GB o RAM; rwy'n defnyddio AGC fel disg y system. Π’ качСствС основной систСмы для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π±ΡƒΠ΄Ρƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ debian 8, с установлСнными ΠΏΠ°ΠΊΠ΅Ρ‚Π°ΠΌΠΈ emacs, sudo, git ΠΈ virtualbox, всС ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠ΅ ΡƒΡΡ‚Π°Π½ΠΎΠ²Π»ΡŽ ΠΏΡƒΡ‚Π΅ΠΌ скачивания ΠΈΠ· GitHub ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… источников. Byddwn yn gosod y cymwysiadau hyn yn/usr/lleol/bin oni nodir yn wahanol. Dewch i ni ddechrau!

Paratoi'r amgylchedd gwaith

Gosod mynd

Rydym yn dilyn y cyfarwyddiadau o'r wefan swyddogol:

$ 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

Gwirio ymarferoldeb:

$ 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

Gosod FAAS-CLI

Rydym yn dilyn y cyfarwyddiadau o'r wefan swyddogol:

$ 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

Yn ogystal, gallwch chi alluogi cwblhau bash:

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

Gosod a Ffurfweddu Kubernetes

Ar gyfer datblygu, mae Minikube yn ddigon, felly gosodwch ef a kubelet i mewn/usr/local/bin, a gosod llyw i osod cymwysiadau:

$ 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

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

Rydym yn gwirio:

$ 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

Gosod OpenFAAS

Mae'r datblygwyr yn argymell creu 2 le enw i weithio gyda:

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

Ychwanegwch ystorfa ar gyfer helm:

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

Mae gan y siart y gallu i osod cyfrinair cyn ei osod, gadewch i ni ei ddefnyddio ac arbed y data mynediad fel cyfrinach 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

Gadewch i ni ddefnyddio:

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

Ar Γ΄l peth amser, rydyn ni'n rhedeg y gorchymyn arfaethedig:

$ 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

Gwirio ymarferoldeb:

$ 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

Gosod MongoDB

Rydym yn gosod popeth gan ddefnyddio llyw:

$ 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

Rydym yn gwirio:

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

Pwyswch Ctrl+D i adael y cynhwysydd.

Sefydlu Emacs

Mewn egwyddor, roedd popeth eisoes wedi'i ffurfweddu yn Γ΄l Mae'r erthygl hon yn, felly wnes i ddim mynd i fanylion.

Torri i lawr y gΓͺm yn swyddogaethau

Gwneir rhyngweithio Γ’ swyddogaethau trwy'r protocol HTTP, darperir dilysiad o'r dechrau i'r diwedd rhwng gwahanol swyddogaethau gan JWT. Defnyddir MongoDB i storio tocynnau, yn ogystal Γ’ Game State, data chwaraewyr, dilyniannau symudiadau pob gΓͺm a gwybodaeth arall. Gadewch i ni edrych yn agosach ar y nodweddion mwyaf diddorol.

Cofrestru

Mewnbwn y swyddogaeth hon yw JSON gyda llysenw a chyfrinair y gΓͺm. Pan elwir y swyddogaeth hon, gwirir nad yw'r alias hwn yn y gronfa ddata; os yw'r gwiriad yn llwyddiannus, caiff yr alias a'r hash cyfrinair eu mewnosod yn y gronfa ddata. Mae angen cofrestru i gymryd rhan weithredol yn y gΓͺm.

Mewnbwn

The function input is JSON with a game nickname and password; if there is an nickname in the database and the password is successfully verified with the one previously saved in the database, a JWT is returned, which must be passed to other functions when they are Galwyd. Mae cofnodion gwasanaeth amrywiol hefyd yn cael eu mewnosod yn y gronfa ddata, er enghraifft, yr amser mewngofnodi diwethaf, ac ati.

Gweld rhestr o gemau

Gall unrhyw ddefnyddiwr heb awdurdod ofyn am restr o'r holl gemau ac eithrio rhai gweithredol. Mae defnyddiwr awdurdodedig hefyd yn gweld rhestr o gemau gweithredol. Canlyniad y swyddogaeth yw JSON sy'n cynnwys rhestrau o gemau (ID gΓͺm, enw dynol-ddarllenadwy, ac ati).

Creu gΓͺm

Ѐункция Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌΠΈ, Π½Π° Π²Ρ…ΠΎΠ΄Π΅ принимаСтся максимальноС число ΠΈΠ³Ρ€ΠΎΠΊΠΎΠ², Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΈΠ³Ρ€Ρ‹ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠ°ΠΊΠΈΡ… пСрсонаТСй Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² этой ΠΈΠ³Ρ€Π΅, максимальноС число ΠΈΠ³Ρ€ΠΎΠΊΠΎΠ² ΠΈ Ρ‚.ΠΏ.). ΠžΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ ΠΈΠ³Ρ€Ρ‹ являСтся Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ пароля Π½Π° присоСдинСниС, Ρ‡Ρ‚ΠΎ позволяСт ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½Π΅ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΈΠ³Ρ€Ρ‹. Yn ddiofyn, mae gΓͺm gyhoeddus yn cael ei chreu. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ выполнСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ являСтся JSON, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π΅ΡΡ‚ΡŒ ΠΏΠΎΠ»Π΅ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΡΡ‚ΠΈ создания, ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΈΠ³Ρ€Ρ‹, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹.

Ymuno Γ’ gΓͺm

Ѐункция Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌΠΈ, Π½Π° Π²Ρ…ΠΎΠ΄Π΅ β€” ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΈΠ³Ρ€Ρ‹ ΠΈ Π΅Π΅ ΠΏΠ°Ρ€ΠΎΠ»ΡŒ, Ссли это нСпубличная ΠΈΠ³Ρ€Π°, Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π΅ β€” JSON с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ ΠΈΠ³Ρ€Ρ‹. Gelwir y defnyddiwr awdurdodedig a ymunodd Γ’'r gΓͺm, yn ogystal Γ’ chrΓ«wr y gΓͺm, yn gyfranogwyr gΓͺm o hyn ymlaen.

Gwylio Digwyddiadau GΓͺm

Gall unrhyw ddefnyddiwr heb awdurdod ofyn am restr o ddigwyddiadau ar gyfer gemau anactif, a gall defnyddiwr awdurdodedig dderbyn rhestr o ddigwyddiadau ar gyfer unrhyw gΓͺm weithredol. Gall paramedr ychwanegol i'r swyddogaeth fod yn rhif y digwyddiad sydd gan y defnyddiwr eisoes. Yn yr achos hwn, dim ond y digwyddiadau hynny a ddigwyddodd yn ddiweddarach fydd yn cael eu dychwelyd yn y rhestr. Trwy lansio'r swyddogaeth hon o bryd i'w gilydd, mae defnyddiwr awdurdodedig yn gwylio'r hyn sy'n digwydd yn y gΓͺm. Mae'r swyddogaeth hon hefyd yn dychwelyd cais gweithredu, y gall y defnyddiwr ymateb iddo gan ddefnyddio swyddogaeth anfon digwyddiad y gΓͺm.

Anfon Digwyddiad GΓͺm

Mae'r swyddogaeth yn gweithio ar gyfer cyfranogwyr gΓͺm yn unig: mae'n bosibl cychwyn y gΓͺm, symud, pleidleisio, ysgrifennu neges destun sy'n cael ei harddangos yn y rhestr o ddigwyddiadau gΓͺm, ac ati.
Авторизованный ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ, создавший ΠΈΠ³Ρ€Ρƒ, запускаСт Ρ€Π°Π·Π΄Π°Ρ‡Ρƒ Ρ€ΠΎΠ»Π΅ΠΉ всСм участникам ΠΈΠ³Ρ€Ρ‹, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ сСбя, ΠΎΠ½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€Π΄ΠΈΡ‚ΡŒ свою Ρ€ΠΎΠ»ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ этой ΠΆΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Unwaith y bydd yr holl rolau wedi'u cadarnhau, mae'r gΓͺm yn newid yn awtomatig i'r modd nos.

Ystadegau gΓͺm

Ѐункция Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для участников ΠΈΠ³Ρ€Ρ‹, ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ состояниС ΠΈΠ³Ρ€Ρ‹, список ΠΈ число ΠΈΠ³Ρ€ΠΎΠΊΠΎΠ² (псСвдонимы), Ρ€ΠΎΠ»ΠΈ ΠΈ ΠΈΡ… статус (сдСлан Ρ…ΠΎΠ΄, ΠΈΠ»ΠΈ Π½Π΅Ρ‚), Π° Ρ‚Π°ΠΊΠΆΠ΅ Π΄Ρ€ΡƒΠ³ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ. Yn yr un modd Γ’'r swyddogaeth flaenorol, mae popeth yn gweithio ar gyfer cyfranogwyr gemau yn unig.

Swyddogaethau a lansiwyd o bryd i'w gilydd

Os nad yw'r gΓͺm wedi'i lansio ers peth amser a nodir wrth greu'r gΓͺm, bydd yn cael ei thynnu'n awtomatig o'r rhestr o gemau gweithredol gan ddefnyddio'r swyddogaeth glir.

Another periodic task is the forced switching of the game mode from night to day and back for games for which this did not happen during the turn (for example, a player who needs to react to a game event did not send his solution for some reason ).

Cyhoeddiad

  • Cyflwyniad
  • Sefydlu'r amgylchedd datblygu, gan chwalu'r dasg yn swyddogaethau
  • Gwaith backend
  • Gwaith Frontend
  • Sefydlu CICD, trefnu profion
  • Dechreuwch sesiwn gΓͺm dreial
  • Canlyniadau

Ffynhonnell: hab.com

Ychwanegu sylw