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