- Objectif
- Compétences
- Technologies
- Requirements
- Architecture
- Configuration locale
- Déploiement
- Présentation
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.
- 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
- django
- gunicorn
- sentry-sdk
- pytest-django
- flake8
- python-dotenv
- whitenoise
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
- Compte GitHub avec accès en lecture à ce repository
- Git CLI
- SQLite3 CLI
- Interpréteur Python, version 3.6 ou supérieure
Clonez le repository sur votre machine.
git clone https://github.com/GDSDC/OpenclassroomsProject-P13.gitAccédez au répertoire cloné.
cd OpenclassroomsProject-P13Créez l'environnement virtuel env.
python3 -m venv venvActivez votre environnement virtuel env nouvellement créé.
source venv/bin/activateInstallez les paquets présents dans la liste requirements.txt.
pip install -r requirements.txtpython manage.py runserverflake8pytest- Aller sur
http://127.0.0.1:8000/admin - Connectez-vous avec l'utilisateur
admin, mot de passeAbc1234!
Prérequis :
- Un compte Github
- Un compte CircleCi
- Un compte DockerHub
- Un compte Heroku
- Un compte Sentry
build-and-testqui 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
build-and-testdécrit ci-dessusbuild-docker-pushqui 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-herokucomposé de l'action (run) suivante :- Start container and push to Heroku : lancement du build de l'application sur Heroku via Git
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.
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') |
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 :


