The code is open source, and available on GitHub.

Bienvenue sur la documentation du projet Popcube !

Introduction

Society est une startup dédié aux applications de communication personnelles et professionnelles.

Leur nouveau produit est un système complet de messagerie instantanée, tel que Skype ou Slack.

Outils de communication

Slack

Slack est une plate-forme de communication collaborative propriétaire (SaaS) ainsi qu’un logiciel de gestion de projets

Plugin :

  • Monitoring avec grafana
_images/slack_grafana.png
  • Travis
_images/slack_travis.png
  • Github
_images/slack_git.png
  • Trello
_images/slack_trello.png

Contrôle de version

Git permet, comme beaucoup de ses congénères (Subversion, CVS, Arch ou encore Darcs), de travailler à plusieurs sur un même projet. Mais contrairement à CVS ou Subversion, par exemple, Git ne fait pas de différence entre un dépôt principal et les copies locales chez les différents contributeurs.

Github

GitHub est un outil gratuit pour héberger du code open source

Les branches DEMO et DEVELOP doivent rester stable en toute circonstance. Si un merge casse la branche, il doit être revert puis corriger avant de le merge de nouveau.

La branche master sera mise à jour toute les semaines sur la branche develop. Aucun autre merge ne doit être réaliser sur master en aucune circonstance

La branche demo doit êter mise à jour sur develop avant chaque préparation de demo ou en fin de semaine

Préparer son environement de travail

  • Installez git, docker et docker-compose
  • Récupérer le code source du projet : git clone git@github.com:titouanfreville/{REPO}.git || git clone https://github.com/titouanfreville/{REPO}.git
  • Aller dans le dossier obtenu
  • docker-compose up

Proposer une feature / Séparer les tâches

  • Créer une issue sur github contenant un nom (résumant le travail à faire) et l’intégralité de la feature (ex : Nom : HELLO WORLD, Contenu : Créer une page de l’application permettant d’afficher le message : ‘Hello World’)
  • Signaler la création de l’application.
  • Voter et ce mettre d’accord ;)

Travailler sur une issue

Quand une feature est acceptée

  • Créer une branche depuis la branche ‘dévelop’ nommer issue-Numéro_de_l’issue-Nom
  • Créer les test unitaires liés à l’issue si non existant
  • Faite votre feature
  • Tester (lancer les test unitaires, etc.)
  • Ouvrir une pull request de votre branche vers master

Format de commit

  • ajouter le template de commit a la configuration git. git config commit.template {Clone_ROOT}/.git_commit_message.txt
  • Un commit doit contenir : le numéro de l’issue (requis), un résumé du travail réaliser(requis), un détails du travail réalisé, la liste de ce qu’il reste à faire, un ping sur les différentes personne concerné par l’issue.

Finir une issue

Quand une feature est en Pull Request

  • Une personne différente de celle ayant fait l’issue vérifie le code
  • La feature est testé et une démo doit être faite (merge sur la branche demo)
  • La PR est acceptée
  • Merge la branche dans develop
  • Tester que develop reste stable

Intégration continue

L’intégration continue est un ensemble de pratiques, vérifier à chaque modification de code source que le résultat des modifications ne produit pas de régression dans l’application développée.

Travis

Pour faire simple, vous pouvez paramétrer Travis-CI pour qu’à chaque push, il exécute vos tests et vous indique si votre build (plusieurs “jobs”) s’est bien déroulé ou non. Cela permet à chaque modification du projet, de s’assurer que tout fonctionne correctement. Cela s’appelle l’intégration continue.

Chaque feature/branch est tester a chaque commit/merge

Tests

Tests unitaire go

On utilise goconvey

GoConvey, un outil de test Go pour les gophers. Utilisez-le dans le terminal ou le navigateur.

Exemple web ui

  • Erreur
_images/goconvey_fail.png
  • OK
_images/goconvey_pass.png
  • Detail du code

En rouge les zones non coverage

_images/goconvey_open.png

Linter

L’utilitaire lint a été l’un des premiers outils d’analyse statique de code source.

Il s’agit d’un outil capable de détecter les erreurs et problèmes potentiels dans votre code.

  • Linter pour golang

https://github.com/cl3m3nt666/docker-golinter

Test fonctionnel

Avec postman il est possible d’écrire des tests, effectué a chaque jobs travis

_images/postman.png

Example du fichier pour tester l’api

