Support par Brimir
Birmir n'étant plus mis à jour, le support est maintenant gérer avec Zammad.
Présentation
Brimir is a simple helpdesk system that can be used to handle support requests via incoming email.
Brimir est actuellement installé sur le serveur Tails.
Utilisation
Start/Stop
sudo service uwsgi [start|stop|status] brimir
Labels
Ajouter une adresse email d'envoi
Possible par l'interface, mais il y a une vérification. On peut aussi trifouiller la base SQL (tant que c'est un ajout et fait proprement) en ajoutant une ligne avec default à false, les dates à expression NOW()
et token sur null
.
Installation
Prérequis : base SQL
On choisi PostgreSQL, parce que c'est le bien :)
On commence par créer l'utilisateur :
11:07 alevavas@maia ~ % sudo -u postgres createuser -E -I -P brimir [sudo] password for alevavas: Saisir le mot de passe pour le nouveau rôle : Le saisir de nouveau : Le nouveau rôle est-il super-utilisateur ? (o/n) n Le nouveau rôle est-il autorisé à créer des bases de données ? (o/n) n Le nouveau rôle est-il autorisé à créer de nouveaux rôles ? (o/n) n
-
on créé la base
sudo -u postgres createdb -E utf8 -O brimir brimir
on ajoute l'autorisation de se connecter :sudo nano /etc/postgresql/9.1/main/pg_hba.conf
- on ajoute la ligne suivante :
host brimir brimir 172.22.2.56/32 md5
- on ajoute la ligne suivante :
- enfin on recharge :
sudo service postgresql reload
[ ok ] Reloading PostgreSQL 9.1 database server: main.
Brimir
Les étapes sont assez simple (une fois qu'on a trouvé ce qui cloche, comme par exemple le fait que le gem execjs vient sans moteur JS et qu'il faut installer NodeJS) :
on créé un emplacement et on récupère le code :
root@tails /srv # mkdir brimir root@tails /srv # cd brimir root@tails /srv/brimir # ll total 0 root@tails /srv/brimir # git clone https://github.com/ivaldi/brimir.git . root@tails /srv/brimir # git checkout tags/0.6.1 HEAD is now at b084fd6... Recognize CC an BCC addresses as well root@tails /srv/brimir # useradd -M -c "Brimir" -r brimir -l -d /srv/brimir/ root@tails /srv/brimir # chown -R brimir:www-data .
on installe les dépendances :
root@tails /srv/brimir # apt-get install ruby ruby-dev libpq-dev root@tails /srv/brimir # gem install bundler root@tails /srv/brimir # curl --silent --location https://deb.nodesource.com/setup_0.12 | bash - root@tails /srv/brimir # apt-get install nodejs
-
on met la configuration comme il faut
-
nano config/database.yml
avec les bonnes infos -
nano config/environments/production.rb
on rajoute :# Conf ResEl config.action_mailer.default_options = { from: 'support@resel.fr' } config.action_mailer.default_url_options = { host: 'support.resel.fr' }
-
on récupère les dépendances (Gems) avec
sudo -u brimir bundle install --without mysql sqlite development test --path vendor/bundle --deployment
(attention à l'utilisateur, sudo, pour toute commande lié à l'application comme bundle à partir de maintenant)on va générer un secret qui servira pour les cookies, on peut le faire avec
sed -i "s/<%= ENV\[\"SECRET_KEY_BASE\"\]
%>/bin/rake secret
/g" config/secrets.yml ou
sed -i "s/<%= ENV[\"SECRET_KEY_BASE\"] %>/dd if=/dev/urandom bs=1 count=1024 | sha512sum
/g" config/secrets.yml`on peut alors commencer l'installation de l'application :
sudo -u brimir bundle exec rake db:schema:load RAILS_ENV=production
sudo -u brimir bundle exec rake assets:precompile RAILS_ENV=production
enfin on peut ajouter un 1er utilisateur à la main :
sudo -u brimir bundle exec rails console production
uWSGI
Bon l'application est prête, il lui faut un container serveur d'application, uWSGI est probablement le candidat idéal en plus du fait qu'il gère plus d'un langage (Python, Ruby, Perl, ...).
- On installe :
sudo apt-get install uwsgi uwsgi-plugin-rack-ruby1.9.1
On va créer un fichier de configuration
nano /etc/uwsgi/apps-available/brimir.ini
(la conf est dérivée de celle de Redmine)[uwsgi] master = true lazy-apps = true ;idle = 3600 processes = 1 chdir = /srv/brimir plugin = rack rack = config.ru rbrequire = bundler/setup env = RAILS_ENV=production uid = brimir gid = brimir chmod-socket = 770 chown-socket = www-data:www-data ; lazy-apps ;rbrequire = rubygems ;env = BUNDLE_GEMFILE=/srv/brimir/Gemfile
On ajoute l'application aux actives :
cd /etc/uwsgi/apps-enabled/ && ln -s ../apps-available/brimir.ini .
On peut lancer l'application avec
service uwsgi start brimir
et uWSGI met à disposition le socket pour y accéder dans/run/uwsgi/app/brimir/socket
.
Nginx
Un serveur web qu'on ne présente plus, léger avec une syntaxe de configuration légère.
- On commence par l'installer :
sudo apt-get install nginx
- On créé le fichier de conf qui va bien sudo nano /etc/nginx/sites-enabled/support.conf (de nouveau, basé sur l'exemple Redmine) :
server { listen 172.22.42.20:443 ssl; server_name support.resel.fr; ssl_certificate /etc/nginx/ssl/resel.pem; ssl_certificate_key /etc/nginx/ssl/resel.key; access_log /var/log/nginx/access_support.resel.fr.log; error_log /var/log/nginx/errors_support.resel.fr.log; root "/srv/brimir/public"; # "API" de création des tickets par email .. désolé mais on filtre, que pour l'interne # Seul le serveur mail / les serveurs internes peuvent envoyer, pour les autres, on envoi un vrai faux 404 # http://stackoverflow.com/questions/26369128/how-to-deny-with-404-on-nginx location = /fake-internal-404.html { internal; #return 404 } location = /tickets.json { error_page 403 404 /fake-internal-404.html; # https://trac.nginx.org/nginx/ticket/633 : la ligne suivante ne fonctionne pas .. # limit_except GET { #allow all; allow ipv4-adm-brest/23; allow ipv4-pub-brest/23; allow ipv4-adm-rennes/23; allow ipv4-pub-rennes/23; allow ipv6-adm-brest/64; allow ipv6-pub-brest/64; allow ipv6-adm-rennes/64; allow ipv6-pub-rennes/64; deny all; # } try_files $uri @brimir; } location / { try_files $uri @brimir; } location @brimir { include uwsgi_params; uwsgi_modifier1 7; uwsgi_pass unix:/run/uwsgi/brimir.sock; } }
Bonus :
tails ~ % cat /etc/nginx/sites-enabled/http-redirect.conf
server {
listen [::]:80 default_server;
# http://serverfault.com/questions/67316/in-nginx-how-can-i-rewrite-all-http-requests-to-https-while-maintaining-sub-dom
return 301 https://$server_name$request_uri;
}
On ajoute le site aux sites actifs :
cd /etc/nginx/sites-enabled/ && ln -s ../sites-available/support.conf .
On peut lancer ou relancer nginx
Réception de mail
L'envoi des mails à l'appli de support est très propre et fait simplement appel à cURL.
Il faut mettre en place le script script/post-mail sur le serveur de mail (par exemple dans /srv/scripts/brimir/
), puis modifier le fichier d'aliases (/etc/aliases
) pour y ajouter :
brimir: "|/bin/sh /srv/scripts/brimir/post-mail https://support.resel.fr/tickets.json"
support: brimir
inscription: brimir
et enfin recharger la base d'aliases postalias /etc/aliases puis recharger postfix pour un effet imémdiat service postfix reload.
Débug
On peut utiliser curl
pour débuguer :
curl --data-urlencode message@- -v https://support.resel.fr/tickets.json <<EOF
Date: Tue, 7 Feb 2017 01:45:22 +0100 (CET)
From: stupid@resel.fr
To: support@resel.fr
Message-ID: <random_id@test>
Subject: coucou :)
Yo !
EOF
Quelques liens :
- https://github.com/ivaldi/brimir/
- https://stackoverflow.com/questions/3681329/rails-3s-bundle-install-and-bundle-install-deployment-both-work-well-exce
- https://github.com/rails/execjs
- http://www.norbauer.com/rails-consulting/notes/git-revert-reset-a-single-file.html
- https://stackoverflow.com/questions/9202324/execjs-could-not-find-a-javascript-runtime-but-execjs-and-therubyracer-are-in
- https://stackoverflow.com/questions/6282307/execjs-and-could-not-find-a-javascript-runtime
- https://github.com/nodejs/node-v0.x-archive/wiki/Installing-Node.js-via-package-manager#debian-and-ubuntu-based-linux-distributions
- https://stackoverflow.com/questions/11513623/bundler-you-are-trying-to-install-in-deployment-mode-after-changing-your-gemfil
- http://www.databasically.com/2010/10/22/what-time-is-it-or-handling-timezones-in-rails/
- https://stackoverflow.com/questions/8395748/devise-with-ldap-auth-problems