Outils pour utilisateurs

Outils du site


services:date.chapril.org

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
services:date.chapril.org [2026/04/11 17:40] – supprimée - modification externe (Date inconnue) 127.0.0.1services:date.chapril.org [2026/04/11 17:40] (Version actuelle) – ↷ Page déplacée de admin:services:date.chapril.org à services:date.chapril.org pitchum
Ligne 1: Ligne 1:
 +====== 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 :
 +<code bash>
 +apt-get install apache2 php7.3 php7.3-intl php7.3-mysql php7.3-mbstring libapache2-mod-php7.3 mysql-server git
 +</code>
 +
 +===  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 l'utilisateur ''root'' de ''mysql'' :
 +<code bash>
 +mysql -u root -p
 +</code>
 +
 +Créer une base de données :
 +<code sql>
 +CREATE DATABASE IF NOT EXISTS date_chapril_org_db DEFAULT CHARACTER SET utf8 ;
 +</code>
 +
 +Créer un utilisateur :
 +<code sql>
 +CREATE USER 'date_chapril_org-dbadmin'@'localhost' IDENTIFIED BY 'motdepasse';
 +GRANT ALL PRIVILEGES ON date_chapril_org_db.* TO 'date_chapril_org-dbadmin'@'localhost' IDENTIFIED BY 'motdepasse' WITH GRANT OPTION;
 +</code>
 +
 +==== Préparation ====
 +
 +Initialiser des variables :
 +  * ''DATE_CHAPRIL_HOME'' : répertoire d’installation ;
 +  * ''DATE_CHAPRIL_USER'' : utilisateur ''date_chapril''.
 +
 +Exemple :
 +<code bash>
 +DATE_CHAPRIL_HOME="/var/www/date.chapril.org"
 +DATE_CHAPRIL_USER="datechaprilorg"
 +</code>
 +
 +Créer l’utilisateur et le répertoire correspondant :
 +<code bash>
 +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
 +</code>
 +
 +Téléchargez la dernière version stable de Framadate :
 +<code bash>
 +cd ${DATE_CHAPRIL_HOME}/
 +git clone https://framagit.org/framasoft/framadate.git .
 +git checkout 1.1.7 (selon la version à jour) 
 +</code>
 +
 +Remettre le groupe ''www-data'' :
 +<code bash>
 +cd ${DATE_CHAPRIL_HOME}/
 +chgrp -R www-data .
 +</code>
 +
 +S'assurer des bons droits pour la configuration :
 +<code bash>
 +chmod g+w $DATE_CHAPRIL_HOME/app/inc
 +</code>
 +
 +Installer les dépendances PHP :
 +<code bash>
 +apt-get install composer
 +</code>
 +
 +Puis :
 +<code bash>
 +apt-get install php7.3-xml
 +composer install
 +</code>
 +
 +Modifier le fichier ''/etc/php/7.0/apache2/php.ini'' pour y définir ''date.timezone=Europe/Paris''.
 +
 +Ajouter un fichier ''date.chapril.org.conf'' dans le répertoire ''apache2/sites-available/''.
 +
 +<code apache>
 +<VirtualHost *:80>
 +
 + ServerName date.chapril.org
 +
 + ServerAdmin webmaster@april.org
 + DocumentRoot /var/www/date.chapril.org/
 +        php_admin_value open_basedir "/var/www/date.chapril.org/"
 +
 +
 + <Directory "var/www/date.chapril.org/">
 +     AllowOverride All
 + </Directory>
 +
 + <Directory "/var/www/date.chapril.org/admin/">
 + # 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
 + </Directory>
 +
 + <FilesMatch "^\.ht.*" >
 +    deny from all
 +    satisfy all
 +    ErrorDocument 403 "Acces refuse."
 + </FilesMatch>
 +
 + 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
 +
 +</VirtualHost>
 +</code>
 +
 +L’activer :
 +<code bash>
 +a2ensite date.chapril.org.conf
 +</code>
 +
 +==== 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 caché ''.htpasswd'' contenant l’utilisateur et le mot de passe autorisé.
 +
 +<code bash>
 +htpasswd -c /var/www/date.chapril.org/admin/.htpasswd utilisateur
 +</code>
 +
 +L’utilitaire //htpasswd// se trouve dans le paquet ''apache2-utils'' :
 +
 +<code bash>
 +apt-get install apache2-utils
 +</code>
 +
 +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 :
 +
 +<code bash>
 +a2enmod rewrite
 +</code>
 +
 +Il faut ajouter une ligne ''AllowOverride All'' dans le fichier ''.conf'' pour autoriser l’utilisation des ''.htaccess'' sur votre domaine et renommer le fichier :
 +<code bash>
 +cp $DATE_CHAPRIL_HOME/htaccess.txt  $DATE_CHAPRIL_HOME/.htaccess
 +</code>
 +
 +puis :
 +<code bash>
 +systemctl reload apache2
 +</code>
 +
 +==== 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 courriel de l'application : ''webmaster@chapril.org'' ;
 +  * Courriel 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 et données d'exemple) ;
 +  * De mettre à jour la base de données lors des mises à jour de l’application.
 +
 +<note important>
 +Attention, le chargement de la page de migration peux prendre du temps étant donné qu'elle applique toutes les mises à jours requises !
 +</note>
 +
 +==== 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:
 +<code bash>
 +touch admin/stdout.log
 +chmod u=rw,g+rw,o-a admin/stdout.log
 +chgrp www-data admin/stdout.log
 +</code>
 +    
 +===== 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.
 +
 +<note important>
 +Actuellement, le dépôt de référence est le répertoire ''/var/www/date.chapril.org/''.
 +Comme les sources modifiés doivent être accessible par les utilisateurs, faire un dépôt dans Agir est prévu.
 +</note>
 +
 +===== 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 :
 +<code bash>
 +cd $DATE_CHAPRIL_HOME
 +sudo -u www-data git checkout -b chapril-x.y.z
 +</code>
 +      * fusionner (//merge//) la branche voulue dans la branche ''april-x.y.z'' en réglant les conflits :
 +<code bash>
 +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 <tag>
 +</code>
 +  * Supprimer l'ensemble des fichiers du répertoire ''$DATE_CHAPRIL_HOME/tpl_c/'' ;
 +  * Mettre à jour les dépendances :
 +<code bash>
 +cd $DATE_CHAPRIL_HOME
 +composer install
 +</code>
 +
 +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 :
 +<code bash>
 +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
 +</code>
 +  * 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'' à la ligne 239 mettre : 
 +<code>
 +"FOOTER": "« April – Promouvoir et défendre le logiciel libre »",
 +</code> 
 +
 +Dans le fichier ''/var/www/date.chapril.org/locale/en.json'' à la ligne 240 mettre : 
 +<code>
 +"FOOTER": "April - To promote and defend Free Software",
 +</code>
 +
 +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'' :
 +<code>
 +"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."  
 +</code>
 +
 +Dans le fichier ''/var/www/date.chapril.org/locale/en.json'' :
 +<code>
 +"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." 
 +</code>
 +
 +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'' dès la ligne 34 remplacer la fonction ''updatePoll'' par :
 +<code php>
 +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);                                                                           
 +    }     
 +</code>
 +
 +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 de 56 à 61 en commentaires en ajoutant des //slashs// en début de chaque ligne.
 +
 +Pour obtenir :
 +<code php>
 +// 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',                                                                                                     
 +];    
 +</code>
 +
 +
 +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'' :
 +<code php>
 +<?php
 +/**
 + * Copyright 2018 Christian P. MOMON cmomon@april.org
 + *
 + * This software is governed by the CeCILL-B license. If a copy of this license
 + * is not distributed with this file, you can obtain one at
 + * http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.txt
 + *
 + */
 +
 +use Framadate\Services\InputService;
 +use Framadate\Services\LogService;
 +use Framadate\Services\PurgeService;
 +use Framadate\Services\SecurityService;
 +
 +// /////////////////////////////////////////////////
 +// ////////// include_once __DIR__ . '/../app/inc/init.php';
 +use Framadate\FramaDB;
 +use Framadate\Repositories\RepositoryFactory;
 +
 +define('ROOT_DIR', __DIR__ . '/../');
 +
 +// Autoloading of dependencies with Composer
 +require_once ROOT_DIR . '/vendor/autoload.php';
 +require_once ROOT_DIR . '/vendor/o80/i18n/src/shortcuts.php';
 +
 +if (ini_get('date.timezone') === '') {
 +    date_default_timezone_set('Europe/Paris');
 +}
 +
 +require_once ROOT_DIR . '/app/inc/constants.php';
 +
 +define('CONF_FILENAME', ROOT_DIR . '/app/inc/config.php');
 +if (is_file(CONF_FILENAME)) {
 +    @include_once CONF_FILENAME;
 +
 +    // Connection to database
 +    $connect = new FramaDB(DB_CONNECTION_STRING, DB_USER, DB_PASSWORD);
 +    RepositoryFactory::init($connect);
 +    $err = 0;
 +} else {
 +    define('NOMAPPLICATION', 'Framadate');
 +    define('DEFAULT_LANGUAGE', 'fr');
 +    define('IMAGE_TITRE', 'images/logo-framadate.png');
 +    define('LOG_FILE', 'admin/stdout.log');
 +}
 + 
 +require_once ROOT_DIR . '/app/inc/i18n.php';
 +
 +// /////////////////////////////////////////////////
 +
 +/* Services */
 +/*----------*/
 +$logService = new LogService();
 +$purgeService = new PurgeService($connect, $logService);
 +$securityService = new SecurityService();
 +$inputService = new InputService();
 +
 +/* Action */
 +/* ------ */
 +$logService->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"
 +?>
 +</code>
 +
 +Mettre de bons droits :
 +<code bash>
 +chown datechaprilorg app/inc/config.php
 +chmod ug+rw app/inc/config.php
 +</code>
 +
 +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'' :
 +<code>
 +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
 +</code>
 +
 +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'' :
 +<code>
 +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
 +</code>
 +
 +===== Monitoring =====
 +
 +Mettre dans le répertoire ''/usr/lib/nagios/plugins/'' un fichier ''check_datechaprilorg_update'' et une copie dans ''/srv/date.chapril.org/tools/monitoring/'' :
 +
 +<code bash>
 +#!/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
 +</code>
 +
 +Le fichier est //commité// dans ''/srv/date.chapril.org/tools/monitoring/''.