{
	"variables": [],
	"info": {
		"name": "Popcube iner API",
		"_postman_id": "93985f54-5ddd-a4ed-2a1a-e74912ffa258",
		"description": "The inner API of Popcube aim to define every methods need to manage communication organisation inside PopCube chat project",
		"schema": "http://schema.getpostman.com/json/collection/v2.0.0/collection.json"
	},
	"item": [
		{
			"name": "ping",
			"description": "Folder for ping",
			"item": [
				{
					"name": "Pong",
					"event": [
						{
							"listen": "test",
							"script": {
								"type": "text/javascript",
								"exec": [
									"tests[\"Response time is less than 200ms\"] = responseTime < 200;",
									"tests[\"Status code is 200\"] = responseCode.code === 200;",
									"tests[\"Pong ? :D\"] = responseBody.has(\"pong\");",
									""
								]
							}
						}
					],
					"request": {
						"url": "https://maxime.popcube.xyz/ping",
						"method": "GET",
						"header": [],
						"body": {},
						"description": "Test api ping"
					},
					"response": []
				}
			]
		}
	]
}

Introduction

Popcube est un projet permettant de regrouper des équipes venant de divers domaines et de leurs donner les outils de communications dont ils ont besoin. Tchat, appels voix et appels vidéo, partages de fichiers, popcube à tous pour vous charmer alors venez l’essayer.

Contraintes

Developpement

  • Créer et gérer un compte
  • Statut de connexion (En ligne, Absent ...)
  • Manager des contact
  • Créer des groupes de discutions
  • Créer des channel
  • Quitter les groupes ou channel
  • Gestion avec des modérateurs
  • Partages de fichier
  • Appel multiples

Home

  • Créer un compte :
    • Email
    • Password
    • Avatar
    • Username
  • Register
  • reset password

Organisation

  • Accès rapides aux membres, channels.
  • Possibilité d’administer les channels, les membres et les messages pour les modérateurs.
  • Quitter une organisation

Channel

  • Groupes de discution
  • Quitter un channel
  • Lister les membres connectés dans un channel.

Messages

  • Ecrire des messages
  • Historique des conversations
  • Ouverture de l’url
  • Texte avec la possibilité d’écrire en gras, italique
  • Messages avec nom, date et avatar
  • Files dragable
  • OS Notification
  • Emojis
  • Message privés

Settings

  • Configurer micro et caméra
  • Configurer port
  • Changer files download location

Fonctionalité

Popcube est avant tout remplis de fonctionnalités utiles aux partages de ressources et communications rapide privée ou groupée.

Organisation

L’organisation est tout simplement le nom de domaine sur PopCube. Il permet à vos équipse de se retrouver sous un seul nom et à tous vos collaborateurs de vous retrouver facilement.

Membres

Les membres sont les utilisateurs inscrit sur votre organisation. Ils ont des droits et la possibilité de rejoindre des channels selon leurs habilitations.

Channel

Un channel est un salon de discution. C’est la place pour discuter avec votre service et/ou équipe sur un type particulier de besoin. Le nom du channel est important pour aider la hiérarchisation de votre organisation et permettre à vos membres de rejoindre les channels qu’ils désirent.

Exemple :

Il existe 3 type de channel :

  • Les channels texte :
    • Dialogue texte
    • Partage de ressources
  • Les channels audio :
    • Dialogue texte
    • Partage de ressources
    • Dialogue voix
  • Les channels vidéos :
    • Dialogue texte
    • Partage de ressources
    • Dialogue voix avec visio

Les membres peuvent engager des discutions privées entre eux avec la possibilité d’appel audio ou vidéo.

Droits

Les droits permettent à une organisation de manager leurs équipes en leurs donnant accès à des droits sur les channels.

Priver

Le statut priver s’applique à l’organisation comme aux channels. Il permet de bloquer l’accès de ceux qu’y n’ont pas été invité.

Public

Une organisation ou un channel publique ne bloque aucun accès. Chaque membre d’une organasation peut y accéder sans avoir de droits particulié.

Management

Il est possible de créer des groupes auquels des membres sont associés pour éviter d’avoir à gérer un par un des channels. Le groupes sont associé à des channels et peuvent gérer d’autres groupes permettant ainsi à des équipes d’en gérer d’autres.

Appel

Les appels permettent aux équipes de communiquer rapidement et directement. Lors de la connexion sur un channel vous êtes directement connecté avec les autres participants. Il est possible de voir qui est actulement en ligne sur un channel.

Voix

Les channels voix permettent de créer un salon de discution dans lequel les membres peuvent discuter à l’aide d’un micro.

Vidéos

Les channels vidéos permettent de créer un salon dans lequels les membres peuvent discuter à l’aide d’un micro et d’une caméra.

Partages

Il est posssible d’envoyer des fichiers relié à un channel. Chaque utilisateurs se connectant au channels peut les voir ou recevoir.

Messages

Les messages sont envoyé avec certaines balises html afin de pouvoir mettre en forme le texte. L’application reconnais si le message contient des liens afin de les faire ressortir et permet de cliquer directement dessus.

