FileZ
*****
FileZ est une application web développée par l’Université d’Avignon et des Pays de Vaucluse
qui permet de déposer et gérer des fichiers destinés à être partagés grâce à une URL unique,
sur le principe de l’application perl/mod_perl filex.
* PHP/Mysql – Framework Limonade PHP
* Authentification modulaire : CAS+LDAP, LDAP only, BDD, ou vos propres classes PHP
* URL courtes (ex: filez.univ-avignon.fr/x42ni1)
* Barre de progression d’upload (Utilisation non obstructive du javascript)
* Formulaire d’installation
* Internationnalisation
* Protection des fichiers par mot de passe
* Envoi d’emails
* Tâches cron
* Quota
https://github.com/FileZ/FileZ
doc http://pegasus45.free.fr/index.php?title=Ubuntu_10.04:_Installation_de_FileZ_2.0.2
Installation
------------
on part d'une debian 6
.. code-block:: bash
apt-get install apache2 mysql-server php5-mysql php5-gd make unzip
apt-get install php5-dev php-pear
pecl install uploadprogress
echo "extension = uploadprogress.so" >> /etc/php5/apache2/conf.d/uploadprogress.ini
apache2ctl restart
vi /etc/apache2/sites-available/filez
::
ServerAdmin webmaster@localhost
ServerName srv-filez
DocumentRoot /var/www/filez
Options FollowSymLinks
AllowOverride All
ErrorLog /var/log/apache2/filez-error.log
LogLevel warn
CustomLog /var/log/apache2/filez-access.log combined
.. code-block:: bash
vi /etc/apache2/sites-available/default
::
AllowOverride All
.. code-block:: bash
a2ensite filez
a2enmod rewrite
mkdir /var/www/filez
/etc/init.d/apache2 restart
vi /etc/php5/apache2/php.ini
::
#Taille max d'un fichier en upload
upload_max_filesize = 750M
#Taille max d'un fichier que PHP peut accepter
post_max_size = 750M
#Temps max qu'un script peut executer
max_execution_time = 1200
#Répertoire temporaire pour le transfert
upload_tmp_dir "/srv/filez-tmp"
.. code-block:: bash
mkdir /srv/filez-tmp
chown www-data.www-data /srv/filez-tmp
/etc/init.d/apache2 restart
wget https://download.github.com/UAPV-FileZ-2.0.2-14-g232f5be.tar.gz
tar zxvf UAPV-FileZ-2.0.2-14-g232f5be.tar.gz
mv FileZ-master/* /var/www/filez/
mv FileZ-master/.* /var/www/filez/
chown -R www-data.www-data /var/www/filez
mysql -u root -p
.. note::
le lien vers l'archive peut changer via la modification des sources
il est donc préférable d'aller le télécharger manuellement sur le site git
.. code-block:: sql
create database filez;
use filez;
CREATE TABLE `filez`.`db_users` (
`uid` SERIAL NOT NULL ,
`login` VARCHAR( 20 ) NOT NULL ,
`password` VARCHAR( 40 ) NOT NULL ,
`givenname` VARCHAR( 255 ) NOT NULL ,
`sn` VARCHAR( 255 ) NOT NULL ,
`mail` VARCHAR( 255 ) NOT NULL
) ENGINE = MYISAM ;
INSERT INTO `filez`.`db_users`
(`uid`, `login`, `password`, `givenname`, `sn`, `mail`)
VALUES (NULL, 'admin', MD5('admin'), 'Admin', 'Olympe', 'admin@olympe.local');
.. code-block:: bash
mkdir -p /var/filez/uploads
mkdir -p /var/log/filez
chown -R www-data.www-data /var/filez
chown www-data.www-data /var/log/filez
Paramétrage
-----------
Nous venons d'installer le serveur sur le lien http://myservdeb04/filez
Nous avons donc un utilisateur d'inscrit (admin/admin)
Il faut maintenant lancer votre naviguateur pour finir l'installation par le paramétrage
le fichier /var/www/filez/config/filez.ini est
::
[app]
use_url_rewriting = 1
log_dir = "/var/log/filez"
upload_dir = "/var/filez/uploads"
max_file_lifetime = 20
default_file_lifetime = 10
max_extend_count = 7
min_hash_size = 4
max_hash_size = 8
default_locale = "fr"
auth_handler_class = "Fz_Controller_Security_Internal"
user_factory_class = "Fz_User_Factory_Database"
user_quota = "2G"
https = "off"
progress_monitor = "Fz_UploadMonitor_ProgressUpload"
sharing_destinations[] = "email"
admin_email = "informatiquepz@myprop-group.com"
[db]
dsn = "mysql:host=localhost;dbname=filez"
user = "root"
password = "systemlx"
[cron]
days_before_expiration_mail = 2
frequency = "+1 day"
[email]
from_name = "Mysociety Filez"
from_email = "svcfilez@myprop-group.com"
host = "srvxxxx1"
name = "filez"
; si le serveur demande une authentification
; auth=login ; possible values = crammd5, login, plain
; port=25
; username=svcfilez
; password=myprop2012
[user_factory_options]
db_use_global_conf = 1
db_table = "db_users"
db_username_field = "login"
db_password_field = "password"
db_password_algorithm = "MD5"
[user_attributes_translation]
firstname = "givenname"
lastname = "sn"
email = "mail"
id = "uid"
[looknfeel]
show_credit = 1
help_url = "help"
.. figure:: data/20130227_01.png
.. figure:: data/20130227_02.png
on peut aussi gérer la suppression automatique des fichiers par une tache cron
.. code-block:: bash
vi /var/www/filez/scripts/cron.sh
::
LOG_DIR=/var/log/filez
# Url of filez web root
URL=http://myservdeb04/filez
LANG=fr
url_output="`wget --header=\"Accept-Language: $LANG\" -q -O - $URL/admin/checkFiles`"
if test -n "$url_output"; then
cd $LOG_DIR
echo "[`date +'%FT%T%:z'`] [CRON] wget output: "$url_output >> "$LOG_DIR/filez-cron-error.log"
fi
Ensuite, on le place dans le cron. Important, le script doit être exécuté par l'utilisateur Apache:
.. code-block:: bash
crontab -e
::
0 0 * * * su www-data -c "sh /var/www/filez/scripts/cron.sh" 2>/dev/null
Un mail d'avertissement sera envoyé 2 jours avant l'expiration. Et le jour j, le fichier sera supprimé.
Dans le fichier /var/www/filez/config/filez.ini, on peut modifier certaines valeurs:
::
max_file_lifetime = nb de jours max que l'utilisateur peut choisir pour l'expiration
default_file_lifetime = nb de jours par défaut pour l'expiration
max_extend_count = nb max de fois que l'utilisateur peut étendre l'expiration
user_quota = la taille max de l'espace de stockage à chaque utilisateur
days_before_expiration_mail = nb de jour avant l'envoi d'un mail d'avertissement
concernant les utilisateurs, juste après l'installation j'ai lancé la commande suivante
.. code-block:: sql
update fz_user set is_admin=1
cela a permit de donner les droits d'administration à l'utilisateur admin
Pour que la base puisse être accessible depuis un autre poste
.. code-block:: bash
vi /etc/mysql/my.cnf
::
# Mettre ici l'adresse IP de votre serveur
bind-address = XXX.XXX.XXX.XXX
# Cette ligne doit être commentée ou inexistante
# skip-networking
.. code-block:: bash
/etc/init.d/mysql restart
creation d'un compte "mysql" avec pour password "mysociety" pour un accès distant
.. code-block:: bash
mysql -u root -p
.. code-block:: sql
GRANT ALL PRIVILEGES ON *.* TO 'mysql'@'%' IDENTIFIED BY 'mysociety' WITH GRANT OPTION;
Invité
------
Il est parfois utile d'avoir un compte "invité" afin d'offrir la possibilité à une personne
extérieur à pouvoir déposé un fichier.
création du compte guest (password initial guest)
.. code-block:: bash
mysql -u root -p
.. code-block:: sql
INSERT INTO `filez`.`db_users`
(`uid`, `login`, `password`, `givenname`, `sn`, `mail`)
VALUES (NULL, 'guest', MD5('guest'), 'guest', 'guest', 'guest@myprop-group.com');
ajout dans /var/www/filez/config/filez.ini des infos de password de guest
::
[guest]
password_guest = guest
modification du fichier /var/www/filez/app/views/layout afin:
* d'avoir une charte d'utilisation
* qu'un utilisateur authentifié puisse voir les informations de connexion du compte guest
::
j'ai aussi placé dans /var/www/filez/resource/css/custom.css des infos pour le div charte
::
div#charte {
text-align: left;
font-size:11px;
}
il faut maintenant faire un script qui va changer régulièrement:
* le mot de passe de guest dans la base de donnée mysql
* le mot de passe de guest dans le fichier var/www/filez/config/filez.ini
pour cela il faut installer su le serveur python et le module python-mysqldb
.. code-block:: bash
apt-get install python python-mysqldb
puis écrire le module suivant:
.. code-block:: python
import _mysql
import string
from random import sample
f='/var/www/filez/config/filez.ini'
pop = string.ascii_letters + string.digits
k=8
passwd = ''.join(sample(pop, k))
print passwd
db=_mysql.connect(host="localhost",user="root", passwd="systemlx",db="filez")
db.query("update db_users set password=MD5('%s') where login='guest'" % passwd)
db.commit()
db.close()
fichier = open(f,'r')
txt=''
for i in fichier.readlines():
if i[0:14] == 'password_guest':
i = 'password_guest = %s' % passwd
txt = txt + i
fichier.close()
result = open(f,'w')
result.write(txt)
result.close()
il faut maintenant ajouter une tâche dans crontab pour calculer régulièrement ce nouveau mot de passe
.. code-block:: bash
crontab -e
::
0 0 * * * /root/change_password_guest.sh