Giter Club home page Giter Club logo

abesstp-docker's Introduction

abesstp-docker

Configuration docker 🐳 pour déployer l'application AbesStp (outil de ticketing de l'Abes)

Le code source (non opensource car vieux code) d'AbesSTP est accessible ici : https://git.abes.fr/depots/abesstp/

URLs de l'application :

Installation d'AbesSTP

Pour installer AbesStp depuis zéro, un prérequis et de disposer d'un serveur ayant docker (>= 20.10.7) et docker-compose (>= 1.28.5). Ensuite il est nécessaire de dérouler les étapes suivantes :

cd /opt/pod/
git clone https://github.com/abes-esr/abesstp-docker/

# récupération du code source d'AbesSTP (non ouvert)
# pour qu'il puisse être embarqué dans l'image d'abesstp-web
cd /opt/pod/abesstp-docker/
git clone https://git.abes.fr/depots/abesstp.git ./images/abesstp-web/src/

# indiquez les mots de passes souhaités et les différents paramètres
# en personnalisant le contenu de .env (ex: mot de passes mysql et param smtp)
cp .env-dist .env

# copier le contenu de files/assistance/ depuis les dernières sauvegardes (pièces jointes des tickets AbesSTP)
rsync -rav \
  sotora:/backup_pool/diplotaxis2-prod/daily.0/racine/opt/pod/abesstp-docker/volumes/abesstp-web/files-assistance/ \
  ./volumes/abesstp-web/files-assistance/

# import du dump de la bdd depuis les dernières sauvegardes
# A noter : le temps de chargement prend environ 5 minutes
docker-compose up -d abesstp-db
rsync -ravL sotora:/backup_pool/diplotaxis2-prod/daily.0/racine/opt/pod/abesstp-docker/volumes/abesstp-db/dump/latest.svp.sql.gz .
gunzip -c latest.svp.sql.gz | docker exec -i abesstp-db bash -c 'mysql --user=root --password=$MYSQL_ROOT_PASSWORD svp'

# construction des images docker spécifiques à AbesSTP
# (facultatif car elles seront automatiquement construites au démarrage si elles ne sont pas en cache)
docker-compose build

Installation d'AbesSTP en local, dev, et test

Pour déployer abesstp-docker en local, en dev ou en test il faut également lancer cette commande qui aura pour effet de générer un fichier docker-compose.override.yml qui mettra à disposition les outils phpmyadmin et mailhog dans des conteneurs dédiés (cf section plus bas) :

cd /opt/pod/abesstp-docker/
echo "version: '3'
services:
  # ajout du conteneur mailhog
  # avec surcharge des autres conteneurs
  abesstp-mailhog:
    extends:
      file: docker-compose.mailhog.yml
      service: abesstp-mailhog
  abesstp-web:
    extends:
      file: docker-compose.mailhog.yml
      service: abesstp-web
  abesstp-web-clamav:
    extends:
      file: docker-compose.mailhog.yml
      service: abesstp-web-clamav
  abesstp-web-cron:
    extends:
      file: docker-compose.mailhog.yml
      service: abesstp-web-cron
  # ajout du conteneur phpmyadmin
  abesstp-phpmyadmin:
    extends:
      file: docker-compose.phpmyadmin.yml
      service: abesstp-phpmyadmin
" > docker-compose.override.yml

Démarrage d'AbesSTP

Pour démarrer abesstp pour la production :

cd /opt/pod/abesstp-docker/
docker-compose up -d

Il est alors possible d'acceder a abesstp sur l'URL suivante :

Arret et redémarrage d'AbesSTP

cd /opt/pod/abesstp-docker/
docker-compose stop

# si besoin de relancer abesstp
docker-compose restart

Configuration de l'URL publique d'AbesSTP

Pour accéder à AbesSTP il est possible d'utiliser son URL interne (en HTTP) à des fins de tests :

Mais pour l'utilisateur final il est nécessaire de faire correspondre une URL publique en HTTPS :

L'architecture mise en place pour permettre ceci est la configuration du reverse proxy de l'Abes (raiponce) qui permet d'associer l'URL publique en HTTPS avec l'URL interne d'AbesSTP. Voici un extrait de la configuration Apache permettant de paramétrer l'URL de https://stp-test.abes.fr/ sur son URL interne http://diplotaxis2-test.v202.abes.fr:29800/ :

<VirtualHost *:443>
  ServerName stp-test.abes.fr
  ServerAdmin [email protected]
  ProxyPreserveHost On

  SSLEngine on
  SSLProxyEngine on
  SSLCertificateFile /etc/pki/tls/certs/__abes_fr_cert.cer
  SSLCertificateKeyFile /etc/pki/tls/private/abes.fr.key
  SSLCertificateChainFile /etc/pki/tls/certs/__abes_fr_interm.cer

  Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED
  <Proxy balancer://cluster-stp-diplotaxis>
    BalancerMember http://diplotaxis2-test.v202.abes.fr:29800 loadfactor=1 connectiontimeout=600 timeout=600
    ProxySet stickysession=ROUTEID
  </Proxy>

  <Location / >
    ProxyPass        "balancer://cluster-stp-diplotaxis/"
    ProxyPassReverse "balancer://cluster-stp-diplotaxis/"
  </Location>
</VirtualHost>

