32962764601d2249f7a64a8924af498d01e79299
Utilisateurs/Support.md
... | ... | @@ -0,0 +1,225 @@ |
1 | +Support par Brimir |
|
2 | +================== |
|
3 | + |
|
4 | +## Présentation |
|
5 | +> Brimir is a simple helpdesk system that can be used to handle support requests via incoming email. |
|
6 | + |
|
7 | +* https://getbrimir.com/ |
|
8 | +* https://github.com/ivaldi/brimir |
|
9 | + |
|
10 | +Brimir est actuellement installé sur le serveur Tails. |
|
11 | + |
|
12 | +## Utilisation |
|
13 | +### Start/Stop |
|
14 | +``` |
|
15 | +sudo service uwsgi [start|stop|status] brimir |
|
16 | +``` |
|
17 | + |
|
18 | + |
|
19 | +### Labels |
|
20 | + |
|
21 | +#### Ajouter une adresse email d'envoi |
|
22 | +Possible par [l'interface](https://support.resel.fr/email_addresses), 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`. |
|
23 | + |
|
24 | +## Installation |
|
25 | + |
|
26 | +### Prérequis : base SQL |
|
27 | + |
|
28 | +On choisi PostgreSQL, parce que c'est le bien :) |
|
29 | + |
|
30 | +1. On commence par créer l'utilisateur : |
|
31 | +``` |
|
32 | +11:07 alevavas@maia ~ % sudo -u postgres createuser -E -I -P brimir |
|
33 | +[sudo] password for alevavas: |
|
34 | +Saisir le mot de passe pour le nouveau rôle : |
|
35 | +Le saisir de nouveau : |
|
36 | +Le nouveau rôle est-il super-utilisateur ? (o/n) n |
|
37 | +Le nouveau rôle est-il autorisé à créer des bases de données ? (o/n) n |
|
38 | +Le nouveau rôle est-il autorisé à créer de nouveaux rôles ? (o/n) n |
|
39 | +``` |
|
40 | + |
|
41 | +2. on créé la base `sudo -u postgres createdb -E utf8 -O brimir brimir` |
|
42 | +on ajoute l'autorisation de se connecter : `sudo nano /etc/postgresql/9.1/main/pg_hba.conf` |
|
43 | + - on ajoute la ligne suivante : `host brimir brimir 172.22.2.56/32 md5` |
|
44 | +4. enfin on recharge : `sudo service postgresql reload` |
|
45 | +``` |
|
46 | +[ ok ] Reloading PostgreSQL 9.1 database server: main. |
|
47 | +``` |
|
48 | + |
|
49 | +## Brimir |
|
50 | +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) : |
|
51 | + |
|
52 | +1. on créé un emplacement et on récupère le code : |
|
53 | +``` |
|
54 | +root@tails /srv # mkdir brimir |
|
55 | +root@tails /srv # cd brimir |
|
56 | +root@tails /srv/brimir # ll |
|
57 | +total 0 |
|
58 | +root@tails /srv/brimir # git clone https://github.com/ivaldi/brimir.git . |
|
59 | +root@tails /srv/brimir # git checkout tags/0.6.1 |
|
60 | +HEAD is now at b084fd6... Recognize CC an BCC addresses as well |
|
61 | + |
|
62 | +root@tails /srv/brimir # useradd -M -c "Brimir" -r brimir -l -d /srv/brimir/ |
|
63 | +root@tails /srv/brimir # chown -R brimir:www-data . |
|
64 | +``` |
|
65 | + |
|
66 | +2. on installe les dépendances : |
|
67 | +``` |
|
68 | +root@tails /srv/brimir # apt-get install ruby ruby-dev libpq-dev |
|
69 | +root@tails /srv/brimir # gem install bundler |
|
70 | +root@tails /srv/brimir # curl --silent --location https://deb.nodesource.com/setup_0.12 | bash - |
|
71 | +root@tails /srv/brimir # apt-get install nodejs |
|
72 | +``` |
|
73 | + |
|
74 | +3. on met la configuration comme il faut |
|
75 | + - `nano config/database.yml` avec les bonnes infos |
|
76 | + - `nano config/environments/production.rb` on rajoute : |
|
77 | +``` |
|
78 | +# Conf ResEl |
|
79 | +config.action_mailer.default_options = { from: 'support@resel.fr' } |
|
80 | +config.action_mailer.default_url_options = { host: 'support.resel.fr' } |
|
81 | +``` |
|
82 | + |
|
83 | +4. 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) |
|
84 | + |
|
85 | +5. 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.ym`l ou |
|
86 | +`sed -i "s/<%= ENV\[\"SECRET_KEY_BASE\"\] %>/`dd if=/dev/urandom bs=1 count=1024 | sha512sum`/g" config/secrets.yml` |
|
87 | + |
|
88 | +6. on peut alors commencer l'installation de l'application : |
|
89 | + `sudo -u brimir bundle exec rake db:schema:load RAILS_ENV=production` |
|
90 | + `sudo -u brimir bundle exec rake assets:precompile RAILS_ENV=production` |
|
91 | + |
|
92 | +7. enfin on peut ajouter un 1er utilisateur à la main : `sudo -u brimir bundle exec rails console production` |
|
93 | + |
|
94 | +### uWSGI |
|
95 | +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, ...). |
|
96 | + |
|
97 | +1. On installe : `sudo apt-get install uwsgi uwsgi-plugin-rack-ruby1.9.1` |
|
98 | +2. 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) |
|
99 | +``` |
|
100 | + |
|
101 | +[uwsgi] |
|
102 | +master = true |
|
103 | +lazy-apps = true |
|
104 | +;idle = 3600 |
|
105 | +processes = 1 |
|
106 | + |
|
107 | +chdir = /srv/brimir |
|
108 | +plugin = rack |
|
109 | +rack = config.ru |
|
110 | +rbrequire = bundler/setup |
|
111 | +env = RAILS_ENV=production |
|
112 | + |
|
113 | +uid = brimir |
|
114 | +gid = brimir |
|
115 | +chmod-socket = 770 |
|
116 | +chown-socket = www-data:www-data |
|
117 | + |
|
118 | +; lazy-apps |
|
119 | +;rbrequire = rubygems |
|
120 | +;env = BUNDLE_GEMFILE=/srv/brimir/Gemfile |
|
121 | +``` |
|
122 | + |
|
123 | +3. On ajoute l'application aux actives : `cd /etc/uwsgi/apps-enabled/ && ln -s ../apps-available/brimir.ini .` |
|
124 | + |
|
125 | +4. 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`. |
|
126 | + |
|
127 | +### Nginx |
|
128 | + |
|
129 | +Un serveur web qu'on ne présente plus, léger avec une syntaxe de configuration légère. |
|
130 | + |
|
131 | +1. On commence par l'installer : `sudo apt-get install nginx` |
|
132 | +2. On créé le fichier de conf qui va bien sudo nano /etc/nginx/sites-enabled/support.conf (de nouveau, basé sur l'exemple Redmine) : |
|
133 | +``` |
|
134 | +server { |
|
135 | + listen 172.22.42.20:443 ssl; |
|
136 | + |
|
137 | + server_name support.resel.fr; |
|
138 | + |
|
139 | + ssl_certificate /etc/nginx/ssl/resel.pem; |
|
140 | + ssl_certificate_key /etc/nginx/ssl/resel.key; |
|
141 | + |
|
142 | + access_log /var/log/nginx/access_support.resel.fr.log; |
|
143 | + error_log /var/log/nginx/errors_support.resel.fr.log; |
|
144 | + |
|
145 | + root "/srv/brimir/public"; |
|
146 | + |
|
147 | + # "API" de création des tickets par email .. désolé mais on filtre, que pour l'interne |
|
148 | + # Seul le serveur mail / les serveurs internes peuvent envoyer, pour les autres, on envoi un vrai faux 404 |
|
149 | + # http://stackoverflow.com/questions/26369128/how-to-deny-with-404-on-nginx |
|
150 | + location = /fake-internal-404.html { |
|
151 | + internal; #return 404 |
|
152 | + } |
|
153 | + location = /tickets.json { |
|
154 | + error_page 403 404 /fake-internal-404.html; |
|
155 | + # https://trac.nginx.org/nginx/ticket/633 : la ligne suivante ne fonctionne pas .. |
|
156 | +# limit_except GET { |
|
157 | + #allow all; |
|
158 | + allow ipv4-adm-brest/23; |
|
159 | + allow ipv4-pub-brest/23; |
|
160 | + allow ipv4-adm-rennes/23; |
|
161 | + allow ipv4-pub-rennes/23; |
|
162 | + allow ipv6-adm-brest/64; |
|
163 | + allow ipv6-pub-brest/64; |
|
164 | + allow ipv6-adm-rennes/64; |
|
165 | + allow ipv6-pub-rennes/64; |
|
166 | + deny all; |
|
167 | +# } |
|
168 | + try_files $uri @brimir; |
|
169 | + } |
|
170 | + |
|
171 | + location / { |
|
172 | + try_files $uri @brimir; |
|
173 | + } |
|
174 | + |
|
175 | + location @brimir { |
|
176 | + include uwsgi_params; |
|
177 | + uwsgi_modifier1 7; |
|
178 | + uwsgi_pass unix:/run/uwsgi/brimir.sock; |
|
179 | + } |
|
180 | + |
|
181 | +} |
|
182 | +``` |
|
183 | + |
|
184 | +Bonus : |
|
185 | +``` |
|
186 | + |
|
187 | +tails ~ % cat /etc/nginx/sites-enabled/http-redirect.conf |
|
188 | +server { |
|
189 | + listen [::]:80 default_server; |
|
190 | + |
|
191 | + # http://serverfault.com/questions/67316/in-nginx-how-can-i-rewrite-all-http-requests-to-https-while-maintaining-sub-dom |
|
192 | + return 301 https://$server_name$request_uri; |
|
193 | +} |
|
194 | +``` |
|
195 | + |
|
196 | +3. On ajoute le site aux sites actifs : `cd /etc/nginx/sites-enabled/ && ln -s ../sites-available/support.conf .` |
|
197 | + |
|
198 | +4. On peut lancer ou relancer nginx |
|
199 | + |
|
200 | +### Réception de mail |
|
201 | + |
|
202 | + |
|
203 | + |
|
204 | +L'envoi des mails à l'appli de support est très propre et fait simplement appel à cURL. |
|
205 | +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 : |
|
206 | +``` |
|
207 | +brimir: "|/bin/sh /srv/scripts/brimir/post-mail https://support.resel.fr/tickets.json" |
|
208 | +support: brimir |
|
209 | +inscription: brimir |
|
210 | +``` |
|
211 | + |
|
212 | +et enfin recharger la base d'aliases postalias /etc/aliases puis recharger postfix pour un effet imémdiat service postfix reload. |
|
213 | + |
|
214 | + |
|
215 | +Quelques liens : |
|
216 | +* https://github.com/ivaldi/brimir/ |
|
217 | +* https://stackoverflow.com/questions/3681329/rails-3s-bundle-install-and-bundle-install-deployment-both-work-well-exce |
|
218 | +* https://github.com/rails/execjs |
|
219 | +* http://www.norbauer.com/rails-consulting/notes/git-revert-reset-a-single-file.html |
|
220 | +* https://stackoverflow.com/questions/9202324/execjs-could-not-find-a-javascript-runtime-but-execjs-and-therubyracer-are-in |
|
221 | +* https://stackoverflow.com/questions/6282307/execjs-and-could-not-find-a-javascript-runtime |
|
222 | +* https://github.com/nodejs/node-v0.x-archive/wiki/Installing-Node.js-via-package-manager#debian-and-ubuntu-based-linux-distributions |
|
223 | +* https://stackoverflow.com/questions/11513623/bundler-you-are-trying-to-install-in-deployment-mode-after-changing-your-gemfil |
|
224 | +* http://www.databasically.com/2010/10/22/what-time-is-it-or-handling-timezones-in-rails/ |
|
225 | +* https://stackoverflow.com/questions/8395748/devise-with-ldap-auth-problems |
|
... | ... | \ No newline at end of file |