-
Notifications
You must be signed in to change notification settings - Fork 23
Installation (CentOS 7)
-
Bases et sources
- Mise en place avant les sources
- Récupération des sources
- Paramètrage
- Base de données
-
Installation tierce
- FFMPEG
- Elasticsearch
- Optionnel : Memcached
- Optionnel : Serveur FTP
- Optionnel : CAS et LDAP
- Traduction
- Thème
- Tests
- Serveur de développement
Informations : Cette documentation est tirée de la documentation technique de Pod sur CentOS 7 de l'Université de Montpellier. La version PDF de cette documentation, qui va plus en profondeur que cette page de wiki pour ceux le désirant, sera bientôt disponible.
Les démarches pour installer l'environnement de travail pour Pod
Mise en place avant les sources
[root@tspod ~]# adduser pod
[root@tspod ~]# passwd pod
[root@tspod ~]# yum install epel-release
En tant que root
Paquets de base nécessaires :
[root@tspod ~]# yum install --enablerepo=epel python-pip
[root@tspod ~]# yum install python-devel
[root@tspod ~]# yum groupinstall 'Development Tools'
[root@tspod ~]# yum install git
[root@tspod ~]# yum install mysql-devel
[root@tspod ~]# yum install graphviz-devel
[root@tspod ~]# yum install python-devel
[root@tspod ~]# yum install openldap-devel
[root@tspod ~]# yum install cyrus-sasl-devel
[root@tspod ~]# pip install --upgrade pip
[root@tspod ~]# pip install python-ldap
[root@tspod ~]# yum install openssl-devel
[root@tspod ~]# yum install libjpeg-devel
[root@tspod ~]# yum install python-imaging
[root@tspod ~]# yum install freetype-devel
[root@tspod ~]# yum install python-chardet
[root@tspod ~]# yum install python-fpconst
Gestion de cache :
[root@tspod ~]# yum install memcached
Gestion pour les traductions :
[root@tspod ~]# yum install gettext
L'environnement virtuel sera positionné dans le répertoire /data/www/[user].
[user] = podtest / podprep / pod, selon l'environnement. Sera abordé dans la suite de ce tutorial la préproduction, le compte sera alors podprep et le répertoire de base /data/www/podprep.
En tant qu'utilisateur pod (pod de test)
[pod@tspod ~]$ cd /data/www/podtest
[pod@tspod ~]$ sudo pip install virtualenvwrapper
OU En tant qu'utilisateur root (pod de pré-production)
[root@prepxxx-encodage ~]# cd /data/www/podprep
[root@prepxxx-encodage ~]# pip install virtualenvwrapper
[root@prepxxx-encodage ~]# usermod -g apache podprep
[root@prepxxx-encodage ~]# chmod 755 /data/www/podprep/media/ -R
Surtout bien positionner l'environnement virtuel dans le bon répertoire dès le départ. Il est très complexe par la suite de déplacer un environnement virtual d'un répertoire à un autre !
Modifiez ensuite le .bashrc de l'utilisateur
[pod@tspod ~]$ cd
[pod@tspod ~]$ emacs .bashrc
Ajoutez ces quelques lignes en fin de fichier (attention /data/www/podprep en dur):
export WORKON_HOME=$HOME/.virtualenvs
# Il est nécessaire d'utiliser le python du virtualenv
export PYTHONPATH=/data/www/podprep/.virtualenvs/django_pod/bin/
PATH=/data/www/podprep/.virtualenvs/django_pod/bin/:$PATH
source /usr/bin/virtualenvwrapper.sh
Remarque : le fichier est positionné dans /usr/bin/virtualenvwrapper.sh et non pas /usr/local/bin/virtualenvwrapper.sh.
Prendre en compte les modifications
[pod@tspod ~]$ source .bashrc
Et créer un nouvel environnement virtuel :
[pod@tspod ~]$ cd /data/www/podprep
[pod@tspod ~]$ mkvirtualenv --system-site-packages django_pod
Récupération des sources
Pour l'université de Montpellier, on positionne le projet dans /data/www/podprep et non /usr/local. En tant que podpred :
[pod@tspod ~]$ sudo mkdir /data/www/podprep/django_projects
OU En tant que root :
[root@prepxxx-encodage ~]# mkdir /data/www/podprep/django_projects
[root@prepxxx-encodage ~]# chown podprep:apache /data/www/podprep/django_projects/
On fait un lien symbolique dans notre home pour arriver plus vite dans le repertoire django_projects:
[pod@tspod ~]$ ln -s /data/www/podprep/django_projects django_projects
On récupère les sources depuis https://github.com/esupportail/pod:
[pod@tspod ~]$ cd django_projects
[pod@tspod ~/django_projects]$ sudo chown podprep:podprep /data/www/podprep/django_projects
[pod@tspod ~/django_projects]$ ls -ld /data/www/podprep/django_projects
[pod@tspod ~/django_projects]$ git clone https://github.com/esupportail/pod.git
Autant en profiter aussi pour mettre à jour pip.
[pod@tspod ~/django_projects]$ cd pod
[pod@tspod ~/django_projects/pod]$ pip install --upgrade pip
[pod@tspod ~/django_projects/pod]$ pip install -r requirements.txt
Les démarches concernant les fichiers de configuration de Pod
Paramètrage
Il faut faire une copie des fichiers de configuration, puis faire la configuration dans les fichiers .py
[pod@tspod ~/django_projects/pod]$ cd pod_project/pod_project/
[pod@tspod ~/django_projects/pod/pod_project/pod_project]$ cp wsgi-sample.py wsgi.py
[pod@tspod ~/django_projects/pod/pod_project/pod_project]$ cp settings-sample.py settings.py
[pod@tspod ~/django_projects/pod/pod_project/pod_project]$ cp urls-sample.py urls.py
[pod@tspod ~/django_projects/pod/pod_project/pod_project]$ cp settings_local-sample.py settings_local.py
Remarque : Vous référez à la documentation classique d'installation pour des détails sur ces fichiers de configuration : https://github.com/EsupPortail/pod/wiki/Installation/_edit#param%C3%A9trage
Mise en place de la base de données de Pod
Migrations et données
Sur cet environnement de test, j'ai gardé la base de test SQLite. En pré-production / production, j'utiliserai du MariaDB.
[pod@tspod ~/django_projects/pod/pod_project/pod_project]$ cd ..
[pod@tspod ~/django_projects/pod/pod_project]$ python manage.py makemigrations
Migration des tables :
[pod@tspod ~/django_projects/pod/pod_project]$ ./manage.py migrate
On charge ensuite des données de base en base de données :
[pod@tspod ~/django_projects/pod/pod_project]$ python manage.py loaddata core/fixtures/initial_data.json
Et on crée le superutilisateur :
[pod@tspod ~/django_projects/pod/pod_project]$ python manage.py createsuperuser --username root
Attention : Pour l'environnement de pré-production / production, il sera nécessaire de régler le paramétrage du timeout de la base MariaDB. En effet, l'encodage de certaines vidéos imposantes peuvent durer un certain temps, et il est nécessaire que la connexion à la base soit encore ouverte pour que les mises à jour soient réalisées.
Les différentes installations à coté de Pod. Nécessaire pour l'encodage et le moteur de recherche. Contient aussi des instructions pour l'installation d'utilitaires optionnels.
Mise en place de l'utilitaire d'encodage
De nouveau en root à partir de cette étape. Utilisé pour l'encodage des vidéos. A installer sur le serveur d'encodage.
[root@prepxxx-encodage ~]# cd /opt/
[root@prepxxx-encodage /opt]# mkdir ffmpeg
[root@prepxxx-encodage /opt]# cd ffmpeg
[root@prepxxx-encodage /opt]# wget http://johnvansickle.com/ffmpeg/releases/ffmpeg-release-64bit-static.tar.xz
[root@prepxxx-encodage /opt]# tar -Jxvf ffmpeg-release-64bit-static.tar.xz
[root@prepxxx-encodage /opt]# ln -s ffmpeg-X.X.X-64bit-static ffmpeg
[root@prepxxx-encodage /opt]# chown -R podprep:apache /opt/ffmpeg
Il faut modifier le fichier settings_local.py pour indiquer les chemins ffmpeg et ffprobe:
FFMPEG = '/opt/ffmpeg/ffmpeg-3.1.1-64bit-static/ffmpeg'
FFPROBE = '/opt/ffmpeg/ffmpeg-3.1.1-64bit-static/ffprobe'
Depuis la version 1.6.0 la génération de la prévisualisation (overview) utilise imagemagick. A installer sur le serveur d'encodage.
[root@prepxxx-encodage ~]# yum install ImageMagick ImageMagick-devel
Utilisé pour l'encodage des vignettes (plus rapide que ffmpeg dans ce cas là). A installer sur le serveur d'encodage. Installation décrite à cette adresse : http://linoxide.com/linux-how-to/install-ffmpeg-centos-7/
[root@tspod ~]# yum -y install epel-release
[root@tspod ~]# rpm --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
[root@tspod ~]# # Attention : modification du 0-1 en 0-5 par rapport à la documentation ci-dessus
[root@tspod ~]# rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.e
l7.nux.noarch.rpm
[root@tspod ~]# yum repolist
[root@tspod ~]# yum install --enablerepo=epel ffmpeg ffmpeg-devel
[root@tspod ~]# yum install --enablerepo=epel ffmpegthumbnailer
Remarque : Au final, le serveur contient 2 versions différentes de ffmpeg :
- une version installée à la main (cf. paragraphe précédent), qui sera la plus récente possible. C'est cette version qui sera utilisée par Pod.
- une version installée via yum. Cette version sera seulement utilisée via ffmpegthumbnailer.
Mise en place du moteur de recherche
Moteur de recherche A réaliser sur le serveur ElasticSearch
Dans l'environnement applicatif UM, Java est installé de base; cette étape n'est alors pas nécessaire.
[root@tspod ~]# yum install java-1.8.0-openjdk.x86_64
Aujourd'hui Elasticsearch en est à sa version 5, cependant Pod utilise la version 2.4.x. Pour installer cette version suivre les instructions :
[root@tspod ~]# rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch
[root@tspod ~]# cd /etc/yum.repos.d/
On édite le fichier repo :
[root@tspod ~]# emacs elasticsearch.repo
[elasticsearch-2.x]
name=Elasticsearch repository for 2.x packages
baseurl=https://packages.elastic.co/elasticsearch/2.x/centos
gpgcheck=1
gpgkey=https://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1
Installation et mise en service :
[root@tspod ~]# yum install elasticsearch
[root@tspod ~]# chkconfig --add elasticsearch
On édite le fichier elasticsearch.yml
[root@tspod ~]# emacs /etc/elasticsearch/elasticsearch.yml
Puis on modifie le fichier pour arriver à la configuration ci-dessous:
cluster.name: pod
node.name: Pod1
path.data: /data/elasticsearch/data
path.logs: /data/elasticsearch/logs
network.host: 127.0.0.1
discovery.zen.ping.multicast.enabled: false
discovery.zen.ping.unicast.hosts: ["127.0.0.1"]
Attention : Il est nécessaire de créer les répertoires de données et de logs à la main, pour le compte elasticsearch. Dans mon cas, /data/elasticsearch/data et /data/elasticsearch/logs.
[root@prepxxx-elasticsearch /data]# cd /data
[root@prepxxx-elasticsearch /data]# mkdir elasticsearch
[root@prepxxx-elasticsearch /data]# cd elasticsearch/
[root@prepxxx-elasticsearch /data]# mkdir data
[root@prepxxx-elasticsearch /data]# mkdir logs
[root@prepxxx-elasticsearch /data]# chown -R elasticsearch:elasticsearch /data/elasticsearch/
Pour optimiser la recherche, il faut créer l'index Pod dans elasticsearch et pousser le template fourni :
[pod@tspod /data/www/podprep/django_projects/pod/pod_project]$ python manage.py create_pod_index
Remarque : Cette commande peut retourner un avertissement : Pod index already exists: index_already_exists_exception. Cela n'a aucun impact. Cela indique qu'un index Pod existe déjà dans la base d'Elasticsearch.
Une commande est fournie dans le cadre où l'on souhaiterais indexer ou ré-indexer une, plusieurs ou toutes les vidéos.
[pod@tspod /data/www/podprep/django_projects/pod/pod_project]$ python manage.py index_videos < __ALL__ || pod_id, pod_id...>
Par exemple pour toutes les vidéos:
[pod@tspod /data/www/podprep/django_projects/pod/pod_project]$ python manage.py index_videos __ALL__
- Problème de droit
Si vous avez rencontré des problèmes de droit avec Elasticsearch, vous pouvez exécuter les commandes suivantes pour régler ces problèmes :
[root@tspod ~]# chown -R elasticsearch:elasticsearch /etc/elasticsearch/
[root@tspod ~]# chown -R elasticsearch:elasticsearch /data/elasticsearch/
[root@tspod ~]# service elasticsearch restart
- Problème lors de la recherche
Sur cet environnement de test, il est possible que la recherche ne fonctionne plus au bout d'une douzaine d'heures. La recherche provoque alors l'erreur suivante :
IOError at /search/
[Errno 5] Input/output error
Un redémarrage de Pod règle ce problème.
Remarque : Dans l'environnement de pré-production / production, ce problème ne survient plus.
Si nécessaire, voici la procédure de réindexation de l'ensemble des vidéos via Elasticsearch :
[pod@tspod /data/www/podprep/django_projects/pod/pod_project]$ curl -XDELETE 'http://localhost:9200/pod/'
[pod@tspod /data/www/podprep/django_projects/pod/pod_project]$ python manage.py create_pod_index
[pod@tspod /data/www/podprep/django_projects/pod/pod_project]$ python manage.py index_videos __ALL__
[root@tspod ~]# service elasticsearch restart
Installations optionnels
Ce package doit déjà avoir été installée lors de la mise en place de l'environnement système.
[root@tspod ~]# yum install memcached
Démarches à suivre si vous désirez apporter vos propres traductions à votre instance de Pod.
Utilitaire de traduction et fichiers de languages
La plateforme est par défaut seulement en français et en anglais Ce package doit déjà avoir été installée lors de la mise en place de l'environnement système.
[root@tspod ~]# yum install gettext
Pour la suite cette partie ne diffère pas du tutoriel d'installation classique : https://github.com/EsupPortail/pod/wiki/Installation#traduction
Mise en place d'un thème personnalisé
Ajouter un nouveau thème
Cette partie ne diffère pas du tutoriel d'installation classique : https://github.com/EsupPortail/pod/wiki/Installation#th%C3%A8me
Comment lancer les tests sur Pod. Il est important de procéder à des tests avant chaque déploiements et/ou après des modifications du code source pour s'assurer de la bonne intégrité du programme.
Lancement des tests
En tant que Pod
[pod@tspod /data/www/podprep/django_projects/pod/pod_project]$ python manage.py test core pods.tests.tests_models pods.tests.tests_views pods.tests.tests_delete_video
Sur un environnement utilisant une base MariaDB, les tests ci-dessus plantent dès le départ (Impossible de créer la base de donnée suite à un problème de droits). En effet, pour les tests, une base SQLite est créée - spécialement - puis supprimée. Pour le bon déroulement des tests, il est nécessaire de modifier la configuration de la base de données dans le fichier settings_local.py pour utiliser une base SQLite, le temps des tests; une fois les tests passés, bien penser à remettre le bon paramétrage MariaDB.
Le serveur de développement permet de tester vos futurs modifications facilement.
Lancement du serveur
Il est possible de lancer le serveur Web de développement via les commandes suivantes :
- Soit en tant qu'utilisateur pod, sur le port 8080
[pod@tspod /data/www/podprep/django_projects/pod/pod_project]$ python manage.py runserver 162.38.XX.XX:8080 &
- Soit en tant qu'utilisateur root, sur le port 80
[root@tspod /data/www/podprep/django_projects/pod/pod_project]$ python manage.py runserver 162.38.XX.XX:80 &
Attention: L'utilisation de ce serveur Web de développement n'est fait que pour le "développement" et les tests. Il n'est nullement optimisé ni fait pour la production.
De plus, il semble provoquer une erreur avec la timeline : lors d'un déplacement dans la timeline, la vidéo est redémarrée au début de celle-ci !
A priori, cette erreur est liée à ce serveur de développement WSGIServer. Il ne gère pas l'attribut de l'entête HTTP Accept-Range s: bytes.
Commande exécutée - dans mon cas - pour tester cela : curl -I http://162.38.XX.XX/media/videos/p00000013909/8/video_8_720.mp4
Ce problème devrait alors être réglé avec un "vrai" serveur de production tel Apache ou Nginx.
Pour plus d'informations :http://stackoverflow.com/questions/10328401/html5-how-to-stream-large-mp4-files
Pod, plateforme de gestion de video
Avec la participation de :
[UNR Nord pas de calais] (http://www.unr-npdc.org/) ![UNR Nord pas de calais] (http://www.unr-npdc.org/sites/www.unr-npdc.org/themes/unrnpdc/img/logo_unr.gif "UNR Nord pas de calais")
Ministère de l'éducation nationale, de l'enseignement supérieur et de la recherche