Projet en construction
Il existe 2 méthodes distinctes d'installation pour ce projet :
- l'installation manuelle classique
- l'installation automatique via un devcontainer (nécessite Docker et VS Code)
- l'installation avec Docker
- Python3 (version 3.11)
- poetry (
pip install poetry==1.7.1
) - Node et npm (version 20 LTS)
- Postgres (version 15)
Pour installer les dépendances du backend :
poetry install
Cette action créera aussi un environnement virtuel automatiquement. Il n'est donc pas nécessaire d'utiliser un autre outil.
Pour activer l'environnement virtuel, s'assurer d'être à la racine du projet et lancer :
poetry shell
L'application frontend se trouve sous /frontend
. Pour installer les dépendances :
cd frontend
npm install
Par exemple, pour utiliser une base de données nommée complalim_db :
createdb complalim_db
Le user doit avoir les droits de creation
sudo su postgres
postgres=# create user <DB_USER> createdb password <DB_PASSWORD>;
On utilise l'outil pre-commit
pour effectuer des vérifications automatiques
avant chaque commit. Cela permet par exemple de linter les code Python, Javascript et HTML.
Pour pouvoir l'utiliser, assurez-vous d'être dans votre environnement virtuel, et activez-le avec pre-commit install
.
Les vérifications seront ensuite effectuées avant chaque commit. Attention, lorsqu'une vérification fail
,
le commit est annulé. Il faut donc que toutes les vérifications passent pour que le commit soit pris en
compte. Si exceptionnellement vous voulez commiter malgré qu'une vérification ne passe pas, c'est possible
avec git commit -m 'my message' --no-verify
.
- Installer Docker Desktop
- Installer l'extension Dev Containers dans VS Code
- Dans VS Code, lancer la commande
Clone Repository in Container Volume
et suivre les instructions. Le container va alors être créé. - Une fois le container créé, si une icône de chargement reste présente sur l'icône des extensions dans le menu gauche (bug VS Code), lancer la commande
Reload Window
pour régler le soucis.
docker compose build
docker compose up
docker compose run -rm server bash
python manage.py migrate
Suivre les instructions pour initialiser la BDD et créer un super user.
À suivre peu importe la méthode d'installation choisie
L'application utilise django-environ, vous pouvez donc créer un fichier .env
à la racine du projet avec ces variables définies :
SECRET= Le secret pour Django (vous pouvez le [générer ici](https://djecrety.ir/))
DEBUG= `True` pour le développement local ou `False` autrement
DB_USER= L'utilisateur de la base de données. Doit avoir les droits de creation de db pour les tests.
DB_PASSWORD= Le mot de passe pour accéder à la base de données
DB_HOST= Le host de la base de données (par ex. '127.0.0.1')
DB_PORT= Le port de la base de données (par ex. '3306')
DB_NAME= Le nom de la base de données (par ex. 'complements-alimentaires'
HOSTNAME= Le hostname dans lequel l'application se trouve (par ex. 127.0.0.1:8000)
ALLOWED_HOSTS= Des noms de domaine/d’hôte que ce site peut servir (par ex. 'localhost, \*')
EMAIL_BACKEND= par ex. 'django.core.mail.backends.console.EmailBackend'. Pour utiliser SendInBlue : 'anymail.backends.sendinblue.EmailBackend'
DEFAULT_FROM_EMAIL= par ex. 'from@example.com'
CONTACT_EMAIL= par ex. 'contact@example.com'
STATICFILES_STORAGE= Le système utilisé pour les fichiers statiques (par ex. 'django.contrib.staticfiles.storage.StaticFilesStorage')
DEFAULT_FILE_STORAGE= Le système de stockage de fichiers (par ex 'django.core.files.storage.FileSystemStorage')
FORCE_HTTPS= 'False' si on développe en local, 'True' autrement
SECURE= 'False' si on développe en local, 'True' autrement
ENVIRONMENT= Optionnel - si cette variable est remplie un badge sera visible dans l'application et l'admin changera. Les options sont : `dev` | `staging` | `demo` | `prod`
NEWSLETTER_BREVO_LIST_ID= L'ID de la newsletter de Brevo (précedemment Send In Blue)
BREVO_API_KEY= La clé API de Brevo
SENTRY_DSN (optionnel)= Le Data Source Name pour Sentry. Peut être vide.
MATOMO_ID (optionnel)= L'ID pour le suivi avec Matomo. Compl-alim utilise l'ID 95 pour la prod, en local c'est mieux de le laisser vide
REDIS_URL= L'instance redis à utiliser pour les tâches asynchrones et le cache des clés API. Par exemple : 'redis://localhost:6379/0'
REDIS_PREPEND_KEY= Optionnel - Ajout ce string au début de chaque clé Redis. Utile pour partager la même DB Redis sur plusieurs environnements
S3CFG_FILE_URI= Optionnel - Url de téléchargement du fichier de config s3cmd
ENABLE_SILK= `True` pour activer le profiling via [django-silk](https://github.com/jazzband/django-silk) ou `False` autrement
python manage.py migrate
Pour le développement il faudra avoir deux terminales ouvertes : une pour l'application Django, et une autre pour l'application VueJS.
Il suffit de lancer la commande Django "runserver" à la racine du projet pour avoir le serveur de développement (avec hot-reload) :
python manage.py runserver
Pour faire l'équivalent côté frontend, allez sur ./frontend
et lancez le serveur npm :
cd frontend
npm run serve
Une fois la compilation finie des deux côtés, l'application se trouvera sous 127.0.0.1:8000 (le port Django, non pas celui de npm).
La commande pour lancer les tests Django est :
python manage.py test
Sur VSCode, ces tests peuvent être debuggés avec la configuration "Python: Tests", présente sur le menu "Run".
Il faut d'abord se placer sur "/frontend", ensuite la commande pour lancer les tests VueJS est :
cd frontend
npm run test
Pour pouvoir utiliser l'application et le backoffice avec des données proches de données réelles, il est nécessaire d'importer des données. Pour cela, vous pouvez (ce n'est pas obligatoire) importer les fixtures (données hors éléments) présentes dans le projet :
python manage.py myloaddata
Pour plus d'infos sur le fonctionnement des fixtures, voir ce document
Cela créera aussi un compte administrateur (nom d'utilisateur : admin
, mot de passe : azerty
).
Vous pouvez aussi créer votre propre compte administrateur avec la commande :
python manage.py createsuperuser
Vous pouvez aussi charger des éléments (ingrédients, substances, etc.) dans la base avec la commande suivante. Demander à un membre de l'équipe pour le zip
avec les données.
python manage.py load_ingredients YYYY-MM-dd -d=<path vers le dossier avec les données>
Telecharger le fichier s3cfg correspondant au bucket
s3cmd setpolicy ./clevercloud/allow_policy.json s3://csv-data
s3cmd put <data_directory> s3://csv-data --recursive
s3cmd setpolicy ./clevercloud/deny_policy.json s3://csv-data
Les serveurs d'env prod/staging/demo utilisent le script clevercloud/post_build_hook.sh pour la récupération des données