Guide : installer Framadate derrière nginx

Apache n'est pas la seule option !

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


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

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.

8 commentaires

Malheureusement je n’ai pas les compétences pour Docker… peut-être @Kiliann ? Ou quelqu’un d’autre.

Sinon, de rien ! Je vais essayer de voir avec Framasoft si ça ferait sens de l’intégrer à leur doc, vu qu’il est tout de même plus probable que ce soit trouvé là où on le cherche :-°

+0 -0

Ah ! J’apprécie beaucoup ce billet.

Je m’étais déjà penché sur Framadate. Mais à l’époque, Studs avait des problèmes de développement, c’était devenu OpenSondage, bref, c’était compliqué. Depuis le remaniement de la part des contributeurs de Framasoft le logiciel à l’air d’être au point !

+2 -0

Depuis le remaniement de la part des contributeurs de Framasoft le logiciel à l’air d’être au point !

ache

Et pour avoir vu la nouvelle interface en cours de développement, c’est pas fini o/ Ce petit logiciel pratique va dans le bon sens je trouve.

+0 -0

Où as-tu trouvé les règles de réécriture d’URL pour nginx ?

En tout cas, elles fonctionnent merci !

+0 -0

Nulle part, c’est justement ce qui m’a poussé à les écrire moi-même et à les publier dans un billet.

Concrètement, j’ai repris les règles de réécritures pour Apache, fournies par Framadate, et j’ai écrit ces règles dans le format de nginx. Quelques tests et ajustements plus tard, c’était bon.

Autrement — de rien !

+0 -0

Yeah ! Ça roxe. À la limite. @tcit, tu penses que ça vaut le coup de faire une PR ?

En espérant qu’il se connecte toujours. ^^

PS: C’est dans ces moments où je recoupe les pseudos des gens vus il y a plusieurs années que je me dis que je traînes BEAUCOUP trop sur internet…

+1 -0

Hello @Amaury et @ache

(Oui, je me connecte parfois :p )

Elles ne sont pas très visibles, mais quelqu’un avait posté des règles nginx ici : https://framagit.org/framasoft/framadate/framadate/-/wikis/Install/Configure#a-working-example-with-https S’il y a des choses que tu penses qu’il faut adapter, n’hésite pas à modifier la page ou ouvrir un ticket dans le dépôt.

+1 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte