======= Service date.chapril.org ======= ====== Installation ====== ===== Pré-installation ===== ==== Pré-requis ==== Configuration utilisé pour ce tutoriel : * Debian 9 stretch * Apache 2 * PHP 7.3 avec les extensions intl et mysql * MySQL * Git Pour éviter de taper les commandes : $ apt-get install apache2 php7.3 php7.3-intl php7.3-mysql php7.3-mbstring libapache2-mod-php7.3 mysql-server git ==== Base de données ==== Le service date.chapril.org fonctionne indépendamment de la base SQL utilisée. Cependant la base de donnée doit être créée au préalable, après avoir renseigné les paramètres de la base de données, créez la. === MySQL === Se connecter avec le root de mysql : $ mysql -u root -p Créer une base de données : DB> CREATE DATABASE IF NOT EXISTS date_chapril_org_db DEFAULT CHARACTER SET utf8 ; Créer un utilisateur : DB> CREATE USER 'date_chapril_org-dbadmin'@'localhost' IDENTIFIED BY 'motdepasse'; DB> GRANT ALL PRIVILEGES ON date_chapril_org_db.* TO 'date_chapril_org-dbadmin'@'localhost' IDENTIFIED BY 'motdepasse' WITH GRANT OPTION; ===== Préparation ===== Initialiser des variables : * $DATE_CHAPRIL_HOME : répertoire d’installation ; * $DATE_CHAPRIL_USER : utilisateur date_chapril. Exemple : DATE_CHAPRIL_HOME="/var/www/date.chapril.org" DATE_CHAPRIL_USER="datechaprilorg" Créer l’utilisateur et le répertoire correspondant : adduser –home=$DATE_CHAPRIL_HOME $DATE_CHAPRIL_USER chown -R $DATE_CHAPRIL_USER:www-data $DATE_CHAPRIL_HOME chmod -R g+rx $DATE_CHAPRIL_HOME chmod g+w $DATE_CHAPRIL_HOME Téléchargez la dernière version stable de Framadate : cd $DATE_CHAPRIL_HOME git clone https://framagit.org/framasoft/framadate.git . git checkout 1.1.7 (selon la version à jour) Remettre le groupe www-data : cd $DATE_CHAPRIL_HOME chgrp -R www-data . S'assurer des bons droits pour la configuration : chmod g+w $DATE_CHAPRIL_HOME/app/inc Installer les dépendances PHP : apt-get install composer Puis : apt-get install php7.3-xml composer install Modifier /etc/php/7.0/apache2/php.ini pour définir date.timezone=Europe/Paris Ajouter un fichier date.chapril.org.conf dans //apache2/sites-available// ServerName date.chapril.org ServerAdmin webmaster@april.org DocumentRoot /var/www/date.chapril.org/ php_admin_value open_basedir "/var/www/date.chapril.org/" AllowOverride All # Pour contrôler l’accès au répertoire admin AuthType Basic AuthName "Administration" AuthUserFile "/var/www/date.chapril.org/admin/.htpasswd" Require valid-user Order allow,deny Allow from all deny from all satisfy all ErrorDocument 403 "Acces refuse." ErrorLog ${APACHE_LOG_DIR}/date.chapril.org/date.chapril.org_error.log CustomLog ${APACHE_LOG_DIR}/date.chapril.org/date.chapril.org_access.log combined-proxy L’activer : a2ensite date.chapril.org.conf ===== Accès à la page administrateur ===== L'application //date.chapril.org// dispose d’un espace d’administration de l’ensemble des sondages à l'URL https://date.chapril.org/admin. Pour en restreindre l’accès, il faut ajouter au fichier de configuration Apache (/etc/apache2/sites-enabled/date.chapril.org.conf) le bloc de contrôle (déjà inclus dans le fichier ci-dessus) et créer le fichier //.htpasswd// contenant l’utilisateur et le mot de passe autorisé. $ htpasswd -c /var/www/date.chapril.org/admin/.htpasswd utilisateur L’utilitaire //htpasswd// se trouve dans le paquet apache2-utils : $ apt-get install apache2-utils Pour protéger les fichiers //.htaccess// et //.htpasswd//, pensez à ajouter également un bloc (déjà inclus dans le fichier ci-dessus). ===== Réécriture d’URL ===== Activer le mode de ré-écriture des URL dans Apache : a2enmod rewrite Il faut ajouter une ligne //AllowOverride All// dans le fichier .conf pour autoriser l’utilisation des //.htaccess// sur votre domaine et renommer le fichier : cp $DATE_CHAPRIL_HOME/htaccess.txt $DATE_CHAPRIL_HOME/.htaccess puis : systemctl reload apache2 ===== Installation ===== Pour installer l'application date.chapril.org, rendez-vous sur la page https://date.chapril.org/admin/install.php et remplissez le formulaire : * Nom de l'application :date.chapril.org * Adresse mail de l'application :webmaster@chapril.org * Mail de réponse :webmaster@chapril.org * Langue par défaut :Français * URL propres : case cochée * Chaîne de connexion : mysql:host=localhost;dbname=date_chapril_org_db;port=3306; * Utilisateur : date_chapril_org-dbadmin * Mot de passe : XXXX * Préfixe : fd_ * Table de migration :framadate_migration Une fois le formulaire rempli et envoyé, un script va générer le fichier //app/inc/config.php// puis rediriger vers la page de migration. La page de migration s'occupe : * d'installer toute la base de données (tables + données d'exemple) ; * de mettre à jour la base de données lors des mises à jour de l’application. Attention, le chargement de la page de migration peux prendre du temps étant donné qu'elle applique toutes les mises à jours requises ! =====Configuration SMTP===== Voir [[admin:machines_virtuelles:lamp#configuration_smtp | Configuration SMTP de la VM lamp]]. ===== Journal de l'application ===== Un fichier //admin/stdout.log// doit être créé et accessible en écriture par le serveur Web. Quelque chose comme cela devrait convenir: touch admin/stdout.log chmod u=rw,g+rw,o-a admin/stdout.log chgrp www-data admin/stdout.log ====== Tables de la base de données ====== Voici la structure des tables de l'application, le nom des tables est donné sans préfixe. La base se compose de quatre tables : * `poll` : Le paramétrage des sondages ; * `slot` : les choix disponibles pour chaque sondage ; * `vote` : les votes effectués par les utilisateurs pour chaque sondage ; * `comment` : les commentaires apportés à chaque sondage. ====== Gestion de version ====== Actuellement, le code de Framadate a nécessité quelques ajustements pour satisfaire aux contraintes du Chapril (personnalisation, purge automatique…). Les modifications sont faites dans des branches nommées april-x.y.z où x.y.z correspond à la branche officielle modifiée. Actuellement, le dépôt de référence est le dossier ///var/www/date.chapril.org//. Comme les sources modifiés doivent être accessible par les utilisateurs, est prévu de faire un dépôt dans agir. ====== Mise à jour ====== Étapes de la mise à jour : * mettre à jour le code : * sans Git : * télécharger la dernière version stable zipée à partir de [[https://framagit.org/framasoft/framadate|https://framagit.org/framasoft/framadate]] * dézipper, * remplacer l'ensemble des fichiers, * avec Git : * créer une nouvelle branche april-x.y.z correspondant à la version x.y.z cible de la mise à jour : cd $DATE_CHAPRIL_HOME sudo -u www-data git checkout -b chapril-x.y.z * merger la branche voulue dans la branche april-x.y.z en réglant les conflits : sudo -u www-data git fetch --tags officiel # on récupère les derniers tags du dépôt officiel sudo -u www-data git merge * supprimer l'ensemble des fichiers du répertoire $DATE_CHAPRIL_HOME/tpl_c/. * mettre à jour les dépendances : cd $DATE_CHAPRIL_HOME composer install Enfin, aller sur [[https://date.chapril.org/admin|https://date.chapril.org/admin]] et cliquer sur le bouton « migration ». Ensuite : * valider les modification et les envoyer dans la forge : git add # les fichiers corrigés manuellement le cas échéant git commit -m "Merge tag 'x.y.z' into chapril-x.y.z" git push --set-upstream origin chapril-x.y.z * modifier la branche par défaut du dépôt ====== Modification de code ====== Afin de rendre Framadate compatible avec les CGU du Chapril, quelques parties de codes ont été modifiées. ===== Remplacement de la signature Framasoft par la signature April ===== Dans le fichier ///var/www/date.chapril.org/locale/fr_FR.json// ligne 239 mettre : "FOOTER": "« April – Promouvoir et défendre le logiciel libre »", Dans le fichier ///var/www/date.chapril.org/locale/en.json// ligne 240 mettre : "FOOTER": "April - To promote and defend Free Software", Présent à partir de la branche chapril-1.1.7. ===== Correction d'un message incorrect sur la date de suppression ===== Dans le fichier ///var/www/date.chapril.org/locale/fr_FR.json// : "Expiration date": "Date d'expiration", "You can set a closer archiving date for it.": "Vous pouvez décider d'une date d'expiration plus proche.", "Your poll will automatically be archived": "Votre sondage expirera automatiquement dans", "after the last date of your poll.": " à partir d'aujourd'hui. Il sera définitivement supprimé 60 jours après son expiration." Dans le fichier ///var/www/date.chapril.org/locale/en.json// : "Expiration date": "Expiry date", "You can set a closer archiving date for it.": "You can set a closer expiry date for the poll.", "Your poll will automatically be archived": "Your poll will automatically expired in", "after the last date of your poll.": " from today. It will definitively be deleted 60 days after its expiration." Présent à partir de la branche chapril-1.1.8. ===== Contrôle des dates à la mise à jour ===== Dans le fichier ///var/www/date.chapril.org/app/classes/Framadate/Services/AdminPollService.php// lignes 34 et suivantes remplacer la function updatePoll par function updatePoll($poll) { global $config; $end_date = strtotime($poll->end_date); if ($end_date < strtotime($poll->creation_date)) { $poll->end_date = $poll->creation_date; } elseif ($end_date > $this->pollService->maxExpiryDate()) { $poll->end_date = utf8_encode(strftime('%Y-%m-%d', $this->pollService->maxExpiryDate())); } return $this->pollRepository->update($poll); } Présent à partir de la branche chapril-1.1.8. ===== Restriction des langues ===== Dans le fichier ///var/www/date.chapril.org/app/inc/config.php// mettre les lignes 56 à 61 en commentaires en ajoutant des slashs en début de chaque ligne. Pour obtenir : // List of supported languages, fake constant as arrays can be used as constants only in PHP >=5.6 $ALLOWED_LANGUAGES = [ 'fr' => 'Français', 'en' => 'English', // 'oc' => 'Occitan', // 'es' => 'Español', // 'de' => 'Deutsch', // 'nl' => 'Dutch', // 'it' => 'Italiano', // 'br' => 'Brezhoneg', ]; Présent à partir de la branche chapril-1.1.8. ===== Ajout d'une purge automatique ===== Dans la branche chapril-1.1.8, création du script //…/admin/cron_purge.php// : log('CRON PURGE', 'Cron purge starting…'); $ended = false; $iterationCount = 0; $totalCount = 0; while (!$ended) { $count = $purgeService->purgeOldPolls(); $logService->log('CRON PURGE', 'count='.$count); if ($count == 0) { $ended = true; } else { $iterationCount += 1; $totalCount += $count; } } $logService->log('CRON PURGE', 'Purged '.$totalCount.' poll(s) in '.$iterationCount.' iterations.'); $logService->log('CRON PURGE', 'Cron purge done.'); /* PAGE */ /* ---- */ echo date("Y-m-d H:i:s").": cron purge done.\n" ?> Mettre de bons droits : chown datechaprilorg app/inc/config.php chmod ug+rw app/inc/config.php Créer un fichier datechaprilorg-purge et le placer dans /etc/cron.d et une copie dans /srv/date.chapril.org/tools/cron_purge/datechaprilorg-purge.cron : 45 23 * * * root /usr/bin/php /var/www/date.chapril.org/admin/cron_purge.php >> /srv/date.chapril.org/cron_purge.log 2>&1 41 11 * * * root /usr/bin/php /var/www/date.chapril.org/admin/cron_purge.php >> /srv/date.chapril.org/cron_purge.log 2>&1 Créer un fichier datechaprilorg et le placer dans /etc/cron.d et une copie dans /srv/date.chapril.org/tools/rapport_activite/datechaprilorg.cron 1 0 1 * * root /srv/date.chapril.org/tools/rapport_activite/rapport_activite.sh -p >> /srv/date.chapril.org/Exploitation/rapport_date.log 2>&1 ====== Monitoring ====== Mettre dans le dossier /usr/lib/nagios/plugins un fichier check_datechaprilorg_update et une copie dans /srv/date.chapril.org/tools/monitoring : #!/bin/bash function usage() { echo "Usage : $0" } # if [ "$#" -ne 0 ]; then usage else lastVersion=$(curl -s https://framagit.org/api/v4/projects/16/releases | jshon -a -e name|cut -d '"' -f2|grep -v '[\^\(alpha\)]'|sort -rV|head -n 1) currentVersion=$(cd /var/www/date.chapril.org && git branch | grep '*'|cut -c 11-100 ) #echo $currentVersion #echo $lastVersion if [ $currentVersion = $lastVersion ]; then echo "OK" result=0 else echo "WARNING : new version available, current is $currentVersion, last is $lastVersion." result=1 fi fi exit $result Le fichier est commité dans ''/srv/date.chapril.org/tools/monitoring''.