Interface

L’interface intuitive permet la gestion de plusieurs organisations et permet de suivre une multitude de channel.

Design

Utilisation d’un design épurer pour faciliter la compréhention des utilisateurs.

Hiérarchie

developpement/../../_static/developpement/interface/hierarchie.PNG
Home
login register

Organisations Channel

Settings profil organisation channel droit

Home

La page home apparaît lors de la première connexion et permet de trouver une organisation.

developpement/../../_static/developpement/interface/home.PNG

Login

Une fois l’oganisation trouvée, l’utilisateur se retrouve sur la page de login, qui lui permet de se connecter ou de rejoindre la page register.

developpement/../../_static/developpement/interface/login.PNG

register

Permet à l’utilisateur de s’enregistrer sur l’oganisation.

developpement/../../_static/developpement/interface/register.PNG

Organisations

Permet de séléctionner l’organisation sur laquel l’utilisateur veut parler.

developpement/../../_static/developpement/interface/organisation.PNG

Channel

Permet de se connecter au channel sur lequel l’utilisateur veut parler.

Settings

Permet de gérer tous les paramètres de l’utilisateur et de gérer l’organisation et les channels si l’utilisateur a les droits suffisant.

developpement/../../_static/developpement/interface/settings.PNG

profil

Profil de l’utilisateur

organisation

Gestion de l’organisation par le ou les administrateurs

channel

Gestion des channels par le ou les administrateurs

droit

Gestion des groupes de droits et des droits par utilisateur

Introduction

Popcube est une solution de messagerie instantanée qui se veut rapide, efficace et sécurisée.

Contraintes

Haute Disponibilité

L’infrastructure doit être capable de supporter tout type charge.

Pour cela, il faut utiliser 2 datacenters qui fonctionnent en mode actif/actif avec un CDN.

Dans chaque datacenter, il faut un cluster actif/passif pour le serveur frontend.

Stockage et Sauvegarde

  1. Stockage

Historique de conversation Réplication sur tout les noeuds pour que les ressources mis en ligne par les utilisateurs puissent être tout le temps accessible. Changement à chaud des disques

  1. Sauvegarde

Etablir un plan de sauvegarde sur un 3ème datacenter pour qu’il puisse assurer une reprise du service (mode dégradé).

La sauvegarde se fera tous les jours à 2H avec un dump des bases de données et des ressources partagées par les utilisateurs.

Une copie des données devra être présente sur le datacenter d’un prestataire pour qu’il puisse effectuer les sauvegardes sur bande tous les jours.

Réseaux

Choix libre pour les protocoles IPv4/IPv6 ainsi que pour le nombre de lien intersite.

Sécurité

Implémenter 2 solutions de sécurité (bannissement IP, chiffrement) car les utilisateurs partageront des données sensibles.

  1. Bannissement sur les échecs de connexions

Les adresses IP qui auront échoués 10 fois lors des tentatives de connexion à l’application devront être bannies pendant une durée de 5 minutes.

Si elle rééchoue au bout de 10 essais, elle sera bannie durant 1 semaine.

Enfin, elle est bannie pour 2 mois si 10 autres tentatives ont échouées ...

  1. Chiffrement

Les connexions entre les 3 datacenters doivent être entièrement chiffrées.

Hyperviseur

VMware ESXi

VMware ESXi est un hyperviseur qui s’installe directement sur un serveur physique (type bare-metal) pour gérer des machines virtuelles. Conçus de façon à ce que la surface d’attaque exposée aux logiciels malveillants et aux menaces réseau soit retreinte, il est fiable et sécurisé.

Une fonctionnalité qui le démarque des autres est le vMotion. Elle permet de déplacer des machines virtuelles à chaud d’un serveur physique à un autre sans interruption de service.

infrastructure/../../_static/infrastructure/hyperviseur/esxi.png

Vsphere client

Logiciel permettant d’administrer un ESXi ainsi que ses machines virtuelles.

infrastructure/../../_static/infrastructure/hyperviseur/vsphere.jpg

Vcenter

C’est une appliance conçus par VMware qui permet de créer et manager un cluster d’ESXi (un hyperviseur d’hyperviseur) car dans notre cas, nous avons besoin d’assurer une haute disponibilité des services.

infrastructure/../../_static/infrastructure/hyperviseur/vcenter.PNG

Clustering

Depuis l’interface Vcenter, nous ajoutons les différents ESXi afin de pouvoir les gérer.

Nous créons ensuite un cluster de tous ces hyperviseurs en apppliquant les meileures pratiques pour faire de la haute disponibilité.

infrastructure/../../_static/infrastructure/hyperviseur/cluster.PNG

Stockage

