AVERTISSEMENT : ce "tutoriel" se veut être une synthèse de différentes sources mais je n'ai pas réussi à faire fonctionner FRAMADATE à ce jour 26/10/2018 !!!

Docker LogoDisposant d'un NAS Synology DS713+, j'ai voulu essayer de faire mon chaton en installant une instance Framadate via Docker. N'ayant pas réussi à faire fonctionner directement une image existante (dockerfile), je me suis lancé dans une installation de zéro. Pour cela, j'ai suivi les instructions via 2 sources :

J'ai commencé en essayant d'utiliser PostgreSQL comme moteur pour ma base de données mais je n'ai pas réussi. Du coup, j'ai opté pour MySQL (en fait MariaDB qui est le serveur sql par défaut sous Debian 9).

I- Installation et préparation de l'image Docker sur mon NAS Synology

Framadate Docker1Remarque : pour pouvoir utiliser la fonction copier/coller dans le terminal de Docker, j'ai utilisé le navigateur Chromium car impossible de l'utiliser avec Mozilla Firefox. Pour coller une instruction dans le terminal Docker, il faut d'abord faire CTRL-A puis CTRL-V.

J'ai décidé de partir d'une image Debian Stretch existante : https://hub.docker.com/_/debian/ .

Dans les paramétrages, je choisis :

  • un redémarrage automatique et j'attribue le port 32869 (choix arbitraire) au port local 80,

Framadate Docker2

  • pour avoir un accès facile à l'application Framadate installée dans le conteneur debian1, dans l'onglet "Volume", j'ajoute le dossier "docker/debian1" qui contiendra les fichiers contenu dans le dossier "/var/www/html/framadate" du conteneur. Ceci permet par exemple d'y accéder via SSH.
  • Ensuite, dans le terminal du conteneur accessible dans Docker, j'installe tous les fichiers nécessaires mais pour cela, il faut faire avant tout une mise à jour sans quoi on ne pourra rien installer. Pour cela on emploie les commandes :
apt-get update
apt-get upgrade
  • Dans le terminal et afin de disposer facilement des droits de l'utilisateur root, pour lui affecter un mot de passe, je tape la commande :
passwd
  • Puis on installe les outils "classiques" dont on aura besoin besoin avec la commande :
apt install sudo vim nano wget unzip
  •  Puis on installe les outils spécifiques pour déployer Framadate avec MySQL (en fait MariaDB) :
apt install apache2 php7.0 libapache2-mod-php7.0 php7.0-intl php7.0-xml mysql-server php7.0-mysql php7.0-mbstring

II- Préparation de la base de données MySQL

Remarque : je parle de MySQL mais il s'agit en fait de MariaDB.

Il faut paramétrer MySQL en lui affectant des modes particuliers. Source : https://makandracards.com/makandra/51169-understanding-sql-compatibility-modes-in-mysql-and-mariadb

Pour que le paramétrage soit persistant, il faut éditer le fichier "/etc/mysql/mariadb.cnf" :

vim /etc/mysql/mariadb.cnf

et ajouter dans la section "mysqld" la ligne suivante :

[mysqld]
sql_mode="ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

Ensuite il faut lancer MySQL avec la commande :

service mysql start

On se connecte à MySQL avec la commande :

mysql

Puis on crée la base de données "framadate" en tapant dans la console MySQL :

CREATE DATABASE IF NOT EXISTS `framadate` DEFAULT CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;

Ensuite on crée un utilisateur "framadate" en lui donnant un mot de passe solide :

CREATE USER 'framadate'@'localhost' IDENTIFIED BY 'motdepassesolideàchoisir';

Puis on lui accorde des droits :

GRANT ALL PRIVILEGES ON `framadate`.* TO 'framadate'@'localhost';

À ce stade, on peut aussi vérifier si les modes SQL s'appliquent bien en tapant la commande :

SELECT @@GLOBAL.sql_mode;

Pour sortir de la console MySQL, utiliser la combinaison de touche CTRL-D.

III- Installer Framadate

Toujours dans le terminal de Docker, on se place sur le dossier qui va recevoir le programme :

cd /var/www/html

Ensuite, on récupère l'archive avec la commande (j'ai choisi la branche "master") :

wget https://framagit.org/framasoft/framadate/framadate/-/archive/master/framadate-master.zip -P /tmp

Puis on la décompresse avec la commande :

