Sith/docs/tutorial/install.md

274 lines
7.9 KiB
Markdown
Raw Normal View History

2024-07-16 16:39:54 +00:00
## Dépendances du système
Certaines dépendances sont nécessaires niveau système :
2025-01-06 15:17:54 +00:00
- uv
2024-07-16 16:39:54 +00:00
- libssl
- libjpeg
- zlib1g-dev
- gettext
2024-12-24 14:40:58 +00:00
- redis
2024-07-16 16:39:54 +00:00
### Installer WSL
Si vous utilisez Windows, je suis navré
de vous annoncer que, certaines dépendances étant uniquement disponibles sur des sytèmes UNIX,
il n'est pas possible de développer le site sur ce système d'exploitation.
Heureusement, il existe une alternative qui ne requiert pas de désinstaller votre
OS ni de mettre un dual boot sur votre ordinateur : `WSL`.
- **Prérequis:** vous devez être sur Windows 10 version 2004 ou ultérieure (build 19041 & versions ultérieures) ou Windows 11.
- **Plus d'info:** [docs.microsoft.com](https://docs.microsoft.com/fr-fr/windows/wsl/install)
```shell
# dans un shell Windows
wsl --install
# afficher la liste des distribution disponible avec WSL
wsl -l -o
# installer WSL avec une distro (ubuntu conseillé)
wsl --install -d <nom_distro>
```
Une fois `WSL` installé, mettez à jour votre distribution et
installez les dépendances (voir la partie installation sous Ubuntu).
Pour accéder au contenu d'un répertoire externe à `WSL`,
il suffit d'utiliser la commande suivante :
```bash
# oui c'est beau, simple et efficace
cd /mnt/<la_lettre_du_disque>/vos/fichiers/comme/dhab
```
!!!note
À ce stade, si vous avez réussi votre installation de `WSL` ou bien qu'il
2024-07-16 16:39:54 +00:00
était déjà installé, vous pouvez effectuer la mise en place du projet en suivant
les instructions pour votre distribution.
### Installer les dépendances
=== "Linux"
=== "Debian/Ubuntu"
2024-09-30 08:46:41 +00:00
Avant toute chose, assurez-vous que votre système est à jour :
```bash
sudo apt update
sudo apt upgrade
```
2025-01-06 15:17:54 +00:00
Installez les dépendances :
2024-07-16 16:39:54 +00:00
```bash
2025-01-06 21:26:46 +00:00
sudo apt install curl build-essential libssl-dev \
2024-12-24 14:40:58 +00:00
libjpeg-dev zlib1g-dev npm libffi-dev pkg-config \
gettext git redis
2025-01-06 21:26:46 +00:00
curl -LsSf https://astral.sh/uv/install.sh | sh
2024-07-16 16:39:54 +00:00
```
=== "Arch Linux"
```bash
sudo pacman -Syu # on s'assure que les dépôts et le système sont à jour
2024-12-24 14:40:58 +00:00
sudo pacman -S uv gcc git gettext pkgconf npm redis
2024-07-16 16:39:54 +00:00
```
=== "macOS"
Pour installer les dépendances, il est fortement recommandé d'installer le gestionnaire de paquets `homebrew <https://brew.sh/index_fr>`_.
Il est également nécessaire d'avoir installé xcode
```bash
2024-12-24 14:40:58 +00:00
brew install git uv npm redis
2024-07-16 16:39:54 +00:00
# Pour bien configurer gettext
brew link gettext # (suivez bien les instructions supplémentaires affichées)
```
!!!note
Si vous rencontrez des erreurs lors de votre configuration, n'hésitez pas à vérifier l'état de votre installation homebrew avec :code:`brew doctor`
2025-01-06 15:17:54 +00:00
!!!note
Python ne fait pas parti des dépendances puisqu'il est automatiquement
installé par uv.
2024-07-16 16:39:54 +00:00
2024-12-24 14:40:58 +00:00
Parmi les dépendances installées se trouve redis (que nous utilisons comme cache).
Redis est un service qui doit être activé pour être utilisé.
Pour cela, effectuez les commandes :
```bash
sudo systemctl start redis
sudo systemctl enable redis # si vous voulez que redis démarre automatiquement au boot
```
2024-12-24 14:40:58 +00:00
Parmi les dépendances installées se trouve redis (que nous utilisons comme cache).
Redis est un service qui doit être activé pour être utilisé.
Pour cela, effectuez les commandes :
```bash
sudo systemctl start redis
sudo systemctl enable redis # si vous voulez que redis démarre automatiquement au boot
```
2024-07-16 16:39:54 +00:00
## Finaliser l'installation
Clonez le projet (depuis votre console WSL, si vous utilisez WSL)
et installez les dépendances :
2024-09-30 08:46:41 +00:00
2024-07-16 16:39:54 +00:00
```bash
git clone https://github.com/ae-utbm/sith.git
2024-09-23 08:25:27 +00:00
cd sith
2024-07-16 16:39:54 +00:00
# Création de l'environnement et installation des dépendances
2025-01-06 20:59:36 +00:00
uv sync
2025-01-06 15:17:54 +00:00
npm install # Dépendances frontend
2025-01-06 20:59:36 +00:00
uv run ./manage.py install_xapian
2024-09-30 08:46:41 +00:00
```
!!!note
La commande `install_xapian` est longue et affiche beaucoup
de texte à l'écran.
C'est normal, il ne faut pas avoir peur.
2024-12-24 14:40:58 +00:00
Une fois les dépendances installées, il faut encore
mettre en place quelques éléments de configuration,
qui peuvent varier d'un environnement à l'autre.
Ces variables sont stockées dans un fichier `.env`.
Pour le créer, vous pouvez copier le fichier `.env.example` :
2024-09-30 08:46:41 +00:00
```bash
2024-12-24 14:40:58 +00:00
cp .env.example .env
2024-09-30 08:46:41 +00:00
```
2024-07-16 16:39:54 +00:00
2024-12-24 14:40:58 +00:00
Les variables par défaut contenues dans le fichier `.env`
devraient convenir pour le développement, sans modification.
Maintenant que les dépendances sont installées
et la configuration remplie, nous allons pouvoir générer
des données utiles pendant le développement.
Pour cela, lancez les commandes suivantes :
2024-09-30 08:46:41 +00:00
```bash
2024-07-16 16:39:54 +00:00
# Prépare la base de données
2025-01-06 15:17:54 +00:00
uv run ./manage.py setup
2024-07-16 16:39:54 +00:00
# Installe les traductions
2025-01-06 15:17:54 +00:00
uv run ./manage.py compilemessages
2024-07-16 16:39:54 +00:00
```
!!!note
2025-01-06 15:17:54 +00:00
Pour éviter d'avoir à utiliser la commande `uv run`
2024-07-16 16:39:54 +00:00
systématiquement, il est possible de consulter [direnv](../howto/direnv.md).
## Démarrer le serveur de développement
Il faut toujours avoir préalablement activé
l'environnement virtuel comme fait plus haut
et se placer à la racine du projet.
Il suffit ensuite d'utiliser cette commande :
```bash
2025-01-06 15:17:54 +00:00
uv run ./manage.py runserver
2024-07-16 16:39:54 +00:00
```
!!!note
Le serveur est alors accessible à l'adresse
2024-07-23 21:25:17 +00:00
[http://localhost:8000](http://localhost:8000)
ou bien [http://127.0.0.1:8000/](http://127.0.0.1:8000/).
!!!tip
Vous trouverez également, à l'adresse
[http://localhost:8000/api/docs](http://localhost:8000/api/docs),
une interface swagger, avec toutes les routes de l'API.
2024-07-16 16:39:54 +00:00
2024-12-24 14:40:58 +00:00
!!! question "Pourquoi l'installation est aussi complexe ?"
Cette question nous a été posée de nombreuses fois par des personnes
essayant d'installer le projet.
Il y a en effet un certain nombre d'étapes à suivre,
de paquets à installer et de commandes à exécuter.
Le processus d'installation peut donc sembler complexe.
En réalité, il est difficile de faire plus simple.
En effet, un site web a besoin de beaucoup de composants
pour être développé : il lui faut au minimum
une base de données, un cache, un bundler Javascript
et un interpréteur pour le code du serveur.
Pour nos besoin particuliers, nous utilisons également
un moteur de recherche full-text.
Nous avons tenté au maximum de limiter le nombre de dépendances
et de sélecionner les plus simples à installer.
Cependant, il est impossible de retirer l'intégralité
de la complexité du processus.
Si vous rencontrez des difficulté lors de l'installation,
n'hésitez pas à demander de l'aide.
2024-07-16 16:39:54 +00:00
## Générer la documentation
La documentation est automatiquement mise en ligne à chaque envoi de code sur GitHub.
Pour l'utiliser en local ou globalement pour la modifier,
il existe une commande du site qui génère
la documentation et lance un serveur la rendant
accessible à l'adresse [http://localhost:8080](http://localhost:8000).
Cette commande génère la documentation à
chacune de ses modifications,
inutile de relancer le serveur à chaque fois.
```bash
2025-01-06 15:17:54 +00:00
uv run mkdocs serve
2024-07-16 16:39:54 +00:00
```
## Lancer les tests
Pour lancer les tests, il suffit d'utiliser
la commande suivante :
```bash
# Lancer tous les tests
2025-01-06 15:17:54 +00:00
uv run pytest
2024-07-16 16:39:54 +00:00
# Lancer les tests de l'application core
2025-01-06 15:17:54 +00:00
uv run pytest core
2024-07-16 16:39:54 +00:00
# Lancer les tests de la classe UserRegistrationTest de core
2025-01-06 15:17:54 +00:00
uv run pytest core/tests/tests_core.py::TestUserRegistration
2024-07-16 16:39:54 +00:00
```
!!!note
Certains tests sont un peu longs à tourner.
Pour ne faire tourner que les tests les plus rapides,
vous pouvez exécutez pytest ainsi :
```bash
2025-01-06 15:17:54 +00:00
uv run pytest -m "not slow"
2024-07-16 16:39:54 +00:00
# vous pouvez toujours faire comme au-dessus
2025-01-06 15:17:54 +00:00
uv run pytest core -m "not slow"
2024-07-16 16:39:54 +00:00
```
A l'inverse, vous pouvez ne faire tourner que les tests
lents en remplaçant `-m "not slow"` par `-m slow`.
De cette manière, votre processus de développement
devrait être un peu plus fluide.
Cependant, n'oubliez pas de bien faire tourner
tous les tests avant de push un commit.