View previous topic :: View next topic |
Author |
Message |
pti-rem Guru
Joined: 14 Oct 2011 Posts: 472
|
Posted: Sun Jul 24, 2016 8:59 am Post subject: [nginx | php] mettre à dispo des listes de vidéothèque |
|
|
Bonjour,
J'ai des bibliothèques de médias dont je souhaite mettre à disposition les listes avec nginx en mode texte simple, comme pour l'affichage d'une d'une arborescence comme avec autoindex à on
Je souhaite que ce ne soit que des listes (même à 0 octet) et pas des liens donnant sur les éléments de mes bibliothèques.
Je ne peux pas tout simplement interdire avec nginx la production des liens pour les fichiers ?
Le module autoindex ne le permet pas. http://nginx.org/en/docs/http/ngx_http_autoindex_module.html
Je me demande quel est le plus court chemin, sachant que les bibliothèques s'élaborent et s'organisent constamment.
Faut-il vraiment que j'ordonnance un script pour reproduire régulièrement les bibliothèques avec touch ? Ça c'est vraiment trop le bazar, il s'agit de mises à jour.
Ou alors il me faut plutôt un peu de php pour traduire les arborescences de fichiers en simple affichage ? Il doit bien déjà exister celui-là
Merci pour vos conseils
Last edited by pti-rem on Sat Nov 05, 2016 1:49 pm; edited 1 time in total |
|
Back to top |
|
|
El_Goretto Moderator
Joined: 29 May 2004 Posts: 3169 Location: Paris
|
Posted: Mon Jul 25, 2016 8:39 am Post subject: |
|
|
A vue de nez:
- find pour générer une liste de paths dans un fichier texte (éventuellement dans un job cron).
- nginx pour mettre à disposition ce fichier texte.
Tu vas perdre plus de temps à trouver une usine à gaz (en php? au secours! ) qui fera peut être ce truc trivial pour toi qu'à implémenter une solution simple (et sûre) par toi même _________________ -TrueNAS & jails: µ-serv Gen8 E3-1260L, 16Go ECC + µ-serv N40L, 10Go ECC
-Réseau: APU2C4 (OpenWRT) + GS726Tv3 + 2x GS108Tv2 + Archer C5v1 (OpenWRT) |
|
Back to top |
|
|
pti-rem Guru
Joined: 14 Oct 2011 Posts: 472
|
Posted: Mon Jul 25, 2016 1:43 pm Post subject: |
|
|
Oui, je vais faire ce que tu me propose pour constituer des fichiers de chemins par bibliothèque.
Je vais également ordonnancer un find pour les répertoires et les fichiers des bibliothèques pour produire une racine d'un vhost avec l'arborescence et les noms de fichiers avec la commande touch
cette racine sera vidée et reproduite. c'est le plus simple.
J'ai besoin de fournir la possibilité d'une navigation légère pour un accès satellite avec un forfait limité.
Je vois d'ici que rien que le fichier de chemins de Films pèse lourd. Et c'est celui va varier le plus. |
|
Back to top |
|
|
pti-rem Guru
Joined: 14 Oct 2011 Posts: 472
|
Posted: Mon Aug 08, 2016 10:44 am Post subject: |
|
|
Bonjour,
J'ai créé un script qui fabrique une autre arborescence des répertoires des bibliothèques que je veux publier , avec conservation de la date de création.
Mon script crée dans cette arborescence des fichiers du même nom que ceux qui sont trouvés dans les bibliothèque à publier ;
avec les extensions avi mkv mp4 ts flv wmv mpg (j'en ai pas d'autres en tête)
J'ajoute .html à chaque fichier. La date de création originale est conservée. J'ai dû utiliser sed pour ajouter des sauts de ligne HTML <br /> à chaque fin de ligne des fichiers .html
Les fichiers ne sont pas vides ; j'utilise du et ffprobe pour les constituer avec quelques informations ;
cat ./plex-web/Docus-TS/La Corse, beauté sauvage/La Corse, beauté sauvage : L'île verticale #1 (2012).ts.html: | 1,6G Docus-TS/La Corse, beauté sauvage/La Corse, beauté sauvage : L'île verticale #1 (2012).ts<br />
Modif. : 2016-05-03 08:02:57.229183271 +0200<br />
ffprobe -hide_banner "Docus-TS/La Corse, beaut\xc3\xa9 sauvage/La Corse, beaut\xc3\xa9 sauvage : L'\xc3\xaele verticale #1 (2012).ts"<br />
Input #0, mpegts, from 'Docus-TS/La Corse, beauté sauvage/La Corse, beauté sauvage : L'île verticale #1 (2012).ts':<br />
Duration: 00:42:56.99, start: 1.400000, bitrate: 5237 kb/s<br />
Stream #0:0[0x100]: Video: h264 (High) ([27][0][0][0] / 0x001B), yuv420p(tv, bt709), 1440x1080 [SAR 4:3 DAR 16:9], 25 fps, 25 tbr, 90k tbn, 50 tbc<br />
Stream #0:1[0x101](fra): Audio: eac3 ([6][0][0][0] / 0x0006), 48000 Hz, stereo, fltp, 128 kb/s<br />
Stream #0:2[0x102](qad): Audio: eac3 ([6][0][0][0] / 0x0006), 48000 Hz, stereo, fltp, 96 kb/s<br />
Stream #0:3[0x103](qaa): Audio: eac3 ([6][0][0][0] / 0x0006), 48000 Hz, stereo, fltp, 128 kb/s<br />
Stream #0:4[0x104](deu): Audio: eac3 ([6][0][0][0] / 0x0006), 48000 Hz, stereo, fltp, 96 kb/s<br />
Stream #0:5[0x105](fra): Subtitle: dvb_subtitle ([6][0][0][0] / 0x0006) (hearing impaired)<br />
Stream #0:6[0x106](fra): Subtitle: dvb_subtitle ([6][0][0][0] / 0x0006)<br />
Stream #0:7[0x107](deu): Subtitle: dvb_subtitle ([6][0][0][0] / 0x0006)<br /> |
L'idée est bonne ; quand mon arborescence est créée dans ./plex-touch, je la déplace dans une racine nginx ./plex-web dédiée que je vide auparavant.
Les deux arborescences étant dans le même filesystem, le déplacement est instantané.
J'ai des lignes ffprobe -hide_banner qui ne sont pas présentes dans tous les fichiers .html ; c'est assez curieux.
Je ne me suis pas encore attaché à faire des fichiers de chemins par bibliothèque. Ce n'est pas difficile et la navigation est prioritaire.
Je peux ordonnancer mon script facilement. Mais avec un grand nombre d'entrées, je préfère le lancer à la demande après un grand remaniement de mes bibliothèques.
Je vais devoir trouver une manière de faire une simple mise à jour pour un ou plusieurs ajouts, retraits ou déplacements.
Le souci, c'est que avec nginx et autoindex à on, la largeur d'affichage de la colonne des noms de fichiers est bien trop étroite.
Il y a beaucoup de noms longs et ils sont vraiment tronqués.
J'ai eu beau chercher, je ne sais pas agrandir cette colonne de nom de fichiers ; Et le mieux ce serait qu'elle soit la seule colonne affichée.
.htaccess ne fonctionne pas avec nginx d'après ce que j'ai lu.
http://unix.stackexchange.com/questions/145587/nginx-long-filenames-in-directory-listing#comment244035_149651
ssh2ksh Aug 11 '14 at 11:12 wrote: | According to ngx_http_autoindex_module documentation, configuration of column width for autoindexed pages is not available. Compiling from the source would be the only way to make this change.
One alternative could be to use a scripting language (e.g. php, ruby, or python) to perform the directory listing for you.
Benefits include:
fully customizable via CSS, JavaScript, etc
fine control over file listing
Caveats:
requires a CGI e.g. php-fpm or passenger
requires more configuration |
evachristine Aug 13 '14 at 15:14 wrote: | compiling did the trick |
evachristine Jul 20 '14 at 17:17 wrote: | http://forum.nginx.org/read.php?2,124400,167420#msg-167420
fagtron January 18, 2011 08:36PM wrote: | I looked all over the net and wasn't able to find this answer anyway, so I looked into the nginx source files and it's very easy.
Simply modify the file located at src/http/modules/ngx_http_autoindex_module.c and then compile.
Change these lines:
#define NGX_HTTP_AUTOINDEX_PREALLOCATE 50
#define NGX_HTTP_AUTOINDEX_NAME_LEN 50
to whatever you want, such as:
#define NGX_HTTP_AUTOINDEX_PREALLOCATE 100
#define NGX_HTTP_AUTOINDEX_NAME_LEN 100
And then compile and restart nginx. That's it !!! |
|
J'ai essayé de faire la modification. J'ai désinstallé le paquet www-servers/nginx et j'ai cloné le Git https://github.com/nginx/nginx et j'ai juste précisé un --prefix=/opt/nginx pour compiler.
édition du 10 août 2106 13:40 : je peux tout à fait avoir www-servers/nginx d'installé et un autre /etc/init.d/nginx-source (avec des modifications mineures) sans encombre. Il y a deux ensembles de configuration distincts à établir.
Pour la largeur, c'est efficace ; j'ai triplé le 50 à 150 : https://lut.im/VK9JUqT39j/qfBALtRf6VPBbiTJ.png (capture avec un zoom de 100 %)
C'est bien pour mon 16/9 mais je crois que je peux diminuer un peu ; tous n'ont pas du 1920x1080
Après pour tout ce qui peut se rattacher à Nginx - les fonctions qu'apportent les drapeaux du paquet www-servers/nginx, je verrai bien.
édition (lun. août 8 18:55:12 CEST 2016) :
J'ai placé la valeur à 250, ce qui m'élimine du visuel les colonnes pour la date et la taille. Mon visuel n'est composé que des noms sous forme de liens et j'ai un ascenseur horizontal qui est dans le bas de l'onglet de mon navigateur.
C'est le meilleur visuel que j'ai. Avec la largeur de 150 il était impossible de faire la relation entre un nom et la taille ou la date associée. C'est plus clair comme ça.
Je modifie le script pour rajouter l'information de date dans les fichiers .html
Avec mon filesystem ext4 et stat je n'ai pas la date de création des fichiers. J'utilise alors la date de modification ; ce qui est aussi bien dans mon cas.
Last edited by pti-rem on Mon Aug 08, 2016 5:02 pm; edited 1 time in total |
|
Back to top |
|
|
pti-rem Guru
Joined: 14 Oct 2011 Posts: 472
|
Posted: Wed Aug 17, 2016 12:23 pm Post subject: |
|
|
Je vous donne en lecture le script que je travaille depuis de nombreux jours ; je n'ai que peu de savoir dans ce domaine.
J'avais une version séquentielle qui mettait 2 heures pour traiter 9222 entrées ; j'ai réussi à paralléliser les traitements par ffprobe et le délai est maintenant de 17 minutes pour 9261 entrées valides et 59 vidéos repérées comme incorrectes.
Il manque l'indentation. navré.
Donc chaque jour mon site web de liste de mes bibliothèques est mis à jour avec des fichiers en .html comportant des informations sur le fichier vidéo comme je l'indique au dessus pour «La Corse, beauté sauvage : L'île verticale #1 (2012).ts.html»
Je vais dire à Nginx de se passer de l'extension .html pour interpréter du HTML ; Ce sera plus clair comme affichage.
nl --number-format=rn simple-plex-touch-n73sm-pour-cron4.sh > simple-plex-touch-n73sm-pour-cron4-numéroté.sh: | 1 #!/bin/bash
2 # /home/rem/Vidéos/simple-plex-touch-n73sm-pour-cron4-numéroté.sh
3 # VERSION ZÉRO NUMÉROTÉE POUR IDENTIFIER LES CORRECTIONS À FAIRE
4 # VERSION SANS SORTIE STANDARD POUR ÊTRE PLANIFIÉE EN TÂCHE CRON
5 # PLANIFIÉE À 4 h CHAQUE NUIT
6 # 0 4 * * * nice --adjustment=15 rm -f /media/racine-n40l/plex/captures/000_LIENS/* && \
7 # nice --adjustment=15 ln -f /media/racine-n40l/plex/captures/*/*/*/*.ts /media/racine-n40l/plex/captures/000_LIENS/ && \
8 # nice --adjustment=15 "/home/rem/Vidéos/simple-plex-touch-n73sm-pour-cron4.sh" && \
9 # IFS=$'\n' && nice --adjustment=15 touch "/home/rem/plex-web-déployé-le "`date` && IFS=$' \t\n' &> /dev/null
10 # EXÉCUTÉE SUR UN Asus n73sm-tz124v avec 12 GB de RAM
11 # Architecture : x86_64
12 # Mode(s) opératoire(s) des processeurs : 32-bit, 64-bit
13 # Boutisme : Little Endian
14 # Processeur(s) : 8
15 # Liste de processeur(s) en ligne : 0-7
16 # Thread(s) par cœur : 2
17 # Cœur(s) par socket : 4
18 # Socket(s) : 1
19 # Nœud(s) NUMA : 1
20 # Identifiant constructeur : GenuineIntel
21 # Famille de processeur : 6
22 # Modèle : 42
23 # Nom de modèle : Intel(R) Core(TM) i7-2670QM CPU @ 2.20GHz
24 # Révision : 7
25 # Vitesse du processeur en MHz : 2200.000
26 # Vitesse maximale du processeur en MHz : 2201,0000
27 # Vitesse minimale du processeur en MHz : 800,0000
28 # BogoMIPS : 4390.17
29 # Virtualisation : VT-x
30 # Cache L1d : 32K
31 # Cache L1i : 32K
32 # Cache L2 : 256K
33 # Cache L3 : 6144K
34 # Nœud NUMA 0 de processeur(s) : 0-7
35 # Le chemin CHBIB doit exister et comporter des sous-répertoires de bibliothèques
36 # qui sont définis dans MESBIB
37 # Les chemins CHWEB et CHTOU devraient se trouver sur le même système de fichiers
38 # pour un déploiement quasi-instantané (mv) sur le site Web en CHWEB
39 # Chemin de du répertoire de destination du serveur web
40 CHWEB="/media/racine-n40l/plex-web"
41 # Chemin racine des répertoires des bibliothèques de vidéos
42 CHBIB="/media/racine-n40l/plex"
43 # Chemin tmpfs racine intermédiaire pour la production de l'arborescence
44 CHTOU="/media/racine-n40l/plex-web-tmpfs"
45 # df -ah | grep plex-web-tmpfs
46 # tmpfs 700M 0 700M 0% /plex-web-tmpfs
47 # Chemin tmpfs pour accélerer la production des .tmp et des .html suivants
48 CHTMP="/tmp/cache_ram/plex"
49 # /tmp/cache_ram sert à mon profil et à mon cache de navigation pour Firefox
50 # df -ah | grep cache_ram
51 # tmpfs 1000M 74M 927M 8% /tmp/cache_ram
52 # LES MODIFICATIONS IFS NE SONT PAS OPTIMISÉES ; IL Y A SURTOUT DES SURCHARGES
53 # LES nice --adjustment= SONT RÉPÉTÉS
54 # TODO
55 # VERIFICATION EXISTENCE DES CHEMINS À FAIRE
56 # VERIFICATION DES BINAIRES UTILISÉS À FAIRE AVEC which
57 # MESSAGE ERREUR AVEC EXIT 1 SI UN MANQUE
58 # MISE EN VARIABLES DES BINAIRES TROUVÉS À FAIRE
59 ## Production des arborescences
60 IFS=$' \t\n'
61 nice --adjustment=15 rm -rf $CHTOU"/"* &> /dev/null
62 nice --adjustment=15 rm -rf $CHTMP"/"* &> /dev/null
63 MESBIB="Courts Pluzz TOMS TVFilms TVFilms-TS Films Films-TS Docus Docus-TS Séries captures AIDE"
64 MESEXT="avi mp4 mkv ts flv wmv mpg"
65 cd $CHBIB
66 IFS=$' \t\n'
67 for bib in $MESBIB
68 do
69 IFS=$'\n'
70 # deux commandes pour un -exec ?
71 # find $bib -depth -type d -exec mkdir -p $CHTMP"/"{} «&&» mkdir -p $CHTOU"/"{} \;
72 nice --adjustment=15 find $bib -depth -type d -exec mkdir -p $CHTMP"/"{} \;
73 nice --adjustment=15 find $bib -depth -type d -exec mkdir -p $CHTOU"/"{} \;
74 done
75 IFS=$' \t\n'
76 ## /Production des arborescences
77 ## Prodction de la liste des fichiers des bibliothèques à traiter
78 cd $CHBIB
79 IFS=$' \t\n'
80 nice --adjustment=15 rm -f fichiers-a-traiter &> /dev/null
81 nice --adjustment=15 touch fichiers-a-traiter
82 IFS=$' \t\n'
83 for bib in $MESBIB
84 do
85 IFS=$' \t\n'
86 for ext in $MESEXT
87 do
88 IFS=$'\n'
89 nice --adjustment=15 find $bib -depth -maxdepth 100 -type f -iname '*.'$ext >> fichiers-a-traiter
90 done
91 done
92 ## /Production de fichiers-a-traiter
93 ## Production des fichier .html dans l'arborescence CHTOU intermédiaire
94 COUNT=1
95 for file1 in `cat fichiers-a-traiter`
96 do
97 IFS=$'\n'
98 REPORT=$CHTMP"/ffreport-"$COUNT".log"
99 FILETMP=$CHTMP"/"$file1".tmp"
100 FILEHTML=$CHTOU"/"$file1".html"
101 FILEBIB=$CHBIB"/"$file1
102 FFREPORT=file=$REPORT:level=32 nice --adjustment=19 ffprobe -hide_banner $file1 &> /dev/null && \
103 nice --adjustment=15 du -h $file1 >> $FILETMP && \
104 nice --adjustment=15 stat $file1 | grep Modif >> $FILETMP && \
105 nice --adjustment=15 cat $REPORT | grep -e 'bitrate' -e '#' >> $FILETMP && \
106 nice --adjustment=15 sed 's/$/\<br \/\>/' $FILETMP > $FILEHTML && \
107 nice --adjustment=15 touch -r $FILEBIB $FILEHTML && \
108 nice --adjustment=15 rm -f $FILETMP && \
109 nice --adjustment=15 touch $REPORT".done" &
110 ((COUNT++))
111 # NOTE : la condition «-lt» semble ne pas être reconnue (par un «if» de mémoire) ; «-le» est un remplacement
112 # IMPORTANT : Adapter la valeur «8» ci-dessous aux aptidudes de votre système ;
113 # Pour mon cas cette valeur me semble être un maximum ;
114 # Cette valeur provoque un élèvement important de la température des cœurs ;
115 # Prenez soin de mettre une valeur inférieure en cas de chaleurs et / ou d'empoussiérage
116 # La disspation est importante. Vous êtes prévenus.
117 # Exemple avec l'air en entrée à 23,6°
118 # rem@n73sm ~ $ sensors
119 # acpitz-virtual-0
120 # Adapter: Virtual device
121 # temp1: +74.0°C (crit = +103.0°C)
122 # asus-isa-0000
123 # Adapter: ISA adapter
124 # temp1: +74.0°C
125 # coretemp-isa-0000
126 # Adapter: ISA adapter
127 # Physical id 0: +75.0°C (high = +86.0°C, crit = +100.0°C)
128 # Core 0: +72.0°C (high = +86.0°C, crit = +100.0°C)
129 # Core 1: +75.0°C (high = +86.0°C, crit = +100.0°C)
130 # Core 2: +72.0°C (high = +86.0°C, crit = +100.0°C)
131 # Core 3: +71.0°C (high = +86.0°C, crit = +100.0°C)
132 while [ `ps aux | grep ffprobe | wc -l` -gt 8 ] # Le 8 est ici
133 do
134 ((NULLCOUNT++))
135 done
136 done
137 while [ `ps aux | grep ffprobe | wc -l` -gt 1 ]
138 do
139 ((NULLCOUNT++))
140 done
141 # Ce sync est indispensable pour finaliser l'écriture des derniers .tmp et .html
142 sync && ((NULLCOUNT++))
143 ## /Production des fichier .html dans l'arborescence CHTOU intermédiaire
144 ## Déploiement sur le répertoire du site
145 nice --adjustment=15 rm -rf $CHWEB"/"* &> /dev/null
146 cd $CHTOU
147 IFS=$' \t\n'
148 nice --adjustment=15 mv $MESBIB $CHWEB
149 cd $CHBIB
150 IFS=$' \t\n'
151 for bib in $MESBIB
152 do
153 IFS=$'\n'
154 # Mise à la date d'origine des répertoires
155 nice --adjustment=15 find $bib -depth -type d -exec touch -r $CHBIB"/"{} $CHWEB"/"{} \;
156 done
157 IFS=$' \t\n'
158 IFS=$'\n'
159 nice --adjustment=15 cp -fxa "/plex/AIDE/SVP - Cliquez cette petite aide.html" $CHWEB"/AIDE"
160 ## / Déploiement
161 ## répertorie les vidéos invalides au ffprobe
162 cd $CHTMP
163 nice --adjustment=15 mkdir "log-done-compare" &> /dev/null
164 nice --adjustment=15 mkdir "log-alone-wrong-movie" &> /dev/null
165 for file in [ ls -1 *.log ]
166 do
167 if [ -e $file.done ]
168 then
169 nice --adjustment=15 mv $file $file.done "log-done-compare"
170 fi
171 done
172 nice --adjustment=15 mv *.log "log-alone-wrong-movie"
173 IFS=$'\n'
174 nice --adjustment=15 cp -xa "log-alone-wrong-movie" "/plex/log-alone-wrong-movie du "`date`
175 ## /répertorie
176 ## Effacement du répertoir tmpfs pour accélerer la production des .tmp et des .html suivants
177 nice --adjustment=15 rm $CHTMP"/"* -rf &> /dev/null
178 ##/
179 IFS=$' \t\n'
180 sync
181 exit 0
182 # real 17m47.653s
183 # user 83m57.765s
184 # sys 11m55.586s
185 # find /media/racine-n40l/plex-web -iname '*.html' | wc -l
186 # 9261
187 # find /media/racine-n40l/plex/log-alone-wrong-movie\ du\ mer.\ août\ 17\ 11\:39\:17\ CEST\ 2016/ \
188 # -iname '*.log' | wc -l
189 # 59
190 # echo 9261 + 59 | bc
191 # 9320
192 # cat /media/racine-n40l/plex/fichiers-a-traiter | wc -l
193 # 9319
194 # du /media/racine-n40l/plex-web -h --max-depth=1
195 #
196 # 1,2M /media/racine-n40l/plex-web/Docus-TS
197 # 8,0M /media/racine-n40l/plex-web/Films
198 # 40K /media/racine-n40l/plex-web/Courts
199 # 2,1M /media/racine-n40l/plex-web/Films-TS
200 # 24M /media/racine-n40l/plex-web/Séries
201 # 776K /media/racine-n40l/plex-web/TOMS
202 # 8,0K /media/racine-n40l/plex-web/AIDE
203 # 3,9M /media/racine-n40l/plex-web/captures
204 # 1,8M /media/racine-n40l/plex-web/Docus
205 # 84K /media/racine-n40l/plex-web/TVFilms
206 # 148K /media/racine-n40l/plex-web/TVFilms-TS
207 # 12K /media/racine-n40l/plex-web/Pluzz
208 # 42M /media/racine-n40l/plex-web |
|
|
Back to top |
|
|
pti-rem Guru
Joined: 14 Oct 2011 Posts: 472
|
Posted: Thu Aug 18, 2016 11:34 am Post subject: |
|
|
La duplication de /etc/init.d/nginx en /etc/init.d/nginx-autoindex-large modifié me pose une difficulté pour la ligne «pidfile=» ;
J'ai dû préciser «-g "pid /run/nginx-large.pid;"» pour la ligne «command_args=» pour avoir un stop et un start corrects.
n73sm init.d # diff nginx nginx-autoindex-large: | 14c14
< nginx_config=${nginx_config:-/etc/nginx/nginx.conf}
---
> nginx_config=${nginx_config:-/opt/nginx/conf/nginx.conf}
16,18c16,18
< command="/usr/sbin/nginx"
< command_args="-c ${nginx_config}"
< pidfile=${pidfile:-/run/nginx.pid}
---
> command="/opt/nginx/sbin/nginx"
> command_args="-c ${nginx_config} -g \"pid /run/nginx-large.pid;\""
> pidfile=${pidfile:-/run/nginx-large.pid} |
Tant que ça fonctionne et même si ce n'est pas fait dans les règles de l'art ce n'est pas si grave.
La question reste en suspens pour savoir comment nommer et écrire mon script en /etc/init.d/ pour la version source de Nginx. Avec une gestion du pid normale. |
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|