Schéma d'ensemble:

WIP: https://docs.google.com/drawings/d/1XcBPoyq5ult3247B53hDUAO5dkZKzhZ9RvIesUJkpfU/edit

Schéma d'architecture générale de l’hébergement d'application : https://docs.google.com/drawings/d/1DQgSjVRe2zxQ8PNZb9fHDAXTJB7obuBstJPnwpYc_Uw/edit

Schéma d'architecture AFD : https://docs.google.com/drawings/d/1F46iiEIJOeZPLB7m6DexqoZKTIWNW__P7Wz9j7F-Nig/edit

Introduction

AFD est une architecture interne à gadz.org mettant en œuvre les technologies de pseudo-virtualisation Docker dans le but de fournir un hébergement d'applications transactionnelles hétérogènes. Les applications pouvant être des sites Php, des sites Symfony2, des applications RoR, etc.

AFD comprend tous les outils servant à l'administration de la pile "middleware" c'est-à-dire :

  • Nginx pour le reverse proxy,
  • Docker pour la mise a disposition,
  • Ansible pour la génération dynamique des configurations et l'administration,
  • Rundeck pour l'interface de contrôle des opérations.

Architectures supportées

AFD fonctionne à partir de templates Docker pré-installés par les roots qui peuvent être déployés au besoin des projets.

 

Toutes les sources des dockers qui sont autorisées dans notre architecture sont déposées dans le repository github : https://github.com/gadzorg/docker

Ci-dessous le récapitulatif des templates de containers présent sur le github :

 

On peux compiler un template avec les commandes suivantes a lancer en root :

 

cd /opt/docker
git pull
cd <nom du template>
docker build -t <nom du template> .

 

Hébergement php version AFD

Une VM est mise a disposition pour l’hébergement d'applications PHP. Cette VM est anesidora.gorgu.net (Debian + docker).

Conventions

  • Une convention prise est de construire des containers qui ne contiennent que un seul service chacun. 
    C'est à dire que pour un service composé de php-fpm et de nginx il y aura un container pour php-fpm et un container pour nginx.
  • Aucun utilisateur unix n'est dans le groupe "docker" mais il faut passer par la commande sudo  pour exécuter le client docker en cli
  • Docker tourne dans le répertoire /var/lib/docker qui est un point de montage BTRFS sur un LVM nommé : "/dev/mapper/container_data-docker"
  • Chaque service possède un nom alphanumérique sans caractères spéciaux ni espacement
  • Chaque service s’exécute dans un répertoire dédié (voir Arborescence et serveurs)
  • Un container ne doit pas produire des fichiers dans un répertoire interne (exemple si on upload un fichier sur un site le fichier doit être déposé sur data)
  • Les dockers sont nommé avec la convention suivante : <nom du service>-<role du container>

 

Arborescences et serveurs

Ci-dessous un tableau récapitulatif des serveurs et répertoire ou il faut créer le répertoire de service en fonction de l'environnement :

Environnement
Serveur
Répertoire contenant les
Productionanesidora.gorgu.net/mnt/container_data/gorg_prod/
   
   

Ci-dessous la description de arborescence d'un service

 
 
 
Déscription
<nom du service>   
|conf  
|-<role du container>Répertoires qui seront monté dans les containers du même nom sous /etc
|-docker.argsFichiers contenant les arguments a passer a docker pour lancer les containers associés au service
-data Répertoire contenant les données (tel que les sources php, ou le webapps tomcat) contenant le programme
-logs  
|-<role du container>Répertoires qui seront monté dans les containers du même nom sous /var/log dans lequel seront déposés les logs

 

Procédure d'installation d'un nouveau Site PHP en docker :

  • Créer sur le NFS l'arboressance : /www/<nom_du_service>/public_html
  • Créer sur le NFS l'arboressance : /home/<nom_du_service>/home/.ssh
  • Generer une clé ssh pour le serice : ssh-keygen -f /home/<nom_du_service>/id_rsa
  • Ajouter la clé a la liste des autorisation pour le service : cat /home/<nom_du_service>/id_rsa.pub >> /home/<nom_du_service>/home/.ssh/authorized_keys
  • Ajouter la clé de l'adminstrateur du site dans un nouveau fichier /home/<nom_du_service>/authorized_keys
  • Déterminer un nouveau port fastcgi et ssh à l'aide du tableau ci-dessous (en le modifiant) puis créer un fichier /home/<nom_du_service>/sshpiper_upstream dont le contenu est [email protected].net:<nom_du_port_ssh>
  • Configurer les reverse-proxy NGINX ou Apache pour utiliser fastcgi sur le port déterminé
  • Sur Anesidora lancer les commandes suivantes pour initialiser les dockers :
    • Un docker ssh pour la cli et le sftp
    • Un docker php-fpm pour le fastcgi
docker run --name <nom_du_service>_ssh -d -p <num_port_ssh>:22 -v /home/<nom_du_service>/home/:/var/www -v /www/<nom_du_service>/public_html/:/www/<nom_du_service>/public_html gadzorg/gorg-php56-cli
docker run --name <nom_du_service>_phpfpm -d -p <num_port_fastcgi>:9000 -v /www/<nom_du_service>/public_html/:/www/<nom_du_service>/public_html gadzorg/php56-fpm
Nom du siteRépertoirePort FastCGIPortSSH
forumam/var/forumam1900222001
forumamqa/var/forumamqa1900222002

Accéder à un site via ssh

L’accès aux sites est possible via ssh via la commande suivante :

ssh <nom_du_service>@anesidora.gorgu.net -p 2222

Il est aussi possible d’accéder au service via sftp en ajoutant les lignes suivantes au fichier ~/.ssh/config

Host <nom_du_service>
    Hostname anesidora.gorgu.net
    Port 2222
    User <nom_du_service>

Sauvegardes :

  • Tous les dockers sont sauvegardés dans : /mnt/container_data/gorg_prod/container_backup via un cron puis externalisé sur le serveurs de sauvegardes
# cat /etc/cron.d/backup 
# The first element of the path is a directory where the debian-sa1
# script is located
PATH=/usr/lib/sysstat:/usr/sbin:/usr/sbin:/usr/bin:/sbin:/bin
0 0 * * * root docker ps | grep -Ev "^CONTAINER" | while read line; do name=`echo $line | sed "s/.* \(.*\)/\1/"`; id=`echo $line | sed "s/^\([0-9a-z]*\) .*/\1/"` ; docker export -o /mnt/container_data/gorg_prod/container_backup/${name}.tar $id; done; gzip /mnt/container_data/gorg_prod/container_backup/*.tar

  • Le NFS /www est sauvegardé avec la VM du serveur NFS

Monitoring

TODO : Expliquer le système de monitoring, mettre en place des sondes

http://graphana.tum.gorgu.net/#/dashboard/file/Anesidora.json

Procédures d'administrations

Rancher

Intro à Rancher

Todo

Rancher est accésible depuis http://rancher-afd.gorgu.net:8080

Installation et configuration

Todo

 

 


Articles connexes

Aucun contenu ne comporte les étiquettes spécifiées


 

  • Aucune étiquette