Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions .idea/.gitignore

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

14 changes: 14 additions & 0 deletions .idea/discord.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

12 changes: 12 additions & 0 deletions .idea/inspectionProfiles/Project_Default.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions .idea/vcs.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

91 changes: 91 additions & 0 deletions browserquest-infra/docs/infra.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
### Documentation Lancement de l'app via le dockerfile
```shell
docker build -t browserquest .
docker run -p 8080:8080 -p 8000:8000 browserquest
```
Dans notre cas on utilisera notre image dockerhub:

`jeck0v/browserquest:test`

### Documentation lancement Minikube

#### Installer Minikube et Kubectl sur windows:
On utilise Chocolatery, donc si pas installer => dans powershell admin
```powershell
Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::Tls12; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
```
Minikube:
```bash
choco install minikube
```
Kubectl:
```bash
choco install kubernetes-cli
```
#### Lancement Minikube:
```bash
minikube start --driver=docker --network-plugin=cni --cni=bridge
```
Si besoin de suppr le cluster:
```bash
minikube delete
```
Activer l'ingress de minikube
```bash
minikube addons enable ingress
```
Activer les metrics-server pour le scalling du cluster
```bash
minikube addons enable metrics-server
```
Pour être sûr que l'image est bien prise en compte par minikube:
```bash
docker build -t jeck0v/browserquest .
minikube image load jeck0v/browserquest:test
```
Aller dans le dossier browserquest-infra:
ça lancera tout
```bash
.\scripts\start-minikube.bat
.\scripts\deploy.bat
.\scripts\status.bat
.\scripts\test-access.bat
```


### Tester l'app:
Dans un autre terminal qu'il faudra laisser ouvert:

```bash
kubectl port-forward -n browserquest svc/browserquest 8080:80
```
## Config nginx, configmap et ingress

- un reverse proxy avec **nginx** pour gérer les requêtes HTTP et WebSocket
- un **configmap** pour gérer la config de Nginx
- un **ingress** pour exposer l'app (+ ingress-controller) <br>
Cette partie n'est pas à 100% opérationel, je n'ai pas beaucoup d'xp en K8S donc je pense pas avoir fini ça d'ici le temps imparti

## Infra Kubernetes

- **deployement** : Pour déployer les pods de l'application et de Nginx
- **services** : Pour exposer les pods et permettre la communication entre eux
- **configmap** : Pour fournir des configurations personnalisées à Nginx
- **ingress** : Pour gérer l'accès externe à l'app

### Ce que j'aurais aimé faire de plus
Je n’ai pas énormément d'expérience avec K8S, et c'étais assez complexe pour moi. Cela dit, je me suis beaucoup amusé à apprendre et à tester. Même si le résultat n'est pas incroyable, j'ai tenté de comprendre au mieux chaque éléments, et j’ai pas mal appris.

J’aurais bien aimé :

- Finaliser proprement la partie Ingress + Ingress Controller

- Approfondir Kubernetes Security

- Mettre en place AWS EKS, avec ELB, et potentiellement un déploiement complet en cloud

Mais avec le temps imparti, ce n'était pas réaliste ahahha :)




4 changes: 4 additions & 0 deletions browserquest-infra/kustomization.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
resources:
- manifests/base
- manifests/ingress
- manifests/metrics
28 changes: 28 additions & 0 deletions browserquest-infra/manifests/base/deployment.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: browserquest
namespace: browserquest
spec:
replicas: 3
selector:
matchLabels:
app: browserquest
template:
metadata:
labels:
app: browserquest
spec:
containers:
- name: browserquest
image: maxbdk/browserquest:test
ports:
- containerPort: 8080
name: http
- containerPort: 8000
name: websocket
resources:
requests:
cpu: 500m
limits:
cpu: 1000m
19 changes: 19 additions & 0 deletions browserquest-infra/manifests/base/hpa.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: browserquest-hpa
namespace: browserquest
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: browserquest
minReplicas: 3
maxReplicas: 8
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 50
6 changes: 6 additions & 0 deletions browserquest-infra/manifests/base/kustomization.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
namespace: browserquest
resources:
- namespace.yaml
- deployment.yaml
- service.yaml
- hpa.yaml
4 changes: 4 additions & 0 deletions browserquest-infra/manifests/base/namespace.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
apiVersion: v1
kind: Namespace
metadata:
name: browserquest
16 changes: 16 additions & 0 deletions browserquest-infra/manifests/base/service.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
apiVersion: v1
kind: Service
metadata:
name: browserquest
namespace: browserquest
spec:
type: NodePort
selector:
app: browserquest
ports:
- name: http
port: 8080
targetPort: 8080
- name: websocket
port: 8000
targetPort: 8000
Empty file.
15 changes: 15 additions & 0 deletions browserquest-infra/manifests/ingress/controller.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
apiVersion: helm.cattle.io/v1
kind: HelmChart
metadata:
name: ingress-nginx
namespace: kube-system
spec:
chart: ingress-nginx
repo: https://kubernetes.github.io/ingress-nginx
version: 4.10.0
valuesContent: |-
controller:
service:
type: NodePort
extraArgs:
enable-ssl-passthrough: ""
30 changes: 30 additions & 0 deletions browserquest-infra/manifests/ingress/ingress.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: browserquest-ingress
namespace: browserquest
annotations:
nginx.ingress.kubernetes.io/use-regex: "true"
nginx.ingress.kubernetes.io/backend-protocol: "HTTP"
nginx.ingress.kubernetes.io/websocket-services: "browserquest"
nginx.ingress.kubernetes.io/ssl-redirect: "false"
spec:
ingressClassName: nginx
rules:
- host: browserquest
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: browserquest
port:
number: 80
- path: /socket.io
pathType: ImplementationSpecific
backend:
service:
name: browserquest
port:
number: 8000
2 changes: 2 additions & 0 deletions browserquest-infra/manifests/ingress/kustomization.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
resources:
- ingress.yaml
4 changes: 4 additions & 0 deletions browserquest-infra/manifests/kustomization.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
resources:
- ./base
- ./ingress
- ./metrics
2 changes: 2 additions & 0 deletions browserquest-infra/manifests/metrics/kustomization.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
resources:
- metrics-server.yaml
Empty file.
8 changes: 8 additions & 0 deletions browserquest-infra/manifests/metrics/placeholder.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# placeholder pour que kubectl ne plante pas
apiVersion: v1
kind: ConfigMap
metadata:
name: dummy-metrics
namespace: browserquest
data:
dummy: "true"
14 changes: 14 additions & 0 deletions browserquest-infra/scripts/deploy.bat
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
@echo off
kubectl apply -k manifests/base
kubectl apply -k manifests/metrics

