Skip to content

Mettez à l'échelle une application Django en utilisant une architecture modulaire.

Notifications You must be signed in to change notification settings

GDSDC/OpenclassroomsProject-P13

 
 

Repository files navigation

Logo

OpenClassrooms Projet P13

Objectif

Orange County Lettings est une start-up dans le secteur de la location de biens immobiliers. La start-up est en pleine phase d’expansion aux États-Unis. L'objectif de ce projet est de faire évoluer le site web éxistant (repository GitHub : OC Lettings) sur les points suivants :

  • Réduction de diverses dettes techniques sur le projet
  • Refonte de l'architecture modulaire
  • Ajout d'un pipeline CI/CD utilisant CircleCI et Heroku
  • Surveillance de l’application et suivi des erreurs via Sentry.

Compétences acquises

  • Gérer la production de code en utilisant la méthodologie CI/CD avec CircleCI
  • Appliquer une architecture modulaire dans une application Python
  • Mettre en place un système de contrôle des codes en utilisant Sentry
  • Déployer une application en utilisant Heroku
  • Refactoriser une application pour réduire la dette technique

Technologies Utilisées

Requirements

  • django
  • gunicorn
  • sentry-sdk
  • pytest-django
  • flake8
  • python-dotenv
  • whitenoise

Architecture et répertoires

Project
├── oc_lettings_site
│   ├── lettings : application pour les locations
│   ├── profiles : application pour les profiles utilisateurs
│   ├── web_site : application pour le site web
│   ├── settings.py : fichier de réglages django
│   ├── urls.py : fichier principal des endpoints
│   ├── ..
|── staticfiles : fichier statiques pour l'environnement de production
|── manage.py : fichier principal de gestion django
|── oc-lettings-site.sqlite3 : base de données sqlite
|── requirements.txt
|── setup.cfg : fichier de configuration pour flake8 et pytest
|
|── .circleci
│   ├── config.yml : fichier de configuration du pipeline ci/cd
|── .dockerignore
|── Dockerfile : fichier de création de notre image Docker
|── Procfile : ficher de déploiement heroku

Configuration locale

Prérequis

  • Compte GitHub avec accès en lecture à ce repository
  • Git CLI
  • SQLite3 CLI
  • Interpréteur Python, version 3.6 ou supérieure

Installation

1. Récupération du projet sur votre machine locale

Clonez le repository sur votre machine.

git clone https://github.com/GDSDC/OpenclassroomsProject-P13.git

Accédez au répertoire cloné.

cd OpenclassroomsProject-P13

2. Création d'un environnement virtuel

Créez l'environnement virtuel env.

python3 -m venv venv

3. Activation et installation de votre environnement virtuel

Activez votre environnement virtuel env nouvellement créé.

source venv/bin/activate

Installez les paquets présents dans la liste requirements.txt.

pip install -r requirements.txt

Utilisation

1. Démarrage du serveur local

python manage.py runserver

2. Linting

flake8

3. Tests unitaires

pytest

4. Panel d'administration

  • Aller sur http://127.0.0.1:8000/admin
  • Connectez-vous avec l'utilisateur admin, mot de passe Abc1234!

Déploiement

Prérequis :

  • Un compte Github
  • Un compte CircleCi
  • Un compte DockerHub
  • Un compte Heroku
  • Un compte Sentry

Description du fonctionnement du Pipeline CircleCi

Lors d'un commit sur une branche autre que master, exécution du job suivant :

  • build-and-test qui est composé des actions (run) suivantes :
    • Run Tests : exécution de tests unitaires via la commande pytest
    • Run Linting PEP8 : exécution du linting via la commande flake8

Lors d'un commit sur la branche master, exécution des jobs suivants :

  • build-and-test décrit ci-dessus
  • build-docker-push qui est composé des actions (run) suivantes :
    • Build Docker image : création d'une image docker à partir du code source via Git
    • Push Docker Image : upload de l'image créée vers le Docker Hub en deux temps : d'abord avec le tag correspondant au "hash" de commit CircleCI puis avec le tag "latest"
  • deploy-heroku composé de l'action (run) suivante :
    • Start container and push to Heroku : lancement du build de l'application sur Heroku via Git

Workflow :

workflow

Le job `build-and-test` est exécuté lors d'une modification apportée sur n'importe quelle branche du projet.

Les jobs build-docker-push et deploy-heroku ne sont exécutés quant à eux que lors d'une modification apportée sur la branche master.

Le job build-docker-push n'est exécuté que lorsque le job build-and-test est exécuté avec succès.

Le job deploy-heroku n'est exécuté que lorsque le job build-docker-push est exécuté avec succès.

Variables d'environnement :

Création des variables d'environnement au niveau du projet :

Nom des Variables Service Description
DOCKER_REPOSITORY CircleCI Nom de votre repository Docker
DOCKER_USERNAME CircleCI Nom d'utilisateur votre compte Docker
DOCKER_TOKEN CircleCI Token de votre compte Docker
HEROKU_API_KEY CircleCI Clé API de votre compte Heroku
HEROKU_APP_NAME CircleCI Nom de l'application Heroku
SENTRY_DSN Heroku Token interne d'intégration Sentry
SECRET_KEY Heroku Clé secrete Django
ENV Heroku Environnement ('production' ou 'dev')

Accès à l'application :

Local :
Pour un déploiement en local via le code source ou l'image docker, veillez à renseigner les variables d'environnement suivantes :

SECRET_KEY=valeur_de_la_clé_secrète_django
SENTRY_DSN=valeur_de_la_clé_sentry_dsn
ENV=production

Docker :

Vous pouvez par exemple placer les deux lignes ci-dessus dans un fichier env_file à la racine de votre projet pour exécuter l'image docker de la manière suivante :

docker pull <docker_image:tag>
docker run --env-file=env_file -i -p 8000:8000 <docker_image>

docker_image : accédez à la dernière image créée en utilisant le tag "latest", ou bien choisissez une image antérieure en utilisant le "hash" du commit CircleCi correspondant.

Heroku :

https://oc-lettings-27.herokuapp.com/

Présentation

presentation

About

Mettez à l'échelle une application Django en utilisant une architecture modulaire.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • JavaScript 51.5%
  • CSS 40.9%
  • Python 6.9%
  • Other 0.7%