esup-pod

Arborescence des pages

Comparaison des versions

Légende

  • Ces lignes ont été ajoutées. Ce mot a été ajouté.
  • Ces lignes ont été supprimées. Ce mot a été supprimé.
  • La mise en forme a été modifiée.
Commentaire: add 'charset': 'utf8mb4' on mariadb

Sommaire

Base de données MySQL/MariaDB

Installation de MariaDB

...

Bloc de code
$ sudo apt

...

 install mariadb-server mariadb-client
$ sudo mysql_secure_installation

 Attention il faut modifier le fichier /etc/mysql/mariadb.conf.d/50-server.cnf

Bloc de code
character-set-server  = utf8
collation-server      = utf8_general_ci

Vous devez ensuite créer une nouvelle base de données.

Bloc de code
(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

Bloc de code
(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

Depuis la version 3.3.1 il faut installer le timezone dans le moteur SQL (Mysal ou mariadb) (à faire en tant que root mysql !)

Bloc de code
$ mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql --database=mysql

Pour utiliser la base de donnée données MySQL/MariaDB sur le serveur frontal (ou sur un serveur distant) il faut installer le moteur MySql/Python :

...

Bloc de code
$ sudo apt

...

 install pkg-config python3-dev

...

 

...

default-libmysqlclient-dev
(django_pod) 

...

pod@pod:/usr/local/django_projects/

...

podv3$ pip3 install mysqlclient

Optimisation de MariaDB

Votre configuration doit être adaptée à la taille de votre base de donnée. Pour éviter d'éventuels souci lors des mises à jour, je vous invite à vous assurer que vous avez au minimum 256M pour le paramètre "max_allowed_packet" (voir plus si votre base de données est plus importante. Il faut indiquer la taille de votre plus grosse table)

Bloc de code
title/etc/my.cnf
[mysqld]

...

max_allowed_packet=256M


Configuration de Pod

Si ce n’est 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 :

Bloc de code
(django_pod) 

...

pod@pod:/usr/local/django_projects/

...

podv3$ vim pod/custom/settings_local.py

...


Bloc de code
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",
			'charset': 'utf8mb4',
             },
    }
}

Il faut ensuite relancer le script présent 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 :

Bloc de code
(django_pod) pod@Pod:~/django_projects/podv3$ make createDB

...

Avertissement

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

Installation du serveur Web NGINX et paramétrage :

...

Commencer par installer le serveur NGINX

Bloc de code
(django_pod) pod@Pod:~/django_projects/podv3$ sudo apt

...

 install nginx

...

Ensuite, modifier le fichier /etc/nginx/sites-enabled/default

Bloc de code
(django_pod) pod@Pod:~/django_projects/podv3$ sudo vim /etc/nginx/sites-enabled/default

...

Rechercher la ligne ci-dessous à modifier

Bloc de code
[...]

...


server { listen 80 default_server;

...

#listen [::]:80 default_server;
[...]

...

Installer les addons de NGINX

Bloc de code
(django_pod) pod@Pod:~/django_projects/podv3$ sudo apt

...

 install nginx-extras

...

Rajouter les lignes ci-dessous dans le fichier de configuration de nginx :

...

Bloc de code

...

(django_pod) pod@Pod:~/django_projects/podv3$ sudo vim /etc/nginx/nginx.conf

...


Bloc de code
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) :

Bloc de code
(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 l’usage d'UWSGI.

Installer le module uwsgi

Bloc de code

...

(django_pod) pod@Pod:~/django_projects/

...

podv3$ sudo pip3 install uwsgi

...

Dupliquez le fichier modèle et éditez-le pour personnaliser les paramètres :

Bloc de code
(django_pod) pod@Pod:~/django_projects/

...

Si vous souhaitez effectuer un changement, une personnalisation :

...

podv3$ cp pod_uwsgi.ini pod/custom/.

...

(django_pod) pod@Pod:~/django_projects/

...

podv3$ vim pod/custom/pod_uwsgi.ini

...

(django_pod) pod@Pod:~/django_projects/

...

podv3$ 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

...

(django_pod) pod@Pod:~/django_projects/

...

podv3$ 

...

Pour lancer le service UWSGI au démarrage de la machine :

Créer un fichier uwsgi-pod.service

...

Bloc de code

...

(django_pod) pod@Pod:~/django_projects/

...

podv3$ sudo vim /etc/systemd/system/uwsgi-pod.service

...

Y ajouter :

Bloc de code
[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 ensuite activer le service

...

Bloc de code

...

(django_pod) pod@Pod:~/django_projects/

...

podv3$ sudo systemctl enable uwsgi-pod

...

Et Pour le lancer ou l'arréter l’arrêter :

...

Bloc de code
(django_pod) pod@Pod:~

...

/django_projects/

...

podv3$ sudo systemctl stop uwsgi-pod

...

(django_pod) pod@Pod:~/django_projects/

...

podv3$ sudo systemctl restart uwsgi-pod

...

...


Avertissement

Attention, il faut penser à collecter les fichiers "statics" pour qu'ils soient servis par le

...

frontal web

...

NGINX

Bloc de code
(django_pod) 

...

pod@Pod:~

...

/django_projects/podv3$ 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 :

Bloc de code
languagebash
(django_pod) pod@pod:~/django_projects/podv2$ sudo apt-get purge ffmpeg ffmpegthumbnailer imagemagick

Il faut installer RabbitMQ :

Bloc de code
languagebash
(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

...

languagepy

...



Log Rotate

Les fichiers de log peuvent vite grossir sur un serveur en production. Aussi, je vous invite à mettre en place un système de log rotate pour les logs d'Esup-Pod :

Bloc de code
languagebash
title/etc/logrotate.d/esup-pod
/usr/local/django_projects/podv3/pod/log/*.log {
    su pod www-data
    daily
    missingok
    rotate 14
    nocompress
    delaycompress
    notifempty
    create 0640 pod www-data
    sharedscripts
    postrotate
        systemctl restart uwsgi-pod >/dev/null 2>&1
    endscript
}

Puis lancez la commande suivante pour vérifier que ça fonctionne :

sudo logrotate -d /etc/logrotate.d/esup-pod