Des baies de stockage seront présentes dans chaque datacenter pour provisionner un stockage en ISCSI afin de stocker les différentes machines virtuelles. Ajout du stockage ISCSI sur un hyperviseur:

infrastructure/../../_static/infrastructure/hyperviseur/stockage.PNG

Vue globale

infrastructure/../../_static/infrastructure/hyperviseur/hyperviseur.PNG

Conteneur

Docker utilise simplement des fonctionnalités natives de Linux comme son noyau, ses LXC et cgroups

Docker permet de créer des environnements (appelées containers) de manière à isoler des applications.

Dans le cas de Docker, le kernel va partager les ressources du système hôte et interagir avec le(s) container(s). Techniquement, Docker n’est pas une VM, pas le moins du monde, mais en terme d’utilisation, Docker peut-être apparenté à une VM.

Comme le container n’embarque pas d’OS, à la différence de la machine virtuelle, il est par conséquent beaucoup plus léger que cette dernière. Il n’a pas besoin d’activer un second système pour exécuter ses applications. Cela se traduit par un lancement beaucoup plus rapide, mais aussi par la capacité à migrer plus facilement un container (du fait de son faible poids) d’une machine physique à l’autre. Autre avantage : les containers Docker, du fait de leur légèreté, sont portables de cloud en cloud.

Cluster swarm

Conception décentralisée.

Au lieu de gérer la différenciation entre les rôles de nœud au moment du déploiement, le Docker Engine gère toute spécialisation au moment de l’exécution. Vous pouvez déployer les deux types de nœuds, de MANAGER et de WORKER, en utilisant le Docker-engine.

Modèle de service déclaratif

Docker Engine utilise une approche déclarative pour vous permettre de définir l’état désiré des différents services dans votre stack d’applications. Par exemple, vous pouvez décrire une application composée d’un service Web front-end avec des services de mise en file d’attente de messages et d’un backend de base de données.

Scaling

Pour chaque service, vous pouvez déclarer le nombre de tâches que vous souhaitez exécuter. Lorsque vous augmentez ou descendez, le gestionnaire de swarm s’adapte automatiquement en ajoutant ou en supprimant des tâches pour maintenir l’état désiré.

Conciliation de l’état désiré

Le nœud manager de swarm surveille constamment l’état du cluster et réconcilie toutes les différences entre l’état actuel et l’état souhaité exprimé. Par exemple, si vous configurez un service pour exécuter 10 replica d’un conteneur, et une worker qui héberge deux de ces répliques se bloque, le manager créera deux nouvelles replica pour remplacer les replica qui se sont écrasées.

Le manager Swarm attribue les nouvelles répliques aux travailleurs en cours d’exécution et disponibles.

Réseau multi-hôte (overlay network)

Vous pouvez spécifier un overlay network pour vos services.

Le manager de swarm attribue automatiquement les adresses aux conteneurs sur le overlay network lorsqu’il initialise ou met à jour l’application.

Découverte du service

Les nœuds du manager Swarm assignent à chaque service dans swarm un nom DNS unique et les load balances exécutant des conteneurs.

Vous pouvez interroger tous les conteneurs qui fonctionnent dans swarm à travers un serveur DNS intégré dans swarm.

Rolling updates

Au moment du déploiement, vous pouvez appliquer les mises à jour du service aux nœuds de façon incrémentielle.

Le manager Swarm vous permet de contrôler le délai entre le déploiement du service sur différents ensembles de noeuds.

Si quelque chose ne va pas, vous pouvez roll-back a la version précédente.

Etats du cluster

Exemple:

docker@docker-01:~$ docker node ls
ID                           HOSTNAME   STATUS  AVAILABILITY  MANAGER STATUS
fuptalg81pxdsnpwkuewfa648    docker-02  Ready   Active        Reachable
rsjyyzupmv8lucak1ydkp0rfl    docker-03  Ready   Active        Leader
sjxyentbtr71eal698jv38w7c    docker-05  Ready   Drain
xthdbocmuvdtgpuqrcyrzq9v7 *  docker-01  Ready   Active        Reachable

Storage

Pour le stockage on utilise MINIO : expliqué dans la parti stockage.

Stack

Toutes les organisations sont créée avec docker-compose v3 en stack.

Stockage et réplication

Toutes les données sont stockées sur un cluster minio

Minio

infrastructure/../../_static/logo/minio.svg
  • S3 amazon

Aavoir une compatibilité S3 amazon. Les plugins et les SDKs S3 sont assez nombreux sur le marché du cloud.

  • Web ui

Une interface pour gérer les buckets.

  • Erasure Code

Minio protège les données contre les pannes de matériel et la corruption de données.

Web Ui

Pour la mises en cluster il est obligatoire d’avoir 4 noeud minio mini

Web interface

