-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathREADME
303 lines (196 loc) · 8.45 KB
/
README
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
TrialInfo
=========
TrialInfo ist ein Auswertungssystem für Trial Motorrad- und Fahrrad-
Wettbewerbe. Es unterstützt alle wesentlichen Schritte zur Verwaltung einzelner
Veranstaltungen und zur Erstellung von Gesamtwertungen über mehrere
Veranstaltungen.
Folgende Funktionen werden unterstützt:
* Anlegen, Ändern und Löschen von Veranstaltungen. Konfigurieren von
Veranstaltungen (Wertungen, Klassen, befahrene Sektionen, usw.).
* Anlegen und Ändern von Fahrern, Zuweisen von Startnummern, Auswahl der
Starter einer Veranstaltung.
* Verwaltung von Gruppen und Erstellung von Gruppenwertungen.
* Erfassung der Ergebnisse (Punkte, Ausfall, Stechen, Start- und Zielzeit).
* Erstellung verschiedener Fahrerlisten und von Ergebnislisten online und
als PDF-Dateien.
* Definition von Veranstaltungsreihen (Klassen, Anzahl der Läufe und
Streichresultate, Startnummernänderungen zwischen Veranstaltungen).
* Import von und Export auf Dateien. (Der Import vom und Export in das
Programm TrialTool, http://www.ortwinsann.de/trialtool/, von Ortwin Sann
war in einer älteren Version möglich, wird derzeit aber nicht benötigt,
und daher nicht unterstützt.)
* Import direkt von einem Server. Laufende Synchronisierung auf einen Server.
* Präsentationsmodus (für einen externen Bildschirm).
* Online-Registrierung.
Das System ist komplett über einen Web-Browser bedienbar. Es kann von mehreren
Geräten aus gleichzeitig verwendet werden. Wird dabei versucht, die selben
Daten mehrfach zu verändern, dann werden diese Konflikte erkannt, und es kommt
zu Fehlermeldungen.
Systemvoraussetzungen
=====================
* Ein einigermaßen aktuelles Linux-System. (Dieses System kann auch
innerhalb einer virtuellen Maschine laufen.)
* Die Pakete nodejs (https://nodejs.org/) und npm (https://www.npmjs.com/).
* Die Datenbank MySQL (bzw. MariaDB).
Konfiguration
=============
Datenbank
---------
In MySQL ist wichtig, dass eine transaktionsfähige Datenbank-Engine (InnoDB,
nicht MyISAM) verwendet wird.
Beispiel
--------
$ mysqladmin --user=root password
New password:
Confirm new password:
$ mysql --user=root --password
Enter password:
> CREATE DATABASE trialinfo CHARACTER SET utf8;
> CREATE USER 'trialinfo'@'localhost' IDENTIFIED BY 'password';
> CREATE USER 'trialinfo'@'%' IDENTIFIED BY 'password';
> GRANT ALL PRIVILEGES ON trialinfo.* TO 'trialinfo'@'%';
Die anfängliche Datenbankstruktur lässt sich danach folgendermaßen erzeugen:
$ mysql --user=trialinfo --password=password < create-db.sql
/etc/my.cnf.d/server.cnf
------------------------
Add STRICT_TRANS_TABLES to sql_mode:
[server]
sql_mode=STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
Nach Veränderungen kann man create-db.sql folgendermaßen aktualisieren:
$ mysqldump --user=root --password --dump --no-data --skip-comments > create-db.sql
Herunterladen und erzeugen diverser Dateien
-------------------------------------------
Um einige Dateien wie Angular.js herunterzuladen, wird Make verwendet:
$ make install
Backend konfigurieren
---------------------
Die Scripts lassen sich über die Datei backend/config.json konfigurieren. Die
Einstellungen dort betreffen Dinge wie die Zugriffsdaten auf die Datenbank.
Achtung: Diese Datei muss per Hand erzeugt werden, bevor die Applikation
gestartet werden kann. Eine Vorlage dafür befindet sich in der Datei
backend/config.json.in.
Backend starten
---------------
Das Backend kann mit "make start" in einem Testmodus gestartet werden, und mit
"make serve" in einem Produktionsmodus.
Danach kann über einen Web-Browser auf TrialInfo zugegriffen werden.
Im Betrieb kann der Start z.B. über systemd erfolgen.
Web Server
----------
Die im Backend implementierte Web-Applikation beinhaltet alle Funktionen, um
Veranstaltungen durchführen zu können. Um mehere Instanzen auf dem gleichen
Server laufen zu lassen, bietet es sich an, dafür Apache zu verwenden, und
Apache als Proxy zum Backend zu verwenden.
Beispielkonfiguration für Apache:
<VirtualHost *:80>
DocumentRoot /home/agruen/trialinfo/htdocs
ServerName www.trialinfo.at
<LocationMatch ".*">
Require all granted
</LocationMatch>
<Directory "/home/agruen/trialinfo/htdocs">
Options Indexes
AllowOverride All
</Directory>
<LocationMatch "^/(.*)$">
ProxyPassMatch "http://localhost:3080/$1"
</LocationMatch>
</VirtualHost>
Je nach Konfiguration kann es sein, dass die Konfiguration für TrialInfo mit
dem Befehl "a2ensite" aktiviert werden muss.
SELinux
-------
$ semanage fcontext -a -t httpd_sys_content_t '/home/agruenba/trialinfo/htdocs'(/.*)?'
$ restorecon -r /home/agruenba/trialinfo/htdocs
$ semanage port -a -t http_port_t -p tcp 3080
Wenn die Daten in einem Home Directory liegen, lässt sich SELinux nicht
leicht so konfigurieren, dass die CGI-Scripts funktionieren. Sonst sollte
folgendes klappen:
So kann man selbst erstellte File Context-Regeln anzeigen:
$ semanage fcontext -l -C
Systemd
-------
/etc/systemd/system/trialinfo.service
------------------------------------------
[Unit]
Description=TrialInfo
[Service]
ExecStart=/usr/bin/node index.js
WorkingDirectory=/var/www/trialinfo/backend/dist
StandardOutput=journal
SyslogIdentifier=trialinfo
User=trialinfo
Group=trialinfo
Environment=NODE_ENV=production
Environment=TRIALINFO=systemd
/etc/systemd/system/trialinfo.socket
-----------------------------------------
[Socket]
ListenStream=3080
Service=trialinfo.service
[Install]
WantedBy=sockets.target
$ systemctl daemon-reload
$ systemctl enable trialinfo.socket
- oder -
$ systemctl enable trialinfo-secure.socket
$ journalctl -u trialinfo
$ journalctl -f -u trialinfo
Git post-receive hook
---------------------
export GIT_WORK_TREE=/var/www/trialinfo
git checkout -f
make -C $GIT_WORK_TREE install
make -C $GIT_WORK_TREE build
sudo /bin/systemctl stop trialinfo.service
sudo /bin/systemctl restart trialinfo.socket
Apache-Module
-------------
Auf manchen Systemen wie Ubuntu 15.04 müssen die verwendeten Apache-Module
mit folgendem Befehl aktiviert werden:
$ a2enmod rewrite.load
RPM-Paket bauen
===============
$ make release
Veranstaltungsverwaltung
========================
Nach der Konfiguration der verschiedenen Komponenten ist die
Veranstaltungsverwaltung im Pfad /admin/ auf dem Web-Server verfügbar.
Rechtemodell und Rechteverwaltung
=================================
Auf den Administrationsbereich haben nur Benutzer mit dem "admin"-Flag Zugriff.
Dabei haben Benutzer mit dem "super_admin"-Flag vollen Zugriff auf alle
Veranstaltungen und Veranstaltungsreihen. Die anderen Benutzer sehen nur die
Veranstaltungen und Veranstaltungsreihen, auf die sie zumindest Lesezugriff
haben.
Legt ein Benutzer eine neue Veranstaltung oder Veranstaltungsreihe an, dann
bekommt er dort Schreib-/Lesezugriff.
Weiters lassen sich direkt in der Datenbank zusätzliche Rechte vergeben, es
lassen sich Gruppen von Benutzern definieren, und es kann definiert werden, wie
Berechtigungen zwischen Veranstaltungen vererbt werden, wenn eine Veranstaltung
auf Basis einer anderen Veranstaltung erzeugt wird.
Veranstaltungen erben auch die Zugehörigkeit zu Veranstaltungsreihen von ihrer
Basisveranstaltung, sofern der Benutzer Schreibzugriff auf die jeweilige
Veranstaltungsreihe hat.
Reihung in der Jahreswertung
============================
Fahrer werden zunächst anhand ihrer Gesamtpunkteanzahl gereiht, wobei die
Punkte aus Streichresultaten abgezogen sind.
Bei gleichem Punktestand werden alle erzielten Ergebnisse inklusive der
Streichresultate verglichen. Der Fahrer mit mehr guten Platzierungen, also mit
mehr ersten Plätzen, oder mit mehr zweiten Plätzen bei gleicher Anzahl erster
Plätze, usw., gewinnt.
Danach gewinnt der Fahrer mit mehr Streichpunkten.
Diese Reihung kann in den Einstellungen der Veranstaltungsreihe überschrieben
werden, indem die Reihenfolge bei Punktegleichstand explizit definiert wird.
WeasyPrint
==========
WeasyPrint Wird verwendet, um am Server HTML nach PDF zu konvertieren.
Weasyprint ist zwar speziell für die Ergebnislisten mit ihren großen Tabellen
sehr langsam, dafür erzeugt es aber einen ordentlichen Seitenumbruch, was z.B.
WebKit-basierte Lösungen wie wkhtmltopdf nur sehr mangelhaft beherrschen.
$ yum install weasyprint
Lizenz
======
Dieser Text und die Programme stehen under der GNU Affero General Public License
Version 3, http://www.gnu.org/licenses/agpl-3.0.html.