Wiki-Quellcode von Kopano Optimierungen

Version 16.1 von Christian Germann am 2022/05/04 13:01

Verstecke letzte Bearbeiter
Jens Gruber 3.1 1 (% style="color:#000000" %)Es gibt mehrere Anpassungen die sich anbieten um den laufenden Betrieb von Kopano zu verbessern. Folgende Maßnahmen können optional genutzt werden:
Jens Gruber 1.1 2
Jens Gruber 2.2 3 {{toc start="5"/}}
Jens Gruber 1.1 4
Jens Gruber 2.2 5
Christian Germann 16.1 6 === **1. Performance-Optimierung** ===
Jens Gruber 1.1 7
8
Christian Germann 16.1 9 ===== (% style="color:#000000" %)**__1.1 Kopano Leistung verbessern__**(%%) =====
Jens Gruber 1.1 10
Jens Gruber 3.1 11 (% style="color:#000000" %)Kopano ist in der Standardinstallation lediglich für den Betrieb von 10 Benutzern ausgelegt. Das heißt, die Kopano-Serverdienste reservieren mit den Standardeinstellungen sehr wenig Systemressourcen (RAM) und die Plattform arbeitet als Konsequenz sehr langsam, wenn deutlich mehr Benutzer ein Postfach erhalten. Man sollte daher in den meisten Fällen die zugeteilten Systemressourcen (deutlich) erhöhen, um ein vernünftiges Nutzererlebnis zu erzielen.
Jens Gruber 1.5 12
Jens Gruber 3.1 13 (% style="color:#000000" %)Um die Einstellungen Puppet-gerecht zu definieren, hilft nachfolgende Auflistung von YAML-Einstellungen. Bei der Auswahl der Werte muss man die **Hardware-Ressourcen** des Servers berücksichtigen, im Beispiel wird von einem leistungsstarken Server mit **32GB** **RAM** und **2 CPU-Sockets** und insgesamt **32 Kernen** ausgegangen.
Jens Gruber 1.5 14
15
Jens Gruber 3.1 16 (% style="color:#000000" %)Bearbeiten Sie in die Datei kopano-g1.yaml im puppeteer Container:
Jens Gruber 1.5 17
18 {{code language="bash"}}
19 root@puppeteer:~ # vim /etc/logodidact/hiera/custom.d/kopano-g1.yaml
20 {{/code}}
21
Christian Germann 7.1 22 Passen Sie die kopano-g1.yaml je nach Größe der Schule an.
Jens Gruber 1.5 23
Christian Germann 7.1 24 **kopano-g1.yaml für Kopano <50 Users:**
Jens Gruber 1.5 25
Christian Germann 4.1 26 {{code language="yaml"}}
Christian Germann 7.1 27 nginx::keepalive_timeout: 3600
28 nginx::keepalive_requests: 500
29
Jens Gruber 1.5 30 apache::keepalive: 'On'
31 apache::keepalive_timeout: '45'
32 apache::max_keepalive_requests: '500'
Christian Germann 7.1 33 apache::mod::prefork::maxclients: '384'
34 apache::mod::prefork::serverlimit: '384'
Jens Gruber 1.5 35
36 ld_kopano::server:
Christian Germann 4.1 37 settings:
38 cache_cell_size: '512M'
39 cache_object_size: '16M'
40 cache_indexedobject_size: '32M'
41 enable_sql_procedures: 'yes'
42 # The following 2 settings require a cronjob to run periodically instead (in case the value is disabled)
43 sync_gab_realtime: 'no'
44 softdelete_lifetime: '0'
Christian Germann 7.1 45 {{/code}}
Christian Germann 4.1 46
Christian Germann 7.1 47 **kopano-g1.yaml für Kopano >=50 Users**
48
49 {{code language="yaml"}}
50 nginx::keepalive_timeout: 3600
51 nginx::keepalive_requests: 500
52
53 apache::keepalive: 'On'
54 apache::keepalive_timeout: '45'
55 apache::max_keepalive_requests: '500'
56 apache::mod::prefork::maxclients: '500'
57 apache::mod::prefork::serverlimit: '500'
58
Christian Germann 4.1 59 ld_kopano::server:
60 settings:
61 cache_cell_size: '6144M'
62 cache_object_size: '32M'
63 cache_indexedobject_size: '64M'
64 enable_sql_procedures: 'yes'
65 # The following 2 settings require a cronjob to run periodically instead (in case the value is disabled)
66 sync_gab_realtime: 'no'
67 softdelete_lifetime: '0'
Christian Germann 7.1 68 {{/code}}
Christian Germann 4.1 69
Christian Germann 7.1 70 **kopano-g1.yaml für Kopano >=200 Users**
71
72 {{code language="yaml"}}
73 nginx::keepalive_timeout: 3600
74 nginx::keepalive_requests: 500
75
76 apache::keepalive: 'On'
77 apache::keepalive_timeout: '45'
78 apache::max_keepalive_requests: '500'
79 apache::mod::prefork::maxclients: '500'
80 apache::mod::prefork::serverlimit: '500'
81
Christian Germann 4.1 82 ld_kopano::server:
83 settings:
84 cache_cell_size: '12288M'
85 cache_object_size: '256M'
86 cache_indexedobject_size: '512M'
87 enable_sql_procedures: 'yes'
88 # The following 2 settings require a cronjob to run periodically instead (in case the value is disabled)
89 sync_gab_realtime: 'no'
90 softdelete_lifetime: '0'
Jens Gruber 1.5 91 {{/code}}
92
Christian Germann 8.1 93 (% id="cke_bm_884S" style="color:#000000; display:none" %) (% style="color:#000000" %)Zusätzlich muss im Kopano-Container ein Cron-Job eingerichtet werden, sofern man im Abschnitt **ld_kopano::server** die Parameter **sync_gab_realtime** / **softdelete_lifetime** im deaktivierten Zustand eingetragen hat:
Jens Gruber 1.6 94
95 {{code language="bash"}}
96 root@kopano-g1:~ # /etc/cron.d/kopano-optimization
97 {{/code}}
98
99 {{code language="bash"}}
100 # /etc/cron.d/kopano-optimization
101 */30 *  * * *     root   [ -x /usr/sbin/kopano-admin ] && /usr/sbin/kopano-admin --sync 2>&1 >/dev/null
102 0 4  * * *     root   [ -x /usr/sbin/kopano-admin ] && /usr/sbin/kopano-admin --purge-softdelete 30 2>&1 >/dev/null
103 {{/code}}
104
105
Christian Germann 16.1 106 ===== __**1.2 mysql56(% style="color:#000000" %) Leistung verbessern(%%)**__ =====
Christian Germann 7.1 107
Jens Gruber 3.1 108 (% style="color:#000000" %)Folgende Einstellung können für die mysql56.yaml gesetzt werden:
Jens Gruber 1.6 109
110 {{code language="bash"}}
111 root@puppeteer:~ # vim /etc/logodidact/hiera/custom.d/mysql56.yaml
112 {{/code}}
113
Christian Germann 4.1 114 {{code language="yaml"}}
Jens Gruber 1.6 115 mysql::server::override_options:
116 mysqldump:
117 max_allowed_packet: '1G'
118 mysqld:
119 innodb_file_per_table: true
120 bind-address: '0.0.0.0'
121 skip-name-resolve: true
122 innodb_large_prefix: true
123 innodb_file_format: 'Barracuda'
Christian Germann 12.1 124 max_allowed_packet: '32M'
Jens Gruber 1.6 125 max_connections: '150'
126 query_cache_limit: '2M'
127 query_cache_size: '64M'
128 thread_stack: '512K'
129 tmp_table_size: '64M'
130 max_heap_table_size: '64M'
131 sort_buffer_size: '2M'
132 join_buffer_size: '2M'
133 table_open_cache: '500'
134 innodb_autoextend_increment: '1000'
135 innodb_buffer_pool_size: '2G'
136 innodb_flush_log_at_trx_commit: '2'
137 innodb_flush_method: 'O_DSYNC'
138 innodb_lock_wait_timeout: '120'
139 innodb_log_buffer_size: '8M'
140 innodb_log_file_size: '1G'
141 innodb_log_files_in_group: '3'
142 innodb_read_io_threads: '4'
143 innodb_write_io_threads: '4'
144 {{/code}}
145
Jens Gruber 1.8 146
Christian Germann 16.1 147 ===== __**1.3 mariadb103 (% style="color:#000000" %)Leistung verbessern(%%)**__ =====
Christian Germann 12.1 148
149 (% style="color:#000000" %)Folgende Einstellung können für die mariadb103.yaml gesetzt werden:
150
Christian Germann 4.1 151 {{code language="bash"}}
152 root@puppeteer:~ # vim /etc/logodidact/hiera/custom.d/mariadb103.yaml
153 {{/code}}
Jens Gruber 1.8 154
Christian Germann 4.1 155 {{code language="yaml"}}
156 mysql::server::override_options:
157 mysqldump:
158 max_allowed_packet: '1G'
159 mysqld:
160 innodb_file_per_table: '1'
161 bind-address: '0.0.0.0'
162 skip-name-resolve: true
163 innodb_large_prefix: '1'
Christian Germann 12.1 164 max_allowed_packet: '32M'
Christian Germann 4.1 165 max_connections: '151'
166 query_cache_limit: '2M'
167 query_cache_size: '64M'
168 thread_stack: '512K'
169 tmp_table_size: '64M'
170 max_heap_table_size: '64M'
171 sort_buffer_size: '2M'
172 join_buffer_size: '2M'
173 table_open_cache: '500'
174 innodb_autoextend_increment: '1000'
175 innodb_buffer_pool_size: '1G'
176 # The following setting is based on the existing ibdata1 file, check current size and insert it here (rounded to MB)
177 innodb_data_file_path: 'ibdata1:12M:autoextend'
178 innodb_flush_log_at_trx_commit: '2'
179 innodb_flush_method: 'O_DSYNC'
180 innodb_lock_wait_timeout: '120'
181 innodb_log_buffer_size: '8M'
182 innodb_log_file_size: '1G'
183 innodb_log_files_in_group: '3'
184 innodb_read_io_threads: '4'
185 innodb_write_io_threads: '4'
186 {{/code}}
Jens Gruber 1.8 187
Christian Germann 13.1 188 Passen Sie die {{code}}mariadb103.yaml{{/code}} noch folgendermaßen an für Große Umgebungen mit vielen Postfächern.
Jens Gruber 1.8 189
Christian Germann 4.1 190 **mariadb103.yaml für Kopano >= 50 Users:**
Jens Gruber 1.8 191
Christian Germann 4.1 192 {{code language="yaml"}}
193 sort_buffer_size: '4M'
194 innodb_buffer_pool_size: '2G'
Jens Gruber 1.8 195 {{/code}}
196
Christian Germann 14.1 197 (% class="wikigeneratedid" %)
198 Quelle: [[https:~~/~~/kb.kopano.io/pages/viewpage.action?pageId=2654253>>https://kb.kopano.io/pages/viewpage.action?pageId=2654253]]
199
200
Christian Germann 16.1 201 ===== (% style="color:#000000" %)**__1.4 Anbindung/Akkulaufzeit von Endgeräten verbessern__**(%%) =====
Christian Germann 7.1 202
203 (% style="color:#000000" %)Bei Verwendung des ActiveSync-Protokolls bzw. Kopano Z-Push zur Anbindung von Endgeräten (Smartphones, Tablets, MS Outlook 2013/2016/2019 Clients) empfiehlt es sich, auf die HTTP-KeepAlive Einstellungen für die Webserver-Dienste in der Verbindungskette (Rev-Proxy → Kopano-Server) Einfluss zu nehmen.
204
205 (% style="color:#000000" %)Der KeepAlive-Wert wird bewusst hoch gewählt, damit Verbindungen zwischen Client und Kopano-Server länger offen gehalten werden können. Dadurch schont man die Batterie und Laufzeit von mobilen Geräten, da es sich u.a. auf den Standby-Betrieb von Smartphones auswirkt (der nicht permanent unterbrochen wird zum Starten einer neuen Verbindung).
206
207
208 (% style="color:#000000" %)Zusätzlich müssen Sie die Datei rev-proxy.yaml erstellen/bearbeiten:
209
210 {{code language="bash"}}
211 root@puppeteer:~ # vim /etc/logodidact/hiera/custom.d/rev-proxy.yaml
212 {{/code}}
213
214 (% style="color:#000000" %)Ergänzen/Befüllen Sie die Datei mit folgendem Inhalt:
215
216 {{code language="bash"}}
217 nginx::keepalive_timeout: 3600
218 nginx::keepalive_requests: 500
219 {{/code}}
220
Christian Germann 16.1 221
Christian Germann 7.1 222
Christian Germann 16.1 223 (% class="wikigeneratedid" %)
224 ===== (% style="color:#000000" %)**__Zustellbarkeit der Unzustellbarkeits-Nachrichten verbessern durch Versenden per Relayhost__**(%%) =====
225
226 (% style="color:#000000" %)Es ist möglich die Zustellbarkeit der Unzustellbarkeits-Nachrichten für den Absender zu verbessern. Dafür ist es notwendig den SMTP-Server des gewählten Mailproviders als Smarthost einzutragen.
227
228
229 (% style="color:#000000" %)Bearbeiten Sie in die Datei kopano-g1.yaml im puppeteer Container:
230
231 {{code language="bash"}}
232 root@puppeteer:~ # vim /etc/logodidact/hiera/custom.d/kopano-g1.yaml
233 {{/code}}
234
235 (% style="color:#000000" %)Die Zeile "ld_kopano::postfix::hashes:" beschreibt das Handling für den Null-Sender. Fügen Sie nun die Zeile "<> smtp.meineschule.de" ein (Ergänzen Sie die smtp Adresse durch die von ihnen genutzte).
236
237 {{code language="bash"}}
238 ld_kopano::postfix::hashes:
239   '%{dir_etc}/sender_dependent_relayhost_maps_external.hash':
240     content: |
241       %{header}
242       <> smtp.meineschule.de
243       @meineschule.de smtp.meineschule.de
244 {{/code}}
245
246
Jens Gruber 3.1 247 ===== (% style="color:#000000" %)__**Public Folder erstellen**__(%%) =====
Jens Gruber 2.2 248
Jens Gruber 3.1 249 (% style="color:#000000" %)Es kann sich anbieten einen Public Folder als gemeinsamen Ordner für alle Benutzer zu erstellen. Hierfür müssen Sie folgenden Befehl eingeben:
Jens Gruber 2.2 250
251 {{code language="bash"}}
252 root@kopano-g1:~ # kopano-admin -s
253 {{/code}}
254
255
Jens Gruber 3.1 256 ===== (% style="color:#000000" %)__**Cronjob für Wartungsaufgaben**__(%%) =====
Jens Gruber 2.2 257
Jens Gruber 3.1 258 (% style="color:#000000" %)Durch das Anlegen eines zusätzlichen Cronjobs, lassen sich Wartungsaufgaben automatisch zu bestimmten Zeiten durchführen. Folgenden Cronjob können Sie bei Bedarf erstellen:
Jens Gruber 2.2 259
260 {{code language="bash"}}
261 # /etc/cron.d/kopano-optimization
262 */30 * * * * root [ -x /usr/sbin/kopano-admin ] && /usr/sbin/kopano-admin --sync 2>&1 >/dev/null
263 0 4 * * * root [ -x /usr/sbin/kopano-admin ] && /usr/sbin/kopano-admin --purge-softdelete 30 2>&1 >/dev/null
264 {{/code}}
265
266
Jens Gruber 3.1 267 ===== (% style="color:#000000" %)**__Netzlaufwerke auf der Kopano-Weboberfläche anzeigen__**(%%) =====
Jens Gruber 2.3 268
Christian Germann 11.1 269 (% style="color:#000000" %)Empfehlenswert ist das Einbinden der Netzlaufwerke H: P: T: des logoDIDACT-Servers auf der Kopano Weboberfläche. Gehen Sie wie folgt vor um den Nutzern dies zu ermöglichen:
Jens Gruber 2.3 270
271
Jens Gruber 3.1 272 (% style="color:#000000" %)Führen Sie den Sync über den kopano-admin durch:
Jens Gruber 2.3 273
274 {{code language="bash"}}
275 root@kopano-g1:~ # kopano-admin --sync
276 {{/code}}
277
Jens Gruber 3.1 278 (% style="color:#000000" %)Laden Sie folgendes Skript herunter:
Jens Gruber 2.3 279
280 {{code language="bash"}}
281 root@kopano-g1:~ # wget https://files.sbe.de/kopano/install-inject-shares.sh -O /tmp/install-inject-shares.sh
282 {{/code}}
283
Jens Gruber 3.1 284 (% style="color:#000000" %)Führen Sie das Skript aus:
Jens Gruber 2.3 285
286 {{code language="bash"}}
287 root@kopano-g1:~ # bash /tmp/install-inject-shares.sh
288 {{/code}}
289
Jens Gruber 3.1 290 (% style="color:#000000" %)Das Installationsskript legt einen CronJob an, der zyklisch einmal pro Tag die Netzlaufwerke für alle Kopano-Benutzer registriert. Dieser Vorgang kann unmittelbar nach der Installation durch die Eingabe von folgendem Befehl direkt angestoßen werden:
Jens Gruber 2.3 291
292 {{code language="bash"}}
293 root@kopano-g1:~ # inject-shares.sh
294 {{/code}}
295
Christian Germann 7.1 296 (% style="color:#000000" %)**__Hinweis:__** Falls beim Aufrufen des Skripts Mapi Fehler auftreten, bitte folgende Pakete installieren:(%%)
Jens Gruber 3.1 297
Jens Gruber 2.3 298
Jens Gruber 3.1 299 {{code language="bash"}}
300 python-mapi
301 python-kopano
302 python3-kopano-utils
303 kopano-python-utils
304 {{/code}}
305
306
307 ===== (% style="color:#000000" %)__**Synchronisation der Benutzer in das globale Adressbuch**__(%%) =====
308
309 (% style="color:#000000" %)Durch einen Cronjob ist es möglich Benutzer in das Globale Adressbuch einzupflegen. Hierbei handelt es sich um eine Erweiterung für die Kopano Outlook Extension, damit Benutzer mit Kopano-Postfach automatisch im Adressbuch anwählbar sind.
310
311 {{code language="bash"}}
312 root@kopano-g1:~ # chmod +x /etc/cron.daily/gabsync
313 {{/code}}
314
Christian Germann 4.1 315 (% style="color:#000000" %)__**Hinweis:**__ Dies stellt eine Erweiterung zum regulären ActiveSync-Protokoll durch Z-Push dar. Die Funktionsweise basiert auf einem synchronisierten Kontaktordner namens „Z-Push-KOE-GAB“ als Unterordner im Public Store / Öffentlichen Ordner.