infrastructure/../../_static/infrastructure/minio/web_1.png

Share object

infrastructure/../../_static/infrastructure/minio/web_2.png

Public link

infrastructure/../../_static/infrastructure/minio/web_3.png

Minio CLI

Installation et copie des fichiers dans le bucket management

infrastructure/../../_static/infrastructure/minio/cli_1.png

Integration avec docker

Installation du plugin

(Très très très très simple ...)

infrastructure/../../_static/infrastructure/minio/docker_1.png
Déclaration d’un volume minio dans le docker-compose v3
infrastructure/../../_static/infrastructure/minio/docker_2.png
  • Term 1 : client
  • Term 2 : API_1
  • Term 3 : API_2
infrastructure/../../_static/infrastructure/minio/docker_3.png

Les fichiers générés par l’API sont bien présent dans les deux conteneurs

Monitoring de l’infrastucture

Interne

  • ElasticSearch

Puissant moteur de recherche utilisé par exemple par github

  • Logstash

Analyse des logs

  • Kibana

Les données brutes sont analysées dans Logstash, stockées dans Elasticsearch, mais ne sont pas encore exploitables. Kibana est une interface Web qui se connecte au cluster Elasticsearch, et permet de faire des requêtes en mode texte pour générer des graphiques

  • grafana

Grafana vous permet d’interroger, visualiser, alerter et comprendre vos paramètres, peu importe où ils sont stockés.

  • prometheus

Prometheus est une boîte à outils de monitoring et d’alerte. Il s’agit maintenant d’un projet Open Source autonome et maintenu indépendamment de toute entreprise.

  • node-exporter / docker-exporter

L’exportateur de Prometheus pour les métriques de matériel et d’OS exposées par les nœuds.

Grafana

grafana

Les noeuds et les conteneur sont ajoutés/supprimés automatiquement a la supervision

infrastructure/../../_static/infrastructure/monit/grafana_1.png infrastructure/../../_static/infrastructure/monit/grafana_2.png infrastructure/../../_static/infrastructure/monit/grafana_3.png

Externe

cloud weave

Vue des conteneurs

infrastructure/../../_static/infrastructure/monit/scop_1.png

Vue des connexions réseaux In/out

infrastructure/../../_static/infrastructure/monit/scop_2.png

Vue des docker-hosts

infrastructure/../../_static/infrastructure/monit/scop_3.png

Load Balancing

Load Balancing externe

Le Load Balancing répartit la charge entre les adresses IP publique des différents noeud du cluster swarm sur les différents datacenters.

infrastructure/../../_static/infrastructure/lb/external_lb.png

Load Balancing : Swarm mode routing mesh

Le maillage de réseau interne de Swarm permet à chaque noeud du cluster d’accepter les connexions à tout port de service publié dans swarm en acheminant toutes les demandes entrantes vers les noeuds disponibles hébergeant un service avec le port publié.

infrastructure/../../_static/infrastructure/lb/swarm_lb.png

Revers proxy / Load Balancing interne

Traefik Est un proxy HTTP inverse moderne et un équilibreur de charge conçu pour déployer des microservices avec facilité. Il supporte plusieurs backends (Docker, Swarm, Kubernetes, Marathon, Mesos, Consul, Etcd, Zookeeper, BoltDB, Eureka, Amazon DynamoDB, Rest API, fichier ...) pour gérer sa configuration automatiquement et dynamiquement.

infrastructure/../../_static/infrastructure/lb/internal_lb.png

Traefik écoute sur la sockets docker

Selon les labels (swarm) du service, Traefik génére automatiquement la configuration de redirections

Exemple :

1
2
3
4
5
6
7
 deploy:
   labels:
     traefik.port: "3000"
     traefik.frontend.rule: "Host:${ORGANISATION}.popcube.xyz"
     traefik.backend.loadbalancer.sticky: "true"
     traefik.backend.loadbalancer.swarm: "true"
     traefik.docker.network: "traefik-net"

Traefik

Configuration

infrastructure/../../_static/infrastructure/lb/traefik_dashboard.png

Statistiques

infrastructure/../../_static/infrastructure/lb/traefik_health.png

Automatisation

Ansible est un outil open-source de gestion de configuration écrit en python (aussi dispo en version commerciale avec une interface graphique et un service de déploiement). La configuration se fait via des fichiers appelés “Playbooks”.

Les avantages :

  • Un système déclaratif : syntaxe YAML facilement lisible, ce qui rend l’apprentissage très rapide.
  • Templating des fichiers de configuration : qui permet d’avoir des fichiers dynamiquement générés en fonction de ce que vous voulez, tel que le rôle du serveur, ou bien dépendant d’un autre serveur. En plus le langage de template par défaut est Jinja2, ça plaira aux amateurs de Django.

