Translate README to English

This commit is contained in:
Alexandre Iooss 2022-12-25 23:01:04 +01:00
parent 69529e103e
commit 4b9b7037b8

167
README.md
View file

@ -1,149 +1,80 @@
# Serveur photos 2021 # Photo server 2021-2023
[![License: GPL v3](https://img.shields.io/badge/License-GPL%20v3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0.txt) [![License: GPL v3](https://img.shields.io/badge/License-GPL%20v3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0.txt)
Le serveur photos est un projet Django permettant de gérer les photos de la vie This is the source code for the webserver hosting pictures from the
associative de l'ENS Paris-Saclay. ENS Paris-Saclay student life.
## Table des matières The philosophy of this project is to keep this code as simple as possible to
run and to maintain.
- [Installation d'une instance de développement](#installation-dune-instance-de-développement) ## Setup
- [Installation d'une instance de production](#installation-dune-instance-de-production)
## Installation d'une instance de développement 1. **Dependency installation.**
If you are not using Debian, please feel free to adapt the following instructions.
L'instance de développement installe la majorité des dépendances dans un environnement Python isolé.
Bien que cela permette de créer une instance sur toutes les distributions,
**cela veut dire que vos dépendances ne seront pas mises à jour automatiquement.**
1. **Installation des dépendances de la distribution.**
Il y a quelques dépendances qui ne sont pas trouvable dans PyPI.
On donne ci-dessous l'exemple pour une distribution basée sur Debian, mais vous pouvez facilement adapter pour ArchLinux ou autre.
```bash ```bash
$ sudo apt update sudo apt install git gettext python3-django python3-django-allauth python3-django-crispy-forms python3-docutils python3-exifread python3-pil
$ sudo apt install --no-install-recommends -y \
ipython3 python3-setuptools python3-venv python3-dev \ # Only for production
gettext git sudo apt install nginx uwsgi uwsgi-plugin-python3 python3-certbot-nginx
``` ```
2. **Clonage du dépot** là où vous voulez : 2. **Cloning.**
Change directory to where you want the project to be.
In production, we usually use `/var/www/photos/` as the `root` user.
```bash ```bash
$ git clone git@gitlab.crans.org:bde/photo21.git && cd photo21 git clone https://gitlab.crans.org/bde/photo21.git && cd photo21
``` ```
3. **Création d'un environment de travail Python décorrélé du système.** 3. **Configuration (production only).**
On n'utilise pas `--system-site-packages` ici pour ne pas avoir des clashs de versions de modules avec le système.
```bash ```bash
$ python3 -m venv env # Only for production
$ source env/bin/activate # entrer dans l'environnement sudo mkdir static media
(env)$ pip3 install -r requirements.txt sudo chown www-data:www-data -R static media
(env)$ deactivate # sortir de l'environnement sudo chmod g+rwx -R static media
sudo cp docs/uwsgi_photos.ini /etc/uwsgi/apps-available/uwsgi_photos.ini
sudo ln -s /etc/uwsgi/apps-available/uwsgi_photos.ini /etc/uwsgi/apps-enabled/
sudo cp docs/nginx_photos /etc/nginx/sites-available/photos.crans.org
sudo ln -s /etc/nginx/sites-available/photos.crans.org /etc/nginx/sites-enabled/
sudo cp docs/letsencrypt_photos.crans.org /etc/letsencrypt/conf.d/photos.crans.org
sudo cp docs/renewal-hooks_post_nginx /etc/letsencrypt/renewal-hooks/post/nginx
sudo certbot --config /etc/letsencrypt/conf.d/photos.crans.org.ini certonly
``` ```
4. **Migrations et chargement des données initiales.** 4. **Database (production only).**
Pour initialiser la base de données avec de quoi travailler. In development, you may use SQLite (no setup).
In production, we use PostgreSQL which require a bit of setup:
```bash ```bash
(env)$ ./manage.py compilemessages sudo apt install postgresql postgresql-contrib
(env)$ ./manage.py migrate sudo -u postgres psql
(env)$ ./manage.py loaddata initial
(env)$ ./manage.py createsuperuser # Création d'un utilisateur initial
```
6. **Activation du mode déboguage.**
Dans `photo21/settings.py`, changer `DEBUG` à `True`.
7. Enjoy :
```bash
(env)$ ./manage.py runserver 0.0.0.0:8000
```
En mettant `0.0.0.0:8000` après `runserver`, vous rendez votre instance Django
accessible depuis l'ensemble de votre réseau, pratique pour tester le rendu
de la note sur un téléphone !
## Installation d'une instance de production
**En production on souhaite utiliser les modules Python packagées
dans le gestionnaire de paquet.** Cela permet de mettre à jour facilement les
dépendances critiques telles que Django. L'installation d'une instance de
production néccessite **une installation de Debian Bullseye ou plus récent**.
1. **Installation des dépendances APT.**
On tire les dépendances le plus possible à partir des dépôts de Debian.
```
$ sudo apt install nginx git gettext uwsgi uwsgi-plugin-python3 python3-venv \
python3-certbot-nginx python3-django python3-django-crispy-forms \
python3-pil python3-exifread python3-django-allauth python3-docutils
```
2. **Clonage du dépot dans `/var/www/photos/photo21`**
```
# on se place dans /var/www/photos/
$ sudo git clone https://gitlab.crans.org/bde/photo21.git && cd photo21
$ sudo mkdir static media
$ sudo chown www-data:www-data -R static media
$ sudo chmod g+rwx -R static media
```
3. **Configuration de UWSGI, NGINX et Let's Encrypt.**
```bash
$ sudo cp docs/uwsgi_photos.ini /etc/uwsgi/apps-available/uwsgi_photos.ini
$ sudo ln -s /etc/uwsgi/apps-available/uwsgi_photos.ini /etc/uwsgi/apps-enabled/
$ sudo cp docs/nginx_photos /etc/nginx/sites-available/photos.crans.org
$ sudo ln -s /etc/nginx/sites-available/photos.crans.org /etc/nginx/sites-enabled/
$ sudo cp docs/letsencrypt_photos.crans.org /etc/letsencrypt/conf.d/photos.crans.org
$ sudo cp docs/renewal-hooks_post_nginx /etc/letsencrypt/renewal-hooks/post/nginx
$ sudo certbot --config /etc/letsencrypt/conf.d/photos.crans.org.ini certonly
```
4. **Base de données.**
En production on utilise PostgreSQL.
```bash
$ sudo apt install postgresql postgresql-contrib
$ sudo -u postgres psql
postgres=# CREATE USER photo21 WITH PASSWORD 'un_mot_de_passe_sur'; postgres=# CREATE USER photo21 WITH PASSWORD 'un_mot_de_passe_sur';
postgres=# CREATE DATABASE photo21 OWNER photo21; postgres=# CREATE DATABASE photo21 OWNER photo21;
``` ```
5. **Migrations et collecte des fichiers statiques**, 5. **Initialization.**,
In production, please use `www-data` user.
``` ```
$ sudo -u www-data ./manage.py collectstatic ./manage.py collectstatic
$ sudo -u www-data ./manage.py check ./manage.py check
$ sudo -u www-data ./manage.py migrate ./manage.py migrate
$ sudo -u www-data ./manage.py loaddata initial ./manage.py loaddata initial
$ sudo ./manage.py compilemessages ./manage.py compilemessages
# Only for development
./manage.py createsuperuser
# change DEBUG to True in photo21/settings.py
``` ```
6. *Enjoy \o/* 6. *Enjoy \o/*
## Documentation In production, the NGINX site should now work.
In development, you can launch the development server using:
La documentation des classes et fonctions est directement dans le code et est explorable à partir de la partie documentation de l'interface d'administration de Django. ```bash
**Commentez votre code !** (env)$ ./manage.py runserver
```
## FAQ
### Regénérer les fichiers de traduction
Pour regénérer les traductions vous pouvez vous placer à la racine du projet et lancer le script `makemessages`.
Il faut penser à ignorer les dossiers ne contenant pas notre code, dont le virtualenv.
```bash
python3 manage.py makemessages -i env
```
Une fois les fichiers édités, vous pouvez compiler les nouvelles traductions avec
```bash
python3 manage.py compilemessages
```