- Notre univers entre l'infiniment petit et l'infiniment grand
- Comment prendre le ferry peut vous coûter cher
Récemment, suite à l’actualité des outils de sondage de date (ok, c’est une niche super spécifique), l’envie d’installer une instance de Framadate chez moi m’a reprise. C’est en effet un logiciel que j’utilise pas mal, et avec Doodle qui cache son offre gratuite1 tout en la bridant toujours plus, il y a des chances qu’une vague d’utilisateurs se rabatte sur Framadate — autant donner un coup de main en proposant une instance alternative.
Sauf que j’utilise nginx. La documentation ne fournie d’instructions que pour Apache.
Voici donc comment faire sous nginx, après un peu de recherche et de tâtonnements .
-
Tellement bien cachée que l’écrasante majorité des gens ont pensé qu’il était complètement devenu payant, alors que non. Il n’empêche que — utiliser des alternatives, d’autant plus quand elles sont plus complètes, ça ne fait pas de mal à la santé d’internet.
↩
- Installer la base de Framadate
- Configurer nginx
- Finaliser l'installation
- Configurer l'envoi des courriels
Installer la base de Framadate
Le début de l’installation est le même que celui détaillé dans la documentation officielle, donc je ne m’attarderai pas dessus.
Framadate est disponible sur son dépôt framagit. Téléchargez la dernière release, ou si vous préférez utiliser git :
git clone https://framagit.org/framasoft/framadate/framadate.git
cd framadate
git checkout 1.1.10
(Repérez la version la plus récente grâce à git tag
.)
Ensuite, téléchargez Composer puis installez les dépendances de Framagit (-a
permet de générer un autoloader optimisé) :
composer install -a
Configurer nginx
Framadate est une application écrite en PHP. Pour l’utiliser avec nginx, vous devez donc avoir PHP-FPM (ou équivalent) disponible et fonctionnel. Je pars du principe que c’est le cas — dans le cas contraire, vous n’aurez aucune difficulté à trouver un guide d’installation de PHP-FPM derrière nginx.
La configuration nginx nécessaire pour Framadate est la suivante (enfin, c’est une possibilité qui marche). Bien sûr, modifiez le nom de domaine (server_name
) et la racine de Framadate (root
).
server {
listen 80;
listen [::]:80;
server_name framadate.example.org;
return 301 https://$host$request_uri;
}
server {
listen 443 http2 ssl;
listen [::]:443 http2 ssl;
server_name framadate.example.org;
include gzip_params;
include ssl_params;
root /var/www/framadate/;
index index.html index.htm index.php;
access_log /var/log/nginx/framadate.example.org.access.log;
error_log /var/log/nginx/framadate.example.org.error.log;
client_max_body_size 20M;
location / {
index index.php index.html;
rewrite ^/([a-zA-Z0-9-]+)$ /studs.php?poll=$1;
rewrite ^/([a-zA-Z0-9-]+)/action/([a-zA-Z_-]+)/(.+)$ /studs.php?poll=$1&$2=$3;
rewrite "^/([a-zA-Z0-9-]+)/vote/([a-zA-Z0-9]{16})$" /studs.php?poll=$1&vote=$2;
rewrite "^/([a-zA-Z0-9-]{24})/admin$" /adminstuds.php?poll=$1;
rewrite "^/([a-zA-Z0-9-]{24})/admin/vote/([a-zA-Z0-9]{16})$" /adminstuds.php?poll=$1&vote=$2;
rewrite "^/([a-zA-Z0-9-]{24})/admin/action/([a-zA-Z_-]+)(/(.+))?$" /adminstuds.php?poll=$1&$2=$4;
}
location = /admin {
return 301 https://$host$request_uri/;
}
location /admin/ {
auth_basic "Administration de Framapad";
auth_basic_user_file /var/www/framadate/.htpasswd;
}
location ~* \.(jpg|jpeg|gif|css|png|js|map|woff|woff2|ttf|svg|eot)$ {
expires 30d;
access_log off;
}
location ~ /\. {
deny all;
}
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass php-handler;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PHP_VALUE "upload_max_filesize = 20M \n post_max_size=21M";
client_max_body_size 21M;
fastcgi_buffers 64 4K;
}
}
Explications et points d’attention…
SSL
Je pars du principe que vous avez un certificat HTTPS (vous devriez !) et que la configuration lui correspondant est dans /etc/nginx/ssl_params
, ou équivalent sur votre système — vous pouvez remplacer la ligne 14 si ce n’est pas le cas.
PHP et PHP-FPM
Comme je le disais plus haut, PHP-FPM (ou autre permettant d’exécuter PHP) et nécessaire. Chez moi, il est configuré comme ceci dans mon nginx.conf
, ce qui permet de s’en servir comme présenté ligne 54, mais si ce n’est pas le cas chez vous, adaptez la ligne.
upstream php-handler {
server unix:/var/run/php-fpm/php-fpm.sock;
}
Protection de l’interface d’administration
L’interface d’administration de Framadate (accessible sur /admin
) n’est pas du tout protégée. Il faut donc ajouter une authentification HTTP par dessus, sinon n’importe qui pourra accéder en écriture (et suppression) à tous les sondages de votre instance. Gênant.
Le fichier de configuration ci-dessus intègre cette protection ; cela dit, il faut la configurer. Pour ce faire, créez un fichier .htpasswd
à la racine de Framadate (ou ailleurs, tant que vous restez organisés). Vous devez le remplir de cette façon :
username:mot_de_passe_haché
(Il peut y avoir plusieurs identifiants ; un par ligne.)
Pour générer le mot de passe haché, il y a plein de moyens, mais le plus simple à mon sens est d’utiliser OpenSSL, généralement installé sur un serveur.
Appelez :
openssl passwd -6
puis tapez deux fois le mot de passe. Si l’option -6
(correspondant à SHA-512) n’est pas reconnue, utilisez à défaut la plus faible -apr1
, ou mieux en fonction de ce que vous trouverez dans --help
. Malheureusement, nginx ne supporte pas (ou rarement) bcrypt.
Ensuite, n’oubliez pas de mettre à jour le chemin vers le fichier .htpasswd
ligne 40.
Finaliser l'installation
Rendez-vous à l’adresse de votre installation (par exemple https://framadate.example.org) et suivez les instructions. Laissez cochée l’option « URLs propres », car la configuration de nginx proposée les prend en compte.
Renseignez une adresse de courriel pour laquelle vous disposez d’un serveur SMTP, idéalement (que ce soit chez vous ou ailleurs).
Configurer l'envoi des courriels
Framadate envoie des courriels aux créateurs de sondage avec les URLs de diffusion et d’administration ; et dispose d’une option pour retrouver tous ses sondages en donnant une adresse et en les recevant par courriel.
Pour que tout ceci fonctionne, il vous faut, après avoir validé le formulaire de finalisation de l’installation de la partie précédente, ouvrir le fichier /app/inc/config.php
. Tout en bas du fichier, vous trouverez la configuration SMTP (et quelques autres paramètres).
Et voilà, vous avez un Framadate tout propre prêt à l’emploi, bien au chaud chez vous ! \o/
À toutes fins utiles, mon instance est disponible sur date.carrade.eu.