Quasiment rien à installer. A part Ansible sur votre machine hôte, tout ce dont vous avez besoin c’est d’un accès root via SSH sur vos serveurs cibles.

Provisionning des machines virtuelles

Nous avons besoin d’automatiser la création de machines virtuelles car elles servent d’hôte pour les conteneurs Docker.

Ainsi, nous pourrons créer autant de stack docker (dans la limite des ressources physiques disponibles).

Exemple de configuration:

- vsphere_guest:
    vcenter_hostname: vcenter.vsphere.local    // On se connecte sur le vCenter qui manage les esxi
    username: user
    password: password
    guest: vm_name
    state: powered_on
    vm_extra_config:                           // On active l'ajout à chaud CPU & RAM
      vcpu.hotadd: yes
      mem.hotadd:  yes
      notes: docker-node
      folder: VM
    vm_disk:                                   // On définit le stockage de la VM
      disk1:
        size_gb: 64
        type: thin
        datastore: ISCSI
        folder: VM
    vm_nic:                                    // On définit le réseau auquel sera connecté la VM
      nic1:
        type: vmxnet3
        network: VM Network
        network_type: standard
    vm_hardware:                               // On spécifie le matériel & l'image iso utilisée
      memory_mb: 8192
      num_cpus: 2
      osid: debian8
      scsi: paravirtual
      vm_cdrom:
        type: "iso"
        iso_path: "Datastore/iso/debian-8.iso"
    esxi:                                      // On indique sur quel ESXi hôte la vm fonctionnera
      datacenter: Datacenter
      hostname: esx1.popcube.xyz

Ajout aux cluster swarm

Pour rejoindre le cluster j’utilise le roles :

Github du roles swarm

Exemple Playbooks:

TASK [atosatto.docker-swarm : Install python-pip.] *****************************
skipping: [sw01] => (item=(0, u'python-pip'))

TASK [atosatto.docker-swarm : Install the Python SNI support packages.] ********
skipping: [sw01] => (item=python-dev)
skipping: [sw01] => (item=libssl-dev)
skipping: [sw01] => (item=libffi-dev)

TASK [atosatto.docker-swarm : Install the Python SNI python-pip dependencies.] ***
skipping: [sw01] => (item=pyopenssl)
skipping: [sw01] => (item=ndg-httpsclient)
skipping: [sw01] => (item=pyasn1)

TASK [atosatto.docker-swarm : Import Docker APT public key.] *******************
skipping: [sw01]

TASK [atosatto.docker-swarm : Install yum-utils if necessary.] *****************
skipping: [sw01]

TASK [atosatto.docker-swarm : Install apt-transport-https if necessary.] *******
skipping: [sw01]

TASK [atosatto.docker-swarm : Add the YUM Docker repository.] ******************
skipping: [sw01]

TASK [atosatto.docker-swarm : Add the APT Docker repository.] ******************
skipping: [sw01]

TASK [atosatto.docker-swarm : Install Docker dependencies.] ********************
skipping: [sw01] => (item=linux-image-extra-virtual)

TASK [atosatto.docker-swarm : Install the Docker Engine.] **********************
skipping: [sw01]

TASK [atosatto.docker-swarm : Enable the Docker daemon as a service and start it.] ***
skipping: [sw01]

TASK [atosatto.docker-swarm : Install docker-py 1.9.0 to fix Ansible issue 17495] ***
skipping: [sw01]

TASK [atosatto.docker-swarm : Install docker-py] *******************************
skipping: [sw01]

TASK [atosatto.docker-swarm : Add the Docker administrators to the Docker group] ***
skipping: [sw01] => (item=root)

TASK [atosatto.docker-swarm : Kill the ansible_user active SSH connections] ****
skipping: [sw01]

TASK [atosatto.docker-swarm : Check if "Swarm Mode" is enabled.] ***************
ok: [sw01]

TASK [atosatto.docker-swarm : Init "Swarm Mode" on the first manager.] *********

Conteneur

Réseaux et dns

Je ping la database de l’organisation de maxime:

docker@docker-02:~$ docker exec -it maxime_api.1.93ms44c6jdslhhazikwbdmrki /bin/sh
/go/src/github.com/titouanfreville/popcubeapi # ping maxime_database
PING maxime_database (10.0.3.4): 56 data bytes
64 bytes from 10.0.3.4: seq=0 ttl=64 time=0.080 ms
64 bytes from 10.0.3.4: seq=1 ttl=64 time=0.092 ms

Depuis la database je ping le conteneur disponible:

