Ceci est une ancienne révision du document !
Table des matières
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.
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.
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
- 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,
- 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 et une copie des 2 premières lignes dans /srv/date.chapril.org/tools/cron_purge/datechaprilorg-purge.cron et la troisième ligne dans /srv/date.chapril.org/tools/rapport_activite/datechaprilorg.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 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\)]'|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
.