betagouv / aides-jeunes-ops

Stack setup for Mes Aides
0 stars 1 forks source link

Mise en production #23

Closed guillett closed 7 years ago

guillett commented 7 years ago
guillett commented 7 years ago

Bascule upstream

J'ai réalisé des tests pour la redirection via un upstream mais en fait les choses peuvent être simplifiées car il n'y a qu'un serveur dans le upstream.

J'ai donc préparé les fichiers :

/etc/nginx/conf.d/dds.conf_PRE_UPSTREAM_CHANGE /etc/nginx/conf.d/dds.conf_POST_UPSTREAM_CHANGE Dont le diff est le suivant :

44c44
<         proxy_pass  http://dds/tests;
---
>         proxy_pass  https://vps.mes-aides.gouv.fr/tests;
66c66
<         proxy_pass  http://dds;
---
>         proxy_pass  https://vps.mes-aides.gouv.fr;

Le script de déploiement est donc :

cp -f /etc/nginx/conf.d/dds.conf_POST_UPSTREAM_CHANGE /etc/nginx/conf.d/dds.conf && sudo service nginx restart

Celui de rollback :

cp -f /etc/nginx/conf.d/dds.conf_PRE_UPSTREAM_CHANGE /etc/nginx/conf.d/dds.conf && sudo service nginx restart

@MattiSG cela te semble bon/pertinent ?

MattiSG commented 7 years ago

👍

guillett commented 7 years ago

Mise en commun des différentes DBs

J'ai en tête ces DBs :

@MattiSG Penses-tu à d'autres ? Faut-il mettre en commun avec les autres DBs (/home/mongodb/data/mes-aides-aah/rennes) ?

MattiSG commented 7 years ago

Celle du VPS si elle est utilisée. Oui, intégrer mes-aides-aah me semblerait pertinent. rennes a été il me semble déjà intégrée.

guillett commented 7 years ago

Copie de la base de données

Etant donné le problème de dimensionnement du VPS (espace disque) et comme suggéré par @MattiSG , j'ai limité l'exportation des situations à celles utilisées par les tests.

J'ai utilisé le script suivant largement inspiré du script d'importation des tests :


USER=root
DATABASE=dds

NOW=$(date +"%F-%H-%M-%S")
#NOW=2017-05-04-10-06-03 # Hardcoded value used to safely repeat parts of the script
DISTANT_DUMP_FOLDER="~/dumps/dump-$NOW"
LOCAL_DUMP_FOLDER='./dump-migration'
DEST_DUMP_FOLDER="/var/tmp"/$(basename $DISTANT_DUMP_FOLDER)

echo $NOW

