5.4 KiB
Serveur photos 2021
Le serveur photos est un projet Django permettant de gérer les photos de la vie associative de l'ENS Paris-Saclay.
Table des matières
Installation d'une instance de développement
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.
-
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.
$ sudo apt update $ sudo apt install --no-install-recommends -y \ ipython3 python3-setuptools python3-venv python3-dev \ gettext git -
Clonage du dépot là où vous voulez :
$ git clone git@gitlab.crans.org:bde/photo21.git && cd photo21 -
Création d'un environment de travail Python décorrélé du système. On n'utilise pas
--system-site-packagesici pour ne pas avoir des clashs de versions de modules avec le système.$ python3 -m venv env $ source env/bin/activate # entrer dans l'environnement (env)$ pip3 install -r requirements.txt (env)$ deactivate # sortir de l'environnement -
Migrations et chargement des données initiales. Pour initialiser la base de données avec de quoi travailler.
(env)$ ./manage.py compilemessages (env)$ ./manage.py migrate (env)$ ./manage.py loaddata initial (env)$ ./manage.py createsuperuser # Création d'un utilisateur initial -
Activation du mode déboguage. Dans
photo21/settings.py, changerDEBUGàTrue. -
Enjoy :
(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.
-
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 -
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 -
Création d'un environment de travail Python décorrélé du système.
$ python3 -m venv venv --system-site-packages $ source venv/bin/activate # entrer dans l'environnement (env)$ pip3 install -r requirements.txt (env)$ deactivate # sortir de l'environnement -
Configuration de UWSGI et NGINX.
$ 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/ -
Base de données. En production on utilise PostgreSQL.
$ sudo apt install postgresql postgresql-contrib $ sudo -u postgres psql postgres=# CREATE USER photo21 WITH PASSWORD 'un_mot_de_passe_sur'; postgres=# CREATE DATABASE photo21 OWNER photo21; -
Migrations et collecte des fichiers statiques,
$ sudo -u www-data ./venv/bin/python ./manage.py collectstatic $ sudo -u www-data ./venv/bin/python ./manage.py check $ sudo -u www-data ./venv/bin/python ./manage.py migrate $ sudo -u www-data ./venv/bin/python ./manage.py loaddata initial $ sudo ./venv/bin/python ./manage.py compilemessages -
Enjoy \o/
Documentation
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. Commentez votre code !
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.
python3 manage.py makemessages -i env
Une fois les fichiers édités, vous pouvez compiler les nouvelles traductions avec
python3 manage.py compilemessages