docker@docker-02:~$ docker service scale maxime_api=5
docker@docker-03:~$ docker exec -it maxime_database.1.rrppb6d5qaed3cm8n7oa42qes /bin/bash
root@1c32df28a830:/#
root@1c32df28a830:/# ping maxime_api
PING maxime_api (10.0.3.2): 56 data bytes
64 bytes from 10.0.3.2: icmp_seq=0 ttl=64 time=0.053 ms
64 bytes from 10.0.3.2: icmp_seq=1 ttl=64 time=0.100 ms
root@1c32df28a830:/# ping maxime_api.1.m19g9tbv4m6kx4794i1aoi0hh
PING maxime_api.1.m19g9tbv4m6kx4794i1aoi0hh (10.0.3.18): 56 data bytes


root@1c32df28a830:/# dig tasks.maxime_api

    ; <<>> DiG 9.9.5-9+deb8u11-Debian <<>> tasks.maxime_api
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 42947
    ;; flags: qr rd ra; QUERY: 1, ANSWER: 5, AUTHORITY: 0, ADDITIONAL: 0

    ;; QUESTION SECTION:
    ;tasks.maxime_api.              IN      A

    ;; ANSWER SECTION:
    tasks.maxime_api.       600     IN      A       10.0.3.7
    tasks.maxime_api.       600     IN      A       10.0.3.9
    tasks.maxime_api.       600     IN      A       10.0.3.3
    tasks.maxime_api.       600     IN      A       10.0.3.11
    tasks.maxime_api.       600     IN      A       10.0.3.18

    ;; Query time: 0 msec
    ;; SERVER: 127.0.0.11#53(127.0.0.11)
    ;; WHEN: Mon May 29 12:23:16 UTC 2017
    ;; MSG SIZE  rcvd: 194

Le nom de staks et service:

root@1c32df28a830:/# nslookup maxime_api
Server:             127.0.0.11
Address:    127.0.0.11#53

Non-authoritative answer:
Name:       maxime_api
Address: 10.0.3.2

root@1c32df28a830:/# nslookup tasks.maxime_api
Server:             127.0.0.11
Address:    127.0.0.11#53

Non-authoritative answer:
Name:       tasks.maxime_api
Address: 10.0.3.3
Name:       tasks.maxime_api
Address: 10.0.3.11
Name:       tasks.maxime_api
Address: 10.0.3.7
Name:       tasks.maxime_api
Address: 10.0.3.9
Name:       tasks.maxime_api
Address: 10.0.3.18

Mise a jours des conteneurs

Exmple : ajout d’un labels:

docker@docker-02:~$ docker service update maxime_database --update-parallelism 2 --with-registry-auth --container-label-add xyz.popcube.org=maxime
maxime_database

"UpdateStatus": {
        "State": "completed",
        "StartedAt": "2017-05-29T12:11:49.342150133Z",
        "CompletedAt": "2017-05-29T12:12:32.897318749Z",
        "Message": "update completed"
    }
docker@docker-02:~$ docker service update maxime_api
"UpdateStatus": {
            "State": "updating",
            "StartedAt": "2017-05-29T12:36:21.96182509Z",
            "CompletedAt": "1970-01-01T00:00:00Z",
            "Message": "update in progress"
        }

        ID            NAME              IMAGE                                              NODE       DESIRED STATE  CURRENT STATE            ERROR  PORTS
        fg54tw7l62lb  maxime_api.1      registry.popcube.xyz:5000/popcubeapi:alpha-1.1.11  docker-01  Running        Running 2 minutes ago
        m19g9tbv4m6k   \_ maxime_api.1  registry.popcube.xyz:5000/popcubeapi:alpha-1.1.11  docker-03  Shutdown       Shutdown 3 minutes ago
        93ms44c6jdsl   \_ maxime_api.1  registry.popcube.xyz:5000/popcubeapi:alpha-1.1.11  docker-02  Shutdown       Shutdown 27 minutes ago
        xyq4od3bl2l4   \_ maxime_api.1  registry.popcube.xyz:5000/popcubeapi:alpha-1.1.11  docker-01  Shutdown       Shutdown 3 days ago
        vitoudmvt0nd  maxime_api.2      registry.popcube.xyz:5000/popcubeapi:alpha-1.1.11  docker-03  Running        Running 2 minutes ago
        tn1hudgg18ve   \_ maxime_api.2  registry.popcube.xyz:5000/popcubeapi:alpha-1.1.11  docker-01  Shutdown       Shutdown 3 minutes ago
        klvmqfyi3vn9  maxime_api.3      registry.popcube.xyz:5000/popcubeapi:alpha-1.1.11  docker-02  Running        Running 2 minutes ago
        p3opbb8iq86w   \_ maxime_api.3  registry.popcube.xyz:5000/popcubeapi:alpha-1.1.11  docker-02  Shutdown       Shutdown 3 minutes ago
        n9wg7howeasg  maxime_api.4      registry.popcube.xyz:5000/popcubeapi:alpha-1.1.11  docker-01  Running        Running 2 minutes ago
        f75oupbzedf1   \_ maxime_api.4  registry.popcube.xyz:5000/popcubeapi:alpha-1.1.11  docker-01  Shutdown       Shutdown 3 minutes ago
        uhha8n4lajcr  maxime_api.5      registry.popcube.xyz:5000/popcubeapi:alpha-1.1.11  docker-02  Running        Running 2 minutes ago
        34sja7n3xcv5   \_ maxime_api.5  registry.popcube.xyz:5000/popcubeapi:alpha-1.1.11  docker-02  Shutdown       Shutdown 3 minutes ago