ssh $USER@mes-aides.gouv.fr "mongodump --db $DATABASE && mongodump --db dds --collection situations --query '{status:\"test\"}' && mkdir -p `dirname $DISTANT_DUMP_FOLDER` && mv dump $DISTANT_DUMP_FOLDER/ && gzip -rv $DISTANT_DUMP_FOLDER"
scp -r $USER@mes-aides.gouv.fr:$DISTANT_DUMP_FOLDER/$DATABASE $LOCAL_DUMP_FOLDER
ssh $USER@vps274040.ovh.net "mkdir -p $DEST_DUMP_FOLDER"
scp -r $LOCAL_DUMP_FOLDER/* $USER@vps274040.ovh.net:$DEST_DUMP_FOLDER/
ssh $USER@vps274040.ovh.net "gunzip -r $DEST_DUMP_FOLDER && mongorestore --db $DATABASE $DEST_DUMP_FOLDER"
guillett commented 7 years ago

Tentative de copie entière vers le VPS

Script utilisé

USER=root
DATABASE=dds

for iter in 0 1 2 3 4 5 6 7 8
do
    NOW=$(date +"%F-%H-%M-%S")
    DISTANT_DUMP_FOLDER="~/dumps/dump-$NOW"
    LOCAL_DUMP_FOLDER="./dump-migration-$NOW"
    DEST_DUMP_FOLDER="/var/tmp"/$(basename $DISTANT_DUMP_FOLDER)

    SKIP=$(expr $iter \* 100000)
    HIGH=$(ssh $USER@mes-aides.gouv.fr "mongo dds --eval \"db.situations.find().skip($SKIP).limit(1).sort({dateDeValeur:1})[0]._id\" --quiet")
    if [[ $? -ne 0 ]]
    then
        HIGH=''
    fi
    echo $HIGH

    if [ $LOW ]
    then
        echo now: $NOW - iter: $iter - high: $HIGH - low: $LOW
        if [ $HIGH ]
        then
            QUERY="{_id: {\$gte: $LOW, \$lte: $HIGH}}"
        else
            QUERY="{_id: {\$gte: $LOW}}"
        fi
        echo $QUERY
        ssh $USER@mes-aides.gouv.fr "mongodump --db dds --collection situations --query '$QUERY' && mkdir -p `dirname $DISTANT_DUMP_FOLDER` && mv dump $DISTANT_DUMP_FOLDER/ && gzip -rv $DISTANT_DUMP_FOLDER" &&
        scp -r $USER@mes-aides.gouv.fr:$DISTANT_DUMP_FOLDER/$DATABASE $LOCAL_DUMP_FOLDER &&
        ssh $USER@vps274040.ovh.net "mkdir -p $DEST_DUMP_FOLDER" &&
        scp -r $LOCAL_DUMP_FOLDER/* $USER@vps274040.ovh.net:$DEST_DUMP_FOLDER/ &&
        ssh $USER@vps274040.ovh.net "gunzip -r $DEST_DUMP_FOLDER && mongorestore --db $DATABASE $DEST_DUMP_FOLDER && rm -fr $DEST_DUMP_FOLDER"
    fi

    LOW=$HIGH
done

Pas possible avec le VPS de 10Go. Revert vers le serveur dédié et extraction des données dans la DB du VPS.

guillett commented 7 years ago

Suivi du service sur le VPS

guillett commented 7 years ago

Mise en commun des différentes DBs

@MattiSG @fpagnoux Puis-je considérer que mes-aides-aah et mes-aides-rennes ne sont plus utilisées/alimentées ?

Je souhaite tirer un trait et considérer qu'une fois les migrations vers la base de donnée principale faites, les fichiers des base de données importées peuvent être supprimés.

guillett commented 7 years ago

@MattiSG Peux-on imaginer mes-aides sur un VPS avec des specs acceptables, à la place du serveur dédié ?

Voici les possibilités données par OVH :

guillett commented 7 years ago

Mise en commun des DBs

J'ai importé hier soir les base de données /var/lib/mongodb/*.

Détails des tests récupérés dans mes-aides-aah :

{ "_id" : ObjectId("573acf0f67831ca264e93d31"), "scenario" : { "situationId" : "573acc4e67831ca264e93d13" }, "state" : "unclaimed" }
{ "_id" : ObjectId("5783568267831ca264e93d3e"), "scenario" : { "situationId" : "5783561c67831ca264e93d3b" }, "state" : "unclaimed" }
{ "_id" : ObjectId("579a615367831ca264e93d75"), "scenario" : { "situationId" : "579a610567831ca264e93d5a" }, "state" : "unclaimed" }
{ "_id" : ObjectId("579b27b367831ca264e93d7e"), "scenario" : { "situationId" : "579b27af67831ca264e93d7c" }, "state" : "unclaimed" }
{ "_id" : ObjectId("57a88c2167831ca264e93da6"), "scenario" : { "situationId" : "57a88b8367831ca264e93d8b" }, "state" : "unclaimed" }
{ "_id" : ObjectId("582b06f467831ca264e93def"), "scenario" : { "situationId" : "582b06e667831ca264e93de5" }, "state" : "validated" }
{ "_id" : ObjectId("582b0cb067831ca264e93e2b"), "scenario" : { "situationId" : "582b0c8e67831ca264e93e1b" }, "state" : "unclaimed" }
{ "_id" : ObjectId("582b0d0167831ca264e93e3a"), "scenario" : { "situationId" : "582b0ce367831ca264e93e36" }, "state" : "validated" }
{ "_id" : ObjectId("58bd27044aa60a680a741e7a"), "scenario" : { "situationId" : "58bd260d4aa60a680a741e68" }, "state" : "validated" }
{ "_id" : ObjectId("582b113667831ca264e93e72"), "scenario" : { "situationId" : "582b111867831ca264e93e6e" }, "state" : "validated" }
{ "_id" : ObjectId("58bd2b774aa60a680a741ea2"), "scenario" : { "situationId" : "58bd2b214aa60a680a741e97" }, "state" : "validated" }
{ "_id" : ObjectId("58bd2e7e4aa60a680a741ec0"), "scenario" : { "situationId" : "58bd2de64aa60a680a741eb4" }, "state" : "validated" }
{ "_id" : ObjectId("58bd31f84aa60a680a741ef3"), "scenario" : { "situationId" : "58bd31944aa60a680a741ee3" }, "state" : "validated" }
MattiSG commented 7 years ago

VPS avec des specs acceptables, à la place du serveur dédié ?

Absolument, mais gardons une marge pour supporter un pic ×10.

fpagnoux commented 7 years ago

Puis-je considérer que mes-aides-aah et mes-aides-rennes ne sont plus utilisées/alimentées ?

Ok pour Rennes. Pour l'AAH, le dernier test date du 6 mars, je pense que c'est bon. On est bien d'accord que les tests existant seront migrés et pas supprimés ? Il y aura peut être un coup de migration à faire pour ces tests d'aileurs.

guillett commented 7 years ago

Oui bien sûr, pas de suppressions mais des migrations !

guillett commented 7 years ago

J'ai installé nvm sur le serveur dédié pour tester le passage en Node V6.

La commande suivante permet d'utiliser NVM dans les scripts de lancement de services :

sed --in-place 's/exec node server/exec bash -c \x27source \/home\/deploy\/.nvm\/nvm.sh \&\& exec node server\x27/' *.conf

L'idée est de modifier la version de Node par défaut en même temps que mes-aides-ui est déployé.

guillett commented 7 years ago

Création certificat SSL sur le VPS via un proxy sur le serveur dédié

root@sgmap1:~> diff /etc/nginx/conf.d/dds.conf_PRE_WELL_KNOWN_CHANGE /etc/nginx/conf.d/dds.conf_POST_WELL_KNOWN_CHANGE
15c15,23
<     return 301 https://mes-aides.gouv.fr$request_uri;
---
>
>     location /.well-known {
>         proxy_pass  http://vps.mes-aides.gouv.fr;
>         proxy_redirect off;
>     }
>
>     location / {
>         return 301 https://mes-aides.gouv.fr$request_uri;
>     }

Le script de déploiement est donc :

cp -f /etc/nginx/conf.d/dds.conf_POST_WELL_KNOWN_CHANGE /etc/nginx/conf.d/dds.conf && sudo service nginx restart

Celui de rollback :

cp -f /etc/nginx/conf.d/dds.conf_PRE_WELL_KNOWN_CHANGE /etc/nginx/conf.d/dds.conf && sudo service nginx restart

@MattiSG cela te semble bon/pertinent ?

guillett commented 7 years ago

Diff de la zone DNS pre/post

Use VPS IP for root item and VPS name for everything else.

6c6
<                       IN A      37.187.147.133
---
>                       IN A      51.255.164.228
20c20
< monitor               IN A      37.187.147.133
---
> monitor               IN CNAME  vps274040.ovh.net.
24c24
< simuler               IN A      37.187.147.133
---
> simuler               IN CNAME  vps274040.ovh.net.
31c31
< www.simuler        60 IN TXT    "4|https://simuler.mes-aides.gouv.fr"
---
> www.simuler        60 IN TXT    "4|http://simuler.mes-aides.gouv.fr"

Note: Redirection de www.simuler vers root.

guillett commented 7 years ago
root@sgmap1:~# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/root        20G   15G  3.5G  82% /
devtmpfs         32G  4.0K   32G   1% /dev
none            4.0K     0  4.0K   0% /sys/fs/cgroup
none            6.3G  940K  6.3G   1% /run
none            5.0M     0  5.0M   0% /run/lock
none             32G     0   32G   0% /run/shm
none            100M     0  100M   0% /run/user
/dev/md3        1.8T   47G  1.7T   3% /home
guillett commented 7 years ago

Je déclare cet issue officieusement fermé 💃