OpenClassRoom - Parcours développeur Python
Site web d'Orange County Lettings
Last update: 2024/04/05
- Connexion internet
- Compte GitHub avec accès en lecture à ce repository
- Compte Betterstack avec un API token valide (concerne la collecte de log)
- Compte Coveralls avec un API token valide (concerne les tests, la mise à jour du taux couverture)
- Compte DockerHub pour déposer une image (nécessaire seulement si vous souhaitez déposer les images sur un dépôt Docker)
- Compte Render avec le Blueprint connecté au dépôt Github (nécessaire seulement pour déployer sur cloud, voir section Déploiement)
- Git CLI
- SQLite3 CLI
- Interpréteur Python, version 3.6 ou supérieure
Dans le reste de la documentation sur le développement local, il est supposé que la commande python
de votre OS shell exécute l'interpréteur Python ci-dessus (à moins qu'un environnement virtuel ne soit activé).
cd /path/to/put/project/in
git clone https://github.com/memphis-tools/oc_projet13_orange_country_lettings.git
cd /path/to/Python-OC-Lettings-FR
python -m venv venv
apt-get install python3-venv
(Si l'étape précédente comporte des erreurs avec un paquet non trouvé sur Ubuntu)- Activer l'environnement
source venv/bin/activate
- Confirmer que la commande
python
exécute l'interpréteur Python dans l'environnement virtuelwhich python
- Confirmer que la version de l'interpréteur Python est la version 3.6 ou supérieure
python --version
- Confirmer que la commande
pip
exécute l'exécutable pip dans l'environnement virtuel,which pip
- Pour désactiver l'environnement,
deactivate
On met à jour le PATH pour la seule exécution en locale.
cd /path/to/Python-OC-Lettings-FR
Créer un fichier ".envrc" avec les variables suivantes (à adapter avec vos identifiants):
export BETTERSTACK_SOURCE_TOKEN='SuperTokenFromBetterStack'
export COVERALLS_REPO_TOKEN=SuperTokenFromCoveralls
export SECRET_KEY='MakeYourOwnSecretKey'
export DJANGO_ALLOWED_HOSTS='localhost,127.0.0.1'
export DEBUG=0
export DOCKER_HUB_USER='YourDockerHubUser'
export DOCKER_HUB_PASSWORD='YourDockerHubPassword'
NB: les 2 exports DOCKER_HUB_* sont optionnels. Nécessaires que pour publier ses propres images locales vers un dépôt Docker. Voir section 'Déploiement'.
Ajouter les variables au PATH courant:
source .envrc
Noter que le logger est déclaré dans le fichier "logtail_handler.py".
cd /path/to/Python-OC-Lettings-FR
source venv/bin/activate
pip install --requirement ./oc_projet13/requirements.txt
python manage.py runserver
- Aller sur
http://localhost:8000
dans un navigateur. - Confirmer que le site fonctionne et qu'il est possible de naviguer (vous devriez voir plusieurs profils et locations).
Vous devez avoir installé "docker" (ou podman) et "docker-compose".
On va exécuter un script format BASH. Sur Windows il faudra adapter, jouer les seules commandes nécessaires.
cd /path/to/Python-OC-Lettings-FR
Pour une première exécution:
./docker-compose-deployment.sh build
Dans le cas où vous avez déjà les images en local et l'application initialisée:
./docker-compose-deployment.sh run
Pour arrêter les conteneurs:
./docker-compose-deployment.sh down
Remarque: noter que vous pouvez télécharger les 2 images publiques suivantes (usage de podman ou docker selon les versions d'OS):
-
podman pull docker.io/memphistools/public_repo:oc_projet13_orange_country_lettings_web
-
podman pull docker.io/memphistools/public_repo:oc_projet13_orange_country_lettings_nginx
cd oc_projet13_orange_country_lettings/
source venv/bin/activate
cd oc_projet13_orange_country_lettings/oc_projet13/
flake8
cd oc_projet13_orange_country_lettings/
source venv/b-in/activate
python -m coverage run -m pytest ./oc_projet13
cd oc_projet13_orange_country_lettings/
source venv/b-in/activate
cd oc_projet13_orange_country_lettings/oc_projet13/
- Ouvrir une session shell
sqlite3
- Se connecter à la base de données
.open oc-lettings-site.sqlite3
- Afficher les tables dans la base de données
.tables
- Afficher les colonnes dans le tableau des profils,
pragma table_info(Python-OC-Lettings-FR_profile);
- Lancer une requête sur la table des profils,
select user_id, favorite_city from Python-OC-Lettings-FR_profile where favorite_city like 'B%';
.quit
pour quitter
- Aller sur l'url suivante (dans le cas d'un test en local):
http://localhost:8000/admin
- Connectez-vous avec l'utilisateur
admin
, mot de passeAbc1234!
Utilisation de PowerShell, comme ci-dessus sauf :
- Pour activer l'environnement virtuel,
.\venv\Scripts\Activate.ps1
- Remplacer
which <my-command>
par(Get-Command <my-command>).Path
Cette section évoque le déploiement des images Docker et ou de l'application en ligne chez un cloud provider.
Les prérequis rejoignent ceux de la section "Développement local".
L'arborescence du projet est adaptée à une conteneurisation basique de Docker, "dans un contexte similaire à celui présenté"".
2 services supplémentaires sont introduits: Gunicorn et Nginx.
Gunicorn va servir le contenu délivré par l'application Python (Django en l'occurence). Gunicorn et le code applicatif formeront 1 service global.
Nginx servira de reverse proxy 'au service' de Gunicorn, en servant tout fichier statique: images, css, js etc.
On aura 2 conteneurs Docker, 1 pour chaque service. Ils sont orchestrés par "docker-compose (Compose)": on ne lance pas l'un sans l'autre.
Un fichier "docker-compose.dev.yml" est celui utilisé lors des phases de "build"
Un second fichier "docker-compose.prod.yml" est celui utilisé lors des phsases "d'exécution".
Un script unique permet de déployer l'application sur Docker, soit localement, soit sur cloud: docker-compose-deployment.sh.
On utilisera le dépôt Docker générique: https://hub.docker.com/
Afin de simplifier les illustrations tout comme l'usage des commandes en local, vous aurez créer un fichier ".envrc" tel que déclaré plus haut.
Vous aurez ajouté à votre PATH courant les variables déclarées dans le fichier ".envrc".
On va exécuter un script format BASH. Sur Windows il faudra adapter, jouer les seules commandes nécessaires.
cd /path/to/Python-OC-Lettings-FR
./docker-compose-deployment.sh build
./docker-compose-deployment.sh down
./docker-compose-deployment.sh publish
En tant que développeur vous travaillerez à partir du dépôt clôné.
Pour vérifier et/ou publier les actions effectuées une automatisation est mise en place via Circleci: https://circleci.com/
Il s'agit d'un processus qui va réaliser des actions déclarées dans un fichier et format préconvenu: .circleci/config.yml.
Les actions consistent à effectuer les tests à la place du développeur, à contrôler le "lint", à effectuer le build et publication des images Docker.
Toute mise à jour de branche autre que master provoque génération d'un pipeline sans build:
- test, lint.
**Toute mise à jour de la seule branche master provoque génération d'un pipeline avec build:
- test, lint, build (avec mise à jour image sur DockerHub). redéploiement de l'application sur Render.
Illustration Actions Github correspondantes:
Noter que le job test du pipeline rafraichit le taux de couverture de "coverage" via Coveralls: https://coveralls.io
Remarquer enfin que la documentation est mise à jour automatiquement.
Le choix a été fait de déployer sous forme d'application le projet, sur la plateforme Render: https://render.com/.
Tout commit de la seule branche "master" aura pour effet de redéployer l'application.
Pour information, seul Render fait l'appel de commande suivant pour le build du projet (vous n'aurez pas l'usage de l'argument pour du dev local):
./docker-compose-deployment.sh cloud
Voir en wiki des informations supplémentaires pour le déploiement surRender: WIKI RENDER
Par le biais d'un webhook exécuté depuis le pipeline en dernière étape, l'application est re-publiée sur Render.
Le choix a été fait de collecter les logs sur Betterstack: https://betterstack.com/.
Toute saisie d'URL incorrecte sera, par exemple, loguée:
La documentation de l'application est servie et actualisée sur ReadTheDocs: https://oc-projet13-orange-country-lettings.readthedocs.io/fr/latest/
Noter que sans activité, et du fait d'une souscription sans engagement, les applications peuvent être mises à l'arrêt par l'équipe Render.
De même les temps de chargement peuvent être anormalement long comparé à des sites en production.
Si le site est en ligne, vous pourrez le consulter: https://oc-projet13-o83m.onrender.com/
⛩️