Base de données MySQL/MariaDB
Installation de MariaDB
(django_pod) pod@pod:/usr/local/django_projects/podv3$ sudo apt-get install mariadb-server mariadb-client
Attention il faut modifier le fichier /etc/mysql/mariadb.conf.d/50-server.cnf
character-set-server = utf8 collation-server = utf8_general_ci
Vous devez ensuite créer une nouvelle base de données.
(django_pod) pod@pod:/usr/local/django_projects/podv3$ sudo mysqladmin create mydatabase
Il faut ensuite donner les droits à cette base à un utilisateur renseigné dans votre fichier de settings ci-après
(django_pod) pod@pod:/usr/local/django_projects/podv3$ sudo mysql mysql> GRANT ALL PRIVILEGES ON mydatabase.* TO 'mydatabaseuser'@127.0.0.1 IDENTIFIED BY 'mypassword'; Query OK, 0 rows affected (0.00 sec) mysql> exit
Pour utiliser la base de donnée MySQL/MariaDB sur le serveur frontal (ou sur un serveur distant) il faut installer le moteur MySql/Python :
(django_pod) pod@pod:/usr/local/django_projects/podv3$ sudo apt-get install python3-dev (django_pod) pod@pod:/usr/local/django_projects/podv3$ sudo apt-get install default-libmysqlclient-dev (django_pod) pod@pod:/usr/local/django_projects/podv3$ pip3 install mysqlclient
SI ce n'est pas encore fait, vous devez spécifier la configuration de votre base de données dans votre fichier de configuration settings_local.py :
(django_pod) pod@pod:/usr/local/django_projects/podv3$ vim pod/custom/settings_local.py
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'mydatabase', 'USER': 'mydatabaseuser', 'PASSWORD': 'mypassword', 'HOST': '127.0.0.1', 'PORT': '3306', 'OPTIONS': { 'init_command': "SET storage_engine=INNODB, sql_mode='STRICT_TRANS_TABLES', innodb_strict_mode=1", }, } }
Il faut ensuite relancer le script présent à la racine afin de créer les fichiers de migration, puis de les lancer afin de créer la base de données :
(django_pod) pod@Pod:~/django_projects/podv3$ make createDB
Ne pas oublier de créer à nouveau un superutilisateur
(django_pod) pod@Pod:~/django_projects/podv3$ python manage.py createsuperuser
Frontal Web NGINX / UWSGI et fichiers statiques
Pour plus de renseignement, d'explication que la documentation ci-dessous, voici le tutoriel que j'ai suivi pour mettre en place cette solution : doc{:target="_blank"}
Insallation du serveur Web NGINX et paramétrage :
Commencer par installer le serveur NGINX
(django_pod) pod@Pod:~/django_projects/podv3$ sudo apt-get install nginx
Ensuite, modifier le fichier /etc/nginx/sites-enabled/default
(django_pod) pod@Pod:~/django_projects/podv3$ sudo vim /etc/nginx/sites-enabled/default
Rechercher la ligne ci-dessous à modifier
[...] server { listen 80 default_server; #listen [::]:80 default_server; [...]
Installer les addons de NGINX
(django_pod) pod@Pod:~/django_projects/podv3$ sudo apt-get install nginx-extras
Rajouter les lignes ci-dessous dans le fichier de configuration de nginx :
(django_pod) pod@Pod:~/django_projects/podv3$ sudo vim /etc/nginx/nginx.conf
http { [...] # Pod Progress Bar : reserve 1MB under the name 'uploads' to track uploads upload_progress uploadp 1m; [...] }
Il faut ensuite spécifier le host pour le serveur web (changer si besoin les paramètres dans le fichier pod_nginx.conf) :
(django_pod) pod@Pod:~/django_projects/podv3$ cp pod_nginx.conf pod/custom/. (django_pod) pod@Pod:~/django_projects/podv3$ vim pod/custom/pod_nginx.conf (django_pod) pod@Pod:~/django_projects/podv3$ sudo ln -s /usr/local/django_projects/podv3/pod/custom/pod_nginx.conf /etc/nginx/sites-enabled/pod_nginx.conf (django_pod) pod@Pod:~/django_projects/podv3$ sudo /etc/init.d/nginx restart
UWSGI
Un fichier de configuration est fourni pour faciliter l'usage d'UWSGI.
Installer le module uwsgi
(django_pod) pod@Pod:~/django_projects/podv3$ sudo pip3 install uwsgi
Dupliquer le fichier modèle et éditer le pour personnaliser les paramètres :
(django_pod) pod@Pod:~/django_projects/podv3$ cp pod_uwsgi.ini pod/custom/. (django_pod) pod@Pod:~/django_projects/podv3$ vim pod/custom/pod_uwsgi.ini
pod@pod:~/django_projects/podv2$ cp pod_uwsgi.ini pod/custom/.
pod@pod:~/django_projects/podv2$ vim pod/custom/pod_uwsgi.ini
pod@pod:~/django_projects/podv2$ sudo uwsgi --ini pod/custom/pod_uwsgi.ini --enable-threads --daemonize /usr/local/django_projects/podv3/pod/log/uwsgi-pod.log --uid pod --gid www-data --pidfile /tmp/pod.pid
[uWSGI] getting INI configuration from pod/custom/pod_uwsgi.ini
pod@pod:~/django_projects/podv3$
Pour lancer le service UWSGI au démarrage de la machine :
pod@pod:/usr/local/django_projects/podv3/pod/log$ sudo vim /etc/systemd/system/uwsgi-pod.service
[Unit]
Description=Pod uWSGI app
After=syslog.target
[Service]
ExecStart=/usr/local/bin/uwsgi --ini /usr/local/django_projects/podv3/pod/custom/pod_uwsgi.ini \
--enable-threads \
--pidfile /tmp/pod.pid
ExecStop=/usr/local/bin/uwsgi --stop /tmp/pod.pid
User=pod
Group=www-data
Restart=on-failure
KillSignal=SIGQUIT
Type=notify
StandardError=syslog
NotifyAccess=all
[Install]
WantedBy=multi-user.target
Il faut Ensuite activer le service
pod@pod:/usr/local/django_projects/podv3/pod/log$ sudo systemctl enable uwsgi-pod
Et le lancer ou l'arréter :
pod@pod:/usr/local/django_projects/podv3/pod/log$ sudo systemctl stop uwsgi-pod
pod@pod:/usr/local/django_projects/podv3/pod/log$ sudo systemctl restart uwsgi-pod
Fichiers statiques doc
Attention, il faut penser à collecter les fichiers statics pour qu'ils soient servis par le serveur web :
(django_pod) pod@pod:~$ python manage.py collectstatic
Optionnel : Serveur FTP (enregistreur)
Lors de l'installation de Pod à l'unviersité de Lille, les fichiers vidéos sont stockés sur une partition montée sur "/data". Pour cela, le répertoire "media", qui contient les fichiers "utilisateurs" est créé sur "/data/media" en paramétrant la variable MEDIA_ROOT dans le fichier de configuration. De ce fait, pour des raisons de cohérence, le répertoire du serveur FTP est placé dans "/data/ftp-pod". Au niveau du logiciel, nous proposons d'utiliser vsftpd.
Voici le détail de son installation :
(django_pod) pod@pod:/data$ INSTALLDIR=/data
(django_pod) pod@pod:/data$ NOMFTPUSER="ftpuser"
(django_pod) pod@pod:/data$ PASSFTPUSER="*******"
(django_pod) pod@pod:/data$ sudo mkdir $INSTALLDIR/ftp-pod
(django_pod) pod@pod:/data$ sudo useradd -m -d $INSTALLDIR/ftp-pod/ftp $NOMFTPUSER
(django_pod) pod@pod:/data$ sudo echo "$NOMFTPUSER:$PASSFTPUSER"|sudo chpasswd
(django_pod) pod@pod:/data$ sudo apt-get install vsftpd
Pour la configuration, il faut éditer le fichier "/etc/vsftpd.conf"
django_pod) pod@pod1:/data$ sudo vim /etc/vsftpd.conf
[...]
listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
...
chroot_local_user=YES
A la fin du fichier de configuration, nous avons ajouté ceci :
local_root=/data/ftp-pod/ftp
pasv_enable=Yes
pasv_min_port=10090
pasv_max_port=10100
allow_writeable_chroot=YES
Enfin un petit restart pour mettre tout ca en route !
(django_pod) pod@pod:/data$ sudo /etc/init.d/vsftpd restart
Déporter l'encodage sur un autre serveur
Pré-requis :
- Il faut que votre répertoire ~/django_projects/podv2/pod/media soit partagé entre vos serveurs (montage NFS par exemple)
- Il faut utiliser une BD Mysql/MariaDB pour qu'elle soit partageable entre les serveurs Pod frontaux et encodages
Installation sur le frontal :
Il ne faut pas avoir installé ffmpeg, ffmpegthumbnailer et imagemagick. Si c'est le cas, les déinstaller :
(django_pod) pod@pod:~/django_projects/podv2$ sudo apt-get purge ffmpeg ffmpegthumbnailer imagemagick
Il faut installer RabbitMQ :
(django_pod) pod@pod:~/django_projects/podv2$ sudo apt-get install rabbitmq-server (django_pod) pod@pod:~/django_projects/podv2$ sudo rabbitmqctl add_user pod *mdp* (django_pod) pod@pod:~/django_projects/podv2$ sudo rabbitmqctl set_user_tags pod administrator (django_pod) pod@pod:~/django_projects/podv2$ sudo rabbitmqctl set_user_tags guest (django_pod) pod@pod:~/django_projects/podv2$ sudo rabbitmqctl add_vhost rabbitpod (django_pod) pod@pod:~/django_projects/podv2$ sudo rabbitmqctl set_permissions -p rabbitpod pod ".*" ".*" ".*"
Rajouter la configuration Celery/rabbitmq dans le fichier settings_local.py
(django_pod) pod@pod:/usr/local/django_projects/podv2$ vim pod/custom/settings_local.py
# Configuration Celery sur le frontal CELERY_TO_ENCODE = True # Active encode CELERY_BROKER_URL = "amqp://pod:mdp@localhost/rabbitpod" # Define a broker