Une application web moderne d'agence immobilière développée avec Django, incluant un pipeline CI/CD complet pour le déploiement automatisé sur AWS.
📺 Projet basé sur la vidéo YouTube de donaldtedom devops
Ce projet suit le tutoriel DevOps pour apprendre le déploiement d'applications Django sur AWS avec CI/CD.
- Aperçu du projet
- Fonctionnalités
- Architecture
- Technologies utilisées
- Installation locale
- Déploiement AWS
- Structure du projet
- Configuration
- Scripts de déploiement
- Contribution
- Licence
Villa Agency est une application web d'agence immobilière moderne qui permet de présenter des propriétés (appartements, villas, penthouses) avec une interface utilisateur élégante et responsive. L'application est conçue pour être déployée automatiquement sur AWS via un pipeline CI/CD.
Ce projet est un excellent exemple pratique pour apprendre :
- Le développement d'applications web avec Django
- La mise en place d'un pipeline CI/CD avec AWS CodeBuild et CodeDeploy
- La configuration de serveurs web avec Nginx et Gunicorn
- Les bonnes pratiques DevOps pour le déploiement automatisé
- Interface moderne : Design responsive avec template TemplateMo Villa Agency
- Catalogue de propriétés : Présentation d'appartements, villas et penthouses
- Pages détaillées : Informations complètes sur chaque propriété
- Formulaire de contact : Interface pour contacter l'agence
- Planification de visites : Système de prise de rendez-vous
- Interface d'administration Django : Gestion du contenu via l'admin Django
- Déploiement automatisé : Pipeline CI/CD avec AWS CodeDeploy
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ GitHub Repo │───▶│ AWS CodeBuild │───▶│ AWS CodeDeploy │
└─────────────────┘ └─────────────────┘ └─────────────────┘
│
▼
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Nginx │◀───│ Gunicorn │◀───│ EC2 Instance │
│ (Reverse Proxy)│ │ (WSGI Server) │ │ (Ubuntu Server)│
└─────────────────┘ └─────────────────┘ └─────────────────┘
- Django 5.1.5 - Framework web Python
- Gunicorn 23.0.0 - Serveur WSGI
- WhiteNoise 6.8.2 - Gestion des fichiers statiques
- SQLite - Base de données (par défaut)
- HTML5/CSS3 - Structure et style
- Bootstrap - Framework CSS responsive
- JavaScript - Interactivité côté client
- Font Awesome - Icônes
- Owl Carousel - Carrousel d'images
- AWS CodeBuild - Service de build
- AWS CodeDeploy - Service de déploiement
- Nginx - Serveur web et reverse proxy
- Ubuntu Server - Système d'exploitation
- Systemd - Gestion des services
- Python 3.8+
- pip
- virtualenv (recommandé)
- Cloner le repository
git clone https://github.com/BriacLeGuilloux/USDA-CORN_prediction.git
cd cicdaws-main
- Créer un environnement virtuel
python3 -m venv venv
source venv/bin/activate # Linux/Mac
# ou
venv\Scripts\activate # Windows
- Installer les dépendances
pip install -r requirements.txt
- Configurer la base de données
python manage.py makemigrations
python manage.py migrate
- Créer un superutilisateur (optionnel)
python manage.py createsuperuser
- Collecter les fichiers statiques
python manage.py collectstatic
- Lancer le serveur de développement
python manage.py runserver
L'application sera accessible sur http://localhost:8000
- Instance EC2 avec Ubuntu Server
- CodeBuild Project configuré
- CodeDeploy Application et Deployment Group
- IAM Roles appropriés pour CodeBuild et CodeDeploy
Le pipeline est automatiquement déclenché lors des commits sur la branche principale :
-
Build Phase (CodeBuild) :
- Installation des dépendances Python
- Exécution des tests (si configurés)
- Création des artefacts
-
Deploy Phase (CodeDeploy) :
- Arrêt de l'application existante
- Installation des dépendances système
- Configuration de Gunicorn et Nginx
- Démarrage de la nouvelle version
Les variables suivantes sont configurées dans buildspec.yml
:
DJANGO_SETTINGS_MODULE
SECRET_KEY
DATABASE_DEFAULT_URL
- Autres clés API selon les besoins
cicdaws-main/
├── agency/ # Configuration principale Django
│ ├── __init__.py
│ ├── settings.py # Paramètres Django
│ ├── urls.py # URLs principales
│ ├── wsgi.py # Configuration WSGI
│ └── asgi.py # Configuration ASGI
├── home/ # Application Django principale
│ ├── views.py # Vues de l'application
│ ├── urls.py # URLs de l'app home
│ ├── models.py # Modèles de données
│ └── admin.py # Configuration admin
├── templates/ # Templates HTML
│ ├── index.html # Page d'accueil
│ ├── properties.html # Liste des propriétés
│ ├── property-details.html
│ └── contact.html # Page de contact
├── static/ # Fichiers statiques
│ └── assets/
│ ├── css/ # Feuilles de style
│ ├── js/ # Scripts JavaScript
│ ├── images/ # Images du site
│ └── webfonts/ # Polices web
├── scripts/ # Scripts de déploiement
│ ├── start_app.sh # Démarrage de l'application
│ ├── stop_app.sh # Arrêt de l'application
│ ├── instance_os_dependencies.sh
│ ├── python_dependencies.sh
│ ├── gunicorn.sh # Configuration Gunicorn
│ └── nginx.sh # Configuration Nginx
├── nginx/
│ └── nginx.conf # Configuration Nginx
├── gunicorn/
│ ├── gunicorn.service # Service systemd
│ └── gunicorn.socket # Socket systemd
├── appspec.yml # Configuration CodeDeploy
├── buildspec.yml # Configuration CodeBuild
├── requirements.txt # Dépendances Python
└── manage.py # Script de gestion Django
Les paramètres principaux dans agency/settings.py
:
DEBUG = True
(à modifier pour la production)ALLOWED_HOSTS = []
(à configurer pour la production)- Configuration WhiteNoise pour les fichiers statiques
- Base de données SQLite par défaut
Le fichier nginx/nginx.conf
configure :
- Écoute sur le port 80
- Proxy vers le socket Gunicorn
- Gestion des fichiers statiques
Le service gunicorn/gunicorn.service
configure :
- 3 workers par défaut
- Socket Unix pour la communication avec Nginx
- Utilisateur
ubuntu
et groupewww-data
clean_instance.sh
: Nettoyage de l'instance avant installationinstance_os_dependencies.sh
: Installation des dépendances systèmepython_dependencies.sh
: Installation des dépendances Pythongunicorn.sh
: Configuration du service Gunicornnginx.sh
: Configuration du service Nginxstart_app.sh
: Démarrage de l'applicationstop_app.sh
: Arrêt de l'application
L'ordre d'exécution défini dans appspec.yml
:
BeforeInstall
: NettoyageAfterInstall
: Installation et configurationApplicationStop
: Arrêt de l'ancienne versionApplicationStart
: Démarrage de la nouvelle version
Ce projet est parfait pour apprendre :
- Django : Framework web Python moderne
- DevOps : Pratiques de déploiement automatisé
- AWS : Services cloud pour l'hébergement et CI/CD
- Linux : Administration système Ubuntu
- Nginx/Gunicorn : Configuration de serveurs web
- Fork le projet
- Créer une branche pour votre fonctionnalité (
git checkout -b feature/AmazingFeature
) - Commit vos changements (
git commit -m 'Add some AmazingFeature'
) - Push vers la branche (
git push origin feature/AmazingFeature
) - Ouvrir une Pull Request
Ce projet est sous licence MIT. Voir le fichier LICENSE pour plus de détails.
Créateur original : donaldtedom devops
- donaldtedom devops pour le tutoriel YouTube original
- Template design par TemplateMo
- Framework Django par la Django Software Foundation
- Hébergement et CI/CD par Amazon Web Services