One Day, One Picture

One Day, One Picture est une petite application web, auto-hébergée, qui vous permet de partager avec vos amis vos voyages itinérants, en images. Une présentation générale du projet est disponible à cette adresse.

Télécharger (v0.9b)

MD5 : 14f4cf2eabd55f82d6f56f11729de7fe

L’idée est de créer des albums dans lesquels vous avez la possibilité d’ajouter des photos géolocalisées, qui s’affichent sur une carte sous forme de marqueurs afin de générer un itinéraire correspondant à votre voyage. Un système de commentaires minimaliste permet à vos amis de réagir à vos publications.

Installation de l’application

One Day, One Picture a été développée avec le framework PHP CakePHP pour faciliter sa modification et son installation. Elle s’installe donc comme toute solution PHP auto-hébergée.

Attention cependant à certaines dépendances PHP :

  • Le module PHP EXIF
  • Le module PHP GD
  • Le module PHP MySQL

Récupérer les sources

Téléchargez la dernière version de l’application grâce au bouton ci-dessus et décompressez l’archive dans votre dossier webroot (/var/www par exemple).

cd /var/www
sudo wget https://www.guillaume-leduc.fr/wp-content/uploads/1d1p-0.9b.tar.gz
sudo tar -zxf 1d1p-latest.tar.gz
Vérifiez bien les droits d’accès pour que votre serveur HTTP puisse lire les sources et écrire dans app/webroot/img !

L’application est déployée !

Préparer la base de données

One Day, One Picture a besoin d’une base de données MariaDB ou MySQL pour fonctionner. Un script d’import (1d1p.sql) est disponible dans le dossier racine de l’application. Connectez-vous à MySQL avec les droits root afin de créer un nouvel utilisateur et une nouvelle base de données « 1d1p ».

mysql -u root -p
CREATE DATABASE 1d1p;
GRANT ALL PRIVILEGES ON 1d1p.* TO '1d1p'@'localhost' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;

Et utilisez ce nouvel utilisateur pour importer la structure de la base de données :

cd 1d1p-0.9b
mysql -u 1d1p -p 1d1p < 1d1p.sql
Si tout fonctionne, pensez à supprimer ce fichier après création de la base de données !

Créez ensuite le fichier app/Config/database.php avec le contenu suivant :

<?php
class DATABASE_CONFIG {
    public $default = array(
        'datasource' => 'Database/Mysql',
        'persistent' => false,
        'host' => 'localhost',
        'login' => '1d1p',
        'password' => 'password',
        'database' => '1d1p',
        'prefix' => '',
        'encoding' => 'utf8',
    );
}

Ces informations permettent à l’application de se connecter à la base de données.

La base de données est prête !

Préparer le serveur web

À priori tous les serveurs web capables de faire fonctionner du PHP sont compatibles avec One Day, One Picture. Ayant une préférence personnelle pour Nginx je ne l’ai testée qu’avec celui-ci. Voici le modèle de configuration utilisé pour une utilisation de l’application à l’adresse http://1d1p.mon-domaine.fr.

Modèle de configuration Nginx

server {
    listen 80;
    server_name 1d1p.mon-domaine.fr;
    root /var/www/1d1p-0.9b/app/webroot;
 
    client_max_body_size 8m;
 
    location / {
        try_files $uri $uri/ /index.php?$args;
        proxy_read_timeout 300;
    }
 
    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_pass php5-fpm-sock;
        fastcgi_index index.php;
        fastcgi_param PHP_VALUE "upload_max_filesize = 8M \n
                                 post_max_size = 8M \n
                                 max_execution_time = 300";
        include fastcgi.conf;
        proxy_read_timeout 300;
    }
 
    access_log /var/log/nginx/1d1p-access.log;
    error_log /var/log/nginx/1d1p-error.log;
}

Différents articles concernant la configuration de Nginx et PHP-FPM sont disponibles dans la catégorie Web du blog.

Modèle de configuration Apache

Si ce n’est pas déjà fait, activez le module mod_rewrite, par exemple sous Debian :

sudo a2enmod mod_rewrite
sudo service apache2 restart

La commande sudo apache2ctl -M vous permet de connaître les modules chargés.

Toujours pour avoir une instance accessible à l’adresse http://1d1p.mon-domaine.fr, voici ce que je vous propose :

<VirtualHost *:80>
    ServerName      1d1p.mon-domaine.fr
    DocumentRoot    /var/www/1d1p-0.9b
 
    <Directory /var/www/1d1p-0.9b>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Order allow,deny
        allow from all
    </Directory>
</VirtualHost>

Activez le virtual host et rechargez Apache :

sudo a2ensite 1d1p.conf
sudo service apache2 reload
Ces configurations sont bien évidemment perfectibles et ne présentent que le strict minimum mais doivent fonctionner correctement, n’hésitez pas à me soumettre vos suggestions !

Une dernière chose importante

Il est important que vous modifiiez les sels utilisés dans les algorithmes de chiffrement de CakePHP. Modifiez les lignes suivantes du fichier app/Config/core.php

/**
 * A random string used in security hashing methods.
 */
    Configure::write('Security.salt', 'DYhG93b0qyJFV1kXjcYbSR2G0FgaC9mi');
 
/**
 * A random numeric string (digits only) used to encrypt/decrypt strings.
 */
    Configure::write('Security.cipherSeed', '76859417362735680403496749683645');

Nous n’auront peut-être pas exactement les mêmes lignes, mais le plus important c’est que vous ajoutiez des caractères à Security.salt et des chiffres à Security.cipherSeed.

C’est terminé pour l’installation ! Vous pouvez maintenant vous rendre sur http://1d1p.mon-domaine.fr et commencer à utiliser l’application, j’espère qu’elle vous plaira !

Utiliser One Day, One Picture

Pour éviter de surcharger cette page, différents articles du blog sont disponibles pour vous permettre d’apprendre à utiliser One Day, One Picture. Même si j’ai essayé de faire quelque chose d’intuitif, utilisable par les allergiques à l’informatique, vous pourriez être intéressés par :

  1. Ajouter des utilisateurs à One Day, One Picture
  2. Créer un album et ajouter des photos

Licence du projet

One Day, One Picture est distribué sous Licence publique générale GNU (GNU General Public License) 2.0.

Le code source est disponible sur GitHub !

Remerciements

Je tiens à remercier Thomas, qui m’a fourni une excellente base de code, pour sa patience et son aide 🙂

Note à la communauté

One Day, One Picture a été initialement développé pour mes propres besoins, je n’imaginais pas le libérer. N’étant pas développeur, il est possible que vous rencontriez certains bugs ou découvriez des énormités dans le code source du programme. C’est pourquoi l’application n’est qu’en version bêta et présente quelques lacunes.

Je ne sais pas non plus si j’aurai le temps de l’améliorer dans le futur, même si ce ne sont pas les idées qui manquent.

Je vous demande donc d’être indulgent si vous rencontrez des soucis.

2 Comments

  1. Aldo
    16/08/2016 @ 15:57

    Très belle application.

    Est-ce qu’il est possible d’ajouter une fonctionnalité d’ajout de photos en masse ? Et d’extraire le titre et la description des données exif ?

    On pourrait ainsi générer plusieurs albums photos de manière totalement automatisée…

    Reply

    • Guillaume
      05/09/2016 @ 09:38

      Bonjour,
      Je n’ai pas touché à ce projet depuis 2 ans maintenant, et je n’ai clairement pas le temps d’y replonger malheureusement…

      Reply

Leave a Reply

*

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.