Github, clés secrètes et autres paramètres locaux

Comment vous assurer que les mots de passe de votre projet ne se retrouvent pas sur le net.

5 Juillet 2020 14:32

La plupart d'entre vous connaissent Github et savent que vous ne devez pas mettre des éléments tels que des clés secrètes, des mots de passe de messagerie, des mots de passe de base de données, etc. dans votre référentiel. Il existe de nombreuses façons de le faire, certains utilisent des programmes distincts pour cela, certains ajustent manuellement les fichiers de paramètres. Il y a une approche assez simple utilisée par Wagtail qu'on expliquera ci-dessous: mettre tous les paramètres communs dans un fichier base.py, tous les paramètres de développement non secrets spécifiques dans dev.py, tous les paramètres de production non secrets spécifiques dans production.py et seuls les paramètres secrets dans un fichier local.py qui existe localement et sur le serveur, mais qui n'est jamais téléchargé sur Github.

Pour montrer comment cela fonctionne, on utilisera notre projet pet comme exemple; cela fonctionnera de la même manière pour n'importe quel projet. On montrera brièvement comment mettre en place un référentiel pour le projet; si vous êtes familier avec cela, sautez ça.

Cela peut également être un bon moment pour créer votre fichier README.md et votre fichier de licence. Créez un fichier README.md, mettez un signe # sur la première ligne, suivi du titre de votre projet. Il existe de nombreuses options pour les licences, la licence MIT est très courante, alors créez un fichier MIT-LICENSE.txt, copiez le texte de la licence et collez-le dans le fichier.

Créez un référentiel git; on l'appellera pet. Copiez le <link> dans le référentiel. Accédez au répertoire du projet sur votre ordinateur. Tapez les commandes suivantes:

git init
git remote add origin <link>

Cela initialise git dans votre répertoire de projet et le lie au référentiel distant. La prochaine chose à faire est de dire à git quoi synchroniser, ou mieux, ce qu'il ne faut PAS synchroniser, dans le fichier .gitignore. Créez le fichier et ajoutez au moins le contenu suivant (contenu complet disponible):

db.sqlite3
env/
.env
local.py
*.mo
.coverage
media/**

La plupart de ce qu'on ne veut pas dans notre référentiel est explicite: fichiers de base de données, fichiers d'environnement virtuel, compilation de traduction (* .mo), résultats de test (.coverage). On ne veut pas non plus de fichiers multimédias, car cela prendra de l'espace inutile, on doit de toute façon les télécharger directement sur notre serveur de production et le retrait de fichiers multimédias du référentiel peut provoquer des conflits. Mais assurez-vous de sauvegarder vos fichiers multimédias! On reviendra dans le fichier de paramètres local.py dans une minute. Tapez d'abord ce qui suit:

git add .
git commit -m "initial commit"
git push -u origin master

Tout le contenu est maintenant dans votre référentiel distant. Chaque fois que vous souhaitez mettre à jour votre référentiel distant, répétez les trois dernières commandes (avec ""initial commit" remplacé par un message significatif). Il y a beaucoup de tutoriels sur git disponibles, on en reste là.

Sur notre fichier local.py. Wagtail a l'intention d'utiliser ce fichier pour les paramètres locaux qui ne devraient jamais être suivis, tels que les clés secrètes et les mots de passe. Les paramètres de développement sont dans dev.py, si vous vérifiez ce fichier, vous voyez que, comme dernière étape, il essaie d'importer local.py. La clé secrète se trouve également dans dev.py. Créez donc local.py et mettez une clé (vraiment) secrète qui ne sera pas suivie. Django a une fonction pour ça. Ouvrez le shell Django avec:

python3 manage.py shell

À l'invite, tapez:

from django.core.management.utils import get_random_secret_key
get_random_secret_key()

Copiez la phrase avec la clé secrète et sortez le shell avec Ctrl-D. Mettez dans local.py:

SECRET_KEY = '<the secret key>'

Cela remplacera celui de dev.py. En production, on doit copier le local.py manuellement sur le serveur une fois; puisque production.py importe également local.py, la clé secrète sera également disponible pour la production.

Il en va de même pour les paramètres de votre base de données. Si vos paramètres de base de données se trouvent dans base.py, retirez-les et collez-les dans votre fichier local.py. Si vous souhaitez modifier le mot de passe de l'utilisateur, tapez psql postgres pour accéder à l'invite de commande psql et tapez:

ALTER USER usr_pet WITH PASSWORD '<new password>';

Remarque: pour les tests automatiques, Travis a besoin d'un environnement de production à distance, donc lors de l'utilisation de Travis, on devra ajouter quelques paramètres minimaux; mais c'est pour plus tard.

On mettra également nos paramètres de messagerie pour l'authentification dans local.py; si vous voulez en savoir plus, continuez à lire.

Commentez cet article (connectez-vous d'abord ou confirmez par nom et email ci-dessous)