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