Portabilité

Les images se déplace facillement entre les noeuds

Exemple de nos images docker:

registry.popcube.xyz:5000/popcubeapi : 332 MB
registry.popcube.xyz:5000/popcube_website : 18 MB

Monitoring

Grace à l’écoute sur la socket les nodes exploreurs récoltent directement les nouveaux conteneurs qui sont créé.

Reverse Proxy

Selon les labels (swarm) du service, Traefik génére automatiquement la configuration de redirections.

Vue d’ensemble

Voici l’infratructure globale

On retrouve les datacenters, les machines virtuels ainsi que les conteneurs

infrastructure/../../_static/infrastructure/popcube_globale.jpg

Demo d’un utilisateur qui demande la page web popcube.xyz

infrastructure/../../_static/infrastructure/popcube_globale_demo.png

Introduction

PopCube est l’application à utliser si vous avez une petite ou grande équipes. Sa facilité de mise en place

Qui somme nous ?

L’équipe du projet est constitué de 5 membres :

  • Clément LE CORRE (DevOps / Docker designer & marketing)
  • Maxime CORDIER (Front-end & marketing)
  • Titouan FREVILLE (Backend API)
  • Julien PETRIGNET (Infrastructure Design)
  • Jeremy PERSON (Infrastucture Design)

Popcube qu’est ce que c’est ?

PopCube est une application permettant la communication en sein de vôtre équipes. Ses points forts se basent sur la facilité de création d’une organisation (la création d’un serveur acceuillant vos membres) et la multitude de channel possible afin de créer des groupes de travails. Messageries instantanée, communication voix et vidéos, partages de fichiers sont les fonctionalités première de PopCube. Vient ensuite la partie modération et gestion de l’organisation afin de vous permettre de gérer facilement et rapidement vos paramètres.

On ne s’arrête pas la !

PopCube est développer de telle sorte que si vous avez plusieurs groupes de travail, il est possible de les avoirs directement sous une seule application! Il n’est pas nécessaire d’avoir plusieurs fenêtre.

De plus nous avons des idées d’inovation dans un future proche qui vont vous ravir.

Comment on gagne du cash

Free

PopCube est disponible gratuitement pour toutes les équipes allant jusqu’à 30 membres. Cette option permet aux petites équipes d’avoir un logiciel leurs permettant de dialoguer et partager gratuitement. Elle permet aussi à tous ceux qui veulent s’y essayer de comprendre son fonctionement sans avoir à payer.

Elle comprend :

  • Un accès pour 30 membres (Comptes créés sur l’organisation)
  • Possibilité d’ajouter 4bot

Small

Cette option permet aux plus grosses équipes d’utiliser PopCube.

Elle comprend :

  • Un accès jusqu’à 99 membres
  • Possibilité d’ajouter jusqu’a 10 Bot
  • Un accès aux assets des versions N-1

Big

Aucune limite à mon Pouvoir !

Elle comprend :

  • Aucune limite de membres
  • Aucune limite de bot
  • Accès a tous les nouveaux assets (voir Assets)
  • Nom de domain personnalisé (nomdomain.popcube.xyz -> nomdomain.xyz)

Assets

En plus des modèles économiques présenté ci-dessus il sera possible d’acheter des assets développer par nos soins.

  • Emoticon
  • Design différents pour l’organisation
  • Avatar
  • ...

Prochainement dans PopCube

Développement de la structure

Equipe

Nous n’avons pas besoin de ressources supplémentaire pour PopCube. Grâce à notre système de déploiement automatique nous n’avons besoin que d’un support pour nos serveur. En terme de développement, nous voulons garder la cohésion d’équipe que nous avons et permettre la déploiement soutenu de feature.

Réseaux

Notre objectif de cette année est de développer notre réseau de communication au sujet de PopCube. Twitter, facebook et notre forum vont venir vous accompagner pour répondre à vos questions et nous permettre d’être toujours proche de notre communauté afin de tirer le meilleurs de vos commentaires. Vos retours nous importe pour que PopCube reste au top de la communication !