echo Attente du controller NGINX...
kubectl wait --namespace ingress-nginx --for=condition=Ready pod --selector=app.kubernetes.io/component=controller --timeout=120s

:retry
kubectl apply -k manifests/ingress
IF %ERRORLEVEL% NEQ 0 (
echo Echec de l'application de l'ingress, nouvelle tentative dans 10s...
timeout /t 10
GOTO retry
)
5 changes: 5 additions & 0 deletions browserquest-infra/scripts/start-minikube.bat
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
@echo off
minikube delete
minikube start --driver=docker --network-plugin=cni --cni=bridge
minikube addons enable ingress
minikube addons enable metrics-server
4 changes: 4 additions & 0 deletions browserquest-infra/scripts/status.bat
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
@echo off
kubectl get all -n browserquest
kubectl get hpa -n browserquest
minikube service list
12 changes: 12 additions & 0 deletions browserquest-infra/scripts/test-access.bat
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
@echo off
echo Test d'accessibilite de l'application sur http://localhost:8080...

timeout /t 5 > nul

curl -I http://localhost:8080

IF %ERRORLEVEL% EQU 0 (
echo [OK] Application accessible sur http://localhost:8080
) ELSE (
echo [ERREUR] L'application ne repond pas sur http://localhost:8080
)
Empty file added client/.dockerignore
Empty file.
10 changes: 5 additions & 5 deletions client/js/gameclient.js
Original file line number Diff line number Diff line change
Expand Up @@ -41,15 +41,15 @@ define(["player", "entityfactory"], function (Player, EntityFactory) {
},

connect: function (dispatcherMode) {
var url = "http://" + this.host + ":" + this.port,
var url = "ws://" + this.host + ":" + this.port,
self = this;

this.connection = io(url, {
transports: ["websocket", "polling"],
transports: ["websocket"],
reconnection: true,
reconnectionAttempts: 5,
reconnectionDelay: 1000,
timeout: 20000,
reconnectionAttempts: 3,
reconnectionDelay: 2000,
timeout: 5000,
forceNew: true,
});

Expand Down
4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,11 @@
"private": false,
"dependencies": {
"express": ">0",
"underscore": ">0",
"http-server": "^14.1.1",
"log": ">0",
"memcache": "0.3.0",
"sanitizer": "0.1.2",
"socket.io": "^4.8.1",
"underscore": ">0"
"socket.io": "^4.8.1"
}
}
2 changes: 1 addition & 1 deletion server/config.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"host": "127.0.0.1",
"host": "0.0.0.0",
"port": 8000,
"debug_level": "info",
"nb_players_per_world": 200,
Expand Down
1 change: 0 additions & 1 deletion server/js/area.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@

var cls = require('./lib/class'),
_ = require('underscore'),
Utils = require('./utils'),
Types = require("../../shared/js/gametypes");

Expand Down
1 change: 0 additions & 1 deletion server/js/checkpoint.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
var cls = require("./lib/class"),
_ = require("underscore"),
Utils = require("./utils"),
Types = require("../../shared/js/gametypes");

Expand Down
1 change: 0 additions & 1 deletion server/js/chestarea.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@

var Area = require('./area'),
_ = require('underscore'),
Types = require("../../shared/js/gametypes");

module.exports = ChestArea = Area.extend({
Expand Down