Les configurations complètes et à jour se trouvent dans /etc/httpd/conf.app/stp.conf sur les serveurs raiponce1 (test ou prod).

Sauvegarde d'AbesSTP

Les sauvegardes doivent être paramétrées sur ces répertoires clés :

  • la base de données : des dumps sont générés automatiquement toutes les nuits dans /opt/pod/abesstp-docker/volumes/abesstp-db/dump/
  • le répertoire /opt/pod/abesstp-docker/volumes/abesstp-web/files-assistance/ car on y retrouve les pièces jointes (fichiers) des tickets d'AbesSTP dans le sous répertoire files/assistance/

Les chemins volumineux à d'exclure des sauvegardes sont les suivants :

  • /opt/pod/abesstp-docker/volumes/abesstp-db/mysql/* : car il contient les données binaires de la base de données mysql

Pour restaurer les pièces jointes aux tickets AbesSTP depuis les sauvegardes :

cd /opt/pod/abesstp-docker/
rsync -rav \
  sotora:/backup_pool/diplotaxis2-prod/daily.0/racine/opt/pod/abesstp-docker/volumes/abesstp-web/files-assistance/ \
  ./volumes/abesstp-web/files-assistance/

Pour restaurer la base de données depuis un dump :

cd /opt/pod/abesstp-docker/

# récupération du dump depuis le serveur de sauvegardes
rsync -ravL sotora:/backup_pool/diplotaxis2-test/daily.0/racine/opt/pod/abesstp-docker/volumes/abesstp-db/dump/latest.svp.sql.gz .

# s'assurer que le conteneur abesstp-db est lancé
docker-compose up -d abesstp-db

# lancer la commande suivante pour reinitialiser la base de donnees a partir du dump
gunzip -c latest.svp.sql.gz | docker exec -i abesstp-db bash -c 'mysql --user=root --password=$MYSQL_ROOT_PASSWORD svp'

Pour mémo, si on souhaite sauvegarder ponctuellement la base de données, la commande suivante fait l'affaire :

# generation du dump de la base de donnees
docker exec -i abesstp-db bash -c 'mysqldump --user=root --password=$MYSQL_ROOT_PASSWORD svp' > dump.sql

Debug d'AbesSTP

Pour lancer l'application avec tous les outils d'administration et de debug vous devez générer le fichier docker-compose.override.yml comme indiqué dans la procédure d'installation plus haut. Cette configuration permettra de lancer les deux conteneurs décrits ci-dessous : phpmyadmin et mailhog.

phpmyadmin

Le conteneur abesstp-phpmyadmin propose l'outil phpmyadmin pour administrer la base mysql d'AbesSTP, sont URL est :

mailhog

Le conteneur abesstp-mailhog propose l'outil mailhog qui permet de simuler un serveur de mail (SMTP) fictif. Il intercepte ainsi les mails envoyés par abesstp et propose une interface web pour les consulter.

Il est alors possible d'acceder a mailhog sur l'URL suivante :

Vous pouvez alors par exemple créer un ticket dans abesstp et le mail de notification ne sera pas réèlement envoyé car il sera intercepté par mailhog.

logs

cd /opt/pod/abesstp-docker/
docker-compose logs

Architecture d'AbesSTP

Les versions des middleware utilisés par AbesStp avant sa dockerisation (date de la mep 21/10/2021, avant les serveurs se nommaient typhon-prod et tourbillon) sont :

  • apache 2.2.15 et php 5.3.3 : pour l'application en drupal6/php d'AbesStp
  • mysql 5.1.73 : pour la base de donnees mysql d'AbesStp

Les images docker utilisées pour faire tourner abesstp sont les suivantes :

Les conteneurs docker suivants sont alors disponibles et préèconfiguré via les fichiers docker-compose*.yml :

  • abesstp-web : conteneur qui contient l'application drupal/php d'abesstp
  • abesstp-web-cron : conteneur qui
    • appelle le fichier cron.php de drupal toutes les minutes,
    • lance la surveillance de files/ avec le script liens.sh,
    • supprime les fichiers *.php qui pourraient être uploadés dans files/assistance/,
    • supprime les vielles (datant de plus de 365 jours) pièces jointes d'AbesSTP (files/assistance/) pour faire du ménage
  • abesstp-web-clamav : conteneur qui va scanner files/assistance/ pour vérifier la présence d'éventuels virus uploadés par les utilisateurs en pj des tickets
  • abesstp-db : conteneur qui contient la base de données mysql nécessaire au drupal d'abesstp
  • abesstp-db-dumper : conteneur qui va dumper chaques nuits la base de données en gardant un petit historique
  • abesstp-phpmyadmin : conteneur utilisé pour administrer la base de données (utile uniquement pour le debug)
  • abesstp-mailhog : conteneur utilisé pour intercepter et visualiser les mails envoyés à l'exterieur depuis l'application abesstp (utile uniquement pour le debug)

Les volumes docker suivants sont utilisés :

  • volumes/abesstp-web/files-assistance/ : contient les pièces jointes des tickets d'AbesSTP
  • volumes/abesstp-db/mysql/ : contient les données binaires mysql de la base de données d'abesstp
  • volumes/abesstp-db/dump/ : contient les dumps de la base de données d'abesstp (générés quotidiennement)

Le schéma permettant de résumer l'architecture est le suivant :

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.