Outils pour utilisateurs

Outils du site


admin:services:date.chapril.org

Ceci est une ancienne révision du document !


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

<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>

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

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 :
    • avec Git :
      • créer une nouvelle branche april-x.y.z correspondant à la version x.y.z cible de la mise à jour,
      • merger la branche voulue dans la branche april-x.y.z en réglant les conflits,
  • 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 et cliquer sur le bouton « migration ».

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 :

<?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"
?>

Mettre de bons droits :

chown datechaprilorg app/inc/config.php
chmod ug+rw app/inc/config.php

Créer un fichier datechaprilorg et le placer dans /etc/cron.d :

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
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:

#!/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\)]'|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 /var/www/date.chapril.org/tools/.

admin/services/date.chapril.org.1580912297.txt.gz · Dernière modification : 2020/02/05 14:18 de dclermonte