Fork me on GitHub
Phraseanet Documentation

NGINX

Configuration d’un virtual host Nginx pour Phraseanet :

#/etc/nginx/sites-available/phraseanet.conf
server {
    listen       80;
    server_name  yourdomain.tld;
    root         /var/www/Phraseanet/www;

    index        index.php;

    location /api {
        rewrite ^(.*)$ /api.php/$1 last;
    }

    location / {
        # try to serve file directly, fallback to rewrite
        try_files $uri $uri/ @rewriteapp;
    }

    location @rewriteapp {
        rewrite ^(.*)$ /index.php/$1 last;
    }

    # PHP scripts -> PHP-FPM server listening on 127.0.0.1:9000
    location ~ ^/(index|index_dev|api)\.php(/|$) {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }
}

Configuration Sendfile

L’essentiel

Sendfile permet de délester PHP de l’envoi des fichiers aux navigateurs. Il est fortement recommandé d’utiliser cette configuration pour alleger les process sur le serveur. Si Sendfile et désactivé, l’application Phraseanet fonctionnera normallement.

La configuration SendFile de Phraseanet est simplifiée. Une commande de l’utilitaire bin/console permet de générer les mappings pour la configuration Phraseanet, une seconde permet d’en générer le supplément de configuration Nginx.

La première étape consiste à générer le mapping Phraseanet Sendfile à l’aide de la commande bin/console xsendfile:generate-mapping

bin/console xsendfile:generate-mapping nginx --enabled

Cette commande va afficher à l’ecran la partie de la configuration telle qu’elle va être écrite. Pour l’écrire, re-executer la commande avec l’option –write.

bin/console xsendfile:generate-mapping nginx --enabled --write

Une fois la configuration Phraseanet écrite, il faut mettre à jour les directives nginx avec la commande xsendfile:dump-configuration

bin/console xsendfile:dump-configuration

Il suffit de copier-coller ce code dans le virtual host Nginx et de recharger Nginx.

Avertissement

L’opération de génération des mappings et de mise à jour du virtual host est à refaire à chaque création de databox ou lors de la modification de la structure des sous définitions de l’une d’elles.

Example de configuration Nginx intégrant une configuraton sendfile :

#/etc/nginx/sites-available/phraseanet.conf
server {
    listen       80;
    server_name  yourdomain.tld;
    root         /var/www/Phraseanet/www;

    index        index.php;

    location /api {
        rewrite ^(.*)$ /api.php/$1 last;
    }

    location / {
        # try to serve file directly, fallback to rewrite
        try_files $uri $uri/ @rewriteapp;
    }

    location @rewriteapp {
        rewrite ^(.*)$ /index.php/$1 last;
    }

    location /lazaret {
        internal;
        add_header Etag $upstream_http_etag;
        add_header Link $upstream_http_link;
        alias /storage/phraseanet/lazaret;
    }
    location /download {
        internal;
        add_header Etag $upstream_http_etag;
        add_header Link $upstream_http_link;
        alias /storage/phraseanet/download;
    }
    location /protected_dir_1 {
        internal;
        add_header Etag $upstream_http_etag;
        add_header Link $upstream_http_link;
        alias /storage/phraseanet/databox/documents;
    }
    location /protected_dir_2 {
        internal;
        add_header Etag $upstream_http_etag;
        add_header Link $upstream_http_link;
        alias /storage/phraseanet/databox/subdefs;
    }

    # PHP scripts -> PHP-FPM server listening on 127.0.0.1:9000
    location ~ ^/(index|index_dev|api)\.php(/|$) {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }
}

Configuration H264 pseudo-streaming

L’essentiel

H264 Pseudo-streaming permet d’émuler un serveur de stream et la navigation dans le flux video avant le chargement complet de celui-ci.

La configuration H264 pseudo-streaming de Phraseanet est simplifiée. Une commande de l’utilitaire bin/console permet de générer les mappings pour la configuration Phraseanet, une seconde permet d’en générer le supplément de configuration Nginx.

Note

Il est nécessaire d’installer les modules Secure link et MP4 de Nginx.

La première étape consiste à générer le mapping Phraseanet H264 pseudo-streaming à l’aide de la commande bin/console h264-pseudo-streaming:generate-mapping

bin/console h264-pseudo-streaming:generate-mapping nginx --enabled

Cette commande va afficher à l’ecran la partie de la configuration telle qu’elle va être écrite. Pour l’écrire, re-executer la commande avec l’option –write.

bin/console h264-pseudo-streaming:generate-mapping nginx --enable --write

Une fois la configuration Phraseanet écrite, il faut mettre à jour les directives nginx avec la commande h264-pseudo-streaming:dump-configuration

bin/console h264-pseudo-streaming:dump-configuration

Il suffit de copier-coller ce code dans le virtual host Nginx et de recharger Nginx.

Avertissement

L’opération de génération des mappings et de mise à jour du virtual host est à refaire à chaque création de databox ou lors de la modification de la structure des sous définitions de l’une d’elles.

Example de configuration Nginx intégrant une configuraton H264 pseudo-streaming :

#/etc/nginx/sites-available/phraseanet.conf
server {
    listen       80;
    server_name  yourdomain.tld;
    root         /var/www/Phraseanet/www;

    index        index.php;

    location /api {
        rewrite ^(.*)$ /api.php/$1 last;
    }

    location / {
        # try to serve file directly, fallback to rewrite
        try_files $uri $uri/ @rewriteapp;
    }

    location @rewriteapp {
        rewrite ^(.*)$ /index.php/$1 last;
    }

    location /mp4-videos-1 {
        mp4;
        secure_link $arg_hash,$arg_expires;
        secure_link_md5 "$secure_link_expires$uri s3cr3tstr1ng";

        if ($secure_link = "") {
            return 403;
        }
        if ($secure_link = "0") {
            return 410;
        }

        alias /storage/phraseanet/databox/subdefs;
    }

    # PHP scripts -> PHP-FPM server listening on 127.0.0.1:9000
    location ~ ^/(index|index_dev|api)\.php(/|$) {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }
}