Github, geheime sleutels en andere lokale instellingen

Hoe ervoor te zorgen dat de wachtwoorden van je project niet op het internet terechtkomen.

5 juli 2020 14:32

De meeste lezers zullen Github kennen en weten dat je geen geheime sleutels, e-mailwachtwoorden, databasewachtwoorden enz. in je repository moet plaatsen. Er zijn veel manieren om dat te waarborgen, sommigen gebruiken daarvoor aparte programma's, sommigen passen instellingenbestanden handmatig aan. Er is een vrij eenvoudige benadering die door Wagtail wordt gebruikt en die we hieronder zullen uitleggen: zet alle algemene instellingen in een bestand base.py, alle specifieke niet-geheime ontwikkelingsinstellingen in dev.py, alle specifieke niet-geheime productie-instellingen in production.py en alleen de geheime instellingen in een bestand local.py dat lokaal en op de server bestaat, maar nooit wordt geüpload naar Github.

Om te laten zien hoe dat werkt, gebruiken we ons project pet als voorbeeld; het werkt voor elk project op dezelfde manier. We zullen kort laten zien hoe je een repository voor het project opzet; als je daar bekend mee bent, sla gerust over.

Dit kan ook een goed moment zijn om een README.md en licentiebestand te maken. Maak een README.md-bestand, plaats een # -teken op de eerste regel, gevolgd door de titel van je project. Er zijn veel opties voor licenties, de MIT-licentie is heel gebruikelijk, dus maak een bestand MIT-LICENSE.txt, kopieer de licentietekst en plak deze in het bestand.

Maak een git repository; we noemen de onze pet. Kopieer de <link> naar de repository. Ga naar de projectdirectory op uw computer. Typ de volgende opdrachten:

git init
git remote add origin <link>

Dit initialiseert git in uw projectdirectory en koppelt deze aan de externe repository. Het volgende dat je moet doen is git vertellen wat te synchroniseren, of beter, wat NIET te synchroniseren, in het .gitignore-bestand. Maak het bestand en voeg ten minste de volgende inhoud toe (volledige inhoud beschikbaar):

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

Het meeste van wat we niet willen in onze repository spreekt voor zich: databasebestanden, virtuele omgevingsbestanden, vertaalcompilatie (* .mo), testresultaten (.coverage). We willen ook geen mediabestanden, omdat het onnodige ruimte in beslag neemt, we moeten ze hoe dan ook rechtstreeks naar onze productieserver uploaden en het ophalen van mediabestanden uit de repository kan conflicten veroorzaken. Maar zorg ervoor dat je een back-up maakt van uw mediabestanden! We komen zo terug op het instellingenbestand local.py. Typ eerst het volgende:

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

Alle inhoud staat nu in je externe repository. Herhaal elke keer dat je je externe repository wilt bijwerken de laatste drie opdrachten (met "initial commit" vervangen door een zinvol bericht). Er zijn veel tutorials over git beschikbaar, dus laten we het hierbij.

Op naar ons local.py-bestand. Wagtail heeft bedoeld dit bestand te gebruiken voor lokale instellingen die nooit mogen worden bijgehouden, zoals geheime sleutels en wachtwoorden. Ontwikkelingsinstellingen zijn in dev.py, als je dit bestand controleert, zie je dat het als laatste stap probeert om local.py te importeren. De geheime sleutel staat ook in dev.py. Dus maak local.py en laten we een (echt) geheime sleutel erin stoppen die niet wordt bijgehouden. Django heeft daar een functie voor. Open de Django-shell met:

python3 manage.py shell

Typ na de prompt:

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

Kopieer de string met de geheime sleutel en verlaat de shell met Ctrl-D. Plaats in local.py:

SECRET_KEY = '<the secret key>'

Dit overschrijft die in dev.py. Tijdens productie moeten we de local.py één keer handmatig naar de server kopiëren; aangezien production.py ook local.py importeert, zal de geheime sleutel ook beschikbaar zijn voor productie.

Hetzelfde geldt voor de database-instellingen. Als je database-instellingen in base.py staan, haal ze er dan uit en plak ze in je local.py-bestand. Als je het wachtwoord van de gebruiker wilt wijzigen, typ psql postgres om naar de psql-opdrachtprompt te gaan en vervolgens:

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

Opmerking: voor automatisch testen heeft Travis een werkende externe productieomgeving nodig, dus bij het gebruik van Travis zullen we een paar minimale instellingen moeten toevoegen; maar dat is voor later zorg.

We plaatsen ook onze e-mailinstellingen voor authenticatie in local.py; als je meer wilt weten, lees dan verder.

Reageer op dit artikel (log eerst in of bevestig hieronder met naam en email)