Skip to content
This repository has been archived by the owner on Sep 3, 2021. It is now read-only.

Installation (CentOS 7)

DrClockwork edited this page Feb 9, 2018 · 4 revisions

Sommaire

  1. Bases et sources
    1. Mise en place avant les sources
    2. Récupération des sources
  2. Paramètrage
  3. Base de données
  4. Installation tierce
    1. FFMPEG
    2. Elasticsearch
    3. Optionnel : Memcached
    4. Optionnel : Serveur FTP
    5. Optionnel : CAS et LDAP
  5. Traduction
  6. Thème
  7. Tests
  8. 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.

Bases et sources

Les démarches pour installer l'environnement de travail pour Pod

Mise en place avant les sources

Création d'un nouvel utilisateur

[root@tspod ~]# adduser pod
[root@tspod ~]# passwd pod

Utilisation du repository epel

[root@tspod ~]# yum install epel-release

Mise en place de l'environnement système

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

Mise en place de l'environnement virtuel

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

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

Installation de toutes les librairies Python

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

Paramétrage

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

Base de données

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.

Installation tierce

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

FFMPEG

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'

ImageMagick

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

FFMPEGTHUMBNAILER

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

Elasticsearch

Moteur de recherche A réaliser sur le serveur ElasticSearch

Installation de java

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

Installation d'ElasticSearch

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

Paramétrage d'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/

Ajout du template Pod

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èmes rencontrés

  • 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.

Procédure de réindexation via Elasticsearch

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

Optionnel : Memcached

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

Traduction

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

Thème

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

Tests

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.

Serveur de développement

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