unzip /tmp/framadate-master.zip -d /tmp

On déplace ensuite tout le contenu extrait dans le dossier /var/www/html/framadate avec la commande :

mv /tmp/framadate-master/* /var/www/html/framadate

On efface tout ce qu'on a mis dans le dossier /tmp :

rm -R /tmp/framadate*

Pour le fichier journal (ou log), il faut créer un fichier stdout.log avec la commande :

touch /var/www/html/framadate/admin/stdout.log

Puis on donne les droits d'accès à l'utilisateur www-data dans le répertoire framadate :

chown -R www-data:www-data /var/www/html/

Et pour finir, on attribue des droits d'écriture limités sur les fichiers avec les commandes à exécuter dans cet ordre :

chmod -R 755 /var/www/html/framadate
chmod 600 /var/www/html/framadate/admin/stdout.log

 

Remarque : Pour connaître la structure de Framadate et à quoi servent les fichier, aller ici : https://framagit.org/framasoft/framadate/framadate/wikis/treeview

 

IV- Installation de Composer

Source : https://getcomposer.org/download/

Ce composant est nécessaire pour installer toutes les librairies php nécessaires au fonctionnement de Framadate. Voici les 4 commandes à faire dans le répertoire /var/www/html/framadate (attention elles étaient valables à l'instant où j'ai mis en oeuvre le serveur mais il faudra revenir sur la page source ci-dessus pour les mettre à jour) :

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('SHA384', 'composer-setup.php') === '93b54496392c062774670ac18b134c3b3a95e5a5e5c8f1a9f115f203b75bf9a129d5daa8ba6a13e2cc8a1da0806388a8') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"

Ensuite il faut lancer la commande suivante :

php composer.phar install

V- Configuration du serveur APACHE2

Source : https://www.digitalocean.com/community/tutorials/how-to-set-up-apache-virtual-hosts-on-ubuntu-14-04-lts

Pour configurer le serveur Apache : https://framagit.org/framasoft/framadate/framadate/wikis/Install/Configure

On va s'appuyer sur un fichier modèle pour construire le notre, pour cela on tape la commande suivante :

cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/framadate.conf

Puis on édite ce fichier (dans ce fichier on peut mettre directement les paramètres contenus dans le fichier .htaccess) :

vim /etc/apache2/sites-available/framadate.conf

Et on renseigne différents paramètres (à adapter selon ses besoins) :

<VirtualHost *:80>
    ServerAdmin administrateur@serveur
    DocumentRoot /var/www/html/framadate
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
    <Directory /var/www/html/framadate>
        AllowOverride All
    </Directory>
    <Directory "/var/www/html/framadate/admin/">
        AuthType Basic
        AuthName "Administration"
        AuthUserFile "/var/www/html/framadate/admin/.htpasswd"
        Require valid-user
        Order allow,deny
        Allow from all
    </Directory>
    <FilesMatch "^\.ht.*">
        deny from all
        satisfy all
        ErrorDocument 403 "Accès refusé."
    </FilesMatch>
</VirtualHost>

On rajoute le fichier de sécurité .htpasswd avec la commande (à vous d'indiquer l'utilisateur et son mot de passe) :

sudo -u www-data htpasswd -bc /var/www/html/framadate/admin/.htpasswd utilisateur motdepasseachoisir

Remarque  : pour créer un utilisateur, il faut utiliser les commandes "useradd" et "adduser" et "passwd" pour son mot de passe

Ensuite on active le fichier .htaccess permettant notamment la réécriture nettoyée des adresses URL :

mv /var/www/html/framadate/htaccess.txt /var/www/html/framadate/.htaccess

Ensuite on active notre site avec la commande :

a2ensite framadate.conf

Pour finir, on relance le serveur Apache :

service apache2 restart

VI- Résultats :

À ce jour, le 26/10/2018, malgré mon acharnement, je n'ai pas réussi à faire fonctionner Framadate de façon satisfaisante. J'arrive pourtant à me connecter en tant qu'utilisateur normal ou administrateur mais je n'arrive pas à consulter la liste des sondages ou à créer un sondage (après l'étape 3, j'arrive sur une page blanche ou une erreur).
Je débute dans Docker et je ne maîtrise pas tout notamment les variables d'environnement, ce qui explique certainement ce résultat... Mais quand ça marchera, je mettrai à jour cette page.