Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
42 commits
Select commit Hold shift + click to select a range
9f46831
Update alwaysdata.yml
bstocker Jan 24, 2024
550dafe
Update hello.html
bstocker Jan 24, 2024
ccbaddd
Update alwaysdata.yml
bstocker Jan 24, 2024
54018ca
Update alwaysdata.yml
bstocker Jan 24, 2024
bc5f576
Update alwaysdata.yml
bstocker Jan 24, 2024
1ef0512
Update __init__.py
bstocker Jan 24, 2024
aa9bca9
Update alwaysdata.yml
bstocker Feb 19, 2024
816a30e
Update alwaysdata.yml
bstocker Feb 19, 2024
c7b6c81
Update alwaysdata.yml
bstocker Feb 19, 2024
c20c8c6
Update alwaysdata.yml
bstocker Feb 19, 2024
5d0bea9
Update alwaysdata.yml
bstocker Feb 19, 2024
5646a61
Update alwaysdata.yml
bstocker Feb 19, 2024
7b082fe
Update alwaysdata.yml
bstocker Feb 19, 2024
bb46100
Update alwaysdata.yml
bstocker Feb 19, 2024
5d908de
Update alwaysdata.yml
bstocker Feb 19, 2024
377c88b
Update alwaysdata.yml
bstocker Feb 19, 2024
f80391d
Update alwaysdata.yml
bstocker Feb 19, 2024
de75ba5
Update alwaysdata.yml
bstocker Feb 19, 2024
2482960
Update alwaysdata.yml
bstocker Feb 19, 2024
2a274cc
Update alwaysdata.yml
bstocker Feb 19, 2024
ae2dfab
Update alwaysdata.yml
bstocker Feb 19, 2024
cbef684
Update alwaysdata.yml
bstocker Feb 19, 2024
5dcf553
Update alwaysdata.yml
bstocker Feb 19, 2024
fb7f918
Create README.md
bstocker Apr 11, 2024
733c772
Update and rename hello.html to exercices.html
bstocker Apr 11, 2024
0f33db2
Update __init__.py
bstocker Apr 11, 2024
3aa4b64
Update alwaysdata.yml
bstocker Apr 11, 2024
33dd290
Update __init__.py
bstocker Apr 11, 2024
4b13481
Update __init__.py
bstocker Apr 11, 2024
415ab30
Update exercices.html
bstocker Apr 11, 2024
947449a
Update exercices.html
bstocker Apr 11, 2024
c006dd6
Update exercices.html
bstocker Apr 11, 2024
99018a2
Update exercices.html
bstocker Apr 11, 2024
796636c
Rename alwaysdata.yml to CICD.yml
bstocker Apr 11, 2024
b632ae0
Update exercices.html
bstocker Apr 11, 2024
8de159e
Update exercices.html
bstocker Apr 11, 2024
bc8bb5f
Update exercices.html
bstocker Apr 11, 2024
5a4231b
Update exercices.html
bstocker Apr 11, 2024
5ec5146
Update exercices.html
bstocker Apr 11, 2024
96de926
Update README.md
bstocker Dec 19, 2024
0f4adbd
Update exercices.html
bstocker Dec 19, 2024
5245339
Update __init__.py
trolix107 Apr 1, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
56 changes: 56 additions & 0 deletions .github/workflows/CICD.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
name: Industrialisation continue sur le serveur Alwaysdata
on: push
jobs:
Connexion:
runs-on: ubuntu-latest
steps:
- name: Connexion SSH avec le serveur
uses: appleboy/ssh-action@master
with:
host: "ssh-${{ secrets.USERNAME }}.alwaysdata.net"
username: ${{ secrets.USERNAME }}
password: ${{ secrets.PASSWORD }}
script: |
cd $HOME/www/
Copy:
needs: Connexion
runs-on: ubuntu-latest
steps:
- name: Connexion SSH avec le serveur
uses: appleboy/ssh-action@master
with:
host: "ssh-${{ secrets.USERNAME }}.alwaysdata.net"
username: ${{ secrets.USERNAME }}
password: ${{ secrets.PASSWORD }}
script: |
last_directory=$(basename ${{ runner.workspace }})
cd $HOME/www/
git clone https://github.com/${{ github.repository }}.git
# Vérifier si le répertoire de destination existe
if [ "$(ls -A ./flask)" ]; then
rsync -r ./$last_directory/ ./flask
rm -rf ./$last_directory
else
echo "Le répertoire flask de destination sur votre serveur n'existe pas"
exit 1
fi
Restart:
needs: Copy
runs-on: ubuntu-latest
steps:
- name: Restart Alwaysdata site
run: |
response_code=$(curl -s -o /dev/null -w "%{http_code}" -X POST --basic --user "${{ secrets.ALWAYSDATA_TOKEN }}:" https://api.alwaysdata.com/v1/site/${{ secrets.ALWAYSDATA_SITE_ID }}/restart/)
# Vérifier le code de réponse HTTP
if [ "$response_code" -eq 204 ]; then
echo "Relance de votre site réussi"
elif [ "$response_code" -eq 404 ]; then
echo "Vous n'avez pas renseigner correctement votre secret ALWAYSDATA_SITE_ID"
exit 1 # Quitter avec un code d'erreur
elif [ "$response_code" -eq 401 ]; then
echo "Vous n'avez pas renseigner correctement votre secret ALWAYSDATA_TOKEN"
exit 1 # Quitter avec un code d'erreur
else
echo "Échec du redémarrage avec le code de réponse : $response_code"
exit 1 # Quitter avec un code d'erreur
fi
18 changes: 0 additions & 18 deletions .github/workflows/alwaysdata.yml

This file was deleted.

102 changes: 102 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
------------------------------------------------------------------------------------------------------
PROJET FLASK
------------------------------------------------------------------------------------------------------
Quelles sont les notions qui vont être abordées au cours de cet atelier ?
Cet atelier a pour objectif de vous apprendre à mettre en service le framework Flask qui utilise le language Python et permet la construction d'API. Vous allez èdonc utiliser et mettre en oeuvre au travers de cet atelier, un serveur Python utilisant le Framework Flask.
Vous allez créer des API, découvrir les Actions et les Secrets GitHUB pour au final créer des applications en Python.
Large programme mais tout à fait accessible et ne nécessitant pas de base technique particulière. Juste de l'observation et de la rigueur dans votre travail.

-------------------------------------------------------------------------------------------------------
Séquence 1 : GitHUB
-------------------------------------------------------------------------------------------------------
Objectif : Création d'un Repository GitHUB pour travailler avec son projet
Difficulté : Très facile (~10 minutes)
-------------------------------------------------------------------------------------------------------
GitHUB est une plateforme en ligne utilisée pour stocker le code de son programme.
GitHUB est organisé en "Repository", c'est à dire en répertoire (contenant lui même des sous répertoires et des fichiers). Chaque Repository sera indépendant les un des autres. Un Repository doit être vu comme un projet unique (1 Repository = 1 Projet). GitHUB est une plateforme très utilisée par les informaticiens.

**Procedure à suivre :**
1° - Créez vous un compte sur GitHub : https://github.com/
Si besoin, une vidéo pour vous aider à créer votre propre compte GitHUB : [Créer un compte GitHUB](https://docs.github.com/fr/get-started/onboarding/getting-started-with-your-github-account)
A noter que **si vous possédez déjà un compte GitHUB, vous pouvez le conserver pour réaliser cet atelier**. Pas besion d'en créer un nouveau.
Remarque importante : **Lors de votre inscription, utilisez une adresse mail valide. GitHUB n'accepte pas les adresses mails temporaires**

2° - Faites un Fork du Repository suivant : [https://github.com/OpenRSI/Flask_Hello_World.git](https://github.com/OpenRSI/Flask_Hello_World.git)
Voici une vidéo d'accompagnement pour vous aider dans les "Forks" : [Forker ce projet](https://youtu.be/p33-7XQ29zQ)

**Travail demandé :** Créé votre compte GitHUB, faites le fork de ce projet et **copier l'URL de votre Repository GitHUB dans la discussion public**.

Notion acquise lors de cette séquence :
Vous avez appris lors de cette séquence à créer des Repository pour stocker et travailler avec votre code informatique. Vous pourez par la suite travailler en groupe sur un projet. Vous avez également appris à faire des Forks. C'est à dire, faire des copies de projets déjà existant dans GitHUB que vous pourrez ensuite adapter à vos besoins.

---------------------------------------------------
Séquence 2 : Création d'un hébergement en ligne
---------------------------------------------------
Objectif : Créer un hébergement sur Alawaysdata
Difficulté : Faible (~10 minutes)
---------------------------------------------------

Rendez-vous sur **https://www.alwaysdata.com/fr/**

Remarque : **Attention à bien vous rappeler de vos Login/Password** lors de la création de votre compte site car vous en aurez besoin plus tard pour la création de vos Secrets GitHUB.

Voici une vidéo d'accompagnement pour vous aider dans cette séquence de création d'un site sur Alwaysdata : [Vidéo Alwaysdata](https://youtu.be/6cuHjy8n968)

**Procédure :**
1° - Créez votre compte Alwaysdata (gratuit jusqu'à 100Mo, aucune carte nécéssaire).
2° - Depuis la console d'administration (Le panel d'administration de Alwaysdata) :
. 2.1 - Cliquez sur "Sites" (Colonne de gauche) puis **supprimer votre site PHP** (via l'icone de la Poubelle).
. 2.2 - **Installer ensuite une application Flask** (Bouton **+ Installer une application**).
. . 2.2.1 Adresses = utilisez le sous-domaine qui vous appartient que vous trouverez dans l'information " Les sous-domaines suivants vous appartiennent et sont actuellement inutilisés : {Site}.alwaysdata.net
. . 2.2.2 Répertoire d'installation = **/www/flask**
. 2.2.3 N'oubliez pas d'Accepter les conditions.
3° - Autoriser les connexions SSH :
. 3.1 - Cliquez sur SSH (Accès distant).
. 3.2 - Modifier les paramètres de votre utilisateur.
. 3.3 - Définissez si besion un nouveau mot de passe.
. 3.4 - Cliquez sur **Activer la connexion par mot de passe**.

**Travail demandé :** Mettre en ligne votre application Flask "Hello World !" et **copier l'URL de votre site dans la discussion public**.

Notions acquises lors de cette séquence :
Vous avez créer un hébergement (gratuit) et découvert également que vous pouvez installer bien d'autres applications (Django, Drupal, Jenkins, Magento, Symphony, etc...). Les perspectives sont nombreuses.

---------------------------------------------------------------------------------------------
Séquence 3 : Les Actions GitHUB (Industrialisation Continue)
---------------------------------------------------------------------------------------------
Objectif : Automatiser la mise à jour de votre hébergement Alwaysdata
Difficulté : Moyenne (~15 minutes)
---------------------------------------------------------------------------------------------
Dans le Repository GitHUB que vous venez de créer précédemment lors de la séquence 1, vous avez un fichier intitulé CICD.yml et qui est déposé dans le répertoire .github/workflows. Ce fichier a pour objectif d'automatiser le déploiement de votre code sur votre site Alwaysdata. Pour information, c'est ce que l'on appel des Actions GitHUB. Ce sont des scripts qui s'exécutent automatiquement lors de chaque Commit dans votre projet (C'est à dire à chaque modification de votre code). Ces scripts (appelés actions) sont au format yml qui est un format structuré proche de celui d'XML.

Pour utiliser cette Action (CICD.yml), **vous avez besoin de créer des secrets dans GitHUB** afin de ne pas divulguer des informations sensibles aux internautes de passage dans votre Repository comme vos login et password par exemple.

Pour ce projet Métriques, **vous avez 4 secrets à créer** dans votre Repository GitHUB :
**USERNAME** = Contiendra le login qui est utilisé pour la connexion SSH (votre compte site).
**PASSWORD** = Contiendra le mot de passe qui est utilisé pour la connexion SSH (le mot de passe de votre site Alwaysdata).
**ALWAYSDATA_TOKEN** = Le token est à créer depuis l'interface d'administration Alwaysdata. Cliquez sur votre profil en haut à droite, puis sur 'Profil' puis sur 'Gérer les tokens'. Laissez le champ "Adresses IP autorisées" vide. Dans le cas contraire vous limiteriez les connexions seulement à une adresse IP. Pour le champ Application* mettez "Metriques" par exemple.
**ALWAYSDATA_SITE_ID** = Vous trouverez l'ID de votre site depuis l'interface d'administration Alwaysdata dans les paramètres de votre site (dans le titre #XXXXX) XXXXX étant l'ID de votre site. Ne prenez pas le # mais juste les chiffres.

Voici une vidéo pour vous expliquer le processus de création de vos secrets dans GitHUB : [Création des secrets](https://youtu.be/pi80zRdrJyQ)

Notions acquises de cette séquence :
Vous avez vu dans cette séquence comment créer des secrets GiHUB afin de mettre en place de l'industrialisation continue.
L'utilité des scripts d'actions (C'est à dire des scripts exécutés lors des Commits) est très importante mais sortes malheureusement du cadre de cet atelier faute de temps. Toutefois, je vous invites à découvrir cet outil via les différentes sources du Web (Google, ChatGPT, etc..).

---------------------------------------------------
Séquence 4 : Exercices
---------------------------------------------------
Objectif : Apprendre à créer vos API et applications Python
Difficulté : Moyenne
---------------------------------------------------
Votre solution est à présent en ligne. Rendez-vous sur la page d'accueil de votre site et suivez les instructions pour réaliser les exercices qui vous sont demandés. Bon courage et bon travail à tous.

--------------------------------------------------------------------
Troubleshooting :
---------------------------------------------------
Objectif : Visualiser ses logs et découvrir ses erreurs
---------------------------------------------------
Lors de vos développements, vous serez peut-être confronté à des erreurs systèmes car vous avez faits des erreurs de syntaxes dans votre code, faits de mauvaises déclarations de fonctions, appelez des modules inexistants, mal renseigner vos secrets, etc…
Les causes d'erreurs sont quasi illimitées. **Vous devez donc vous tourner vers les logs de votre système pour comprendre d'où vient le problème** :
Voici une vidéo pour accéder aux logs de vos Actions GitHUB : [Vidéo Log GitHUB](https://youtu.be/rhGrDLSFH7Y)
Voici une vidéo pour vous expliquer comment accéder au logs de votre serveur Alwaysdata : [Vidéo Log Alwaysdata](https://youtu.be/URWMWqVMS2U)
10 changes: 8 additions & 2 deletions __init__.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,19 @@
from flask import Flask
from flask import Flask, render_template_string, render_template, jsonify
from flask import render_template
from flask import json
from datetime import datetime
from urllib.request import urlopen
import sqlite3

app = Flask(__name__)

@app.route('/')
def hello_world():
return render_template('hello.html')


@app.route("/contact/")
def MaPremiereAPI():
return "<h2>Ma page de contact</h2>"

if __name__ == "__main__":
app.run(debug=True)
Loading