<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki.hostsharing.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Peh</id>
	<title>Hostsharing Wiki - Benutzerbeiträge [de]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.hostsharing.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Peh"/>
	<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Spezial:Beitr%C3%A4ge/Peh"/>
	<updated>2026-04-28T16:36:40Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Redmine_im_Webspace&amp;diff=7404</id>
		<title>Redmine im Webspace</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Redmine_im_Webspace&amp;diff=7404"/>
		<updated>2025-07-31T11:52:31Z</updated>

		<summary type="html">&lt;p&gt;Peh: Link DMS geändert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Redmine ist eine umfangreiche Projektmanagement-Software.  Die Software ist multiprojektfähig und legt für jedes Projekt mehrere Werkzeuge an:&lt;br /&gt;
* Wiki&lt;br /&gt;
* Vorgangsverfolgung (Ticketsystem, Issue Tracker)&lt;br /&gt;
* Zeiterfassung&lt;br /&gt;
* Dokument- und Dateiverwaltung&lt;br /&gt;
* Foren&lt;br /&gt;
* Kalender, Gantt-Charts&lt;br /&gt;
* Schnittstelle zur Versionverwaltung (Git, Mercurial und weitere)&lt;br /&gt;
&lt;br /&gt;
Diese Anleitung beschreibt, wie man Redmine auf der Managed Hosting Plattform von Hostsharing installieren kann. Redmine lässt sich in jedem Managed Webspace betreiben.&lt;br /&gt;
&lt;br /&gt;
== Vorbereitungen ==&lt;br /&gt;
&lt;br /&gt;
Mit Hilfe von HSAdmin wird angelegt:&lt;br /&gt;
# Ein User als Service-User mit &#039;&#039;/bin/bash&#039;&#039; als Shell, zum Beispiel Beispiel: &#039;&#039;xyz00-redmine&#039;&#039;&lt;br /&gt;
# Eine Domain mit &#039;&#039;xyz00-redmine&#039;&#039; als Domain-Administrator, zum Beispiel &#039;&#039;prj.example.com&#039;&#039;&lt;br /&gt;
# Die Domain muss aktualisiert werden: Domainoption &#039;&#039;passenger&#039;&#039; einschalten, &#039;&#039;fastcgi&#039;&#039; ausschalten&lt;br /&gt;
# Einen Postgresql-User &#039;&#039;xyz00_dbuser&#039;&#039; mit Passwort &#039;&#039;meinPasswort&#039;&#039;&lt;br /&gt;
# Eine Postgresql-Datenbank &#039;&#039;xyz00_prjdb&#039;&#039; mit Datenbank-Owner &#039;&#039;xyz00_dbuser&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Ruby installieren ==&lt;br /&gt;
&lt;br /&gt;
Für Redmine 6.0.x habe ich Ruby 3.3.x installiert. Siehe dazu die Seite [[RubyRBEnv]]&lt;br /&gt;
&lt;br /&gt;
== Download, Entpacken, Konfiguration ==&lt;br /&gt;
&lt;br /&gt;
Anmeldung per ssh als User  &#039;&#039;xyz00-redmine&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
ssh xyz00-redmine@xyz00.hostsharing.net&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Auf dem Hostsharing-Server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
cd ~&lt;br /&gt;
mkdir data&lt;br /&gt;
chmod 700 data&lt;br /&gt;
wget http://www.redmine.org/releases/redmine-6.0.6.tar.gz&lt;br /&gt;
tar xzf redmine-6.0.6.tar.gz &lt;br /&gt;
cd ~/redmine-6.0.6/config&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anlegen der beiden Dateien &amp;quot;database.yml&amp;quot; und &amp;quot;configuration.yml&amp;quot; mit folgendem Inhalt:&lt;br /&gt;
&lt;br /&gt;
database.yml:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot; line&amp;gt;&lt;br /&gt;
production:&lt;br /&gt;
  adapter: postgresql&lt;br /&gt;
  database: xyz00_prjdb&lt;br /&gt;
  host: localhost&lt;br /&gt;
  username: xyz00_dbuser&lt;br /&gt;
  password: &amp;quot;meinPasswort&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
configuration.yml:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot; line&amp;gt;&lt;br /&gt;
default:&lt;br /&gt;
  email_delivery:&lt;br /&gt;
    delivery_method: :smtp&lt;br /&gt;
    smtp_settings:&lt;br /&gt;
      address: &amp;quot;127.0.0.1&amp;quot;&lt;br /&gt;
      port: 4025&lt;br /&gt;
      enable_starttls_auto: false&lt;br /&gt;
  attachments_storage_path: &amp;quot;/home/pacs/xyz00/users/redmine/data&amp;quot;&lt;br /&gt;
  autologin_cookie_name:&lt;br /&gt;
  autologin_cookie_path:&lt;br /&gt;
  autologin_cookie_secure:&lt;br /&gt;
  scm_subversion_command:&lt;br /&gt;
  scm_mercurial_command:&lt;br /&gt;
  scm_git_command:&lt;br /&gt;
  scm_cvs_command:&lt;br /&gt;
  scm_bazaar_command:&lt;br /&gt;
  scm_darcs_command:&lt;br /&gt;
  scm_subversion_path_regexp:&lt;br /&gt;
  scm_mercurial_path_regexp:&lt;br /&gt;
  scm_git_path_regexp:&lt;br /&gt;
  scm_cvs_path_regexp:&lt;br /&gt;
  scm_bazaar_path_regexp:&lt;br /&gt;
  scm_darcs_path_regexp:&lt;br /&gt;
  scm_filesystem_path_regexp:&lt;br /&gt;
  scm_stderr_log_file:&lt;br /&gt;
  database_cipher_key:&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Achtung: Die Einrückung muss immer genau um zwei Leerzeichen erfolgen!&lt;br /&gt;
&lt;br /&gt;
Der &amp;quot;attachments_storage_path&amp;quot; muss angepasst werden (&amp;quot;xyz00&amp;quot; und &amp;quot;redmine&amp;quot; durch den eigenen Webspace bzw. das eigene User-Postfix ersetzen). Wenn für den Webspace &amp;quot;Storage&amp;quot; gebucht ist, kann der Speicher nach &amp;quot;/home/storage/...&amp;quot; gelegt werden.&lt;br /&gt;
&lt;br /&gt;
== Redmine-Installation ==&lt;br /&gt;
&lt;br /&gt;
Weiterhin als &amp;quot;xyz00-redmine&amp;quot; auf dem Hostsharing-Server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
cd ~/redmine-6.0.6&lt;br /&gt;
bundle config --local path &#039;vendor/bundle&#039;&lt;br /&gt;
bundle config --local without &#039;development:test&#039;&lt;br /&gt;
bundle install&lt;br /&gt;
bundle exec rake generate_secret_token&lt;br /&gt;
RAILS_ENV=production bundle exec rake db:migrate&lt;br /&gt;
RAILS_ENV=production bundle exec rake redmine:load_default_data&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Weiter in der Shell:&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
cd ~/doms/prj.example.com/&lt;br /&gt;
rm -rf htdocs-ssl/ app-ssl/ subs/www/ subs-ssl/www/&lt;br /&gt;
ln -s $HOME/redmine-6.0.6 app-ssl&lt;br /&gt;
ln -s $HOME/redmine-6.0.6/public htdocs-ssl&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn alles gut gegangen ist, ist die Redmine-Installation unter&lt;br /&gt;
https://prj.example.com erreichbar. Beim ersten Login als User &amp;quot;admin&amp;quot; mit Passwort &amp;quot;admin&amp;quot; wird ein neues Passwort konfiguriert.&lt;br /&gt;
&lt;br /&gt;
Nach der Änderung des Admin-Passwort sollten einige Einstellungen im Bereich Administration/Konfiguration durchgesehen werden:&lt;br /&gt;
* im Bereich &amp;quot;Allgemein&amp;quot; der Applikationstitel, der Hostname und das Protokoll&lt;br /&gt;
* im Bereich &amp;quot;Mailbenachrichtigung&amp;quot; der E-Mail-Absender und die E-Mail-Fußzeile&lt;br /&gt;
&lt;br /&gt;
== Konfiguration von Sidekiq ==&lt;br /&gt;
&lt;br /&gt;
Für Hintergrundprozesse, zum Beispiel für den Versand von EMail-Benachrichtigungen, soltle man in einem produktiven System Sidekiq verwenden. Dazu müssen zwei Services konfiguriert werden: Redis und Sidekiq.&lt;br /&gt;
&lt;br /&gt;
Zur Konfiguration von Redis als Service siehe [[Redis]]. In der Besipielkonfiguration lauscht Redis auf localhost:33033.&lt;br /&gt;
&lt;br /&gt;
Wir machen diese Redis-URL dem Passenger-Prozess üder eine Environment-Variable bekannt. Dazu schreiben wir in eine Datei &lt;br /&gt;
&amp;quot;~/doms/prj.example.com/.htaccess&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot; line&amp;gt;&lt;br /&gt;
SetEnv REDIS_URL redis://:redispassword@127.0.0.1:33033/0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zur Installation von Sidekiq legen wir eine Datei &amp;quot;~/redmine-6.0.6/Gemfile.local&amp;quot; an. Der Inhalt ist:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot; line&amp;gt;&lt;br /&gt;
gem &#039;sidekiq&#039;&lt;br /&gt;
gem &amp;quot;redis&amp;quot;, &amp;quot;&amp;gt;= 4.0.1&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im Verzeichnis &amp;quot;~/redmine-6.0.6/&amp;quot; ausführen: &amp;quot;bundle install&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Sidekiq bekommt die Redis-URL über seine Unit-Definition:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot; line&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Sidekiq Service&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
WorkingDirectory=%h/redmine-6.0.6&lt;br /&gt;
Environment=&amp;quot;PATH=/usr/local/bin:/usr/bin:/bin&amp;quot;&lt;br /&gt;
Environment=&amp;quot;RAILS_ENV=production&amp;quot;&lt;br /&gt;
Environment=&amp;quot;REDIS_URL=redis://:redispassword@127.0.0.1:33033/0&amp;quot;&lt;br /&gt;
ExecStart=%h/.rbenv/shims/bundle exec sidekiq -q default -q mailers&lt;br /&gt;
StandardOutput=append:%h/var/log/sidekiq.out.log&lt;br /&gt;
StandardError=inherit&lt;br /&gt;
Restart=always&lt;br /&gt;
PrivateTmp=true&lt;br /&gt;
NoNewPrivileges=true&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=default.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nicht vergessen das Verzeichnis &amp;quot;~/var/log&amp;quot; anzulegen oder anzupassen.&lt;br /&gt;
&lt;br /&gt;
== eingehende E-Mails ==&lt;br /&gt;
&lt;br /&gt;
Wenn für eingehende E-Mail-Nachrichten jeweils ein Ticket angelegt werden soll, ist das über die Datei .forward möglich.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
# cat .forward &lt;br /&gt;
&amp;quot;|/home/pacs/xyz00/users/redmine/.rbenv/shims/ruby /home/pacs/xyz00/users/redmine/redmine-6.0.6/extra/mail_handler/rdm-mailhandler.rb --url=https://prj.example.com --key=******** --project=pppp --tracker=tttt --allow-override=all --unknown-user=create&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im Wiki des Redmine Projekt sind die Optionen des Skript &#039;rdm-mailhandler.rb&#039; beschrieben (siehe Links).&lt;br /&gt;
&lt;br /&gt;
== weitere Schritte ==&lt;br /&gt;
&lt;br /&gt;
Redmine ist ein stabiles Projektmanagement-Werkzeug. Es ist freie Software und weiterhin gepflegt. Die Benutzeroberfläche ist funktional. Sie macht aber einen etwas veralteten Eindruck.&lt;br /&gt;
&lt;br /&gt;
Es gibt einige Themes und Plugins, die diesen Nachteil teilweise kompensieren können:&lt;br /&gt;
* Das Theme &amp;quot;farend bleuclair&amp;quot; sorgt für einen frischeren Ersteindruck&lt;br /&gt;
* Ein Kanban Board ist als Plugin verfügbar&lt;br /&gt;
* ebenso kann ein  visueller Editor für das Wiki nachgerüstet werden&lt;br /&gt;
&lt;br /&gt;
Weiterhin ist es möglich, das Anlegen von Tickets für eingehende E-Mail-Nachrichten zu konfigurieren.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* [https://www.redmine.org/ Redmine Projekt]&lt;br /&gt;
* [https://www.redmine.org/projects/redmine/wiki/RedmineInstall Installationsanleitung]&lt;br /&gt;
* [https://github.com/farend/redmine_theme_farend_bleuclair Theme Farend Bleuclair]&lt;br /&gt;
* [https://github.com/jgraichen/redmine_dashboard Redmine Dashboard Plugin] oder [https://github.com/happy-se-life/kanban Kanban Board Plugin]&lt;br /&gt;
* [https://github.com/taqueci/redmine_wysiwyg_editor Wysiwyg Editor Plugin]&lt;br /&gt;
* [https://github.com/picman/redmine_dmsf Dokumentenverwaltung (DMS) mit WebDAV-Server und Volltextsuche]&lt;br /&gt;
* [https://www.redmine.org/projects/redmine/wiki/RedmineReceivingEmails Eingehende E-Mails verarbeiten]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[Kategorie:HSDoku]]&lt;br /&gt;
[[Kategorie:Installationsanleitungen]]&lt;br /&gt;
[[Kategorie:Software]]&lt;br /&gt;
[[Kategorie:Passenger]]&lt;br /&gt;
[[Kategorie:Projektverwaltung]]&lt;br /&gt;
[[Kategorie:Projektmanagement]]&lt;br /&gt;
[[Kategorie:WebDAV]]&lt;/div&gt;</summary>
		<author><name>Peh</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Redmine_in_Tomcat_installieren&amp;diff=7403</id>
		<title>Redmine in Tomcat installieren</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Redmine_in_Tomcat_installieren&amp;diff=7403"/>
		<updated>2025-07-31T11:47:28Z</updated>

		<summary type="html">&lt;p&gt;Peh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
{{Textkasten|gelb|veraltet|Wir empfehlen die Installation von Redmine mit Passenger: [[Redmine_im_Webspace]]. &lt;br /&gt;
&amp;quot;Ruby on Rails&amp;quot;-Anwendungen sind Stand heute nicht mit JRuby lauffähig.}}&lt;br /&gt;
&lt;br /&gt;
== Redmine im Tomcat installieren ==&lt;br /&gt;
&lt;br /&gt;
[http://redmine.org Redmine] ist ein Werkzeug zur Projektverwaltung - in erster Linie für Software-Entwicklungs-Projekte geeignet.&lt;br /&gt;
&lt;br /&gt;
Redmine ist in [http://www.ruby-lang.org/de/ Ruby] mit dem Framework [http://rubyonrails.org/ Ruby on Rails] programmiert. Es steht unter der [http://www.gnu.org/licenses/old-licenses/gpl-2.0.html|GNU General Public License v2] (GPL).&lt;br /&gt;
&lt;br /&gt;
Hier soll es als Beispiel dienen, wie man auf der [http://www.hostsharing.net Hostsharing]-Infrastruktur mit der Tomcat-Option Rails-Anwendungen betrieben kann.&lt;br /&gt;
&lt;br /&gt;
=== Vorbereitungen ===&lt;br /&gt;
&lt;br /&gt;
Ich brauche:&lt;br /&gt;
# die aktuelle Redmine Version von [http://www.redmine.org/projects/redmine/wiki/Download redmine.org] (zur Zeit Version 2.5.1)&lt;br /&gt;
# die aktuelle JRuby Version von [http://www.jruby.org/download jruby.org] (aktuell Version 1.7.11)&lt;br /&gt;
&lt;br /&gt;
=== Download und Entpacken ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
cd&lt;br /&gt;
mkdir tmp&lt;br /&gt;
cd tmp&lt;br /&gt;
wget http://jruby.org.s3.amazonaws.com/downloads/1.7.11/jruby-bin-1.7.11.tar.gz&lt;br /&gt;
wget http://www.redmine.org/releases/redmine-2.5.1.tar.gz&lt;br /&gt;
tar xzf jruby-bin-1.7.11.tar.gz&lt;br /&gt;
tar xzf redmine-2.5.1.tar.gz  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Datenbank anlegen und konfigurieren ===&lt;br /&gt;
&lt;br /&gt;
Die Datenbank wird mit HSAdmin angelegt.&lt;br /&gt;
&lt;br /&gt;
Auf der Kommandozeile könnte das so aussehen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
hsscript -u xyz00 -i&lt;br /&gt;
Password: ********&lt;br /&gt;
xyz00@hsadmin&amp;gt; mysqluser.add({set:{name:&#039;xyz00_dbadmin&#039;,password:&#039;geheim&#039;}})&lt;br /&gt;
xyz00@hsadmin&amp;gt; mysqldb.add({set:{name:&#039;xyz00_redmine&#039;,user:&#039;xyz00_dbadmin&#039;}})&lt;br /&gt;
xyz00@hsadmin&amp;gt; bye&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann wird die Datenbank in Redmine konfiguriert, indem die &amp;quot;Datei config/database.yml&amp;quot; in der entpackten&lt;br /&gt;
Redmine-Software angelegt. Inhalt der Datei:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot; line&amp;gt;&lt;br /&gt;
production:&lt;br /&gt;
    adapter: mysql&lt;br /&gt;
    database: xyz00_redmine&lt;br /&gt;
    host: localhost&lt;br /&gt;
    username: xyz00_dbadmin&lt;br /&gt;
    password: &amp;quot;geheim&amp;quot;&lt;br /&gt;
    encoding: utf8&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Bauen der Anwendung ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
cd $HOME/tmp/redmine-2.5.1&lt;br /&gt;
export PATH=$HOME/tmp/jruby-1.7.11/bin:$PATH&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zur Kontrolle (sollte das gem im bin-Verzeichnis der JRuby-Installation liefern):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
which gem&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann werden mit &amp;quot;bundler&amp;quot; die Abhängigkeiten aufgelöst und die Datenbank initialisiert:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
gem install bundler&lt;br /&gt;
bundle install --without development test&lt;br /&gt;
rake generate_secret_token&lt;br /&gt;
RAILS_ENV=production rake db:migrate&lt;br /&gt;
RAILS_ENV=production REDMINE_LANG=de rake redmine:load_default_data&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zum Schluss bauen wir eine Web-Applikation für den Tomcat Server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
gem install warbler&lt;br /&gt;
warble war&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installation im Tomcat ===&lt;br /&gt;
&lt;br /&gt;
Voraussetzung: Installierter Tomcat-Webserver&lt;br /&gt;
&lt;br /&gt;
Die war-Datei nach Wunsch umbennen (z.B. &amp;quot;redmine.war&amp;quot; oder auch &amp;quot;ROOT.war&amp;quot;) und ins webapps-Verzeichnis des Tomcat kopieren.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Veraltet]]&lt;/div&gt;</summary>
		<author><name>Peh</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Redmine_im_Webspace&amp;diff=7402</id>
		<title>Redmine im Webspace</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Redmine_im_Webspace&amp;diff=7402"/>
		<updated>2025-07-31T11:45:39Z</updated>

		<summary type="html">&lt;p&gt;Peh: fix sidekiq.service&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Redmine ist eine umfangreiche Projektmanagement-Software.  Die Software ist multiprojektfähig und legt für jedes Projekt mehrere Werkzeuge an:&lt;br /&gt;
* Wiki&lt;br /&gt;
* Vorgangsverfolgung (Ticketsystem, Issue Tracker)&lt;br /&gt;
* Zeiterfassung&lt;br /&gt;
* Dokument- und Dateiverwaltung&lt;br /&gt;
* Foren&lt;br /&gt;
* Kalender, Gantt-Charts&lt;br /&gt;
* Schnittstelle zur Versionverwaltung (Git, Mercurial und weitere)&lt;br /&gt;
&lt;br /&gt;
Diese Anleitung beschreibt, wie man Redmine auf der Managed Hosting Plattform von Hostsharing installieren kann. Redmine lässt sich in jedem Managed Webspace betreiben.&lt;br /&gt;
&lt;br /&gt;
== Vorbereitungen ==&lt;br /&gt;
&lt;br /&gt;
Mit Hilfe von HSAdmin wird angelegt:&lt;br /&gt;
# Ein User als Service-User mit &#039;&#039;/bin/bash&#039;&#039; als Shell, zum Beispiel Beispiel: &#039;&#039;xyz00-redmine&#039;&#039;&lt;br /&gt;
# Eine Domain mit &#039;&#039;xyz00-redmine&#039;&#039; als Domain-Administrator, zum Beispiel &#039;&#039;prj.example.com&#039;&#039;&lt;br /&gt;
# Die Domain muss aktualisiert werden: Domainoption &#039;&#039;passenger&#039;&#039; einschalten, &#039;&#039;fastcgi&#039;&#039; ausschalten&lt;br /&gt;
# Einen Postgresql-User &#039;&#039;xyz00_dbuser&#039;&#039; mit Passwort &#039;&#039;meinPasswort&#039;&#039;&lt;br /&gt;
# Eine Postgresql-Datenbank &#039;&#039;xyz00_prjdb&#039;&#039; mit Datenbank-Owner &#039;&#039;xyz00_dbuser&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Ruby installieren ==&lt;br /&gt;
&lt;br /&gt;
Für Redmine 6.0.x habe ich Ruby 3.3.x installiert. Siehe dazu die Seite [[RubyRBEnv]]&lt;br /&gt;
&lt;br /&gt;
== Download, Entpacken, Konfiguration ==&lt;br /&gt;
&lt;br /&gt;
Anmeldung per ssh als User  &#039;&#039;xyz00-redmine&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
ssh xyz00-redmine@xyz00.hostsharing.net&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Auf dem Hostsharing-Server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
cd ~&lt;br /&gt;
mkdir data&lt;br /&gt;
chmod 700 data&lt;br /&gt;
wget http://www.redmine.org/releases/redmine-6.0.6.tar.gz&lt;br /&gt;
tar xzf redmine-6.0.6.tar.gz &lt;br /&gt;
cd ~/redmine-6.0.6/config&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anlegen der beiden Dateien &amp;quot;database.yml&amp;quot; und &amp;quot;configuration.yml&amp;quot; mit folgendem Inhalt:&lt;br /&gt;
&lt;br /&gt;
database.yml:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot; line&amp;gt;&lt;br /&gt;
production:&lt;br /&gt;
  adapter: postgresql&lt;br /&gt;
  database: xyz00_prjdb&lt;br /&gt;
  host: localhost&lt;br /&gt;
  username: xyz00_dbuser&lt;br /&gt;
  password: &amp;quot;meinPasswort&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
configuration.yml:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot; line&amp;gt;&lt;br /&gt;
default:&lt;br /&gt;
  email_delivery:&lt;br /&gt;
    delivery_method: :smtp&lt;br /&gt;
    smtp_settings:&lt;br /&gt;
      address: &amp;quot;127.0.0.1&amp;quot;&lt;br /&gt;
      port: 4025&lt;br /&gt;
      enable_starttls_auto: false&lt;br /&gt;
  attachments_storage_path: &amp;quot;/home/pacs/xyz00/users/redmine/data&amp;quot;&lt;br /&gt;
  autologin_cookie_name:&lt;br /&gt;
  autologin_cookie_path:&lt;br /&gt;
  autologin_cookie_secure:&lt;br /&gt;
  scm_subversion_command:&lt;br /&gt;
  scm_mercurial_command:&lt;br /&gt;
  scm_git_command:&lt;br /&gt;
  scm_cvs_command:&lt;br /&gt;
  scm_bazaar_command:&lt;br /&gt;
  scm_darcs_command:&lt;br /&gt;
  scm_subversion_path_regexp:&lt;br /&gt;
  scm_mercurial_path_regexp:&lt;br /&gt;
  scm_git_path_regexp:&lt;br /&gt;
  scm_cvs_path_regexp:&lt;br /&gt;
  scm_bazaar_path_regexp:&lt;br /&gt;
  scm_darcs_path_regexp:&lt;br /&gt;
  scm_filesystem_path_regexp:&lt;br /&gt;
  scm_stderr_log_file:&lt;br /&gt;
  database_cipher_key:&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Achtung: Die Einrückung muss immer genau um zwei Leerzeichen erfolgen!&lt;br /&gt;
&lt;br /&gt;
Der &amp;quot;attachments_storage_path&amp;quot; muss angepasst werden (&amp;quot;xyz00&amp;quot; und &amp;quot;redmine&amp;quot; durch den eigenen Webspace bzw. das eigene User-Postfix ersetzen). Wenn für den Webspace &amp;quot;Storage&amp;quot; gebucht ist, kann der Speicher nach &amp;quot;/home/storage/...&amp;quot; gelegt werden.&lt;br /&gt;
&lt;br /&gt;
== Redmine-Installation ==&lt;br /&gt;
&lt;br /&gt;
Weiterhin als &amp;quot;xyz00-redmine&amp;quot; auf dem Hostsharing-Server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
cd ~/redmine-6.0.6&lt;br /&gt;
bundle config --local path &#039;vendor/bundle&#039;&lt;br /&gt;
bundle config --local without &#039;development:test&#039;&lt;br /&gt;
bundle install&lt;br /&gt;
bundle exec rake generate_secret_token&lt;br /&gt;
RAILS_ENV=production bundle exec rake db:migrate&lt;br /&gt;
RAILS_ENV=production bundle exec rake redmine:load_default_data&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Weiter in der Shell:&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
cd ~/doms/prj.example.com/&lt;br /&gt;
rm -rf htdocs-ssl/ app-ssl/ subs/www/ subs-ssl/www/&lt;br /&gt;
ln -s $HOME/redmine-6.0.6 app-ssl&lt;br /&gt;
ln -s $HOME/redmine-6.0.6/public htdocs-ssl&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn alles gut gegangen ist, ist die Redmine-Installation unter&lt;br /&gt;
https://prj.example.com erreichbar. Beim ersten Login als User &amp;quot;admin&amp;quot; mit Passwort &amp;quot;admin&amp;quot; wird ein neues Passwort konfiguriert.&lt;br /&gt;
&lt;br /&gt;
Nach der Änderung des Admin-Passwort sollten einige Einstellungen im Bereich Administration/Konfiguration durchgesehen werden:&lt;br /&gt;
* im Bereich &amp;quot;Allgemein&amp;quot; der Applikationstitel, der Hostname und das Protokoll&lt;br /&gt;
* im Bereich &amp;quot;Mailbenachrichtigung&amp;quot; der E-Mail-Absender und die E-Mail-Fußzeile&lt;br /&gt;
&lt;br /&gt;
== Konfiguration von Sidekiq ==&lt;br /&gt;
&lt;br /&gt;
Für Hintergrundprozesse, zum Beispiel für den Versand von EMail-Benachrichtigungen, soltle man in einem produktiven System Sidekiq verwenden. Dazu müssen zwei Services konfiguriert werden: Redis und Sidekiq.&lt;br /&gt;
&lt;br /&gt;
Zur Konfiguration von Redis als Service siehe [[Redis]]. In der Besipielkonfiguration lauscht Redis auf localhost:33033.&lt;br /&gt;
&lt;br /&gt;
Wir machen diese Redis-URL dem Passenger-Prozess üder eine Environment-Variable bekannt. Dazu schreiben wir in eine Datei &lt;br /&gt;
&amp;quot;~/doms/prj.example.com/.htaccess&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot; line&amp;gt;&lt;br /&gt;
SetEnv REDIS_URL redis://:redispassword@127.0.0.1:33033/0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zur Installation von Sidekiq legen wir eine Datei &amp;quot;~/redmine-6.0.6/Gemfile.local&amp;quot; an. Der Inhalt ist:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot; line&amp;gt;&lt;br /&gt;
gem &#039;sidekiq&#039;&lt;br /&gt;
gem &amp;quot;redis&amp;quot;, &amp;quot;&amp;gt;= 4.0.1&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im Verzeichnis &amp;quot;~/redmine-6.0.6/&amp;quot; ausführen: &amp;quot;bundle install&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Sidekiq bekommt die Redis-URL über seine Unit-Definition:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot; line&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Sidekiq Service&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
WorkingDirectory=%h/redmine-6.0.6&lt;br /&gt;
Environment=&amp;quot;PATH=/usr/local/bin:/usr/bin:/bin&amp;quot;&lt;br /&gt;
Environment=&amp;quot;RAILS_ENV=production&amp;quot;&lt;br /&gt;
Environment=&amp;quot;REDIS_URL=redis://:redispassword@127.0.0.1:33033/0&amp;quot;&lt;br /&gt;
ExecStart=%h/.rbenv/shims/bundle exec sidekiq -q default -q mailers&lt;br /&gt;
StandardOutput=append:%h/var/log/sidekiq.out.log&lt;br /&gt;
StandardError=inherit&lt;br /&gt;
Restart=always&lt;br /&gt;
PrivateTmp=true&lt;br /&gt;
NoNewPrivileges=true&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=default.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nicht vergessen das Verzeichnis &amp;quot;~/var/log&amp;quot; anzulegen oder anzupassen.&lt;br /&gt;
&lt;br /&gt;
== eingehende E-Mails ==&lt;br /&gt;
&lt;br /&gt;
Wenn für eingehende E-Mail-Nachrichten jeweils ein Ticket angelegt werden soll, ist das über die Datei .forward möglich.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
# cat .forward &lt;br /&gt;
&amp;quot;|/home/pacs/xyz00/users/redmine/.rbenv/shims/ruby /home/pacs/xyz00/users/redmine/redmine-6.0.6/extra/mail_handler/rdm-mailhandler.rb --url=https://prj.example.com --key=******** --project=pppp --tracker=tttt --allow-override=all --unknown-user=create&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im Wiki des Redmine Projekt sind die Optionen des Skript &#039;rdm-mailhandler.rb&#039; beschrieben (siehe Links).&lt;br /&gt;
&lt;br /&gt;
== weitere Schritte ==&lt;br /&gt;
&lt;br /&gt;
Redmine ist ein stabiles Projektmanagement-Werkzeug. Es ist freie Software und weiterhin gepflegt. Die Benutzeroberfläche ist funktional. Sie macht aber einen etwas veralteten Eindruck.&lt;br /&gt;
&lt;br /&gt;
Es gibt einige Themes und Plugins, die diesen Nachteil teilweise kompensieren können:&lt;br /&gt;
* Das Theme &amp;quot;farend bleuclair&amp;quot; sorgt für einen frischeren Ersteindruck&lt;br /&gt;
* Ein Kanban Board ist als Plugin verfügbar&lt;br /&gt;
* ebenso kann ein  visueller Editor für das Wiki nachgerüstet werden&lt;br /&gt;
&lt;br /&gt;
Weiterhin ist es möglich, das Anlegen von Tickets für eingehende E-Mail-Nachrichten zu konfigurieren.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* [https://www.redmine.org/ Redmine Projekt]&lt;br /&gt;
* [https://www.redmine.org/projects/redmine/wiki/RedmineInstall Installationsanleitung]&lt;br /&gt;
* [https://github.com/farend/redmine_theme_farend_bleuclair Theme Farend Bleuclair]&lt;br /&gt;
* [https://github.com/jgraichen/redmine_dashboard Redmine Dashboard Plugin] oder [https://github.com/happy-se-life/kanban Kanban Board Plugin]&lt;br /&gt;
* [https://github.com/taqueci/redmine_wysiwyg_editor Wysiwyg Editor Plugin]&lt;br /&gt;
* [https://github.com/danmunn/redmine_dmsf Dokumentenverwaltung (DMS) mit WebDAV-Server und Volltextsuche]&lt;br /&gt;
* [https://www.redmine.org/projects/redmine/wiki/RedmineReceivingEmails Eingehende E-Mails verarbeiten]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[Kategorie:HSDoku]]&lt;br /&gt;
[[Kategorie:Installationsanleitungen]]&lt;br /&gt;
[[Kategorie:Software]]&lt;br /&gt;
[[Kategorie:Passenger]]&lt;br /&gt;
[[Kategorie:Projektverwaltung]]&lt;br /&gt;
[[Kategorie:Projektmanagement]]&lt;br /&gt;
[[Kategorie:WebDAV]]&lt;/div&gt;</summary>
		<author><name>Peh</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Redmine_im_Webspace&amp;diff=7401</id>
		<title>Redmine im Webspace</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Redmine_im_Webspace&amp;diff=7401"/>
		<updated>2025-07-31T11:34:12Z</updated>

		<summary type="html">&lt;p&gt;Peh: EMail Empfang über Skript und API&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Redmine ist eine umfangreiche Projektmanagement-Software.  Die Software ist multiprojektfähig und legt für jedes Projekt mehrere Werkzeuge an:&lt;br /&gt;
* Wiki&lt;br /&gt;
* Vorgangsverfolgung (Ticketsystem, Issue Tracker)&lt;br /&gt;
* Zeiterfassung&lt;br /&gt;
* Dokument- und Dateiverwaltung&lt;br /&gt;
* Foren&lt;br /&gt;
* Kalender, Gantt-Charts&lt;br /&gt;
* Schnittstelle zur Versionverwaltung (Git, Mercurial und weitere)&lt;br /&gt;
&lt;br /&gt;
Diese Anleitung beschreibt, wie man Redmine auf der Managed Hosting Plattform von Hostsharing installieren kann. Redmine lässt sich in jedem Managed Webspace betreiben.&lt;br /&gt;
&lt;br /&gt;
== Vorbereitungen ==&lt;br /&gt;
&lt;br /&gt;
Mit Hilfe von HSAdmin wird angelegt:&lt;br /&gt;
# Ein User als Service-User mit &#039;&#039;/bin/bash&#039;&#039; als Shell, zum Beispiel Beispiel: &#039;&#039;xyz00-redmine&#039;&#039;&lt;br /&gt;
# Eine Domain mit &#039;&#039;xyz00-redmine&#039;&#039; als Domain-Administrator, zum Beispiel &#039;&#039;prj.example.com&#039;&#039;&lt;br /&gt;
# Die Domain muss aktualisiert werden: Domainoption &#039;&#039;passenger&#039;&#039; einschalten, &#039;&#039;fastcgi&#039;&#039; ausschalten&lt;br /&gt;
# Einen Postgresql-User &#039;&#039;xyz00_dbuser&#039;&#039; mit Passwort &#039;&#039;meinPasswort&#039;&#039;&lt;br /&gt;
# Eine Postgresql-Datenbank &#039;&#039;xyz00_prjdb&#039;&#039; mit Datenbank-Owner &#039;&#039;xyz00_dbuser&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Ruby installieren ==&lt;br /&gt;
&lt;br /&gt;
Für Redmine 6.0.x habe ich Ruby 3.3.x installiert. Siehe dazu die Seite [[RubyRBEnv]]&lt;br /&gt;
&lt;br /&gt;
== Download, Entpacken, Konfiguration ==&lt;br /&gt;
&lt;br /&gt;
Anmeldung per ssh als User  &#039;&#039;xyz00-redmine&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
ssh xyz00-redmine@xyz00.hostsharing.net&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Auf dem Hostsharing-Server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
cd ~&lt;br /&gt;
mkdir data&lt;br /&gt;
chmod 700 data&lt;br /&gt;
wget http://www.redmine.org/releases/redmine-6.0.6.tar.gz&lt;br /&gt;
tar xzf redmine-6.0.6.tar.gz &lt;br /&gt;
cd ~/redmine-6.0.6/config&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anlegen der beiden Dateien &amp;quot;database.yml&amp;quot; und &amp;quot;configuration.yml&amp;quot; mit folgendem Inhalt:&lt;br /&gt;
&lt;br /&gt;
database.yml:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot; line&amp;gt;&lt;br /&gt;
production:&lt;br /&gt;
  adapter: postgresql&lt;br /&gt;
  database: xyz00_prjdb&lt;br /&gt;
  host: localhost&lt;br /&gt;
  username: xyz00_dbuser&lt;br /&gt;
  password: &amp;quot;meinPasswort&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
configuration.yml:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot; line&amp;gt;&lt;br /&gt;
default:&lt;br /&gt;
  email_delivery:&lt;br /&gt;
    delivery_method: :smtp&lt;br /&gt;
    smtp_settings:&lt;br /&gt;
      address: &amp;quot;127.0.0.1&amp;quot;&lt;br /&gt;
      port: 4025&lt;br /&gt;
      enable_starttls_auto: false&lt;br /&gt;
  attachments_storage_path: &amp;quot;/home/pacs/xyz00/users/redmine/data&amp;quot;&lt;br /&gt;
  autologin_cookie_name:&lt;br /&gt;
  autologin_cookie_path:&lt;br /&gt;
  autologin_cookie_secure:&lt;br /&gt;
  scm_subversion_command:&lt;br /&gt;
  scm_mercurial_command:&lt;br /&gt;
  scm_git_command:&lt;br /&gt;
  scm_cvs_command:&lt;br /&gt;
  scm_bazaar_command:&lt;br /&gt;
  scm_darcs_command:&lt;br /&gt;
  scm_subversion_path_regexp:&lt;br /&gt;
  scm_mercurial_path_regexp:&lt;br /&gt;
  scm_git_path_regexp:&lt;br /&gt;
  scm_cvs_path_regexp:&lt;br /&gt;
  scm_bazaar_path_regexp:&lt;br /&gt;
  scm_darcs_path_regexp:&lt;br /&gt;
  scm_filesystem_path_regexp:&lt;br /&gt;
  scm_stderr_log_file:&lt;br /&gt;
  database_cipher_key:&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Achtung: Die Einrückung muss immer genau um zwei Leerzeichen erfolgen!&lt;br /&gt;
&lt;br /&gt;
Der &amp;quot;attachments_storage_path&amp;quot; muss angepasst werden (&amp;quot;xyz00&amp;quot; und &amp;quot;redmine&amp;quot; durch den eigenen Webspace bzw. das eigene User-Postfix ersetzen). Wenn für den Webspace &amp;quot;Storage&amp;quot; gebucht ist, kann der Speicher nach &amp;quot;/home/storage/...&amp;quot; gelegt werden.&lt;br /&gt;
&lt;br /&gt;
== Redmine-Installation ==&lt;br /&gt;
&lt;br /&gt;
Weiterhin als &amp;quot;xyz00-redmine&amp;quot; auf dem Hostsharing-Server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
cd ~/redmine-6.0.6&lt;br /&gt;
bundle config --local path &#039;vendor/bundle&#039;&lt;br /&gt;
bundle config --local without &#039;development:test&#039;&lt;br /&gt;
bundle install&lt;br /&gt;
bundle exec rake generate_secret_token&lt;br /&gt;
RAILS_ENV=production bundle exec rake db:migrate&lt;br /&gt;
RAILS_ENV=production bundle exec rake redmine:load_default_data&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Weiter in der Shell:&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
cd ~/doms/prj.example.com/&lt;br /&gt;
rm -rf htdocs-ssl/ app-ssl/ subs/www/ subs-ssl/www/&lt;br /&gt;
ln -s $HOME/redmine-6.0.6 app-ssl&lt;br /&gt;
ln -s $HOME/redmine-6.0.6/public htdocs-ssl&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn alles gut gegangen ist, ist die Redmine-Installation unter&lt;br /&gt;
https://prj.example.com erreichbar. Beim ersten Login als User &amp;quot;admin&amp;quot; mit Passwort &amp;quot;admin&amp;quot; wird ein neues Passwort konfiguriert.&lt;br /&gt;
&lt;br /&gt;
Nach der Änderung des Admin-Passwort sollten einige Einstellungen im Bereich Administration/Konfiguration durchgesehen werden:&lt;br /&gt;
* im Bereich &amp;quot;Allgemein&amp;quot; der Applikationstitel, der Hostname und das Protokoll&lt;br /&gt;
* im Bereich &amp;quot;Mailbenachrichtigung&amp;quot; der E-Mail-Absender und die E-Mail-Fußzeile&lt;br /&gt;
&lt;br /&gt;
== Konfiguration von Sidekiq ==&lt;br /&gt;
&lt;br /&gt;
Für Hintergrundprozesse, zum Beispiel für den Versand von EMail-Benachrichtigungen, soltle man in einem produktiven System Sidekiq verwenden. Dazu müssen zwei Services konfiguriert werden: Redis und Sidekiq.&lt;br /&gt;
&lt;br /&gt;
Zur Konfiguration von Redis als Service siehe [[Redis]]. In der Besipielkonfiguration lauscht Redis auf localhost:33033.&lt;br /&gt;
&lt;br /&gt;
Wir machen diese Redis-URL dem Passenger-Prozess üder eine Environment-Variable bekannt. Dazu schreiben wir in eine Datei &lt;br /&gt;
&amp;quot;~/doms/prj.example.com/.htaccess&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot; line&amp;gt;&lt;br /&gt;
SetEnv REDIS_URL redis://:redispassword@127.0.0.1:33033/0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zur Installation von Sidekiq legen wir eine Datei &amp;quot;~/redmine-6.0.6/Gemfile.local&amp;quot; an. Der Inhalt ist:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot; line&amp;gt;&lt;br /&gt;
gem &#039;sidekiq&#039;&lt;br /&gt;
gem &amp;quot;redis&amp;quot;, &amp;quot;&amp;gt;= 4.0.1&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im Verzeichnis &amp;quot;~/redmine-6.0.6/&amp;quot; ausführen: &amp;quot;bundle install&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Sidekiq bekommt die Redis-URL über seine Unit-Definition:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot; line&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Sidekiq Service&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
WorkingDirectory=%h/redmine-6.0.6&lt;br /&gt;
Environment=&amp;quot;PATH=/usr/local/bin:/usr/bin:/bin&amp;quot;&lt;br /&gt;
Environment=&amp;quot;RAILS_ENV=production&amp;quot;&lt;br /&gt;
Environment=&amp;quot;REDIS_URL=redis://:redispassword@127.0.0.1:33033/0&amp;quot;&lt;br /&gt;
ExecStart=%h/.rbenv/shims/bundle exec sidekiq -q default -q mailers&lt;br /&gt;
StandardOutput=append:%h/var/log/sidekiq.out.log&lt;br /&gt;
StandardError=inherit&lt;br /&gt;
Restart=always&lt;br /&gt;
PrivateTmp=true&lt;br /&gt;
NoNewPrivileges=true&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=default.target&lt;br /&gt;
After=redis.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nicht vergessen das Verzeichnis &amp;quot;~/var/log&amp;quot; anzulegen oder anzupassen.&lt;br /&gt;
&lt;br /&gt;
== eingehende E-Mails ==&lt;br /&gt;
&lt;br /&gt;
Wenn für eingehende E-Mail-Nachrichten jeweils ein Ticket angelegt werden soll, ist das über die Datei .forward möglich.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
# cat .forward &lt;br /&gt;
&amp;quot;|/home/pacs/xyz00/users/redmine/.rbenv/shims/ruby /home/pacs/xyz00/users/redmine/redmine-6.0.6/extra/mail_handler/rdm-mailhandler.rb --url=https://prj.example.com --key=******** --project=pppp --tracker=tttt --allow-override=all --unknown-user=create&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im Wiki des Redmine Projekt sind die Optionen des Skript &#039;rdm-mailhandler.rb&#039; beschrieben (siehe Links).&lt;br /&gt;
&lt;br /&gt;
== weitere Schritte ==&lt;br /&gt;
&lt;br /&gt;
Redmine ist ein stabiles Projektmanagement-Werkzeug. Es ist freie Software und weiterhin gepflegt. Die Benutzeroberfläche ist funktional. Sie macht aber einen etwas veralteten Eindruck.&lt;br /&gt;
&lt;br /&gt;
Es gibt einige Themes und Plugins, die diesen Nachteil teilweise kompensieren können:&lt;br /&gt;
* Das Theme &amp;quot;farend bleuclair&amp;quot; sorgt für einen frischeren Ersteindruck&lt;br /&gt;
* Ein Kanban Board ist als Plugin verfügbar&lt;br /&gt;
* ebenso kann ein  visueller Editor für das Wiki nachgerüstet werden&lt;br /&gt;
&lt;br /&gt;
Weiterhin ist es möglich, das Anlegen von Tickets für eingehende E-Mail-Nachrichten zu konfigurieren.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* [https://www.redmine.org/ Redmine Projekt]&lt;br /&gt;
* [https://www.redmine.org/projects/redmine/wiki/RedmineInstall Installationsanleitung]&lt;br /&gt;
* [https://github.com/farend/redmine_theme_farend_bleuclair Theme Farend Bleuclair]&lt;br /&gt;
* [https://github.com/jgraichen/redmine_dashboard Redmine Dashboard Plugin] oder [https://github.com/happy-se-life/kanban Kanban Board Plugin]&lt;br /&gt;
* [https://github.com/taqueci/redmine_wysiwyg_editor Wysiwyg Editor Plugin]&lt;br /&gt;
* [https://github.com/danmunn/redmine_dmsf Dokumentenverwaltung (DMS) mit WebDAV-Server und Volltextsuche]&lt;br /&gt;
* [https://www.redmine.org/projects/redmine/wiki/RedmineReceivingEmails Eingehende E-Mails verarbeiten]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[Kategorie:HSDoku]]&lt;br /&gt;
[[Kategorie:Installationsanleitungen]]&lt;br /&gt;
[[Kategorie:Software]]&lt;br /&gt;
[[Kategorie:Passenger]]&lt;br /&gt;
[[Kategorie:Projektverwaltung]]&lt;br /&gt;
[[Kategorie:Projektmanagement]]&lt;br /&gt;
[[Kategorie:WebDAV]]&lt;/div&gt;</summary>
		<author><name>Peh</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Redmine_im_Webspace&amp;diff=7400</id>
		<title>Redmine im Webspace</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Redmine_im_Webspace&amp;diff=7400"/>
		<updated>2025-07-30T20:11:20Z</updated>

		<summary type="html">&lt;p&gt;Peh: /* Konfiguration von Sidekiq */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Redmine ist eine umfangreiche Projektmanagement-Software.  Die Software ist multiprojektfähig und legt für jedes Projekt mehrere Werkzeuge an:&lt;br /&gt;
* Wiki&lt;br /&gt;
* Vorgangsverfolgung (Ticketsystem, Issue Tracker)&lt;br /&gt;
* Zeiterfassung&lt;br /&gt;
* Dokument- und Dateiverwaltung&lt;br /&gt;
* Foren&lt;br /&gt;
* Kalender, Gantt-Charts&lt;br /&gt;
* Schnittstelle zur Versionverwaltung (Git, Mercurial und weitere)&lt;br /&gt;
&lt;br /&gt;
Diese Anleitung beschreibt, wie man Redmine auf der Managed Hosting Plattform von Hostsharing installieren kann. Redmine lässt sich in jedem Managed Webspace betreiben.&lt;br /&gt;
&lt;br /&gt;
== Vorbereitungen ==&lt;br /&gt;
&lt;br /&gt;
Mit Hilfe von HSAdmin wird angelegt:&lt;br /&gt;
# Ein User als Service-User mit &#039;&#039;/bin/bash&#039;&#039; als Shell, zum Beispiel Beispiel: &#039;&#039;xyz00-redmine&#039;&#039;&lt;br /&gt;
# Eine Domain mit &#039;&#039;xyz00-redmine&#039;&#039; als Domain-Administrator, zum Beispiel &#039;&#039;prj.example.com&#039;&#039;&lt;br /&gt;
# Die Domain muss aktualisiert werden: Domainoption &#039;&#039;passenger&#039;&#039; einschalten, &#039;&#039;fastcgi&#039;&#039; ausschalten&lt;br /&gt;
# Einen Postgresql-User &#039;&#039;xyz00_dbuser&#039;&#039; mit Passwort &#039;&#039;meinPasswort&#039;&#039;&lt;br /&gt;
# Eine Postgresql-Datenbank &#039;&#039;xyz00_prjdb&#039;&#039; mit Datenbank-Owner &#039;&#039;xyz00_dbuser&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Ruby installieren ==&lt;br /&gt;
&lt;br /&gt;
Für Redmine 6.0.x habe ich Ruby 3.3.x installiert. Siehe dazu die Seite [[RubyRBEnv]]&lt;br /&gt;
&lt;br /&gt;
== Download, Entpacken, Konfiguration ==&lt;br /&gt;
&lt;br /&gt;
Anmeldung per ssh als User  &#039;&#039;xyz00-redmine&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
ssh xyz00-redmine@xyz00.hostsharing.net&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Auf dem Hostsharing-Server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
cd ~&lt;br /&gt;
mkdir data&lt;br /&gt;
chmod 700 data&lt;br /&gt;
wget http://www.redmine.org/releases/redmine-6.0.6.tar.gz&lt;br /&gt;
tar xzf redmine-6.0.6.tar.gz &lt;br /&gt;
cd ~/redmine-6.0.6/config&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anlegen der beiden Dateien &amp;quot;database.yml&amp;quot; und &amp;quot;configuration.yml&amp;quot; mit folgendem Inhalt:&lt;br /&gt;
&lt;br /&gt;
database.yml:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot; line&amp;gt;&lt;br /&gt;
production:&lt;br /&gt;
  adapter: postgresql&lt;br /&gt;
  database: xyz00_prjdb&lt;br /&gt;
  host: localhost&lt;br /&gt;
  username: xyz00_dbuser&lt;br /&gt;
  password: &amp;quot;meinPasswort&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
configuration.yml:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot; line&amp;gt;&lt;br /&gt;
default:&lt;br /&gt;
  email_delivery:&lt;br /&gt;
    delivery_method: :smtp&lt;br /&gt;
    smtp_settings:&lt;br /&gt;
      address: &amp;quot;127.0.0.1&amp;quot;&lt;br /&gt;
      port: 4025&lt;br /&gt;
      enable_starttls_auto: false&lt;br /&gt;
  attachments_storage_path: &amp;quot;/home/pacs/xyz00/users/redmine/data&amp;quot;&lt;br /&gt;
  autologin_cookie_name:&lt;br /&gt;
  autologin_cookie_path:&lt;br /&gt;
  autologin_cookie_secure:&lt;br /&gt;
  scm_subversion_command:&lt;br /&gt;
  scm_mercurial_command:&lt;br /&gt;
  scm_git_command:&lt;br /&gt;
  scm_cvs_command:&lt;br /&gt;
  scm_bazaar_command:&lt;br /&gt;
  scm_darcs_command:&lt;br /&gt;
  scm_subversion_path_regexp:&lt;br /&gt;
  scm_mercurial_path_regexp:&lt;br /&gt;
  scm_git_path_regexp:&lt;br /&gt;
  scm_cvs_path_regexp:&lt;br /&gt;
  scm_bazaar_path_regexp:&lt;br /&gt;
  scm_darcs_path_regexp:&lt;br /&gt;
  scm_filesystem_path_regexp:&lt;br /&gt;
  scm_stderr_log_file:&lt;br /&gt;
  database_cipher_key:&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Achtung: Die Einrückung muss immer genau um zwei Leerzeichen erfolgen!&lt;br /&gt;
&lt;br /&gt;
Der &amp;quot;attachments_storage_path&amp;quot; muss angepasst werden (&amp;quot;xyz00&amp;quot; und &amp;quot;redmine&amp;quot; durch den eigenen Webspace bzw. das eigene User-Postfix ersetzen). Wenn für den Webspace &amp;quot;Storage&amp;quot; gebucht ist, kann der Speicher nach &amp;quot;/home/storage/...&amp;quot; gelegt werden.&lt;br /&gt;
&lt;br /&gt;
== Redmine-Installation ==&lt;br /&gt;
&lt;br /&gt;
Weiterhin als &amp;quot;xyz00-redmine&amp;quot; auf dem Hostsharing-Server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
cd ~/redmine-6.0.6&lt;br /&gt;
bundle config --local path &#039;vendor/bundle&#039;&lt;br /&gt;
bundle config --local without &#039;development:test&#039;&lt;br /&gt;
bundle install&lt;br /&gt;
bundle exec rake generate_secret_token&lt;br /&gt;
RAILS_ENV=production bundle exec rake db:migrate&lt;br /&gt;
RAILS_ENV=production bundle exec rake redmine:load_default_data&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Weiter in der Shell:&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
cd ~/doms/prj.example.com/&lt;br /&gt;
rm -rf htdocs-ssl/ app-ssl/ subs/www/ subs-ssl/www/&lt;br /&gt;
ln -s $HOME/redmine-6.0.6 app-ssl&lt;br /&gt;
ln -s $HOME/redmine-6.0.6/public htdocs-ssl&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn alles gut gegangen ist, ist die Redmine-Installation unter&lt;br /&gt;
https://prj.example.com erreichbar. Beim ersten Login als User &amp;quot;admin&amp;quot; mit Passwort &amp;quot;admin&amp;quot; wird ein neues Passwort konfiguriert.&lt;br /&gt;
&lt;br /&gt;
Nach der Änderung des Admin-Passwort sollten einige Einstellungen im Bereich Administration/Konfiguration durchgesehen werden:&lt;br /&gt;
* im Bereich &amp;quot;Allgemein&amp;quot; der Applikationstitel, der Hostname und das Protokoll&lt;br /&gt;
* im Bereich &amp;quot;Mailbenachrichtigung&amp;quot; der E-Mail-Absender und die E-Mail-Fußzeile&lt;br /&gt;
&lt;br /&gt;
== Konfiguration von Sidekiq ==&lt;br /&gt;
&lt;br /&gt;
Für Hintergrundprozesse, zum Beispiel für den Versand von EMail-Benachrichtigungen, soltle man in einem produktiven System Sidekiq verwenden. Dazu müssen zwei Services konfiguriert werden: Redis und Sidekiq.&lt;br /&gt;
&lt;br /&gt;
Zur Konfiguration von Redis als Service siehe [[Redis]]. In der Besipielkonfiguration lauscht Redis auf localhost:33033.&lt;br /&gt;
&lt;br /&gt;
Wir machen diese Redis-URL dem Passenger-Prozess üder eine Environment-Variable bekannt. Dazu schreiben wir in eine Datei &lt;br /&gt;
&amp;quot;~/doms/prj.example.com/.htaccess&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot; line&amp;gt;&lt;br /&gt;
SetEnv REDIS_URL redis://:redispassword@127.0.0.1:33033/0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zur Installation von Sidekiq legen wir eine Datei &amp;quot;~/redmine-6.0.6/Gemfile.local&amp;quot; an. Der Inhalt ist:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot; line&amp;gt;&lt;br /&gt;
gem &#039;sidekiq&#039;&lt;br /&gt;
gem &amp;quot;redis&amp;quot;, &amp;quot;&amp;gt;= 4.0.1&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im Verzeichnis &amp;quot;~/redmine-6.0.6/&amp;quot; ausführen: &amp;quot;bundle install&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Sidekiq bekommt die Redis-URL über seine Unit-Definition:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot; line&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Sidekiq Service&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
WorkingDirectory=%h/redmine-6.0.6&lt;br /&gt;
Environment=&amp;quot;PATH=/usr/local/bin:/usr/bin:/bin&amp;quot;&lt;br /&gt;
Environment=&amp;quot;RAILS_ENV=production&amp;quot;&lt;br /&gt;
Environment=&amp;quot;REDIS_URL=redis://:redispassword@127.0.0.1:33033/0&amp;quot;&lt;br /&gt;
ExecStart=%h/.rbenv/shims/bundle exec sidekiq -q default -q mailers&lt;br /&gt;
StandardOutput=append:%h/var/log/sidekiq.out.log&lt;br /&gt;
StandardError=inherit&lt;br /&gt;
Restart=always&lt;br /&gt;
PrivateTmp=true&lt;br /&gt;
NoNewPrivileges=true&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=default.target&lt;br /&gt;
After=redis.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nicht vergessen das Verzeichnis &amp;quot;~/var/log&amp;quot; anzulegen oder anzupassen.&lt;br /&gt;
&lt;br /&gt;
== weitere Schritte ==&lt;br /&gt;
&lt;br /&gt;
Redmine ist ein stabiles Projektmanagement-Werkzeug. Es ist freie Software und weiterhin gepflegt. Die Benutzeroberfläche ist funktional. Sie macht aber einen etwas veralteten Eindruck.&lt;br /&gt;
&lt;br /&gt;
Es gibt einige Themes und Plugins, die diesen Nachteil teilweise kompensieren können:&lt;br /&gt;
* Das Theme &amp;quot;farend bleuclair&amp;quot; sorgt für einen frischeren Ersteindruck&lt;br /&gt;
* Ein Kanban Board ist als Plugin verfügbar&lt;br /&gt;
* ebenso kann ein  visueller Editor für das Wiki nachgerüstet werden&lt;br /&gt;
&lt;br /&gt;
Weiterhin ist es möglich, das Anlegen von Tickets für eingehende E-Mail-Nachrichten zu konfigurieren.&lt;br /&gt;
&lt;br /&gt;
== eingehende E-Mails ==&lt;br /&gt;
&lt;br /&gt;
Wenn für eingehende E-Mail-Nachrichten jeweils ein Ticket angelegt werden soll, ist das über die Datei .forward möglich.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
# cat .forward &lt;br /&gt;
&lt;br /&gt;
&amp;quot;| /home/pacs/xyz00/users/redmine/bin/email2ticket&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
# cat bin/email2ticket &lt;br /&gt;
&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
export PATH=/usr/local/bin:/usr/bin:/bin&lt;br /&gt;
export RAILS_ENV=production&lt;br /&gt;
cd /home/pacs/xyz00/users/redmine/redmine-6.0.6&lt;br /&gt;
bundle exec rake redmine:email:read project=projekt-kurzname tracker=3 unknown_user=create&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* [https://www.redmine.org/ Redmine Projekt]&lt;br /&gt;
* [https://www.redmine.org/projects/redmine/wiki/RedmineInstall Installationsanleitung]&lt;br /&gt;
* [https://github.com/farend/redmine_theme_farend_bleuclair Theme Farend Bleuclair]&lt;br /&gt;
* [https://github.com/jgraichen/redmine_dashboard Redmine Dashboard Plugin] oder [https://github.com/happy-se-life/kanban Kanban Board Plugin]&lt;br /&gt;
* [https://github.com/taqueci/redmine_wysiwyg_editor Wysiwyg Editor Plugin]&lt;br /&gt;
* [https://github.com/danmunn/redmine_dmsf Dokumentenverwaltung (DMS) mit WebDAV-Server und Volltextsuche]&lt;br /&gt;
* [https://www.redmine.org/projects/redmine/wiki/RedmineReceivingEmails Eingehende E-Mails verarbeiten]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[Kategorie:HSDoku]]&lt;br /&gt;
[[Kategorie:Installationsanleitungen]]&lt;br /&gt;
[[Kategorie:Software]]&lt;br /&gt;
[[Kategorie:Passenger]]&lt;br /&gt;
[[Kategorie:Projektverwaltung]]&lt;br /&gt;
[[Kategorie:Projektmanagement]]&lt;br /&gt;
[[Kategorie:WebDAV]]&lt;/div&gt;</summary>
		<author><name>Peh</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Redmine_im_Webspace&amp;diff=7399</id>
		<title>Redmine im Webspace</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Redmine_im_Webspace&amp;diff=7399"/>
		<updated>2025-07-30T20:07:55Z</updated>

		<summary type="html">&lt;p&gt;Peh: /* Konfiguration von Sidekiq */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Redmine ist eine umfangreiche Projektmanagement-Software.  Die Software ist multiprojektfähig und legt für jedes Projekt mehrere Werkzeuge an:&lt;br /&gt;
* Wiki&lt;br /&gt;
* Vorgangsverfolgung (Ticketsystem, Issue Tracker)&lt;br /&gt;
* Zeiterfassung&lt;br /&gt;
* Dokument- und Dateiverwaltung&lt;br /&gt;
* Foren&lt;br /&gt;
* Kalender, Gantt-Charts&lt;br /&gt;
* Schnittstelle zur Versionverwaltung (Git, Mercurial und weitere)&lt;br /&gt;
&lt;br /&gt;
Diese Anleitung beschreibt, wie man Redmine auf der Managed Hosting Plattform von Hostsharing installieren kann. Redmine lässt sich in jedem Managed Webspace betreiben.&lt;br /&gt;
&lt;br /&gt;
== Vorbereitungen ==&lt;br /&gt;
&lt;br /&gt;
Mit Hilfe von HSAdmin wird angelegt:&lt;br /&gt;
# Ein User als Service-User mit &#039;&#039;/bin/bash&#039;&#039; als Shell, zum Beispiel Beispiel: &#039;&#039;xyz00-redmine&#039;&#039;&lt;br /&gt;
# Eine Domain mit &#039;&#039;xyz00-redmine&#039;&#039; als Domain-Administrator, zum Beispiel &#039;&#039;prj.example.com&#039;&#039;&lt;br /&gt;
# Die Domain muss aktualisiert werden: Domainoption &#039;&#039;passenger&#039;&#039; einschalten, &#039;&#039;fastcgi&#039;&#039; ausschalten&lt;br /&gt;
# Einen Postgresql-User &#039;&#039;xyz00_dbuser&#039;&#039; mit Passwort &#039;&#039;meinPasswort&#039;&#039;&lt;br /&gt;
# Eine Postgresql-Datenbank &#039;&#039;xyz00_prjdb&#039;&#039; mit Datenbank-Owner &#039;&#039;xyz00_dbuser&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Ruby installieren ==&lt;br /&gt;
&lt;br /&gt;
Für Redmine 6.0.x habe ich Ruby 3.3.x installiert. Siehe dazu die Seite [[RubyRBEnv]]&lt;br /&gt;
&lt;br /&gt;
== Download, Entpacken, Konfiguration ==&lt;br /&gt;
&lt;br /&gt;
Anmeldung per ssh als User  &#039;&#039;xyz00-redmine&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
ssh xyz00-redmine@xyz00.hostsharing.net&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Auf dem Hostsharing-Server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
cd ~&lt;br /&gt;
mkdir data&lt;br /&gt;
chmod 700 data&lt;br /&gt;
wget http://www.redmine.org/releases/redmine-6.0.6.tar.gz&lt;br /&gt;
tar xzf redmine-6.0.6.tar.gz &lt;br /&gt;
cd ~/redmine-6.0.6/config&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anlegen der beiden Dateien &amp;quot;database.yml&amp;quot; und &amp;quot;configuration.yml&amp;quot; mit folgendem Inhalt:&lt;br /&gt;
&lt;br /&gt;
database.yml:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot; line&amp;gt;&lt;br /&gt;
production:&lt;br /&gt;
  adapter: postgresql&lt;br /&gt;
  database: xyz00_prjdb&lt;br /&gt;
  host: localhost&lt;br /&gt;
  username: xyz00_dbuser&lt;br /&gt;
  password: &amp;quot;meinPasswort&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
configuration.yml:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot; line&amp;gt;&lt;br /&gt;
default:&lt;br /&gt;
  email_delivery:&lt;br /&gt;
    delivery_method: :smtp&lt;br /&gt;
    smtp_settings:&lt;br /&gt;
      address: &amp;quot;127.0.0.1&amp;quot;&lt;br /&gt;
      port: 4025&lt;br /&gt;
      enable_starttls_auto: false&lt;br /&gt;
  attachments_storage_path: &amp;quot;/home/pacs/xyz00/users/redmine/data&amp;quot;&lt;br /&gt;
  autologin_cookie_name:&lt;br /&gt;
  autologin_cookie_path:&lt;br /&gt;
  autologin_cookie_secure:&lt;br /&gt;
  scm_subversion_command:&lt;br /&gt;
  scm_mercurial_command:&lt;br /&gt;
  scm_git_command:&lt;br /&gt;
  scm_cvs_command:&lt;br /&gt;
  scm_bazaar_command:&lt;br /&gt;
  scm_darcs_command:&lt;br /&gt;
  scm_subversion_path_regexp:&lt;br /&gt;
  scm_mercurial_path_regexp:&lt;br /&gt;
  scm_git_path_regexp:&lt;br /&gt;
  scm_cvs_path_regexp:&lt;br /&gt;
  scm_bazaar_path_regexp:&lt;br /&gt;
  scm_darcs_path_regexp:&lt;br /&gt;
  scm_filesystem_path_regexp:&lt;br /&gt;
  scm_stderr_log_file:&lt;br /&gt;
  database_cipher_key:&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Achtung: Die Einrückung muss immer genau um zwei Leerzeichen erfolgen!&lt;br /&gt;
&lt;br /&gt;
Der &amp;quot;attachments_storage_path&amp;quot; muss angepasst werden (&amp;quot;xyz00&amp;quot; und &amp;quot;redmine&amp;quot; durch den eigenen Webspace bzw. das eigene User-Postfix ersetzen). Wenn für den Webspace &amp;quot;Storage&amp;quot; gebucht ist, kann der Speicher nach &amp;quot;/home/storage/...&amp;quot; gelegt werden.&lt;br /&gt;
&lt;br /&gt;
== Redmine-Installation ==&lt;br /&gt;
&lt;br /&gt;
Weiterhin als &amp;quot;xyz00-redmine&amp;quot; auf dem Hostsharing-Server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
cd ~/redmine-6.0.6&lt;br /&gt;
bundle config --local path &#039;vendor/bundle&#039;&lt;br /&gt;
bundle config --local without &#039;development:test&#039;&lt;br /&gt;
bundle install&lt;br /&gt;
bundle exec rake generate_secret_token&lt;br /&gt;
RAILS_ENV=production bundle exec rake db:migrate&lt;br /&gt;
RAILS_ENV=production bundle exec rake redmine:load_default_data&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Weiter in der Shell:&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
cd ~/doms/prj.example.com/&lt;br /&gt;
rm -rf htdocs-ssl/ app-ssl/ subs/www/ subs-ssl/www/&lt;br /&gt;
ln -s $HOME/redmine-6.0.6 app-ssl&lt;br /&gt;
ln -s $HOME/redmine-6.0.6/public htdocs-ssl&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn alles gut gegangen ist, ist die Redmine-Installation unter&lt;br /&gt;
https://prj.example.com erreichbar. Beim ersten Login als User &amp;quot;admin&amp;quot; mit Passwort &amp;quot;admin&amp;quot; wird ein neues Passwort konfiguriert.&lt;br /&gt;
&lt;br /&gt;
Nach der Änderung des Admin-Passwort sollten einige Einstellungen im Bereich Administration/Konfiguration durchgesehen werden:&lt;br /&gt;
* im Bereich &amp;quot;Allgemein&amp;quot; der Applikationstitel, der Hostname und das Protokoll&lt;br /&gt;
* im Bereich &amp;quot;Mailbenachrichtigung&amp;quot; der E-Mail-Absender und die E-Mail-Fußzeile&lt;br /&gt;
&lt;br /&gt;
== Konfiguration von Sidekiq ==&lt;br /&gt;
&lt;br /&gt;
Für Hintergrundprozesse, zum Beispiel für den Versand von EMail-Benachrichtigungen, soltle man in einem produktiven System Sidekiq verwenden. Dazu müssen zwei Services konfiguriert werden: Redis und Sidekiq.&lt;br /&gt;
&lt;br /&gt;
Zur Konfiguration von Redis als Service siehe [[Redis]]. In der Besipielkonfiguration lauscht Redis auf localhost:33033.&lt;br /&gt;
&lt;br /&gt;
Wir machen diese Redis-URL dem Passenger-Prozess üder eine Environment-Variable bekannt. Dazu schreiben wir in eine Datei &lt;br /&gt;
&amp;quot;~/doms/prj.example.com/.htaccess&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot; line&amp;gt;&lt;br /&gt;
SetEnv REDIS_URL redis://:redispassword@127.0.0.1:33033/0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sidekiq bekommt diese Information über seine Unit-Definition:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot; line&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Sidekiq Service&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
WorkingDirectory=%h/redmine-6.0.6&lt;br /&gt;
Environment=&amp;quot;PATH=/usr/local/bin:/usr/bin:/bin&amp;quot;&lt;br /&gt;
Environment=&amp;quot;RAILS_ENV=production&amp;quot;&lt;br /&gt;
Environment=&amp;quot;REDIS_URL=redis://:redispassword@127.0.0.1:33033/0&amp;quot;&lt;br /&gt;
ExecStart=%h/.rbenv/shims/bundle exec sidekiq -q default -q mailers&lt;br /&gt;
StandardOutput=append:%h/var/log/sidekiq.out.log&lt;br /&gt;
StandardError=inherit&lt;br /&gt;
Restart=always&lt;br /&gt;
PrivateTmp=true&lt;br /&gt;
NoNewPrivileges=true&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=default.target&lt;br /&gt;
After=redis.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nicht vergessen das Verzeichnis &amp;quot;~/var/log&amp;quot; anzulegen oder anzupassen.&lt;br /&gt;
&lt;br /&gt;
== weitere Schritte ==&lt;br /&gt;
&lt;br /&gt;
Redmine ist ein stabiles Projektmanagement-Werkzeug. Es ist freie Software und weiterhin gepflegt. Die Benutzeroberfläche ist funktional. Sie macht aber einen etwas veralteten Eindruck.&lt;br /&gt;
&lt;br /&gt;
Es gibt einige Themes und Plugins, die diesen Nachteil teilweise kompensieren können:&lt;br /&gt;
* Das Theme &amp;quot;farend bleuclair&amp;quot; sorgt für einen frischeren Ersteindruck&lt;br /&gt;
* Ein Kanban Board ist als Plugin verfügbar&lt;br /&gt;
* ebenso kann ein  visueller Editor für das Wiki nachgerüstet werden&lt;br /&gt;
&lt;br /&gt;
Weiterhin ist es möglich, das Anlegen von Tickets für eingehende E-Mail-Nachrichten zu konfigurieren.&lt;br /&gt;
&lt;br /&gt;
== eingehende E-Mails ==&lt;br /&gt;
&lt;br /&gt;
Wenn für eingehende E-Mail-Nachrichten jeweils ein Ticket angelegt werden soll, ist das über die Datei .forward möglich.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
# cat .forward &lt;br /&gt;
&lt;br /&gt;
&amp;quot;| /home/pacs/xyz00/users/redmine/bin/email2ticket&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
# cat bin/email2ticket &lt;br /&gt;
&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
export PATH=/usr/local/bin:/usr/bin:/bin&lt;br /&gt;
export RAILS_ENV=production&lt;br /&gt;
cd /home/pacs/xyz00/users/redmine/redmine-6.0.6&lt;br /&gt;
bundle exec rake redmine:email:read project=projekt-kurzname tracker=3 unknown_user=create&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* [https://www.redmine.org/ Redmine Projekt]&lt;br /&gt;
* [https://www.redmine.org/projects/redmine/wiki/RedmineInstall Installationsanleitung]&lt;br /&gt;
* [https://github.com/farend/redmine_theme_farend_bleuclair Theme Farend Bleuclair]&lt;br /&gt;
* [https://github.com/jgraichen/redmine_dashboard Redmine Dashboard Plugin] oder [https://github.com/happy-se-life/kanban Kanban Board Plugin]&lt;br /&gt;
* [https://github.com/taqueci/redmine_wysiwyg_editor Wysiwyg Editor Plugin]&lt;br /&gt;
* [https://github.com/danmunn/redmine_dmsf Dokumentenverwaltung (DMS) mit WebDAV-Server und Volltextsuche]&lt;br /&gt;
* [https://www.redmine.org/projects/redmine/wiki/RedmineReceivingEmails Eingehende E-Mails verarbeiten]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[Kategorie:HSDoku]]&lt;br /&gt;
[[Kategorie:Installationsanleitungen]]&lt;br /&gt;
[[Kategorie:Software]]&lt;br /&gt;
[[Kategorie:Passenger]]&lt;br /&gt;
[[Kategorie:Projektverwaltung]]&lt;br /&gt;
[[Kategorie:Projektmanagement]]&lt;br /&gt;
[[Kategorie:WebDAV]]&lt;/div&gt;</summary>
		<author><name>Peh</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Redmine_im_Webspace&amp;diff=7398</id>
		<title>Redmine im Webspace</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Redmine_im_Webspace&amp;diff=7398"/>
		<updated>2025-07-30T20:03:57Z</updated>

		<summary type="html">&lt;p&gt;Peh: /* weitere Schritte */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Redmine ist eine umfangreiche Projektmanagement-Software.  Die Software ist multiprojektfähig und legt für jedes Projekt mehrere Werkzeuge an:&lt;br /&gt;
* Wiki&lt;br /&gt;
* Vorgangsverfolgung (Ticketsystem, Issue Tracker)&lt;br /&gt;
* Zeiterfassung&lt;br /&gt;
* Dokument- und Dateiverwaltung&lt;br /&gt;
* Foren&lt;br /&gt;
* Kalender, Gantt-Charts&lt;br /&gt;
* Schnittstelle zur Versionverwaltung (Git, Mercurial und weitere)&lt;br /&gt;
&lt;br /&gt;
Diese Anleitung beschreibt, wie man Redmine auf der Managed Hosting Plattform von Hostsharing installieren kann. Redmine lässt sich in jedem Managed Webspace betreiben.&lt;br /&gt;
&lt;br /&gt;
== Vorbereitungen ==&lt;br /&gt;
&lt;br /&gt;
Mit Hilfe von HSAdmin wird angelegt:&lt;br /&gt;
# Ein User als Service-User mit &#039;&#039;/bin/bash&#039;&#039; als Shell, zum Beispiel Beispiel: &#039;&#039;xyz00-redmine&#039;&#039;&lt;br /&gt;
# Eine Domain mit &#039;&#039;xyz00-redmine&#039;&#039; als Domain-Administrator, zum Beispiel &#039;&#039;prj.example.com&#039;&#039;&lt;br /&gt;
# Die Domain muss aktualisiert werden: Domainoption &#039;&#039;passenger&#039;&#039; einschalten, &#039;&#039;fastcgi&#039;&#039; ausschalten&lt;br /&gt;
# Einen Postgresql-User &#039;&#039;xyz00_dbuser&#039;&#039; mit Passwort &#039;&#039;meinPasswort&#039;&#039;&lt;br /&gt;
# Eine Postgresql-Datenbank &#039;&#039;xyz00_prjdb&#039;&#039; mit Datenbank-Owner &#039;&#039;xyz00_dbuser&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Ruby installieren ==&lt;br /&gt;
&lt;br /&gt;
Für Redmine 6.0.x habe ich Ruby 3.3.x installiert. Siehe dazu die Seite [[RubyRBEnv]]&lt;br /&gt;
&lt;br /&gt;
== Download, Entpacken, Konfiguration ==&lt;br /&gt;
&lt;br /&gt;
Anmeldung per ssh als User  &#039;&#039;xyz00-redmine&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
ssh xyz00-redmine@xyz00.hostsharing.net&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Auf dem Hostsharing-Server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
cd ~&lt;br /&gt;
mkdir data&lt;br /&gt;
chmod 700 data&lt;br /&gt;
wget http://www.redmine.org/releases/redmine-6.0.6.tar.gz&lt;br /&gt;
tar xzf redmine-6.0.6.tar.gz &lt;br /&gt;
cd ~/redmine-6.0.6/config&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anlegen der beiden Dateien &amp;quot;database.yml&amp;quot; und &amp;quot;configuration.yml&amp;quot; mit folgendem Inhalt:&lt;br /&gt;
&lt;br /&gt;
database.yml:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot; line&amp;gt;&lt;br /&gt;
production:&lt;br /&gt;
  adapter: postgresql&lt;br /&gt;
  database: xyz00_prjdb&lt;br /&gt;
  host: localhost&lt;br /&gt;
  username: xyz00_dbuser&lt;br /&gt;
  password: &amp;quot;meinPasswort&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
configuration.yml:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot; line&amp;gt;&lt;br /&gt;
default:&lt;br /&gt;
  email_delivery:&lt;br /&gt;
    delivery_method: :smtp&lt;br /&gt;
    smtp_settings:&lt;br /&gt;
      address: &amp;quot;127.0.0.1&amp;quot;&lt;br /&gt;
      port: 4025&lt;br /&gt;
      enable_starttls_auto: false&lt;br /&gt;
  attachments_storage_path: &amp;quot;/home/pacs/xyz00/users/redmine/data&amp;quot;&lt;br /&gt;
  autologin_cookie_name:&lt;br /&gt;
  autologin_cookie_path:&lt;br /&gt;
  autologin_cookie_secure:&lt;br /&gt;
  scm_subversion_command:&lt;br /&gt;
  scm_mercurial_command:&lt;br /&gt;
  scm_git_command:&lt;br /&gt;
  scm_cvs_command:&lt;br /&gt;
  scm_bazaar_command:&lt;br /&gt;
  scm_darcs_command:&lt;br /&gt;
  scm_subversion_path_regexp:&lt;br /&gt;
  scm_mercurial_path_regexp:&lt;br /&gt;
  scm_git_path_regexp:&lt;br /&gt;
  scm_cvs_path_regexp:&lt;br /&gt;
  scm_bazaar_path_regexp:&lt;br /&gt;
  scm_darcs_path_regexp:&lt;br /&gt;
  scm_filesystem_path_regexp:&lt;br /&gt;
  scm_stderr_log_file:&lt;br /&gt;
  database_cipher_key:&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Achtung: Die Einrückung muss immer genau um zwei Leerzeichen erfolgen!&lt;br /&gt;
&lt;br /&gt;
Der &amp;quot;attachments_storage_path&amp;quot; muss angepasst werden (&amp;quot;xyz00&amp;quot; und &amp;quot;redmine&amp;quot; durch den eigenen Webspace bzw. das eigene User-Postfix ersetzen). Wenn für den Webspace &amp;quot;Storage&amp;quot; gebucht ist, kann der Speicher nach &amp;quot;/home/storage/...&amp;quot; gelegt werden.&lt;br /&gt;
&lt;br /&gt;
== Redmine-Installation ==&lt;br /&gt;
&lt;br /&gt;
Weiterhin als &amp;quot;xyz00-redmine&amp;quot; auf dem Hostsharing-Server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
cd ~/redmine-6.0.6&lt;br /&gt;
bundle config --local path &#039;vendor/bundle&#039;&lt;br /&gt;
bundle config --local without &#039;development:test&#039;&lt;br /&gt;
bundle install&lt;br /&gt;
bundle exec rake generate_secret_token&lt;br /&gt;
RAILS_ENV=production bundle exec rake db:migrate&lt;br /&gt;
RAILS_ENV=production bundle exec rake redmine:load_default_data&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Weiter in der Shell:&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
cd ~/doms/prj.example.com/&lt;br /&gt;
rm -rf htdocs-ssl/ app-ssl/ subs/www/ subs-ssl/www/&lt;br /&gt;
ln -s $HOME/redmine-6.0.6 app-ssl&lt;br /&gt;
ln -s $HOME/redmine-6.0.6/public htdocs-ssl&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn alles gut gegangen ist, ist die Redmine-Installation unter&lt;br /&gt;
https://prj.example.com erreichbar. Beim ersten Login als User &amp;quot;admin&amp;quot; mit Passwort &amp;quot;admin&amp;quot; wird ein neues Passwort konfiguriert.&lt;br /&gt;
&lt;br /&gt;
Nach der Änderung des Admin-Passwort sollten einige Einstellungen im Bereich Administration/Konfiguration durchgesehen werden:&lt;br /&gt;
* im Bereich &amp;quot;Allgemein&amp;quot; der Applikationstitel, der Hostname und das Protokoll&lt;br /&gt;
* im Bereich &amp;quot;Mailbenachrichtigung&amp;quot; der E-Mail-Absender und die E-Mail-Fußzeile&lt;br /&gt;
&lt;br /&gt;
== Konfiguration von Sidekiq ==&lt;br /&gt;
&lt;br /&gt;
Für Hintergrundprozesse, zum Beispiel für den Versand von EMail-Benachrichtigungen, soltle man in einem produktiven System Sidekiq verwenden. Dazu müssen zwei Services konfiguriert werden: Redis und Sidekiq.&lt;br /&gt;
&lt;br /&gt;
Zur Konfiguration von Redis als Service siehe [[Redis]]. In der Besipielkonfiguration lauscht Redis auf localhost:33033.&lt;br /&gt;
&lt;br /&gt;
Wir machen diese Redis-URL dem Passenger-Prozess üder eine Environment-Variable bekannt. Dazu schreiben wir in eine Datei &lt;br /&gt;
~/doms/projects.hs-example.de/.htaccess&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot; line&amp;gt;&lt;br /&gt;
SetEnv REDIS_URL redis://:redispassword@127.0.0.1:33033/0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== weitere Schritte ==&lt;br /&gt;
&lt;br /&gt;
Redmine ist ein stabiles Projektmanagement-Werkzeug. Es ist freie Software und weiterhin gepflegt. Die Benutzeroberfläche ist funktional. Sie macht aber einen etwas veralteten Eindruck.&lt;br /&gt;
&lt;br /&gt;
Es gibt einige Themes und Plugins, die diesen Nachteil teilweise kompensieren können:&lt;br /&gt;
* Das Theme &amp;quot;farend bleuclair&amp;quot; sorgt für einen frischeren Ersteindruck&lt;br /&gt;
* Ein Kanban Board ist als Plugin verfügbar&lt;br /&gt;
* ebenso kann ein  visueller Editor für das Wiki nachgerüstet werden&lt;br /&gt;
&lt;br /&gt;
Weiterhin ist es möglich, das Anlegen von Tickets für eingehende E-Mail-Nachrichten zu konfigurieren.&lt;br /&gt;
&lt;br /&gt;
== eingehende E-Mails ==&lt;br /&gt;
&lt;br /&gt;
Wenn für eingehende E-Mail-Nachrichten jeweils ein Ticket angelegt werden soll, ist das über die Datei .forward möglich.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
# cat .forward &lt;br /&gt;
&lt;br /&gt;
&amp;quot;| /home/pacs/xyz00/users/redmine/bin/email2ticket&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
# cat bin/email2ticket &lt;br /&gt;
&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
export PATH=/usr/local/bin:/usr/bin:/bin&lt;br /&gt;
export RAILS_ENV=production&lt;br /&gt;
cd /home/pacs/xyz00/users/redmine/redmine-6.0.6&lt;br /&gt;
bundle exec rake redmine:email:read project=projekt-kurzname tracker=3 unknown_user=create&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* [https://www.redmine.org/ Redmine Projekt]&lt;br /&gt;
* [https://www.redmine.org/projects/redmine/wiki/RedmineInstall Installationsanleitung]&lt;br /&gt;
* [https://github.com/farend/redmine_theme_farend_bleuclair Theme Farend Bleuclair]&lt;br /&gt;
* [https://github.com/jgraichen/redmine_dashboard Redmine Dashboard Plugin] oder [https://github.com/happy-se-life/kanban Kanban Board Plugin]&lt;br /&gt;
* [https://github.com/taqueci/redmine_wysiwyg_editor Wysiwyg Editor Plugin]&lt;br /&gt;
* [https://github.com/danmunn/redmine_dmsf Dokumentenverwaltung (DMS) mit WebDAV-Server und Volltextsuche]&lt;br /&gt;
* [https://www.redmine.org/projects/redmine/wiki/RedmineReceivingEmails Eingehende E-Mails verarbeiten]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[Kategorie:HSDoku]]&lt;br /&gt;
[[Kategorie:Installationsanleitungen]]&lt;br /&gt;
[[Kategorie:Software]]&lt;br /&gt;
[[Kategorie:Passenger]]&lt;br /&gt;
[[Kategorie:Projektverwaltung]]&lt;br /&gt;
[[Kategorie:Projektmanagement]]&lt;br /&gt;
[[Kategorie:WebDAV]]&lt;/div&gt;</summary>
		<author><name>Peh</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Redmine_im_Webspace&amp;diff=7397</id>
		<title>Redmine im Webspace</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Redmine_im_Webspace&amp;diff=7397"/>
		<updated>2025-07-30T18:28:55Z</updated>

		<summary type="html">&lt;p&gt;Peh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Redmine ist eine umfangreiche Projektmanagement-Software.  Die Software ist multiprojektfähig und legt für jedes Projekt mehrere Werkzeuge an:&lt;br /&gt;
* Wiki&lt;br /&gt;
* Vorgangsverfolgung (Ticketsystem, Issue Tracker)&lt;br /&gt;
* Zeiterfassung&lt;br /&gt;
* Dokument- und Dateiverwaltung&lt;br /&gt;
* Foren&lt;br /&gt;
* Kalender, Gantt-Charts&lt;br /&gt;
* Schnittstelle zur Versionverwaltung (Git, Mercurial und weitere)&lt;br /&gt;
&lt;br /&gt;
Diese Anleitung beschreibt, wie man Redmine auf der Managed Hosting Plattform von Hostsharing installieren kann. Redmine lässt sich in jedem Managed Webspace betreiben.&lt;br /&gt;
&lt;br /&gt;
== Vorbereitungen ==&lt;br /&gt;
&lt;br /&gt;
Mit Hilfe von HSAdmin wird angelegt:&lt;br /&gt;
# Ein User als Service-User mit &#039;&#039;/bin/bash&#039;&#039; als Shell, zum Beispiel Beispiel: &#039;&#039;xyz00-redmine&#039;&#039;&lt;br /&gt;
# Eine Domain mit &#039;&#039;xyz00-redmine&#039;&#039; als Domain-Administrator, zum Beispiel &#039;&#039;prj.example.com&#039;&#039;&lt;br /&gt;
# Die Domain muss aktualisiert werden: Domainoption &#039;&#039;passenger&#039;&#039; einschalten, &#039;&#039;fastcgi&#039;&#039; ausschalten&lt;br /&gt;
# Einen Postgresql-User &#039;&#039;xyz00_dbuser&#039;&#039; mit Passwort &#039;&#039;meinPasswort&#039;&#039;&lt;br /&gt;
# Eine Postgresql-Datenbank &#039;&#039;xyz00_prjdb&#039;&#039; mit Datenbank-Owner &#039;&#039;xyz00_dbuser&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Ruby installieren ==&lt;br /&gt;
&lt;br /&gt;
Für Redmine 6.0.x habe ich Ruby 3.3.x installiert. Siehe dazu die Seite [[RubyRBEnv]]&lt;br /&gt;
&lt;br /&gt;
== Download, Entpacken, Konfiguration ==&lt;br /&gt;
&lt;br /&gt;
Anmeldung per ssh als User  &#039;&#039;xyz00-redmine&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
ssh xyz00-redmine@xyz00.hostsharing.net&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Auf dem Hostsharing-Server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
cd ~&lt;br /&gt;
mkdir data&lt;br /&gt;
chmod 700 data&lt;br /&gt;
wget http://www.redmine.org/releases/redmine-6.0.6.tar.gz&lt;br /&gt;
tar xzf redmine-6.0.6.tar.gz &lt;br /&gt;
cd ~/redmine-6.0.6/config&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anlegen der beiden Dateien &amp;quot;database.yml&amp;quot; und &amp;quot;configuration.yml&amp;quot; mit folgendem Inhalt:&lt;br /&gt;
&lt;br /&gt;
database.yml:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot; line&amp;gt;&lt;br /&gt;
production:&lt;br /&gt;
  adapter: postgresql&lt;br /&gt;
  database: xyz00_prjdb&lt;br /&gt;
  host: localhost&lt;br /&gt;
  username: xyz00_dbuser&lt;br /&gt;
  password: &amp;quot;meinPasswort&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
configuration.yml:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot; line&amp;gt;&lt;br /&gt;
default:&lt;br /&gt;
  email_delivery:&lt;br /&gt;
    delivery_method: :smtp&lt;br /&gt;
    smtp_settings:&lt;br /&gt;
      address: &amp;quot;127.0.0.1&amp;quot;&lt;br /&gt;
      port: 4025&lt;br /&gt;
      enable_starttls_auto: false&lt;br /&gt;
  attachments_storage_path: &amp;quot;/home/pacs/xyz00/users/redmine/data&amp;quot;&lt;br /&gt;
  autologin_cookie_name:&lt;br /&gt;
  autologin_cookie_path:&lt;br /&gt;
  autologin_cookie_secure:&lt;br /&gt;
  scm_subversion_command:&lt;br /&gt;
  scm_mercurial_command:&lt;br /&gt;
  scm_git_command:&lt;br /&gt;
  scm_cvs_command:&lt;br /&gt;
  scm_bazaar_command:&lt;br /&gt;
  scm_darcs_command:&lt;br /&gt;
  scm_subversion_path_regexp:&lt;br /&gt;
  scm_mercurial_path_regexp:&lt;br /&gt;
  scm_git_path_regexp:&lt;br /&gt;
  scm_cvs_path_regexp:&lt;br /&gt;
  scm_bazaar_path_regexp:&lt;br /&gt;
  scm_darcs_path_regexp:&lt;br /&gt;
  scm_filesystem_path_regexp:&lt;br /&gt;
  scm_stderr_log_file:&lt;br /&gt;
  database_cipher_key:&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Achtung: Die Einrückung muss immer genau um zwei Leerzeichen erfolgen!&lt;br /&gt;
&lt;br /&gt;
Der &amp;quot;attachments_storage_path&amp;quot; muss angepasst werden (&amp;quot;xyz00&amp;quot; und &amp;quot;redmine&amp;quot; durch den eigenen Webspace bzw. das eigene User-Postfix ersetzen). Wenn für den Webspace &amp;quot;Storage&amp;quot; gebucht ist, kann der Speicher nach &amp;quot;/home/storage/...&amp;quot; gelegt werden.&lt;br /&gt;
&lt;br /&gt;
== Redmine-Installation ==&lt;br /&gt;
&lt;br /&gt;
Weiterhin als &amp;quot;xyz00-redmine&amp;quot; auf dem Hostsharing-Server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
cd ~/redmine-6.0.6&lt;br /&gt;
bundle config --local path &#039;vendor/bundle&#039;&lt;br /&gt;
bundle config --local without &#039;development:test&#039;&lt;br /&gt;
bundle install&lt;br /&gt;
bundle exec rake generate_secret_token&lt;br /&gt;
RAILS_ENV=production bundle exec rake db:migrate&lt;br /&gt;
RAILS_ENV=production bundle exec rake redmine:load_default_data&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Weiter in der Shell:&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
cd ~/doms/prj.example.com/&lt;br /&gt;
rm -rf htdocs-ssl/ app-ssl/ subs/www/ subs-ssl/www/&lt;br /&gt;
ln -s $HOME/redmine-6.0.6 app-ssl&lt;br /&gt;
ln -s $HOME/redmine-6.0.6/public htdocs-ssl&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn alles gut gegangen ist, ist die Redmine-Installation unter&lt;br /&gt;
https://prj.example.com erreichbar. Beim ersten Login als User &amp;quot;admin&amp;quot; mit Passwort &amp;quot;admin&amp;quot; wird ein neues Passwort konfiguriert.&lt;br /&gt;
&lt;br /&gt;
Nach der Änderung des Admin-Passwort sollten einige Einstellungen im Bereich Administration/Konfiguration durchgesehen werden:&lt;br /&gt;
* im Bereich &amp;quot;Allgemein&amp;quot; der Applikationstitel, der Hostname und das Protokoll&lt;br /&gt;
* im Bereich &amp;quot;Mailbenachrichtigung&amp;quot; der E-Mail-Absender und die E-Mail-Fußzeile&lt;br /&gt;
&lt;br /&gt;
== weitere Schritte ==&lt;br /&gt;
&lt;br /&gt;
Redmine ist ein stabiles Projektmanagement-Werkzeug. Es ist freie Software und weiterhin gepflegt. Die Benutzeroberfläche ist funktional. Sie macht aber einen etwas veralteten Eindruck.&lt;br /&gt;
&lt;br /&gt;
Es gibt einige Themes und Plugins, die diesen Nachteil teilweise kompensieren können:&lt;br /&gt;
* Das Theme &amp;quot;farend bleuclair&amp;quot; sorgt für einen frischeren Ersteindruck&lt;br /&gt;
* Ein Kanban Board ist als Plugin verfügbar&lt;br /&gt;
* ebenso kann ein  visueller Editor für das Wiki nachgerüstet werden&lt;br /&gt;
&lt;br /&gt;
Weiterhin ist es möglich, das Anlegen von Tickets für eingehende E-Mail-Nachrichten zu konfigurieren.&lt;br /&gt;
&lt;br /&gt;
== eingehende E-Mails ==&lt;br /&gt;
&lt;br /&gt;
Wenn für eingehende E-Mail-Nachrichten jeweils ein Ticket angelegt werden soll, ist das über die Datei .forward möglich.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
# cat .forward &lt;br /&gt;
&lt;br /&gt;
&amp;quot;| /home/pacs/xyz00/users/redmine/bin/email2ticket&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
# cat bin/email2ticket &lt;br /&gt;
&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
export PATH=/usr/local/bin:/usr/bin:/bin&lt;br /&gt;
export RAILS_ENV=production&lt;br /&gt;
cd /home/pacs/xyz00/users/redmine/redmine-6.0.6&lt;br /&gt;
bundle exec rake redmine:email:read project=projekt-kurzname tracker=3 unknown_user=create&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* [https://www.redmine.org/ Redmine Projekt]&lt;br /&gt;
* [https://www.redmine.org/projects/redmine/wiki/RedmineInstall Installationsanleitung]&lt;br /&gt;
* [https://github.com/farend/redmine_theme_farend_bleuclair Theme Farend Bleuclair]&lt;br /&gt;
* [https://github.com/jgraichen/redmine_dashboard Redmine Dashboard Plugin] oder [https://github.com/happy-se-life/kanban Kanban Board Plugin]&lt;br /&gt;
* [https://github.com/taqueci/redmine_wysiwyg_editor Wysiwyg Editor Plugin]&lt;br /&gt;
* [https://github.com/danmunn/redmine_dmsf Dokumentenverwaltung (DMS) mit WebDAV-Server und Volltextsuche]&lt;br /&gt;
* [https://www.redmine.org/projects/redmine/wiki/RedmineReceivingEmails Eingehende E-Mails verarbeiten]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[Kategorie:HSDoku]]&lt;br /&gt;
[[Kategorie:Installationsanleitungen]]&lt;br /&gt;
[[Kategorie:Software]]&lt;br /&gt;
[[Kategorie:Passenger]]&lt;br /&gt;
[[Kategorie:Projektverwaltung]]&lt;br /&gt;
[[Kategorie:Projektmanagement]]&lt;br /&gt;
[[Kategorie:WebDAV]]&lt;/div&gt;</summary>
		<author><name>Peh</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Redmine_im_Webspace&amp;diff=7396</id>
		<title>Redmine im Webspace</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Redmine_im_Webspace&amp;diff=7396"/>
		<updated>2025-07-30T18:27:36Z</updated>

		<summary type="html">&lt;p&gt;Peh: /* Ruby installieren */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Redmine ist eine umfangreiche Projektmanagement-Software.  Die Software ist multiprojektfähig und legt für jedes Projekt mehrere Werkzeuge an:&lt;br /&gt;
* Wiki&lt;br /&gt;
* Vorgangsverfolgung (Ticketsystem, Issue Tracker)&lt;br /&gt;
* Zeiterfassung&lt;br /&gt;
* Dokument- und Dateiverwaltung&lt;br /&gt;
* Foren&lt;br /&gt;
* Kalender, Gantt-Charts&lt;br /&gt;
* Schnittstelle zur Versionverwaltung (Git, Mercurial und weitere)&lt;br /&gt;
&lt;br /&gt;
Diese Anleitung beschreibt, wie man Redmine auf der Managed Hosting Plattform von Hostsharing installieren kann. Redmine lässt sich in jedem Managed Webspace betreiben.&lt;br /&gt;
&lt;br /&gt;
== Vorbereitungen ==&lt;br /&gt;
&lt;br /&gt;
Mit Hilfe von HSAdmin wird angelegt:&lt;br /&gt;
# Ein User als Service-User mit &#039;&#039;/bin/bash&#039;&#039; als Shell, zum Beispiel Beispiel: &#039;&#039;xyz00-redmine&#039;&#039;&lt;br /&gt;
# Eine Domain mit &#039;&#039;xyz00-redmine&#039;&#039; als Domain-Administrator, zum Beispiel &#039;&#039;prj.example.com&#039;&#039;&lt;br /&gt;
# Die Domain muss aktualisiert werden: Domainoption &#039;&#039;passenger&#039;&#039; einschalten, &#039;&#039;fastcgi&#039;&#039; ausschalten&lt;br /&gt;
# Einen Postgresql-User &#039;&#039;xyz00_dbuser&#039;&#039; mit Passwort &#039;&#039;meinPasswort&#039;&#039;&lt;br /&gt;
# Eine Postgresql-Datenbank &#039;&#039;xyz00_prjdb&#039;&#039; mit Datenbank-Owner &#039;&#039;xyz00_dbuser&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Ruby installieren ==&lt;br /&gt;
&lt;br /&gt;
Für Redmine 6.0.x habe ich Ruby 3.3.x installiert. Siehe dazu die Seite [[RubyRBEnv]]&lt;br /&gt;
&lt;br /&gt;
== Download, Entpacken, Konfiguration ==&lt;br /&gt;
&lt;br /&gt;
Anmeldung per ssh als User  &#039;&#039;xyz00-redmine&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
ssh xyz00-redmine@xyz00.hostsharing.net&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Auf dem Hostsharing-Server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
cd ~&lt;br /&gt;
mkdir data&lt;br /&gt;
chmod 700 data&lt;br /&gt;
wget http://www.redmine.org/releases/redmine-5.1.9.tar.gz&lt;br /&gt;
tar xzf redmine-5.1.9.tar.gz &lt;br /&gt;
cd ~/redmine-5.1.9/config&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anlegen der beiden Dateien &amp;quot;database.yml&amp;quot; und &amp;quot;configuration.yml&amp;quot; mit folgendem Inhalt:&lt;br /&gt;
&lt;br /&gt;
database.yml:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot; line&amp;gt;&lt;br /&gt;
production:&lt;br /&gt;
  adapter: postgresql&lt;br /&gt;
  database: xyz00_prjdb&lt;br /&gt;
  host: localhost&lt;br /&gt;
  username: xyz00_dbuser&lt;br /&gt;
  password: &amp;quot;meinPasswort&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
configuration.yml:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot; line&amp;gt;&lt;br /&gt;
default:&lt;br /&gt;
  email_delivery:&lt;br /&gt;
    delivery_method: :smtp&lt;br /&gt;
    smtp_settings:&lt;br /&gt;
      address: &amp;quot;127.0.0.1&amp;quot;&lt;br /&gt;
      port: 4025&lt;br /&gt;
      enable_starttls_auto: false&lt;br /&gt;
  attachments_storage_path: &amp;quot;/home/pacs/xyz00/users/redmine/data&amp;quot;&lt;br /&gt;
  autologin_cookie_name:&lt;br /&gt;
  autologin_cookie_path:&lt;br /&gt;
  autologin_cookie_secure:&lt;br /&gt;
  scm_subversion_command:&lt;br /&gt;
  scm_mercurial_command:&lt;br /&gt;
  scm_git_command:&lt;br /&gt;
  scm_cvs_command:&lt;br /&gt;
  scm_bazaar_command:&lt;br /&gt;
  scm_darcs_command:&lt;br /&gt;
  scm_subversion_path_regexp:&lt;br /&gt;
  scm_mercurial_path_regexp:&lt;br /&gt;
  scm_git_path_regexp:&lt;br /&gt;
  scm_cvs_path_regexp:&lt;br /&gt;
  scm_bazaar_path_regexp:&lt;br /&gt;
  scm_darcs_path_regexp:&lt;br /&gt;
  scm_filesystem_path_regexp:&lt;br /&gt;
  scm_stderr_log_file:&lt;br /&gt;
  database_cipher_key:&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Achtung: Die Einrückung muss immer genau um zwei Leerzeichen erfolgen!&lt;br /&gt;
&lt;br /&gt;
Der &amp;quot;attachments_storage_path&amp;quot; muss angepasst werden (&amp;quot;xyz00&amp;quot; und &amp;quot;redmine&amp;quot; durch den eigenen Webspace bzw. das eigene User-Postfix ersetzen). Wenn für den Webspace &amp;quot;Storage&amp;quot; gebucht ist, kann der Speicher nach &amp;quot;/home/storage/...&amp;quot; gelegt werden.&lt;br /&gt;
&lt;br /&gt;
== Redmine-Installation ==&lt;br /&gt;
&lt;br /&gt;
Weiterhin als &amp;quot;xyz00-redmine&amp;quot; auf dem Hostsharing-Server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
cd ~/redmine-5.1.9&lt;br /&gt;
bundle config --local path &#039;vendor/bundle&#039;&lt;br /&gt;
bundle config --local without &#039;development:test&#039;&lt;br /&gt;
bundle install&lt;br /&gt;
bundle exec rake generate_secret_token&lt;br /&gt;
RAILS_ENV=production bundle exec rake db:migrate&lt;br /&gt;
RAILS_ENV=production bundle exec rake redmine:load_default_data&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Weiter in der Shell:&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
cd ~/doms/prj.example.com/&lt;br /&gt;
rm -rf htdocs-ssl/ app-ssl/ subs/www/ subs-ssl/www/&lt;br /&gt;
ln -s $HOME/redmine-5.1.9 app-ssl&lt;br /&gt;
ln -s $HOME/redmine-5.1.9/public htdocs-ssl&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn alles gut gegangen ist, ist die Redmine-Installation unter&lt;br /&gt;
https://prj.example.com erreichbar. Beim ersten Login als User &amp;quot;admin&amp;quot; mit Passwort &amp;quot;admin&amp;quot; wird ein neues Passwort konfiguriert.&lt;br /&gt;
&lt;br /&gt;
Nach der Änderung des Admin-Passwort sollten einige Einstellungen im Bereich Administration/Konfiguration durchgesehen werden:&lt;br /&gt;
* im Bereich &amp;quot;Allgemein&amp;quot; der Applikationstitel, der Hostname und das Protokoll&lt;br /&gt;
* im Bereich &amp;quot;Mailbenachrichtigung&amp;quot; der E-Mail-Absender und die E-Mail-Fußzeile&lt;br /&gt;
&lt;br /&gt;
== weitere Schritte ==&lt;br /&gt;
&lt;br /&gt;
Redmine ist ein stabiles Projektmanagement-Werkzeug. Es ist freie Software und weiterhin gepflegt. Die Benutzeroberfläche ist funktional. Sie macht aber einen etwas veralteten Eindruck.&lt;br /&gt;
&lt;br /&gt;
Es gibt einige Themes und Plugins, die diesen Nachteil teilweise kompensieren können:&lt;br /&gt;
* Das Theme &amp;quot;farend bleuclair&amp;quot; sorgt für einen frischeren Ersteindruck&lt;br /&gt;
* Ein Kanban Board ist als Plugin verfügbar&lt;br /&gt;
* ebenso kann ein  visueller Editor für das Wiki nachgerüstet werden&lt;br /&gt;
&lt;br /&gt;
Weiterhin ist es möglich, das Anlegen von Tickets für eingehende E-Mail-Nachrichten zu konfigurieren.&lt;br /&gt;
&lt;br /&gt;
== eingehende E-Mails ==&lt;br /&gt;
&lt;br /&gt;
Wenn für eingehende E-Mail-Nachrichten jeweils ein Ticket angelegt werden soll, ist das über die Datei .forward möglich.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
# cat .forward &lt;br /&gt;
&lt;br /&gt;
&amp;quot;| /home/pacs/xyz00/users/redmine/bin/email2ticket&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
# cat bin/email2ticket &lt;br /&gt;
&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
export PATH=/usr/local/bin:/usr/bin:/bin&lt;br /&gt;
export RAILS_ENV=production&lt;br /&gt;
cd /home/pacs/xyz00/users/redmine/redmine-5.1.9&lt;br /&gt;
bundle exec rake redmine:email:read project=projekt-kurzname tracker=3 unknown_user=create&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* [https://www.redmine.org/ Redmine Projekt]&lt;br /&gt;
* [https://www.redmine.org/projects/redmine/wiki/RedmineInstall Installationsanleitung]&lt;br /&gt;
* [https://github.com/farend/redmine_theme_farend_bleuclair Theme Farend Bleuclair]&lt;br /&gt;
* [https://github.com/jgraichen/redmine_dashboard Redmine Dashboard Plugin] oder [https://github.com/happy-se-life/kanban Kanban Board Plugin]&lt;br /&gt;
* [https://github.com/taqueci/redmine_wysiwyg_editor Wysiwyg Editor Plugin]&lt;br /&gt;
* [https://github.com/danmunn/redmine_dmsf Dokumentenverwaltung (DMS) mit WebDAV-Server und Volltextsuche]&lt;br /&gt;
* [https://www.redmine.org/projects/redmine/wiki/RedmineReceivingEmails Eingehende E-Mails verarbeiten]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[Kategorie:HSDoku]]&lt;br /&gt;
[[Kategorie:Installationsanleitungen]]&lt;br /&gt;
[[Kategorie:Software]]&lt;br /&gt;
[[Kategorie:Passenger]]&lt;br /&gt;
[[Kategorie:Projektverwaltung]]&lt;br /&gt;
[[Kategorie:Projektmanagement]]&lt;br /&gt;
[[Kategorie:WebDAV]]&lt;/div&gt;</summary>
		<author><name>Peh</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Redmine_im_Webspace&amp;diff=7395</id>
		<title>Redmine im Webspace</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Redmine_im_Webspace&amp;diff=7395"/>
		<updated>2025-07-29T18:48:21Z</updated>

		<summary type="html">&lt;p&gt;Peh: Update 5.1.2 =&amp;gt; 5.1.9&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Redmine ist eine umfangreiche Projektmanagement-Software.  Die Software ist multiprojektfähig und legt für jedes Projekt mehrere Werkzeuge an:&lt;br /&gt;
* Wiki&lt;br /&gt;
* Vorgangsverfolgung (Ticketsystem, Issue Tracker)&lt;br /&gt;
* Zeiterfassung&lt;br /&gt;
* Dokument- und Dateiverwaltung&lt;br /&gt;
* Foren&lt;br /&gt;
* Kalender, Gantt-Charts&lt;br /&gt;
* Schnittstelle zur Versionverwaltung (Git, Mercurial und weitere)&lt;br /&gt;
&lt;br /&gt;
Diese Anleitung beschreibt, wie man Redmine auf der Managed Hosting Plattform von Hostsharing installieren kann. Redmine lässt sich in jedem Managed Webspace betreiben.&lt;br /&gt;
&lt;br /&gt;
== Vorbereitungen ==&lt;br /&gt;
&lt;br /&gt;
Mit Hilfe von HSAdmin wird angelegt:&lt;br /&gt;
# Ein User als Service-User mit &#039;&#039;/bin/bash&#039;&#039; als Shell, zum Beispiel Beispiel: &#039;&#039;xyz00-redmine&#039;&#039;&lt;br /&gt;
# Eine Domain mit &#039;&#039;xyz00-redmine&#039;&#039; als Domain-Administrator, zum Beispiel &#039;&#039;prj.example.com&#039;&#039;&lt;br /&gt;
# Die Domain muss aktualisiert werden: Domainoption &#039;&#039;passenger&#039;&#039; einschalten, &#039;&#039;fastcgi&#039;&#039; ausschalten&lt;br /&gt;
# Einen Postgresql-User &#039;&#039;xyz00_dbuser&#039;&#039; mit Passwort &#039;&#039;meinPasswort&#039;&#039;&lt;br /&gt;
# Eine Postgresql-Datenbank &#039;&#039;xyz00_prjdb&#039;&#039; mit Datenbank-Owner &#039;&#039;xyz00_dbuser&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Ruby installieren ==&lt;br /&gt;
&lt;br /&gt;
Unter Debian Bookworm kann das systemseitig installierte Ruby benutzt werden.&lt;br /&gt;
&lt;br /&gt;
Sonst: siehe Seite [[RubyRBEnv]]&lt;br /&gt;
&lt;br /&gt;
== Download, Entpacken, Konfiguration ==&lt;br /&gt;
&lt;br /&gt;
Anmeldung per ssh als User  &#039;&#039;xyz00-redmine&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
ssh xyz00-redmine@xyz00.hostsharing.net&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Auf dem Hostsharing-Server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
cd ~&lt;br /&gt;
mkdir data&lt;br /&gt;
chmod 700 data&lt;br /&gt;
wget http://www.redmine.org/releases/redmine-5.1.9.tar.gz&lt;br /&gt;
tar xzf redmine-5.1.9.tar.gz &lt;br /&gt;
cd ~/redmine-5.1.9/config&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anlegen der beiden Dateien &amp;quot;database.yml&amp;quot; und &amp;quot;configuration.yml&amp;quot; mit folgendem Inhalt:&lt;br /&gt;
&lt;br /&gt;
database.yml:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot; line&amp;gt;&lt;br /&gt;
production:&lt;br /&gt;
  adapter: postgresql&lt;br /&gt;
  database: xyz00_prjdb&lt;br /&gt;
  host: localhost&lt;br /&gt;
  username: xyz00_dbuser&lt;br /&gt;
  password: &amp;quot;meinPasswort&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
configuration.yml:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot; line&amp;gt;&lt;br /&gt;
default:&lt;br /&gt;
  email_delivery:&lt;br /&gt;
    delivery_method: :smtp&lt;br /&gt;
    smtp_settings:&lt;br /&gt;
      address: &amp;quot;127.0.0.1&amp;quot;&lt;br /&gt;
      port: 4025&lt;br /&gt;
      enable_starttls_auto: false&lt;br /&gt;
  attachments_storage_path: &amp;quot;/home/pacs/xyz00/users/redmine/data&amp;quot;&lt;br /&gt;
  autologin_cookie_name:&lt;br /&gt;
  autologin_cookie_path:&lt;br /&gt;
  autologin_cookie_secure:&lt;br /&gt;
  scm_subversion_command:&lt;br /&gt;
  scm_mercurial_command:&lt;br /&gt;
  scm_git_command:&lt;br /&gt;
  scm_cvs_command:&lt;br /&gt;
  scm_bazaar_command:&lt;br /&gt;
  scm_darcs_command:&lt;br /&gt;
  scm_subversion_path_regexp:&lt;br /&gt;
  scm_mercurial_path_regexp:&lt;br /&gt;
  scm_git_path_regexp:&lt;br /&gt;
  scm_cvs_path_regexp:&lt;br /&gt;
  scm_bazaar_path_regexp:&lt;br /&gt;
  scm_darcs_path_regexp:&lt;br /&gt;
  scm_filesystem_path_regexp:&lt;br /&gt;
  scm_stderr_log_file:&lt;br /&gt;
  database_cipher_key:&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Achtung: Die Einrückung muss immer genau um zwei Leerzeichen erfolgen!&lt;br /&gt;
&lt;br /&gt;
Der &amp;quot;attachments_storage_path&amp;quot; muss angepasst werden (&amp;quot;xyz00&amp;quot; und &amp;quot;redmine&amp;quot; durch den eigenen Webspace bzw. das eigene User-Postfix ersetzen). Wenn für den Webspace &amp;quot;Storage&amp;quot; gebucht ist, kann der Speicher nach &amp;quot;/home/storage/...&amp;quot; gelegt werden.&lt;br /&gt;
&lt;br /&gt;
== Redmine-Installation ==&lt;br /&gt;
&lt;br /&gt;
Weiterhin als &amp;quot;xyz00-redmine&amp;quot; auf dem Hostsharing-Server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
cd ~/redmine-5.1.9&lt;br /&gt;
bundle config --local path &#039;vendor/bundle&#039;&lt;br /&gt;
bundle config --local without &#039;development:test&#039;&lt;br /&gt;
bundle install&lt;br /&gt;
bundle exec rake generate_secret_token&lt;br /&gt;
RAILS_ENV=production bundle exec rake db:migrate&lt;br /&gt;
RAILS_ENV=production bundle exec rake redmine:load_default_data&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Weiter in der Shell:&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
cd ~/doms/prj.example.com/&lt;br /&gt;
rm -rf htdocs-ssl/ app-ssl/ subs/www/ subs-ssl/www/&lt;br /&gt;
ln -s $HOME/redmine-5.1.9 app-ssl&lt;br /&gt;
ln -s $HOME/redmine-5.1.9/public htdocs-ssl&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn alles gut gegangen ist, ist die Redmine-Installation unter&lt;br /&gt;
https://prj.example.com erreichbar. Beim ersten Login als User &amp;quot;admin&amp;quot; mit Passwort &amp;quot;admin&amp;quot; wird ein neues Passwort konfiguriert.&lt;br /&gt;
&lt;br /&gt;
Nach der Änderung des Admin-Passwort sollten einige Einstellungen im Bereich Administration/Konfiguration durchgesehen werden:&lt;br /&gt;
* im Bereich &amp;quot;Allgemein&amp;quot; der Applikationstitel, der Hostname und das Protokoll&lt;br /&gt;
* im Bereich &amp;quot;Mailbenachrichtigung&amp;quot; der E-Mail-Absender und die E-Mail-Fußzeile&lt;br /&gt;
&lt;br /&gt;
== weitere Schritte ==&lt;br /&gt;
&lt;br /&gt;
Redmine ist ein stabiles Projektmanagement-Werkzeug. Es ist freie Software und weiterhin gepflegt. Die Benutzeroberfläche ist funktional. Sie macht aber einen etwas veralteten Eindruck.&lt;br /&gt;
&lt;br /&gt;
Es gibt einige Themes und Plugins, die diesen Nachteil teilweise kompensieren können:&lt;br /&gt;
* Das Theme &amp;quot;farend bleuclair&amp;quot; sorgt für einen frischeren Ersteindruck&lt;br /&gt;
* Ein Kanban Board ist als Plugin verfügbar&lt;br /&gt;
* ebenso kann ein  visueller Editor für das Wiki nachgerüstet werden&lt;br /&gt;
&lt;br /&gt;
Weiterhin ist es möglich, das Anlegen von Tickets für eingehende E-Mail-Nachrichten zu konfigurieren.&lt;br /&gt;
&lt;br /&gt;
== eingehende E-Mails ==&lt;br /&gt;
&lt;br /&gt;
Wenn für eingehende E-Mail-Nachrichten jeweils ein Ticket angelegt werden soll, ist das über die Datei .forward möglich.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
# cat .forward &lt;br /&gt;
&lt;br /&gt;
&amp;quot;| /home/pacs/xyz00/users/redmine/bin/email2ticket&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
# cat bin/email2ticket &lt;br /&gt;
&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
export PATH=/usr/local/bin:/usr/bin:/bin&lt;br /&gt;
export RAILS_ENV=production&lt;br /&gt;
cd /home/pacs/xyz00/users/redmine/redmine-5.1.9&lt;br /&gt;
bundle exec rake redmine:email:read project=projekt-kurzname tracker=3 unknown_user=create&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* [https://www.redmine.org/ Redmine Projekt]&lt;br /&gt;
* [https://www.redmine.org/projects/redmine/wiki/RedmineInstall Installationsanleitung]&lt;br /&gt;
* [https://github.com/farend/redmine_theme_farend_bleuclair Theme Farend Bleuclair]&lt;br /&gt;
* [https://github.com/jgraichen/redmine_dashboard Redmine Dashboard Plugin] oder [https://github.com/happy-se-life/kanban Kanban Board Plugin]&lt;br /&gt;
* [https://github.com/taqueci/redmine_wysiwyg_editor Wysiwyg Editor Plugin]&lt;br /&gt;
* [https://github.com/danmunn/redmine_dmsf Dokumentenverwaltung (DMS) mit WebDAV-Server und Volltextsuche]&lt;br /&gt;
* [https://www.redmine.org/projects/redmine/wiki/RedmineReceivingEmails Eingehende E-Mails verarbeiten]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[Kategorie:HSDoku]]&lt;br /&gt;
[[Kategorie:Installationsanleitungen]]&lt;br /&gt;
[[Kategorie:Software]]&lt;br /&gt;
[[Kategorie:Passenger]]&lt;br /&gt;
[[Kategorie:Projektverwaltung]]&lt;br /&gt;
[[Kategorie:Projektmanagement]]&lt;br /&gt;
[[Kategorie:WebDAV]]&lt;/div&gt;</summary>
		<author><name>Peh</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Cryptpad&amp;diff=7362</id>
		<title>Cryptpad</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Cryptpad&amp;diff=7362"/>
		<updated>2025-05-26T14:48:25Z</updated>

		<summary type="html">&lt;p&gt;Peh: kann kein CalDAV&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Cryptpad =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Cryptpad&#039;&#039;&#039; ist ein Online-Office, dass in erster Linie im Internet-Browser zu bedienen ist. Das Alleinstellungsmerkmal ist die &#039;&#039;&#039;Ende-zu-Ende-Verschlüsselung&#039;&#039;&#039; aller Dokumente. Die Entschlüsselung und die Verschlüsselung erfolgen im Browser. Auf dem Server sind keinerlei lesbare Daten abgelegt.&lt;br /&gt;
&lt;br /&gt;
Cryptpad bietet Editoren für formatierte &#039;&#039;&#039;Textdokumente&#039;&#039;&#039; (im HTML-Format) und für &#039;&#039;&#039;Markdown-Dateien&#039;&#039;&#039; und andere Textdateien. Der Anwendungsfall der &#039;&#039;&#039;Tabellenkalkulation&#039;&#039;&#039; wird durch Onlyoffice-Tabellen abgedeckt. Präsentationen können mit Hilfe von Markdown erstellt werden. Bilder und PDF-Dokumente können in die Umgebung hochgeladen und im Browser betrachtet werden. Ein &#039;&#039;&#039;Kalender&#039;&#039;&#039; und ein &#039;&#039;&#039;Kanbanboard&#039;&#039;&#039; zur Aufgabenverwaltung vervollständigen das Angebot.&lt;br /&gt;
&lt;br /&gt;
Das Projekt stellt eine gute [https://docs.cryptpad.fr/de/admin_guide/installation.html Installationsanleitung] bereit. Leider ist die Konfiguration des Webservers nur für NGinX dokumentiert, so dass für die Konfiguration des Apache Webserver einige Experimente notwendig wurden.&lt;br /&gt;
&lt;br /&gt;
= Installation =&lt;br /&gt;
&lt;br /&gt;
Mitglieder, die einen Managed Webspace im Shared Hosting nutzen, müssen für ihre Cryptpad-Installation einen &amp;quot;eigenen Serverdienst&amp;quot; beim Hostsharing-Service anmelden. Diese Option ist im Shared Hosting kostenpflichtig. Für den Serverdienst wird ein IP-Port mit dem Server vereinbart. Im Beispiel wird Port &#039;30001&#039; genutzt.&lt;br /&gt;
&lt;br /&gt;
Für die Installation werden mit Hilfe von HSAdmin ein User (hier: &#039;xyz00-cryptpad&#039;) und eine Domain angelegt (hier: &#039;cryptpad.hs-example.de&#039;). Die Entwickler empfehlen die Nutzung von zwei Domains für eine Cryptpad Installation. Wir nutzen hier eine &#039;leichtgewichtige&#039; Subdomain &#039;api.cryptpad.hs-example.de&#039;, die bei Hostsharing ohne weitere Konfiguration nutzbar ist. &lt;br /&gt;
&lt;br /&gt;
Für die aktuelle Version wird Node LTS (Version 20.x) empfohlen. Zur Installation (erfolgt weiter unten) siehe&lt;br /&gt;
[[NodeJS]]. Es kann aber auch das Node 18 von Debian Bookworm verwendet werden.&lt;br /&gt;
&lt;br /&gt;
== Webserver Konfiguration ==&lt;br /&gt;
&lt;br /&gt;
Nach dem Aufschalten der Domain &#039;cryptpad.hs-example.de&#039; passen wir die generierte Verzeichnisstruktur der Domain wie folgt an:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
cd ~/doms/cryptpad.hs-example.de&lt;br /&gt;
rm -rf subs/www subs-ssl/www htdocs-ssl/.htaccess&lt;br /&gt;
mkdir subs/api subs-ssl/api&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In die Verzeichnisse &#039;subs/api&#039;, &#039;subs-ssl/api&#039; und &#039;htdocs-ssl&#039; werden jeweils Dateien mit dem Namen &#039;.htaccess&#039; zur Konfiguration des Apache Webserver abgelegt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=apache line&amp;gt;&lt;br /&gt;
# cd ~/doms/cryptpad.hs-example.de&lt;br /&gt;
# cat subs/api/.htaccess &lt;br /&gt;
&lt;br /&gt;
Redirect permanent / https://api.cryptpad.hs-example.de/&lt;br /&gt;
 &lt;br /&gt;
# cat subs-ssl/api/.htaccess &lt;br /&gt;
&lt;br /&gt;
DirectoryIndex disabled&lt;br /&gt;
RewriteEngine On&lt;br /&gt;
RewriteBase /&lt;br /&gt;
RewriteCond %{HTTP:UPGRADE} ^WebSocket$           [NC,OR]&lt;br /&gt;
RewriteCond %{HTTP:CONNECTION} ^Upgrade$          [NC]&lt;br /&gt;
RewriteRule .* ws://127.0.0.1:30001%{REQUEST_URI}  [proxy]&lt;br /&gt;
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f&lt;br /&gt;
RewriteRule .* http://127.0.0.1:30001%{REQUEST_URI} [proxy,last]&lt;br /&gt;
 &lt;br /&gt;
# cat htdocs-ssl/.htaccess &lt;br /&gt;
&lt;br /&gt;
DirectoryIndex disabled&lt;br /&gt;
RewriteEngine On&lt;br /&gt;
RewriteBase /   &lt;br /&gt;
RewriteCond %{REQUEST_FILENAME} !-f&lt;br /&gt;
RewriteCond %{HTTP:UPGRADE} ^WebSocket$           [NC,OR]&lt;br /&gt;
RewriteCond %{HTTP:CONNECTION} ^Upgrade$          [NC]&lt;br /&gt;
RewriteRule .* ws://127.0.0.1:30001%{REQUEST_URI}  [proxy]&lt;br /&gt;
RewriteCond %{REQUEST_FILENAME} !-f&lt;br /&gt;
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f&lt;br /&gt;
RewriteRule .* http://127.0.0.1:30001%{REQUEST_URI} [proxy,last]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine weitere &#039;.htaccess&#039;-Datei liegt direkt im Hauptverzeichnis der Domain (die überlangen Zeilen beachten):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=apache line&amp;gt;&lt;br /&gt;
# cd ~/doms/cryptpad.hs-example.de&lt;br /&gt;
# cat .htaccess &lt;br /&gt;
Header Set Access-Control-Allow-Origin &amp;quot;https://api.cryptpad.hs-example.de&amp;quot;&lt;br /&gt;
Header Set Access-Control-Allow-Methods &amp;quot;GET, POST, OPTIONS&amp;quot;&lt;br /&gt;
Header Set Access-Control-Allow-Headers &amp;quot;DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Content-Range,Range&amp;quot;&lt;br /&gt;
Header Set Access-Control-Max-Age &amp;quot;1728000&amp;quot;&lt;br /&gt;
Header Set X-XSS-Protection &amp;quot;1; mode=block&amp;quot;&lt;br /&gt;
Header Set X-Content-Type-Options &amp;quot;nosniff&amp;quot;&lt;br /&gt;
Header Set Cross-Origin-Resource-Policy &amp;quot;cross-origin&amp;quot;&lt;br /&gt;
Header Set Cross-Origin-Embedder-Policy &amp;quot;require-corp&amp;quot;&lt;br /&gt;
Header Set Content-Security-Policy &amp;quot;default-src &#039;none&#039;; child-src https://cryptpad.hs-example.de; worker-src &#039;self&#039;; media-src blob:; style-src &#039;unsafe-inline&#039; &#039;self&#039; https://cryptpad.hs-example.de; script-src &#039;self&#039; resource: https://cryptpad.hs-example.de; connect-src &#039;self&#039; blob: https://cryptpad.hs-example.de https://api.cryptpad.hs-example.de wss://cryptpad.hs-example.de; font-src &#039;self&#039; data: https://cryptpad.hs-example.de; img-src &#039;self&#039; data: blob: https://cryptpad.hs-example.de; frame-src &#039;self&#039; blob: https://api.cryptpad.hs-example.de; frame-ancestors &#039;self&#039; https://cryptpad.hs-example.de;&amp;quot; &amp;quot;expr=%{REQUEST_URI} !~ m#^/(sheet|common)/#&amp;quot;&lt;br /&gt;
Header Set Content-Security-Policy &amp;quot;default-src &#039;none&#039;; child-src https://cryptpad.hs-example.de; worker-src &#039;self&#039;; media-src blob:; style-src &#039;unsafe-inline&#039; &#039;self&#039; https://cryptpad.hs-example.de; script-src &#039;self&#039; resource: https://cryptpad.hs-example.de &#039;unsafe-eval&#039; &#039;unsafe-inline&#039;; connect-src &#039;self&#039; blob: https://cryptpad.hs-example.de https://api.cryptpad.hs-example.de wss://cryptpad.hs-example.de; font-src &#039;self&#039; data: https://cryptpad.hs-example.de; img-src &#039;self&#039; data: blob: https://cryptpad.hs-example.de; frame-src &#039;self&#039; blob: https://api.cryptpad.hs-example.de; frame-ancestors &#039;self&#039; https://cryptpad.hs-example.de;&amp;quot; &amp;quot;expr=%{REQUEST_URI} =~ m#^/(sheet|common)/#&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zwei Datenverzeichnisse werden angelegt und direkt ins &#039;htdocs-ssl&#039; verlinkt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
cd $HOME&lt;br /&gt;
mkdir data&lt;br /&gt;
mkdir data/blob&lt;br /&gt;
mkdir data/block&lt;br /&gt;
cd $HOME/doms/cryptpad.hs-example.de/htdocs-ssl/&lt;br /&gt;
ln -s /home/pacs/xyz00/users/cryptpad/data/blob .&lt;br /&gt;
ln -s /home/pacs/xyz00/users/cryptpad/data/block .&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dieser Link muss angepasst werden, wenn der Blob-Speicher in den Zusatzspeicher unter /home/storage verschoben wird (siehe unten)!&lt;br /&gt;
&lt;br /&gt;
== Installation von NodeJS ==&lt;br /&gt;
&lt;br /&gt;
Nach dieser [https://wiki.hostsharing.net/index.php?title=NodeJS Anleitung] hier im Wiki kann mit Hilfe von &#039;nvm&#039; &#039;node&#039; in der Version 20 installiert werden.&lt;br /&gt;
&lt;br /&gt;
Es geht aber auch ohne selbstinstalliertes Node: die Version 18 von Debian Bookworm lässt sich ebenso gut verwenden.&lt;br /&gt;
&lt;br /&gt;
== Installation des Cryptpad ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
cd $HOME&lt;br /&gt;
npm install -g bower&lt;br /&gt;
git clone https://github.com/xwiki-labs/cryptpad.git cryptpad&lt;br /&gt;
cd cryptpad &lt;br /&gt;
# aktuelle Version nachsehen&lt;br /&gt;
git checkout 2024.9.0&lt;br /&gt;
npm install&lt;br /&gt;
bower install &lt;br /&gt;
cd config&lt;br /&gt;
cp config.example.js config.js&lt;br /&gt;
vi config.js&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Meine Konfiguration in der &#039;config.js&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=javascript line&amp;gt;&lt;br /&gt;
// $ cat config.js&lt;br /&gt;
module.exports = {&lt;br /&gt;
 &lt;br /&gt;
   httpUnsafeOrigin: &#039;https://cryptpad.hs-example.de&#039;,&lt;br /&gt;
   httpSafeOrigin: &amp;quot;https://api.cryptpad.hs-example.de&amp;quot;,&lt;br /&gt;
   httpAddress: &#039;127.0.0.1&#039;,&lt;br /&gt;
   httpPort: 30001,&lt;br /&gt;
   maxWorkers: 4,&lt;br /&gt;
   /*&lt;br /&gt;
   adminKeys: [&lt;br /&gt;
       &amp;quot;[admin@cryptpad.hs-example.de/xxxxxxxxxxxxxxxxxxxxxxxx=]&amp;quot;,&lt;br /&gt;
   ],&lt;br /&gt;
   */&lt;br /&gt;
   inactiveTime: 90, // days&lt;br /&gt;
   archiveRetentionTime: 15,&lt;br /&gt;
   accountRetentionTime: 365,&lt;br /&gt;
   maxUploadSize: 8 * 1024 * 1024,&lt;br /&gt;
   filePath: &#039;/home/pacs/xyz00/users/cryptpad/data/file/&#039;,&lt;br /&gt;
   archivePath: &#039;/home/pacs/xyz00/users/cryptpad/data/archive/&#039;,&lt;br /&gt;
   pinPath: &#039;/home/pacs/xyz00/users/cryptpad/data/pins&#039;,&lt;br /&gt;
   taskPath: &#039;/home/pacs/xyz00/users/cryptpad/data/tasks&#039;,&lt;br /&gt;
   blockPath: &#039;/home/pacs/xyz00/users/cryptpad/data/block&#039;,&lt;br /&gt;
   blobPath: &#039;/home/pacs/xyz00/users/cryptpad/data/blob&#039;,&lt;br /&gt;
   blobStagingPath: &#039;/home/pacs/xyz00/users/cryptpad/data/blobstage&#039;,&lt;br /&gt;
   decreePath: &#039;/home/pacs/xyz00/users/cryptpad/data/decrees&#039;,&lt;br /&gt;
   logPath: &#039;/home/pacs/xyz00/users/cryptpad/data/logs&#039;,&lt;br /&gt;
   logToStdout: true,&lt;br /&gt;
   logLevel: &#039;info&#039;,&lt;br /&gt;
   logFeedback: false,&lt;br /&gt;
   verbose: false,&lt;br /&gt;
   installMethod: &#039;unspecified&#039;,&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Admin-Key wird später ergänzt. Der erste registrierte User im Cryptpad kann den Schlüssel aus seinem Profil herauskopieren.&lt;br /&gt;
&lt;br /&gt;
Wenn größere Datenmengen erwartet werden, kann der &#039;blobPath&#039; in den Zusatzspeicher verlegt werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=javascript line&amp;gt;&lt;br /&gt;
   blobPath: &#039;/home/storage/xyz00/users/cryptpad/data/blob&#039;,&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Start des Cryptpad ==&lt;br /&gt;
&lt;br /&gt;
Ich starte das Cryptpad zunächst einfach mit dem &#039;nohup&#039;-Kommando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
cd ~/cryptpad&lt;br /&gt;
nohup node server &amp;amp;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Cryptpad als Dienst starten ==&lt;br /&gt;
&lt;br /&gt;
Die Cryptpad-Prozesse sollen von Systemd als Dienst automatisch gestartet werden.&lt;br /&gt;
&lt;br /&gt;
Dazu legen wir eine Systemd-Unit an:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
mkdir -p $HOME/.config/systemd/user/&lt;br /&gt;
vi $HOME/.config/systemd/user/cryptpad.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Inhalt der Datei soll sein: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini line&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Cryptpad&lt;br /&gt;
After=network.target&lt;br /&gt;
 &lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
WorkingDirectory=%h/cryptpad&lt;br /&gt;
Environment=&amp;quot;NODE_ENV=production&amp;quot;&lt;br /&gt;
Environment=&amp;quot;PATH=/usr/local/bin:/usr/bin:/bin&amp;quot;&lt;br /&gt;
ExecStart=/usr/bin/node server.js&lt;br /&gt;
Restart=always&lt;br /&gt;
PrivateTmp=true&lt;br /&gt;
NoNewPrivileges=true&lt;br /&gt;
 &lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=default.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Die Node-Version im Pfad muss ggf. korrigiert werden)&lt;br /&gt;
&lt;br /&gt;
Der Dienst wird aktiviert und gestartet mit:&lt;br /&gt;
&lt;br /&gt;
 systemctl --user daemon-reload&lt;br /&gt;
 systemctl --user enable cryptpad.service&lt;br /&gt;
 systemctl --user start cryptpad.service&lt;br /&gt;
&lt;br /&gt;
= weiterführende Links =&lt;br /&gt;
&lt;br /&gt;
* [https://cryptpad.fr/ Die Cryptpad Installation der Entwickler]&lt;br /&gt;
* [https://docs.cryptpad.fr/de/ Dokumentation in deutscher Sprache]&lt;br /&gt;
* [https://docs.cryptpad.fr/de/admin_guide/installation.html Installationanleitung]&lt;br /&gt;
* [https://codeberg.org/tpokorra/hs.ansible/src/branch/main/playbooks/cryptpad Ansible Playbook für Hostsharing]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[Kategorie:HSDoku]]&lt;br /&gt;
[[Kategorie:Installationsanleitungen]]&lt;br /&gt;
[[Kategorie:Software]]&lt;br /&gt;
[[Kategorie:Ansible Playbook]]&lt;/div&gt;</summary>
		<author><name>Peh</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Nextcloud&amp;diff=7344</id>
		<title>Nextcloud</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Nextcloud&amp;diff=7344"/>
		<updated>2025-04-22T10:20:50Z</updated>

		<summary type="html">&lt;p&gt;Peh: /* Nextcloud Cronjob */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Nextcloud =&lt;br /&gt;
&lt;br /&gt;
[https://nextcloud.com/ Nextcloud] ist eine PHP-basierte Open Source Lösung für gängige Cloud-Anwendungen, u.a.:&lt;br /&gt;
&lt;br /&gt;
* Filesharing unter Nutzern derselben Nextcloud, und mit der Öffentlichkeit&lt;br /&gt;
* Single-Sign-On Authentifizierung (SSO)&lt;br /&gt;
* Videokonferenzen (WebRTC)&lt;br /&gt;
* Online-Office Anwendung [https://www.collaboraoffice.com/ Collabora Online]&lt;br /&gt;
&lt;br /&gt;
Beispiel-Funktionalität, die über Plugins, sogenannte [https://apps.nextcloud.com/ &amp;quot;Apps&amp;quot;], bereit gestellt werden kann:&lt;br /&gt;
&lt;br /&gt;
* Kalender, Aufgabenverwaltung, Adressbuch&lt;br /&gt;
* Datei-Kollaboration (Kommentare zu Dateien, Verschlagwortung)&lt;br /&gt;
* Feedreader&lt;br /&gt;
* E-Mail-Programm&lt;br /&gt;
* Fotogalerie&lt;br /&gt;
* Musik- und Videowiedergabe&lt;br /&gt;
&lt;br /&gt;
= Nextcloud installieren =&lt;br /&gt;
&lt;br /&gt;
== Vorbereitungen ==&lt;br /&gt;
&lt;br /&gt;
In &#039;&#039;hsadmin&#039;&#039;, zum Beispiel mit &#039;&#039;hsscript&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;hsadmin&#039;&#039;-Shell starten mit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
hsscript -u xyz00 -i&lt;br /&gt;
Password: ********&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann nacheinander anlegen:&lt;br /&gt;
&lt;br /&gt;
* Linux User als Domain-Administrator&lt;br /&gt;
* Subdomain &#039;&#039;cloud.example.org&#039;&#039;&lt;br /&gt;
* PostgreSQL-User &lt;br /&gt;
* PostgreSQL Datenbank&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
xyz00@hsadmin&amp;gt; user.add({set:{name:&#039;xyz00-cloud&#039;,password:&#039;geheim&#039;,shell:&#039;/bin/bash&#039;,comment:&#039;Nextcloud&#039;}})&lt;br /&gt;
xyz00@hsadmin&amp;gt; domain.add({set:{name:&#039;cloud.example.org&#039;,user:&#039;xyz00-cloud&#039;}})&lt;br /&gt;
xyz00@hsadmin&amp;gt; postgresqluser.add({set:{name:&#039;xyz00_nextclusr&#039;,password:&#039;geheim&#039;}})&lt;br /&gt;
xyz00@hsadmin&amp;gt; postgresqldb.add({set:{name:&#039;xyz00_nextcloud&#039;,owner:&#039;xyz00_nextclusr&#039;}})&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Nextcloud installieren ==&lt;br /&gt;
&lt;br /&gt;
Anmelden als Linux-User &#039;&#039;xyz00-cloud&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
ssh -l xyz00-cloud xyz00.hostsharing.net&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;htdocs&#039;&#039; Verzeichnis vorbereiten&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
cd&lt;br /&gt;
mkdir nextcloud&lt;br /&gt;
cd doms/cloud.example.org&lt;br /&gt;
rm -rf subs/www subs-ssl/www htdocs-ssl&lt;br /&gt;
ln -s $HOME/nextcloud htdocs-ssl&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Falls der &#039;&#039;Redirect&#039;&#039; auf die Domain &#039;&#039;example.org&#039;&#039; umleitet statt auf die Subdomain &#039;&#039;cloud.example.org&#039;&#039;, kann diese Aktion helfen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
cd doms/cloud.example.org&lt;br /&gt;
mkdir -p subs-ssl/www&lt;br /&gt;
cp htdocs/.htaccess subs-ssl/www/.htaccess&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nextcloud herunterladen und entpacken.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
cd &lt;br /&gt;
wget https://download.nextcloud.com/server/releases/nextcloud-30.0.6.zip&lt;br /&gt;
unzip nextcloud-30.0.6.zip &lt;br /&gt;
rm nextcloud-30.0.6.zip&lt;br /&gt;
mkdir data tmp&lt;br /&gt;
chmod 700 data tmp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um Probleme mit der Anmeldung der Nextcloud App am Mobilgerät zu vermeiden, müssen folgende Zeilen in der Datei &amp;lt;code&amp;gt;doms/cloud.example.org/.htaccess&amp;lt;/code&amp;gt; eingefügt werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=htaccess&amp;gt;&lt;br /&gt;
RewriteEngine On&lt;br /&gt;
RewriteCond %{HTTP:Authorization} ^(.*)&lt;br /&gt;
RewriteRule .* - [e=HTTP_AUTHORIZATION:%1]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Nextcloud konfigurieren ==&lt;br /&gt;
&lt;br /&gt;
Im Verzeichnis &amp;quot;$HOME/doms/cloud.example.org/fastcgi-ssl/&amp;quot; eine Datei &amp;quot;php.ini&amp;quot; anlegen mit folgendem Inhalt: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
memory_limit=512M&lt;br /&gt;
session.save_path=/home/pacs/xyz00/users/cloud/tmp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann mit einem Editor diese Datei bearbeiten: In der zweiten Zeile den korrekten Pfad des vorher angelegten tmp-Verzeichnisses eintragen.&lt;br /&gt;
&lt;br /&gt;
Im Browser auf die Seite &lt;br /&gt;
http://cloud.example.org gehen und den Anweisungen folgen.&lt;br /&gt;
&lt;br /&gt;
Auf der ersten Seite sind anzugeben:&lt;br /&gt;
&lt;br /&gt;
* Login und Passwort für den Administrator definieren&lt;br /&gt;
* PostgreSQL als Datenbanksystem&lt;br /&gt;
* PostgreSQL-User und Passwort aus dem ersten Schritt oben&lt;br /&gt;
* Name der PostgreSQL-Datenbank aus dem ersten Schritt&lt;br /&gt;
* &amp;quot;localhost&amp;quot; als Datenbankserver (Nextcloud 23.0.2 empfiehlt hier die Angabe des Ports, diesen also lt. [[PostgreSQL]] angeben)&lt;br /&gt;
* Das Verzeichnis &amp;quot;/home/pacs/xyz00/users/cloud/data/&amp;quot; als Daten-Verzeichnis (bitte beachten: das im Eingabefeld voreingestellte verweist auf das Verzeichnis &amp;quot;/home/pacs/xyz00/users/cloud/&#039;&#039;&#039;nextcloud&#039;&#039;&#039;/data/&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Achtung!&#039;&#039;&#039; Die Felder für die Datenbank sind auf dem Startscreen hinter einem unscheinbaren Link versteckt. Um man das Formular für die Datenbank-Daten zu gelangen, muss man auf den Link klicken. Anschließend kann man die gewünschte Datenbank auswählen und die entsprechenden Daten eintragen. &#039;&#039;&#039;Das sollte geschehen, bevor man die Installation abschließt!&#039;&#039;&#039; Tut man dies nicht, wird Nextcloud mit SQLite installiert. Eine Änderung der Datenbank soll zwar laut Dokumentation auch später noch möglich sein, ging aber bei einem Test schief.&lt;br /&gt;
&lt;br /&gt;
In der Konfigurationsdatei der Nextcloud (in &#039;&#039;~/nextcloud/config/config.php&#039;&#039;) lassen sich weitere Voreinstellungen treffen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=php line&amp;gt;&lt;br /&gt;
&#039;maintenance_window_start&#039; =&amp;gt; 1,    // Wartungsfenster ab 1:00 Uhr&lt;br /&gt;
&#039;defaultapp&#039; =&amp;gt; &#039;calendar,files&#039;,   // bei Start wird der Kalender gezeigt&lt;br /&gt;
&#039;default_phone_region&#039; =&amp;gt; &#039;DE&#039;,     // Format Telefonnummern&lt;br /&gt;
&#039;default_language&#039; =&amp;gt; &#039;de&#039;,         // Sprache deutsch&lt;br /&gt;
&#039;force_language&#039; =&amp;gt; &#039;de&#039;,&lt;br /&gt;
&#039;default_locale&#039; =&amp;gt; &#039;de_DE&#039;,        // Locale (Formatierung Zeitangaben etc.) &lt;br /&gt;
&#039;force_locale&#039; =&amp;gt; &#039;de_DE&#039;,&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Nextcloud beschleunigen ==&lt;br /&gt;
&lt;br /&gt;
Dieser Teil ist optional.&lt;br /&gt;
&lt;br /&gt;
Wenn regelmäßig &#039;&#039;&#039;im Browser&#039;&#039;&#039; mit Nextcloud gearbeitet werden soll, ist Nextcloud im Browser oft sehr langsam. Um dies zu verbessern, unterstützt Nextcloud die Anwendung von unterschiedlichen Cache-Verfahren (zum Beispiel Memcache, Redis).&lt;br /&gt;
&lt;br /&gt;
=== Redis Cache ===&lt;br /&gt;
&lt;br /&gt;
Redis ist auf den Hostsharing-Servern vorinstalliert und wird von den Nextcloud-Entwicklern empfohlen. Redis wird als eigener Serverdienst gestartet. &#039;&#039;&#039;In Verbindung mit Hostsharing Managed Webspace muss für Redis [https://www.hostsharing.net/paas/managed-webspace/ Arbeitsspeicher für eigene Serverdienste] gebucht werden&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Die Konfiguration des Redis-Dientes ist auf der Seite [[Redis]] beschrieben. Hier wird für Nextcloud die Variante mit einem Unixsocket benutzt.&lt;br /&gt;
&lt;br /&gt;
In der Konfiguration der Nextcloud (in &#039;&#039;~/nextcloud/config/config.php&#039;&#039;) wird der Redis-Cache wie folgt konfiguriert:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=php line&amp;gt;&lt;br /&gt;
&#039;memcache.local&#039; =&amp;gt; &#039;\\OC\\Memcache\\Redis&#039;,&lt;br /&gt;
&#039;memcache.distributed&#039; =&amp;gt; &#039;\\OC\\Memcache\\Redis&#039;,&lt;br /&gt;
&#039;memcache.locking&#039; =&amp;gt; &#039;\\OC\\Memcache\\Redis&#039;,&lt;br /&gt;
&#039;redis&#039; =&amp;gt; &lt;br /&gt;
  array (&lt;br /&gt;
    &#039;host&#039; =&amp;gt; &#039;/home/pacs/xyz00/users/cloud/redis/var/redis-server.sock&#039;,&lt;br /&gt;
    &#039;port&#039; =&amp;gt; 0,&lt;br /&gt;
    &#039;password&#039; =&amp;gt; &#039;mein-redis-passwort&#039;,&lt;br /&gt;
    &#039;timeout&#039; =&amp;gt; 1.5,&lt;br /&gt;
  ),&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um es perfekt zu machen, nutze ich &#039;&#039;logrotate&#039;&#039; um die Logdateien zu organisieren. Dazu die Konfiguration in &#039;&#039;~/.logrotate&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell line&amp;gt;&lt;br /&gt;
compress&lt;br /&gt;
/home/pacs/xyz00/users/cloud/redis/var/redis.log {&lt;br /&gt;
  rotate 5&lt;br /&gt;
  daily&lt;br /&gt;
  missingok&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Mit systemd-Timern werden die Logdateien täglich rotiert:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;~/.config/systemd/user/logrotate.service&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini line&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=rotate log files&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
ExecStart=/usr/sbin/logrotate -s %h/.logrotate.state %h/.logrotate&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;~/.config/systemd/user/logrotate.timer&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini line&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=timer for nextcloud cleanup job&lt;br /&gt;
&lt;br /&gt;
[Timer]&lt;br /&gt;
OnCalendar=1:1&lt;br /&gt;
Persistent=True&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=timers.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Den Timer aktivieren und starten:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell line&amp;gt;&lt;br /&gt;
$ systemctl --user enable logrotate.timer&lt;br /&gt;
$ systemctl --user start logrotate.timer&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Nextcloud Cronjob ===&lt;br /&gt;
&lt;br /&gt;
Für die regelmäßigen Hintergrundaufgaben innerhalb der Nextcloud sollte ein Cronjob eingerichtet werden. Wir lösen dies hier mit einem weiteren Systemd-Timer:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;~/.config/systemd/user/nextcloud_background.service&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini line&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=nextcloud cleanup job&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
ExecStart=/usr/bin/php %h/nextcloud/cron.php&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;~/.config/systemd/user/nextcloud_background.timer&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini line&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=timer for nextcloud cleanup job&lt;br /&gt;
&lt;br /&gt;
[Timer]&lt;br /&gt;
OnCalendar=*:0/5&lt;br /&gt;
Persistent=True&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=timers.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Den Timer aktivieren und starten:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell line&amp;gt;&lt;br /&gt;
$ systemctl --user enable nextcloud_background.timer&lt;br /&gt;
$ systemctl --user start nextcloud_background.timer&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Nextcloud Push ===&lt;br /&gt;
&lt;br /&gt;
Um Vorgänge wie Sync und Benachrichtigungen bei sehr großen Nextcloud Installationen zu beschleunigen, kann der &amp;lt;code&amp;gt;notify_push&amp;lt;/code&amp;gt; Dienst hinzuinstalliert werden.&lt;br /&gt;
&lt;br /&gt;
==== Abhängigkeiten und Einschränkungen ====&lt;br /&gt;
* &amp;lt;code&amp;gt;notify_push&amp;lt;/code&amp;gt; muss Zugriff auf den gleichen Redis-Cache wie die Nextcloud haben &lt;br /&gt;
** aufgrund von eingeschränktem Passwort Support sollte ein Redis Socket mit sicheren Berechtigungseinstellungen als Alternative zum Redis Port mit Passwort konfiguriert werden.&lt;br /&gt;
* optimaler Weise holt sich &amp;lt;code&amp;gt;notify_push&amp;lt;/code&amp;gt; benötigte informationen aus der &amp;lt;code&amp;gt;config.php&amp;lt;/code&amp;gt; der bestehenden Nextcloud-Installation&lt;br /&gt;
* eine zusätzliche (Sub)domain im gleichen User ist nötig. Andernfalls muss die bestehende &amp;lt;code&amp;gt;.htaccess&amp;lt;/code&amp;gt; muss aus o.g. Gründen modifiziert werden, dies könnte bei Nextcloud-Updates verloren gehen(!)&lt;br /&gt;
* Bestimmte Portbereiche sind bei Hostsharing eingeschränkt, es empfiehlt sich, direkt beispielsweise Port &amp;lt;code&amp;gt;37867&amp;lt;/code&amp;gt; zu nehmen. &amp;lt;strong&amp;gt;aus diesem Grund ist das automatische Setup durch das Plugin bei Hostsharing nicht möglich!&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Installation ====&lt;br /&gt;
Siehe auch: https://github.com/nextcloud/notify_push#manual-setup &lt;br /&gt;
&lt;br /&gt;
1. Installieren der Nextcloud-App &amp;lt;code&amp;gt;notify_push&amp;lt;/code&amp;gt; – (nach Push suchen, &amp;quot;Client Push&amp;quot; wählen)&amp;lt;br&amp;gt;&lt;br /&gt;
2. falls noch nicht erstellt: &amp;lt;code&amp;gt;mkdir -p ~/.config/systemd/user&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
3. mit Lieblingseditor die Datei &amp;lt;code&amp;gt;~/.config/systemd/user/notify_push.service&amp;lt;/code&amp;gt; anlegen:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot; line&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description = Push daemon for Nextcloud clients&lt;br /&gt;
Documentation = https://github.com/nextcloud/notify_push&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
# Change if you already have something running on this port&lt;br /&gt;
Environment = PORT=37867&lt;br /&gt;
# We don&#039;t want to bind to 0.0.0.0, hence the --bind&lt;br /&gt;
ExecStart = /home/pacs/xyz00/users/cloud/bin/notify_push --bind 127.0.0.1 /home/pacs/xyz00/users/cloud/nextcloud/config/config.php&lt;br /&gt;
Type=notify&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy = default.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
4. das Verzeichnis &amp;lt;code&amp;gt;~/bin&amp;lt;/code&amp;gt; anlegen und die aktuellste binary herunterladen und ausführbar machen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot; line&amp;gt;release=`curl -L https://api.github.com/repos/nextcloud/notify_push/releases/latest -s | jq -r &#039;.tag_name&#039;` &amp;amp;&amp;amp; wget --show-progress -qO ~/bin/notify_push https://github.com/nextcloud/notify_push/releases/download/$release/notify_push-x86_64-unknown-linux-musl &amp;amp;&amp;amp; chmod +x ~/bin/notify_push&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
5. es könnte die folgende Umgebungsvariable zum Bedienen von systemd notwendig werden:&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;export XDG_RUNTIME_DIR=/run/user/$UID&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
6. den neuen systemd-Dienst automatisch bei Systemstart, sowie jetzt sofort starten:&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;systemctl enable --now --user notify_push&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
7. nun gehen wir in &amp;lt;code&amp;gt;doms/push.cloud.example.com/htdocs-ssl/.htaccess&amp;lt;/code&amp;gt; und ersetzen den Inhalt (bevorzugt), oder wir ergänzen die .htaccess der Nextcloud im unteren Teil um die folgenden Zeilen (letzteres kann bei Updates überschrieben werden!):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;apache&amp;quot; line&amp;gt;&lt;br /&gt;
# bei eigener (sub)domain ist /push/ nicht erforderlich, aber wer weiß, eventuell ist das mit robuster&lt;br /&gt;
RewriteCond %{REQUEST_URI}  ^/push/ws    [NC,OR]&lt;br /&gt;
RewriteCond %{HTTP:UPGRADE} ^WebSocket$           [NC,OR]&lt;br /&gt;
RewriteCond %{HTTP:CONNECTION} ^Upgrade$          [NC]&lt;br /&gt;
RewriteRule .* ws://127.0.0.1:37867/ws  [proxy]&lt;br /&gt;
&lt;br /&gt;
RewriteCond %{REQUEST_URI}  ^/push    [NC]&lt;br /&gt;
RewriteRule .* http://127.0.0.1:37867%{REQUEST_URI}  [proxy]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
8. abschließend im Nextcloud Ordner die Konfiguration des Plugins anstoßen: &amp;lt;code&amp;gt;php occ notify_push:setup https://cloud.example.com/push&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;php occ notify_push:setup https://push.cloud.example.com/push&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
9. es ist möglich, das die erkannte IP-Adresse des Hives noch nicht vertraut ist. In diesem Fall wird der obige Befehl scheitern und es muss jene aus der Fehlermeldung des Setups unter &amp;lt;code&amp;gt;trusted_proxies&amp;lt;/code&amp;gt; in der &amp;lt;code&amp;gt;config.php&amp;lt;/code&amp;gt; ergänzt werden. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es wird im Repo außerdem ein Testclient bereitgestellt, der sich testweise mit dem Push-Dienst verbindet&lt;br /&gt;
&lt;br /&gt;
== Nextcloud mit Online Office ==&lt;br /&gt;
&lt;br /&gt;
In Nextcloud können Office-Dokumente (Textverarbeitung, Tabellen und Präsentationen) im Browser bearbeitet werden. Dazu steht bei Hostsharing die Collabora Developer Version zur Verfügung. Bestellung und Konfiguration sind hier im Wiki auf der Seite [[Collabora_Online]] beschrieben.&lt;br /&gt;
&lt;br /&gt;
== Nextcloud mit Nextcloud Talk ==&lt;br /&gt;
&lt;br /&gt;
Über die Nextcloud-App &amp;quot;Talk&amp;quot; können Videokonfererenzen mit Screensharing durchgeführt werden. Für die regelmäßige Nutzung kann es sinnvoll sein, einen eigenen TURN Server zu betreiben. Siehe dazu [[Coturn_Installieren]]&lt;br /&gt;
&lt;br /&gt;
== Virenscanner ==&lt;br /&gt;
&lt;br /&gt;
Einige Nutzer wollen die Dateien in Ihrer Nextcloud regelmäßig auf Viren überprüfen. Auf unseren Servern steht dafür der OpenSource-Virenscanner &amp;quot;ClamAV&amp;quot; zur Verfügung. Wenn dieser Scanner benutzt wird, dann sollten die Einstellungen so gewählt sein, dass der ClamAV-Daemon über eine Socket Verbindung angesprochen wird. Die Einstellungen sind im Screenshot dokumentiert.&lt;br /&gt;
&lt;br /&gt;
* Es wird die App [https://apps.nextcloud.com/apps/files_antivirus Antivirus für Dateien] installiert.&lt;br /&gt;
* Bei Modus wird gewählt: &amp;lt;code&amp;gt;ClamAV-Daemon (Socket)&amp;lt;/code&amp;gt;&lt;br /&gt;
* Bei Socket wird gewählt: &amp;lt;code&amp;gt;/var/run/clamav/clamd.ctl&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Datei:Nextcloud-ClamAV-Einstellungen.png||nextcloud einstellungen für die virenscanner-app]]&lt;br /&gt;
&lt;br /&gt;
== Volltextsuche ==&lt;br /&gt;
&lt;br /&gt;
Über die Dokumente einer Nextcloud kann ein Volltextindex erstellt werden. Die Volltextsuche ermöglicht über den Index eine Suche über beliebige Begriffe, die in Dokumenten vorkommen.&lt;br /&gt;
&lt;br /&gt;
Voraussetzung ist der Betrieb eines Elasticsearch Servers. Der Betrieb im Managed Webspace erfodert die Buchung von zwei &amp;quot;Serverdiensten&amp;quot;. Nutzer eines Managed Server müssen mit einem spürbaren Mehrbedarf an Hauptspeicher rechnen.&lt;br /&gt;
&lt;br /&gt;
Zur Installation von Elasticsearch existiert eine eigene Wikiseite: [[Elasticsearch]].&lt;br /&gt;
&lt;br /&gt;
In der Nextcloud sind folgende &#039;&#039;Apps&#039;&#039; zu installieren:&lt;br /&gt;
* Full Text Search&lt;br /&gt;
* Full Text Search - Elasticsearch Platform&lt;br /&gt;
* Full Text Search - Files&lt;br /&gt;
&lt;br /&gt;
nach der Installation der drei Apps steht in den Einstellungen ein neuer Menüpunkt &amp;quot;Volltextsuche&amp;quot; zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
Hier ist einzustellen:&lt;br /&gt;
* Suchplattform: Elasticsearch&lt;br /&gt;
* Adresse des Servlets: http://elastic:das-erzeugt-passwort@127.0.0.1:39200&lt;br /&gt;
* Index: frei-gewaehlter-name-idx&lt;br /&gt;
* Analyzer tokenizer: standard&lt;br /&gt;
&lt;br /&gt;
Die anderen Einstellung nach den eigenen Vorstellungen vornehmen.&lt;br /&gt;
&lt;br /&gt;
Der initiale Aufbau des Suchindex erfolgt über ein &amp;quot;occ&amp;quot;-Kommando auf der Shell:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell line&amp;gt;&lt;br /&gt;
cd nextcloud/&lt;br /&gt;
php occ fulltextsearch:index --output&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn dieser Fehler kommt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=text&amp;gt;&lt;br /&gt;
TypeError: Return value of OCA\Files_FullTextSearch\Model\MountPoint::isGlobal()&lt;br /&gt;
must be of the type bool, null returned in [...]/apps/files_fulltextsearch/lib/Model/MountPoint.php:103&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
sollte dieser Patch angewendet werden: https://github.com/nextcloud/files_fulltextsearch/issues/125#issuecomment-877789742&lt;br /&gt;
&lt;br /&gt;
Zur Pflege des Indexes wird ein weiterer Hintergrundprozess gestartet:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell line&amp;gt;&lt;br /&gt;
cd nextcloud/&lt;br /&gt;
php occ fulltextsearch:live -q&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Monit Konfiguration dafür sieht so aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell line&amp;gt;&lt;br /&gt;
#~/bin/start-fulltextsearchlive&lt;br /&gt;
#&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
export HOME=/home/pacs/xyz00/users/cloud&lt;br /&gt;
cd $HOME&lt;br /&gt;
mkdir -p $HOME/var&lt;br /&gt;
cd $HOME/nextcloud&lt;br /&gt;
exec php occ fulltextsearch:live -q &amp;amp;&lt;br /&gt;
echo $! &amp;gt;$HOME/var/fulltextsearchlive.pid&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell line&amp;gt;&lt;br /&gt;
#~/bin/stop-fulltextsearchlive&lt;br /&gt;
#&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
export HOME=/home/pacs/xyz00/users/cloud&lt;br /&gt;
kill $( cat $HOME/var/fulltextsearchlive.pid )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
~/.monitrc (siehe oben von der Redis Installation) entsprechend ergänzen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell line&amp;gt;&lt;br /&gt;
check process fulltextsearchlive with pidfile /home/pacs/xyz00/users/cloud/var/fulltextsearchlive.pid&lt;br /&gt;
    start program &amp;quot;/home/pacs/xyz00/users/cloud/bin/start-fulltextsearchlive&amp;quot;&lt;br /&gt;
    stop program &amp;quot;/home/pacs/xyz00/users/cloud/bin/stop-fulltextsearchlive&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Integration mit LDAP ==&lt;br /&gt;
&lt;br /&gt;
Um einheitliche Benutzerzugänge für verschiedene Anwendungen zu ermöglichen, wird oft auf ein zentrales LDAP Verzeichnis gesetzt. &lt;br /&gt;
&lt;br /&gt;
Dieses kann für Nextcloud eingesetzt werden, damit Benutzer nicht lokal in Nextcloud, sondern in LDAP verwaltet werden können.&lt;br /&gt;
&lt;br /&gt;
Siehe auch https://docs.nextcloud.com/server/latest/admin_manual/configuration_user/user_auth_ldap.html&lt;br /&gt;
&lt;br /&gt;
Dazu muss die App &amp;quot;LDAP user and group backend&amp;quot; in den Nextcloud Apps aktiviert werden.&lt;br /&gt;
&lt;br /&gt;
Dann muss die LDAP Anbindung in den Administrationseinstellungen unter &amp;quot;LDAP/AD-Integration&amp;quot; eingerichtet werden.&lt;br /&gt;
&lt;br /&gt;
Der Server mit Port, die BenutzerDN mit Passwort und die BaseDN müssen eingetragen werden.&lt;br /&gt;
&lt;br /&gt;
Es muss auch bestimmt werden, welche Klasse (z.B. inetOrgPerson) die Benutzer brauchen, um Zugriff auf die Nextcloud zu erhalten.&lt;br /&gt;
&lt;br /&gt;
Falls schon Benutzer in der Nextcloud existieren, und diese zu LDAP mitgenommen werden sollen, kann der Anleitung aus diesem Forum Eintrag gefolgt werden: https://help.nextcloud.com/t/migration-to-ldap-keeping-users-and-data/13205&lt;br /&gt;
&lt;br /&gt;
* Voraussetzung ist, dass der Benutzernamen der zu übernehmenden Benutzer in Nextcloud der uid in LDAP entspricht.&lt;br /&gt;
* Es wird ein Administrator Benutzer benötigt, der lokal angelegt wurde, und auch lokal bleibt.&lt;br /&gt;
* Mit diesem Administrator Benutzer wird die LDAP Anbindung eingerichtet.&lt;br /&gt;
* In der Experten Ansicht von LDAP/AD muss bei &amp;quot;Attribut für interne Benutzernamen&amp;quot; eingetragen werden: uid&lt;br /&gt;
* Klicke den Schalter &amp;quot;LDAP Benutzernamenzuordnung löschen&amp;quot;&lt;br /&gt;
* Klicke den Schalter &amp;quot;LDAP Gruppennamenzuordnung löschen&amp;quot;&lt;br /&gt;
* dann in der MySQL Datenbank anmelden, und aus uc_users alle Benutzer bis auf den Administrator Benutzer löschen&lt;br /&gt;
* Dann in der Nextcloud Weboberfläche sich alle Benutzer anzeigen lassen&lt;br /&gt;
* Nun gelingt die Anmeldung mit den anderen Benutzern mit dem LDAP Passwort, und die Dateien wurden übernommen.&lt;br /&gt;
&lt;br /&gt;
== Optimierung der Geschwindigkeit ==&lt;br /&gt;
Manchmal fühlt sich die Nextcloud träge an.&lt;br /&gt;
&lt;br /&gt;
Folgende Änderungen können helfen:&lt;br /&gt;
&lt;br /&gt;
* HTTP/2.0 aktivieren: dem Service von Hostsharing Bescheid geben&lt;br /&gt;
* Die App Dashboard deaktivieren, und dafür werden direkt die Dateien angezeigt&lt;br /&gt;
* Einblenden der README in den Ordnern abschalten: das kann pro Ordner in der UI geschehen (links unten), oder global: &amp;lt;code&amp;gt;occ config:app:set text workspace_available --value=0&amp;lt;/code&amp;gt;. Siehe auch [https://docs.nextcloud.com/server/latest/admin_manual/configuration_server/text_configuration.html#disable-rich-workspaces-globally]&lt;br /&gt;
&lt;br /&gt;
== Default App einstellen ==&lt;br /&gt;
&lt;br /&gt;
In der Datei config.php können wir einstellen, welche App direkt nach der Anmeldung gezeigt wird.&lt;br /&gt;
&lt;br /&gt;
Das ist entweder die Dashboard App, wenn sie aktiviert ist, oder die Dateien App (files).&lt;br /&gt;
&lt;br /&gt;
Falls der Kalender direkt angezeigt werden soll, muss folgende Zeile in der config.php hinzugefügt werden (siehe auch [https://docs.nextcloud.com/server/stable/admin_manual/configuration_server/config_sample_php_parameters.html#defaultapp]):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
&#039;defaultapp&#039; =&amp;gt; &#039;calendar&#039;,&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Nextcloud Updates =&lt;br /&gt;
&lt;br /&gt;
== Updater über die Shell starten ==&lt;br /&gt;
&lt;br /&gt;
Wenn die NextCloud sich nicht über das Webfrontend updaten lässt, kann der Updater auch per Shell im directory /updater durch ausführen des updater.phar gestartet werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell line&amp;gt;&lt;br /&gt;
xyz00-cloud@h00:~$ cd ~/nextcloud&lt;br /&gt;
xyz00-cloud@h00:~/nextcloud$ php updater/updater.phar&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Falls während des Updates kein Backup angelegt werden soll:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell line&amp;gt;&lt;br /&gt;
xyz00-cloud@h00:~$ cd ~/nextcloud&lt;br /&gt;
xyz00-cloud@h00:~/nextcloud$ php updater/updater.phar --no-backup&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es sollten außerdem ein paar Routine-Aufräumarbeiten durchgeführt werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell line&amp;gt;&lt;br /&gt;
xyz00-cloud@h00:~$ cd ~/nextcloud&lt;br /&gt;
xyz00-cloud@h00:~/nextcloud$ php occ db:add-missing-primary-keys --no-interaction&lt;br /&gt;
xyz00-cloud@h00:~/nextcloud$ php occ db:add-missing-columns --no-interaction&lt;br /&gt;
xyz00-cloud@h00:~/nextcloud$ php occ db:add-missing-indices --no-interaction&lt;br /&gt;
xyz00-cloud@h00:~/nextcloud$ php occ db:convert-filecache-bigint --no-interaction&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So können die Apps noch alle aktualisiert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell line&amp;gt;&lt;br /&gt;
xyz00-cloud@h00:~$ cd ~/nextcloud&lt;br /&gt;
xyz00-cloud@h00:~/nextcloud$ php occ app:update --all -n --no-ansi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für weitere Informationen kann auf die offizielle Doku ab Ziffer 2. zurückgegriffen werden.&lt;br /&gt;
&lt;br /&gt;
* [https://docs.nextcloud.com/server/latest/admin_manual/maintenance/update.html#using-the-command-line-based-updater https://docs.nextcloud.com]&lt;br /&gt;
&lt;br /&gt;
Hier gibt es ein kurzes Video, das die Anmeldung über die Kommandozeile mit Putty erklärt und die Aktualisierung von Nextcloud auf der Kommandozeile:&lt;br /&gt;
&lt;br /&gt;
* [https://tube.solidcharity.net/w/0cf5ee97-ba7c-41df-a56f-8d1fea842ab0 Nextcloud auf der Kommandozeile aktualisieren]&lt;br /&gt;
&lt;br /&gt;
== Wartungsmodus per Shell ein- oder ausschalten ==&lt;br /&gt;
&lt;br /&gt;
So kann der Wartungsmodus angeschaltet werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell line&amp;gt;&lt;br /&gt;
xyz00-cloud@h00:~$ cd ~/nextcloud&lt;br /&gt;
xyz00-cloud@h00:~/nextcloud$ php occ maintenance:mode --on&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So kann der Wartungsmodus wieder ausgeschaltet werden, d.h. die Nextcloud ist dann wieder in Betrieb:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell line&amp;gt;&lt;br /&gt;
xyz00-cloud@h00:~$ cd ~/nextcloud&lt;br /&gt;
xyz00-cloud@h00:~/nextcloud$ php occ maintenance:mode --off&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Webfrontend-Updater Probleme / Lösungen ==&lt;br /&gt;
&lt;br /&gt;
=== Datenbank: Indizes | Primärschlüssel | Konvertierungen ===&lt;br /&gt;
&lt;br /&gt;
Aufgetreten nach erfolgtem Versionsupdate Nextcloud 19 auf Nextcloud 20&lt;br /&gt;
&lt;br /&gt;
Nach dem erfolgten Update lädt automatisch die Seite: &#039;&#039;&#039;Sicherheits- und Einrichtungswarnungen&#039;&#039;&#039; auf dieser wird angemerkt, dass manuelle Schritte für die Datenbank durchzuführen sind. Dies betrifft Indizes, Primärschlüssel und Konvertierungen. &lt;br /&gt;
&lt;br /&gt;
Per Shell in der directory /nextcloud folgende Kommandos ausführen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell line&amp;gt;&lt;br /&gt;
xyz00-cloud@h00:~$ cd ~/nextcloud&lt;br /&gt;
xyz00-cloud@h00:~/nextcloud$ php occ db:add-missing-primary-keys --no-interaction&lt;br /&gt;
xyz00-cloud@h00:~/nextcloud$ php occ db:add-missing-columns --no-interaction&lt;br /&gt;
xyz00-cloud@h00:~/nextcloud$ php occ db:add-missing-indices --no-interaction&lt;br /&gt;
xyz00-cloud@h00:~/nextcloud$ php occ db:convert-filecache-bigint --no-interaction&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wichtig ist hier dem durch Nextcloud angegebenen Kommando ein &#039;&#039;&#039;php&#039;&#039;&#039; voranzustellen.&lt;br /&gt;
&lt;br /&gt;
== Update per Skript ==&lt;br /&gt;
&lt;br /&gt;
Es ist möglich die regelmäßigen Updates weitgehend zu automatisieren. Ein Skript wäre etwa:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell line&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
if [ -f $HOME/nextcloud/occ ]; then &lt;br /&gt;
  echo &amp;quot;Nextcloud Update&amp;quot;; &lt;br /&gt;
  cd $HOME/nextcloud;&lt;br /&gt;
  php updater/updater.phar -vv --no-backup --no-interaction&lt;br /&gt;
  php occ maintenance:mode --on&lt;br /&gt;
  php occ db:add-missing-primary-keys --no-interaction&lt;br /&gt;
  php occ db:add-missing-columns --no-interaction&lt;br /&gt;
  php occ db:add-missing-indices --no-interaction&lt;br /&gt;
  php occ db:convert-filecache-bigint --no-interaction&lt;br /&gt;
  php occ app:update --all&lt;br /&gt;
  php occ maintenance:mode --off&lt;br /&gt;
else &lt;br /&gt;
  echo &amp;quot;Keine Nextcloud Installation gefunden&amp;quot;; &lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Update: bei old-stable Version bleiben ==&lt;br /&gt;
&lt;br /&gt;
Normalerweise fragt jede Nextcloud Instanz zentral ab, welches Update zur Verfügung steht, abhängig vom Release Channel. Dabei wird aber relativ schnell auf die nächste Version gewechselt, also z.B. von Nextcloud 28 auf Nextcloud 29, obwohl Nextcloud 28 noch mehrere Monate gepflegt wird, und manche Apps noch nicht bereit sind für Nextcloud 29.&lt;br /&gt;
&lt;br /&gt;
Es kann aber auch eine Alternative eingerichtet werden, in der Datei nextcloud/config/config.php, unter dem Eintrag updater.server.url&lt;br /&gt;
&lt;br /&gt;
Hier wird z.B. auf einen Updater von unserem Mitglied Timotheus Pokorra verwiesen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=php line&amp;gt;&lt;br /&gt;
updater_server_url: &amp;quot;https://ncupdater.solidcharity.com&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dahinter läuft ein Skript, mit dem wir noch länger eine bestimmte Version anbieten können: https://codeberg.org/tpokorra/ncupdater&lt;br /&gt;
&lt;br /&gt;
= Daten auf HDD Storage =&lt;br /&gt;
== Einrichtung des HDD Storage ==&lt;br /&gt;
&lt;br /&gt;
Um den langsameren aber günstigeren HDD Storage von Hostsharing zu nutzen, kann das data Verzeichnis von SSD auf HDD Storage verschoben werden. Ein symbolischer Link reicht nicht aus, man muss den Pfad in der Nextcloud Konfigurationsdatei anpassen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
# Nextcloud in Wartungsmodus versetzen&lt;br /&gt;
xyz00-cloud@h00:~/nextcloud$ php occ maintenance:mode --on&lt;br /&gt;
# Daten auf HDD Storage verschieben&lt;br /&gt;
xyz00-cloud@h00:~/nextcloud$ mv data /home/storage/xyz00/users/cloud/&lt;br /&gt;
# symbolischen Link anlegen&lt;br /&gt;
xyz00-cloud@h00:~/nextcloud$ ln -s /home/storage/xyz00/users/cloud/data data&lt;br /&gt;
# Pfad in config.php ändern&lt;br /&gt;
nano config/config.php&lt;br /&gt;
# Die Zeile mit &#039;datadirectory&#039; finden und entsprechend ändern:&lt;br /&gt;
# &#039;datadirectory&#039; =&amp;gt; &#039;/home/storage/xyz00/users/cloud/data&#039;,&lt;br /&gt;
# Wartungsmodus beenden&lt;br /&gt;
xyz00-cloud@h00:~/nextcloud$ php occ maintenance:mode --off&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ein Fallstrick: Im data-Verzeichnis liegt eine versteckte Datei &amp;quot;.ncdata&amp;quot;. Beim Move-Befehl &amp;quot;mv&amp;quot; für das komplette Data-Verzeichnis wird diese Datei mit verschoben. Sonst muss die Datei ggf. ins neue data-Verzeichnis kopiert werden!&lt;br /&gt;
&lt;br /&gt;
= Einschränkende Bemerkungen =&lt;br /&gt;
== Nextcloud Sync Client ==&lt;br /&gt;
&lt;br /&gt;
Der Nextcloud Sync Client erfüllt eine Funktion ähnlich wie Dropbox, und synchronisiert ganze Ordnerstrukturen. &lt;br /&gt;
&lt;br /&gt;
Gerade wenn man mit mehreren Menschen in einer Nextcloud arbeitet, ist diese Funktion mit Vorsicht zu benutzen.&lt;br /&gt;
&lt;br /&gt;
* Änderungen an der Ordnerstruktur sollten nicht lokal, sondern im Webbrowser vorgenommen werden.&lt;br /&gt;
* Wenn die Gefahr besteht, dass mehrere Menschen gleichzeitig eine Datei bearbeiten, sollte die Datei nicht lokal, sondern im Webbrowser bearbeitet werden.&lt;br /&gt;
* Aus Sicht des Datenschutzes und der Daten-Minimierung sollte überlegt werden, ob die Daten wirklich auf jeden Laptop und Rechner synchronisiert werden sollen, oder ob es reicht, ausschließlich über den Webbrowser auf die Daten zuzugreifen.&lt;br /&gt;
&lt;br /&gt;
= weiterführende Links =&lt;br /&gt;
&lt;br /&gt;
* [https://docs.nextcloud.com/ Nextcloud Dokumentation]&lt;br /&gt;
* [https://apps.nextcloud.com/ Nextcloud Erweiterungen (&amp;quot;Apps&amp;quot;)]&lt;br /&gt;
* [https://ownyourbits.com/2019/06/29/understanding-and-improving-nextcloud-previews/ Optimierung des Caches für Previews]&lt;br /&gt;
* [https://codeberg.org/tpokorra/hs.ansible/src/branch/main/playbooks/nextcloud Ansible Playbook für Hostsharing]&lt;br /&gt;
&lt;br /&gt;
= Nextcloud Reseller bei HS =&lt;br /&gt;
&lt;br /&gt;
[https://nextcloud.ossaas.de OS SaaS]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[Kategorie:HSDoku]]&lt;br /&gt;
[[Kategorie:Installationsanleitungen]]&lt;br /&gt;
[[Kategorie:Ansible Playbook]]&lt;br /&gt;
[[Kategorie:Software]]&lt;br /&gt;
[[Kategorie:CalDAV]]&lt;br /&gt;
[[Kategorie:Nextcloud]]&lt;/div&gt;</summary>
		<author><name>Peh</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Nextcloud&amp;diff=7343</id>
		<title>Nextcloud</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Nextcloud&amp;diff=7343"/>
		<updated>2025-04-22T10:20:24Z</updated>

		<summary type="html">&lt;p&gt;Peh: Cron Hintergrundjob Timer&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Nextcloud =&lt;br /&gt;
&lt;br /&gt;
[https://nextcloud.com/ Nextcloud] ist eine PHP-basierte Open Source Lösung für gängige Cloud-Anwendungen, u.a.:&lt;br /&gt;
&lt;br /&gt;
* Filesharing unter Nutzern derselben Nextcloud, und mit der Öffentlichkeit&lt;br /&gt;
* Single-Sign-On Authentifizierung (SSO)&lt;br /&gt;
* Videokonferenzen (WebRTC)&lt;br /&gt;
* Online-Office Anwendung [https://www.collaboraoffice.com/ Collabora Online]&lt;br /&gt;
&lt;br /&gt;
Beispiel-Funktionalität, die über Plugins, sogenannte [https://apps.nextcloud.com/ &amp;quot;Apps&amp;quot;], bereit gestellt werden kann:&lt;br /&gt;
&lt;br /&gt;
* Kalender, Aufgabenverwaltung, Adressbuch&lt;br /&gt;
* Datei-Kollaboration (Kommentare zu Dateien, Verschlagwortung)&lt;br /&gt;
* Feedreader&lt;br /&gt;
* E-Mail-Programm&lt;br /&gt;
* Fotogalerie&lt;br /&gt;
* Musik- und Videowiedergabe&lt;br /&gt;
&lt;br /&gt;
= Nextcloud installieren =&lt;br /&gt;
&lt;br /&gt;
== Vorbereitungen ==&lt;br /&gt;
&lt;br /&gt;
In &#039;&#039;hsadmin&#039;&#039;, zum Beispiel mit &#039;&#039;hsscript&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;hsadmin&#039;&#039;-Shell starten mit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
hsscript -u xyz00 -i&lt;br /&gt;
Password: ********&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann nacheinander anlegen:&lt;br /&gt;
&lt;br /&gt;
* Linux User als Domain-Administrator&lt;br /&gt;
* Subdomain &#039;&#039;cloud.example.org&#039;&#039;&lt;br /&gt;
* PostgreSQL-User &lt;br /&gt;
* PostgreSQL Datenbank&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
xyz00@hsadmin&amp;gt; user.add({set:{name:&#039;xyz00-cloud&#039;,password:&#039;geheim&#039;,shell:&#039;/bin/bash&#039;,comment:&#039;Nextcloud&#039;}})&lt;br /&gt;
xyz00@hsadmin&amp;gt; domain.add({set:{name:&#039;cloud.example.org&#039;,user:&#039;xyz00-cloud&#039;}})&lt;br /&gt;
xyz00@hsadmin&amp;gt; postgresqluser.add({set:{name:&#039;xyz00_nextclusr&#039;,password:&#039;geheim&#039;}})&lt;br /&gt;
xyz00@hsadmin&amp;gt; postgresqldb.add({set:{name:&#039;xyz00_nextcloud&#039;,owner:&#039;xyz00_nextclusr&#039;}})&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Nextcloud installieren ==&lt;br /&gt;
&lt;br /&gt;
Anmelden als Linux-User &#039;&#039;xyz00-cloud&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
ssh -l xyz00-cloud xyz00.hostsharing.net&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;htdocs&#039;&#039; Verzeichnis vorbereiten&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
cd&lt;br /&gt;
mkdir nextcloud&lt;br /&gt;
cd doms/cloud.example.org&lt;br /&gt;
rm -rf subs/www subs-ssl/www htdocs-ssl&lt;br /&gt;
ln -s $HOME/nextcloud htdocs-ssl&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Falls der &#039;&#039;Redirect&#039;&#039; auf die Domain &#039;&#039;example.org&#039;&#039; umleitet statt auf die Subdomain &#039;&#039;cloud.example.org&#039;&#039;, kann diese Aktion helfen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
cd doms/cloud.example.org&lt;br /&gt;
mkdir -p subs-ssl/www&lt;br /&gt;
cp htdocs/.htaccess subs-ssl/www/.htaccess&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nextcloud herunterladen und entpacken.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
cd &lt;br /&gt;
wget https://download.nextcloud.com/server/releases/nextcloud-30.0.6.zip&lt;br /&gt;
unzip nextcloud-30.0.6.zip &lt;br /&gt;
rm nextcloud-30.0.6.zip&lt;br /&gt;
mkdir data tmp&lt;br /&gt;
chmod 700 data tmp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um Probleme mit der Anmeldung der Nextcloud App am Mobilgerät zu vermeiden, müssen folgende Zeilen in der Datei &amp;lt;code&amp;gt;doms/cloud.example.org/.htaccess&amp;lt;/code&amp;gt; eingefügt werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=htaccess&amp;gt;&lt;br /&gt;
RewriteEngine On&lt;br /&gt;
RewriteCond %{HTTP:Authorization} ^(.*)&lt;br /&gt;
RewriteRule .* - [e=HTTP_AUTHORIZATION:%1]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Nextcloud konfigurieren ==&lt;br /&gt;
&lt;br /&gt;
Im Verzeichnis &amp;quot;$HOME/doms/cloud.example.org/fastcgi-ssl/&amp;quot; eine Datei &amp;quot;php.ini&amp;quot; anlegen mit folgendem Inhalt: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
memory_limit=512M&lt;br /&gt;
session.save_path=/home/pacs/xyz00/users/cloud/tmp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann mit einem Editor diese Datei bearbeiten: In der zweiten Zeile den korrekten Pfad des vorher angelegten tmp-Verzeichnisses eintragen.&lt;br /&gt;
&lt;br /&gt;
Im Browser auf die Seite &lt;br /&gt;
http://cloud.example.org gehen und den Anweisungen folgen.&lt;br /&gt;
&lt;br /&gt;
Auf der ersten Seite sind anzugeben:&lt;br /&gt;
&lt;br /&gt;
* Login und Passwort für den Administrator definieren&lt;br /&gt;
* PostgreSQL als Datenbanksystem&lt;br /&gt;
* PostgreSQL-User und Passwort aus dem ersten Schritt oben&lt;br /&gt;
* Name der PostgreSQL-Datenbank aus dem ersten Schritt&lt;br /&gt;
* &amp;quot;localhost&amp;quot; als Datenbankserver (Nextcloud 23.0.2 empfiehlt hier die Angabe des Ports, diesen also lt. [[PostgreSQL]] angeben)&lt;br /&gt;
* Das Verzeichnis &amp;quot;/home/pacs/xyz00/users/cloud/data/&amp;quot; als Daten-Verzeichnis (bitte beachten: das im Eingabefeld voreingestellte verweist auf das Verzeichnis &amp;quot;/home/pacs/xyz00/users/cloud/&#039;&#039;&#039;nextcloud&#039;&#039;&#039;/data/&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Achtung!&#039;&#039;&#039; Die Felder für die Datenbank sind auf dem Startscreen hinter einem unscheinbaren Link versteckt. Um man das Formular für die Datenbank-Daten zu gelangen, muss man auf den Link klicken. Anschließend kann man die gewünschte Datenbank auswählen und die entsprechenden Daten eintragen. &#039;&#039;&#039;Das sollte geschehen, bevor man die Installation abschließt!&#039;&#039;&#039; Tut man dies nicht, wird Nextcloud mit SQLite installiert. Eine Änderung der Datenbank soll zwar laut Dokumentation auch später noch möglich sein, ging aber bei einem Test schief.&lt;br /&gt;
&lt;br /&gt;
In der Konfigurationsdatei der Nextcloud (in &#039;&#039;~/nextcloud/config/config.php&#039;&#039;) lassen sich weitere Voreinstellungen treffen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=php line&amp;gt;&lt;br /&gt;
&#039;maintenance_window_start&#039; =&amp;gt; 1,    // Wartungsfenster ab 1:00 Uhr&lt;br /&gt;
&#039;defaultapp&#039; =&amp;gt; &#039;calendar,files&#039;,   // bei Start wird der Kalender gezeigt&lt;br /&gt;
&#039;default_phone_region&#039; =&amp;gt; &#039;DE&#039;,     // Format Telefonnummern&lt;br /&gt;
&#039;default_language&#039; =&amp;gt; &#039;de&#039;,         // Sprache deutsch&lt;br /&gt;
&#039;force_language&#039; =&amp;gt; &#039;de&#039;,&lt;br /&gt;
&#039;default_locale&#039; =&amp;gt; &#039;de_DE&#039;,        // Locale (Formatierung Zeitangaben etc.) &lt;br /&gt;
&#039;force_locale&#039; =&amp;gt; &#039;de_DE&#039;,&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Nextcloud beschleunigen ==&lt;br /&gt;
&lt;br /&gt;
Dieser Teil ist optional.&lt;br /&gt;
&lt;br /&gt;
Wenn regelmäßig &#039;&#039;&#039;im Browser&#039;&#039;&#039; mit Nextcloud gearbeitet werden soll, ist Nextcloud im Browser oft sehr langsam. Um dies zu verbessern, unterstützt Nextcloud die Anwendung von unterschiedlichen Cache-Verfahren (zum Beispiel Memcache, Redis).&lt;br /&gt;
&lt;br /&gt;
=== Redis Cache ===&lt;br /&gt;
&lt;br /&gt;
Redis ist auf den Hostsharing-Servern vorinstalliert und wird von den Nextcloud-Entwicklern empfohlen. Redis wird als eigener Serverdienst gestartet. &#039;&#039;&#039;In Verbindung mit Hostsharing Managed Webspace muss für Redis [https://www.hostsharing.net/paas/managed-webspace/ Arbeitsspeicher für eigene Serverdienste] gebucht werden&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Die Konfiguration des Redis-Dientes ist auf der Seite [[Redis]] beschrieben. Hier wird für Nextcloud die Variante mit einem Unixsocket benutzt.&lt;br /&gt;
&lt;br /&gt;
In der Konfiguration der Nextcloud (in &#039;&#039;~/nextcloud/config/config.php&#039;&#039;) wird der Redis-Cache wie folgt konfiguriert:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=php line&amp;gt;&lt;br /&gt;
&#039;memcache.local&#039; =&amp;gt; &#039;\\OC\\Memcache\\Redis&#039;,&lt;br /&gt;
&#039;memcache.distributed&#039; =&amp;gt; &#039;\\OC\\Memcache\\Redis&#039;,&lt;br /&gt;
&#039;memcache.locking&#039; =&amp;gt; &#039;\\OC\\Memcache\\Redis&#039;,&lt;br /&gt;
&#039;redis&#039; =&amp;gt; &lt;br /&gt;
  array (&lt;br /&gt;
    &#039;host&#039; =&amp;gt; &#039;/home/pacs/xyz00/users/cloud/redis/var/redis-server.sock&#039;,&lt;br /&gt;
    &#039;port&#039; =&amp;gt; 0,&lt;br /&gt;
    &#039;password&#039; =&amp;gt; &#039;mein-redis-passwort&#039;,&lt;br /&gt;
    &#039;timeout&#039; =&amp;gt; 1.5,&lt;br /&gt;
  ),&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um es perfekt zu machen, nutze ich &#039;&#039;logrotate&#039;&#039; um die Logdateien zu organisieren. Dazu die Konfiguration in &#039;&#039;~/.logrotate&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell line&amp;gt;&lt;br /&gt;
compress&lt;br /&gt;
/home/pacs/xyz00/users/cloud/redis/var/redis.log {&lt;br /&gt;
  rotate 5&lt;br /&gt;
  daily&lt;br /&gt;
  missingok&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Mit systemd-Timern werden die Logdateien täglich rotiert:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;~/.config/systemd/user/logrotate.service&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini line&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=rotate log files&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
ExecStart=/usr/sbin/logrotate -s %h/.logrotate.state %h/.logrotate&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;~/.config/systemd/user/logrotate.timer&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini line&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=timer for nextcloud cleanup job&lt;br /&gt;
&lt;br /&gt;
[Timer]&lt;br /&gt;
OnCalendar=1:1&lt;br /&gt;
Persistent=True&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=timers.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Den Timer aktivieren und starten:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell line&amp;gt;&lt;br /&gt;
$ systemctl --user enable logrotate.timer&lt;br /&gt;
$ systemctl --user start logrotate.timer&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Nextcloud Cronjob ===&lt;br /&gt;
&lt;br /&gt;
Für die regelmäßigen Hintergrundaufgaben innerhalb der Nextcloud sollte ein Cronjab eingerichtet werden. Wir lösen dies hier mit einem weiteren Systemd-Timer:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;~/.config/systemd/user/nextcloud_background.service&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini line&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=nextcloud cleanup job&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
ExecStart=/usr/bin/php %h/nextcloud/cron.php&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;~/.config/systemd/user/nextcloud_background.timer&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini line&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=timer for nextcloud cleanup job&lt;br /&gt;
&lt;br /&gt;
[Timer]&lt;br /&gt;
OnCalendar=*:0/5&lt;br /&gt;
Persistent=True&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=timers.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Den Timer aktivieren und starten:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell line&amp;gt;&lt;br /&gt;
$ systemctl --user enable nextcloud_background.timer&lt;br /&gt;
$ systemctl --user start nextcloud_background.timer&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Nextcloud Push ===&lt;br /&gt;
&lt;br /&gt;
Um Vorgänge wie Sync und Benachrichtigungen bei sehr großen Nextcloud Installationen zu beschleunigen, kann der &amp;lt;code&amp;gt;notify_push&amp;lt;/code&amp;gt; Dienst hinzuinstalliert werden.&lt;br /&gt;
&lt;br /&gt;
==== Abhängigkeiten und Einschränkungen ====&lt;br /&gt;
* &amp;lt;code&amp;gt;notify_push&amp;lt;/code&amp;gt; muss Zugriff auf den gleichen Redis-Cache wie die Nextcloud haben &lt;br /&gt;
** aufgrund von eingeschränktem Passwort Support sollte ein Redis Socket mit sicheren Berechtigungseinstellungen als Alternative zum Redis Port mit Passwort konfiguriert werden.&lt;br /&gt;
* optimaler Weise holt sich &amp;lt;code&amp;gt;notify_push&amp;lt;/code&amp;gt; benötigte informationen aus der &amp;lt;code&amp;gt;config.php&amp;lt;/code&amp;gt; der bestehenden Nextcloud-Installation&lt;br /&gt;
* eine zusätzliche (Sub)domain im gleichen User ist nötig. Andernfalls muss die bestehende &amp;lt;code&amp;gt;.htaccess&amp;lt;/code&amp;gt; muss aus o.g. Gründen modifiziert werden, dies könnte bei Nextcloud-Updates verloren gehen(!)&lt;br /&gt;
* Bestimmte Portbereiche sind bei Hostsharing eingeschränkt, es empfiehlt sich, direkt beispielsweise Port &amp;lt;code&amp;gt;37867&amp;lt;/code&amp;gt; zu nehmen. &amp;lt;strong&amp;gt;aus diesem Grund ist das automatische Setup durch das Plugin bei Hostsharing nicht möglich!&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Installation ====&lt;br /&gt;
Siehe auch: https://github.com/nextcloud/notify_push#manual-setup &lt;br /&gt;
&lt;br /&gt;
1. Installieren der Nextcloud-App &amp;lt;code&amp;gt;notify_push&amp;lt;/code&amp;gt; – (nach Push suchen, &amp;quot;Client Push&amp;quot; wählen)&amp;lt;br&amp;gt;&lt;br /&gt;
2. falls noch nicht erstellt: &amp;lt;code&amp;gt;mkdir -p ~/.config/systemd/user&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
3. mit Lieblingseditor die Datei &amp;lt;code&amp;gt;~/.config/systemd/user/notify_push.service&amp;lt;/code&amp;gt; anlegen:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot; line&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description = Push daemon for Nextcloud clients&lt;br /&gt;
Documentation = https://github.com/nextcloud/notify_push&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
# Change if you already have something running on this port&lt;br /&gt;
Environment = PORT=37867&lt;br /&gt;
# We don&#039;t want to bind to 0.0.0.0, hence the --bind&lt;br /&gt;
ExecStart = /home/pacs/xyz00/users/cloud/bin/notify_push --bind 127.0.0.1 /home/pacs/xyz00/users/cloud/nextcloud/config/config.php&lt;br /&gt;
Type=notify&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy = default.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
4. das Verzeichnis &amp;lt;code&amp;gt;~/bin&amp;lt;/code&amp;gt; anlegen und die aktuellste binary herunterladen und ausführbar machen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot; line&amp;gt;release=`curl -L https://api.github.com/repos/nextcloud/notify_push/releases/latest -s | jq -r &#039;.tag_name&#039;` &amp;amp;&amp;amp; wget --show-progress -qO ~/bin/notify_push https://github.com/nextcloud/notify_push/releases/download/$release/notify_push-x86_64-unknown-linux-musl &amp;amp;&amp;amp; chmod +x ~/bin/notify_push&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
5. es könnte die folgende Umgebungsvariable zum Bedienen von systemd notwendig werden:&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;export XDG_RUNTIME_DIR=/run/user/$UID&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
6. den neuen systemd-Dienst automatisch bei Systemstart, sowie jetzt sofort starten:&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;systemctl enable --now --user notify_push&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
7. nun gehen wir in &amp;lt;code&amp;gt;doms/push.cloud.example.com/htdocs-ssl/.htaccess&amp;lt;/code&amp;gt; und ersetzen den Inhalt (bevorzugt), oder wir ergänzen die .htaccess der Nextcloud im unteren Teil um die folgenden Zeilen (letzteres kann bei Updates überschrieben werden!):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;apache&amp;quot; line&amp;gt;&lt;br /&gt;
# bei eigener (sub)domain ist /push/ nicht erforderlich, aber wer weiß, eventuell ist das mit robuster&lt;br /&gt;
RewriteCond %{REQUEST_URI}  ^/push/ws    [NC,OR]&lt;br /&gt;
RewriteCond %{HTTP:UPGRADE} ^WebSocket$           [NC,OR]&lt;br /&gt;
RewriteCond %{HTTP:CONNECTION} ^Upgrade$          [NC]&lt;br /&gt;
RewriteRule .* ws://127.0.0.1:37867/ws  [proxy]&lt;br /&gt;
&lt;br /&gt;
RewriteCond %{REQUEST_URI}  ^/push    [NC]&lt;br /&gt;
RewriteRule .* http://127.0.0.1:37867%{REQUEST_URI}  [proxy]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
8. abschließend im Nextcloud Ordner die Konfiguration des Plugins anstoßen: &amp;lt;code&amp;gt;php occ notify_push:setup https://cloud.example.com/push&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;php occ notify_push:setup https://push.cloud.example.com/push&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
9. es ist möglich, das die erkannte IP-Adresse des Hives noch nicht vertraut ist. In diesem Fall wird der obige Befehl scheitern und es muss jene aus der Fehlermeldung des Setups unter &amp;lt;code&amp;gt;trusted_proxies&amp;lt;/code&amp;gt; in der &amp;lt;code&amp;gt;config.php&amp;lt;/code&amp;gt; ergänzt werden. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es wird im Repo außerdem ein Testclient bereitgestellt, der sich testweise mit dem Push-Dienst verbindet&lt;br /&gt;
&lt;br /&gt;
== Nextcloud mit Online Office ==&lt;br /&gt;
&lt;br /&gt;
In Nextcloud können Office-Dokumente (Textverarbeitung, Tabellen und Präsentationen) im Browser bearbeitet werden. Dazu steht bei Hostsharing die Collabora Developer Version zur Verfügung. Bestellung und Konfiguration sind hier im Wiki auf der Seite [[Collabora_Online]] beschrieben.&lt;br /&gt;
&lt;br /&gt;
== Nextcloud mit Nextcloud Talk ==&lt;br /&gt;
&lt;br /&gt;
Über die Nextcloud-App &amp;quot;Talk&amp;quot; können Videokonfererenzen mit Screensharing durchgeführt werden. Für die regelmäßige Nutzung kann es sinnvoll sein, einen eigenen TURN Server zu betreiben. Siehe dazu [[Coturn_Installieren]]&lt;br /&gt;
&lt;br /&gt;
== Virenscanner ==&lt;br /&gt;
&lt;br /&gt;
Einige Nutzer wollen die Dateien in Ihrer Nextcloud regelmäßig auf Viren überprüfen. Auf unseren Servern steht dafür der OpenSource-Virenscanner &amp;quot;ClamAV&amp;quot; zur Verfügung. Wenn dieser Scanner benutzt wird, dann sollten die Einstellungen so gewählt sein, dass der ClamAV-Daemon über eine Socket Verbindung angesprochen wird. Die Einstellungen sind im Screenshot dokumentiert.&lt;br /&gt;
&lt;br /&gt;
* Es wird die App [https://apps.nextcloud.com/apps/files_antivirus Antivirus für Dateien] installiert.&lt;br /&gt;
* Bei Modus wird gewählt: &amp;lt;code&amp;gt;ClamAV-Daemon (Socket)&amp;lt;/code&amp;gt;&lt;br /&gt;
* Bei Socket wird gewählt: &amp;lt;code&amp;gt;/var/run/clamav/clamd.ctl&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Datei:Nextcloud-ClamAV-Einstellungen.png||nextcloud einstellungen für die virenscanner-app]]&lt;br /&gt;
&lt;br /&gt;
== Volltextsuche ==&lt;br /&gt;
&lt;br /&gt;
Über die Dokumente einer Nextcloud kann ein Volltextindex erstellt werden. Die Volltextsuche ermöglicht über den Index eine Suche über beliebige Begriffe, die in Dokumenten vorkommen.&lt;br /&gt;
&lt;br /&gt;
Voraussetzung ist der Betrieb eines Elasticsearch Servers. Der Betrieb im Managed Webspace erfodert die Buchung von zwei &amp;quot;Serverdiensten&amp;quot;. Nutzer eines Managed Server müssen mit einem spürbaren Mehrbedarf an Hauptspeicher rechnen.&lt;br /&gt;
&lt;br /&gt;
Zur Installation von Elasticsearch existiert eine eigene Wikiseite: [[Elasticsearch]].&lt;br /&gt;
&lt;br /&gt;
In der Nextcloud sind folgende &#039;&#039;Apps&#039;&#039; zu installieren:&lt;br /&gt;
* Full Text Search&lt;br /&gt;
* Full Text Search - Elasticsearch Platform&lt;br /&gt;
* Full Text Search - Files&lt;br /&gt;
&lt;br /&gt;
nach der Installation der drei Apps steht in den Einstellungen ein neuer Menüpunkt &amp;quot;Volltextsuche&amp;quot; zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
Hier ist einzustellen:&lt;br /&gt;
* Suchplattform: Elasticsearch&lt;br /&gt;
* Adresse des Servlets: http://elastic:das-erzeugt-passwort@127.0.0.1:39200&lt;br /&gt;
* Index: frei-gewaehlter-name-idx&lt;br /&gt;
* Analyzer tokenizer: standard&lt;br /&gt;
&lt;br /&gt;
Die anderen Einstellung nach den eigenen Vorstellungen vornehmen.&lt;br /&gt;
&lt;br /&gt;
Der initiale Aufbau des Suchindex erfolgt über ein &amp;quot;occ&amp;quot;-Kommando auf der Shell:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell line&amp;gt;&lt;br /&gt;
cd nextcloud/&lt;br /&gt;
php occ fulltextsearch:index --output&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn dieser Fehler kommt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=text&amp;gt;&lt;br /&gt;
TypeError: Return value of OCA\Files_FullTextSearch\Model\MountPoint::isGlobal()&lt;br /&gt;
must be of the type bool, null returned in [...]/apps/files_fulltextsearch/lib/Model/MountPoint.php:103&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
sollte dieser Patch angewendet werden: https://github.com/nextcloud/files_fulltextsearch/issues/125#issuecomment-877789742&lt;br /&gt;
&lt;br /&gt;
Zur Pflege des Indexes wird ein weiterer Hintergrundprozess gestartet:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell line&amp;gt;&lt;br /&gt;
cd nextcloud/&lt;br /&gt;
php occ fulltextsearch:live -q&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Monit Konfiguration dafür sieht so aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell line&amp;gt;&lt;br /&gt;
#~/bin/start-fulltextsearchlive&lt;br /&gt;
#&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
export HOME=/home/pacs/xyz00/users/cloud&lt;br /&gt;
cd $HOME&lt;br /&gt;
mkdir -p $HOME/var&lt;br /&gt;
cd $HOME/nextcloud&lt;br /&gt;
exec php occ fulltextsearch:live -q &amp;amp;&lt;br /&gt;
echo $! &amp;gt;$HOME/var/fulltextsearchlive.pid&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell line&amp;gt;&lt;br /&gt;
#~/bin/stop-fulltextsearchlive&lt;br /&gt;
#&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
export HOME=/home/pacs/xyz00/users/cloud&lt;br /&gt;
kill $( cat $HOME/var/fulltextsearchlive.pid )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
~/.monitrc (siehe oben von der Redis Installation) entsprechend ergänzen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell line&amp;gt;&lt;br /&gt;
check process fulltextsearchlive with pidfile /home/pacs/xyz00/users/cloud/var/fulltextsearchlive.pid&lt;br /&gt;
    start program &amp;quot;/home/pacs/xyz00/users/cloud/bin/start-fulltextsearchlive&amp;quot;&lt;br /&gt;
    stop program &amp;quot;/home/pacs/xyz00/users/cloud/bin/stop-fulltextsearchlive&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Integration mit LDAP ==&lt;br /&gt;
&lt;br /&gt;
Um einheitliche Benutzerzugänge für verschiedene Anwendungen zu ermöglichen, wird oft auf ein zentrales LDAP Verzeichnis gesetzt. &lt;br /&gt;
&lt;br /&gt;
Dieses kann für Nextcloud eingesetzt werden, damit Benutzer nicht lokal in Nextcloud, sondern in LDAP verwaltet werden können.&lt;br /&gt;
&lt;br /&gt;
Siehe auch https://docs.nextcloud.com/server/latest/admin_manual/configuration_user/user_auth_ldap.html&lt;br /&gt;
&lt;br /&gt;
Dazu muss die App &amp;quot;LDAP user and group backend&amp;quot; in den Nextcloud Apps aktiviert werden.&lt;br /&gt;
&lt;br /&gt;
Dann muss die LDAP Anbindung in den Administrationseinstellungen unter &amp;quot;LDAP/AD-Integration&amp;quot; eingerichtet werden.&lt;br /&gt;
&lt;br /&gt;
Der Server mit Port, die BenutzerDN mit Passwort und die BaseDN müssen eingetragen werden.&lt;br /&gt;
&lt;br /&gt;
Es muss auch bestimmt werden, welche Klasse (z.B. inetOrgPerson) die Benutzer brauchen, um Zugriff auf die Nextcloud zu erhalten.&lt;br /&gt;
&lt;br /&gt;
Falls schon Benutzer in der Nextcloud existieren, und diese zu LDAP mitgenommen werden sollen, kann der Anleitung aus diesem Forum Eintrag gefolgt werden: https://help.nextcloud.com/t/migration-to-ldap-keeping-users-and-data/13205&lt;br /&gt;
&lt;br /&gt;
* Voraussetzung ist, dass der Benutzernamen der zu übernehmenden Benutzer in Nextcloud der uid in LDAP entspricht.&lt;br /&gt;
* Es wird ein Administrator Benutzer benötigt, der lokal angelegt wurde, und auch lokal bleibt.&lt;br /&gt;
* Mit diesem Administrator Benutzer wird die LDAP Anbindung eingerichtet.&lt;br /&gt;
* In der Experten Ansicht von LDAP/AD muss bei &amp;quot;Attribut für interne Benutzernamen&amp;quot; eingetragen werden: uid&lt;br /&gt;
* Klicke den Schalter &amp;quot;LDAP Benutzernamenzuordnung löschen&amp;quot;&lt;br /&gt;
* Klicke den Schalter &amp;quot;LDAP Gruppennamenzuordnung löschen&amp;quot;&lt;br /&gt;
* dann in der MySQL Datenbank anmelden, und aus uc_users alle Benutzer bis auf den Administrator Benutzer löschen&lt;br /&gt;
* Dann in der Nextcloud Weboberfläche sich alle Benutzer anzeigen lassen&lt;br /&gt;
* Nun gelingt die Anmeldung mit den anderen Benutzern mit dem LDAP Passwort, und die Dateien wurden übernommen.&lt;br /&gt;
&lt;br /&gt;
== Optimierung der Geschwindigkeit ==&lt;br /&gt;
Manchmal fühlt sich die Nextcloud träge an.&lt;br /&gt;
&lt;br /&gt;
Folgende Änderungen können helfen:&lt;br /&gt;
&lt;br /&gt;
* HTTP/2.0 aktivieren: dem Service von Hostsharing Bescheid geben&lt;br /&gt;
* Die App Dashboard deaktivieren, und dafür werden direkt die Dateien angezeigt&lt;br /&gt;
* Einblenden der README in den Ordnern abschalten: das kann pro Ordner in der UI geschehen (links unten), oder global: &amp;lt;code&amp;gt;occ config:app:set text workspace_available --value=0&amp;lt;/code&amp;gt;. Siehe auch [https://docs.nextcloud.com/server/latest/admin_manual/configuration_server/text_configuration.html#disable-rich-workspaces-globally]&lt;br /&gt;
&lt;br /&gt;
== Default App einstellen ==&lt;br /&gt;
&lt;br /&gt;
In der Datei config.php können wir einstellen, welche App direkt nach der Anmeldung gezeigt wird.&lt;br /&gt;
&lt;br /&gt;
Das ist entweder die Dashboard App, wenn sie aktiviert ist, oder die Dateien App (files).&lt;br /&gt;
&lt;br /&gt;
Falls der Kalender direkt angezeigt werden soll, muss folgende Zeile in der config.php hinzugefügt werden (siehe auch [https://docs.nextcloud.com/server/stable/admin_manual/configuration_server/config_sample_php_parameters.html#defaultapp]):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
&#039;defaultapp&#039; =&amp;gt; &#039;calendar&#039;,&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Nextcloud Updates =&lt;br /&gt;
&lt;br /&gt;
== Updater über die Shell starten ==&lt;br /&gt;
&lt;br /&gt;
Wenn die NextCloud sich nicht über das Webfrontend updaten lässt, kann der Updater auch per Shell im directory /updater durch ausführen des updater.phar gestartet werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell line&amp;gt;&lt;br /&gt;
xyz00-cloud@h00:~$ cd ~/nextcloud&lt;br /&gt;
xyz00-cloud@h00:~/nextcloud$ php updater/updater.phar&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Falls während des Updates kein Backup angelegt werden soll:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell line&amp;gt;&lt;br /&gt;
xyz00-cloud@h00:~$ cd ~/nextcloud&lt;br /&gt;
xyz00-cloud@h00:~/nextcloud$ php updater/updater.phar --no-backup&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es sollten außerdem ein paar Routine-Aufräumarbeiten durchgeführt werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell line&amp;gt;&lt;br /&gt;
xyz00-cloud@h00:~$ cd ~/nextcloud&lt;br /&gt;
xyz00-cloud@h00:~/nextcloud$ php occ db:add-missing-primary-keys --no-interaction&lt;br /&gt;
xyz00-cloud@h00:~/nextcloud$ php occ db:add-missing-columns --no-interaction&lt;br /&gt;
xyz00-cloud@h00:~/nextcloud$ php occ db:add-missing-indices --no-interaction&lt;br /&gt;
xyz00-cloud@h00:~/nextcloud$ php occ db:convert-filecache-bigint --no-interaction&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So können die Apps noch alle aktualisiert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell line&amp;gt;&lt;br /&gt;
xyz00-cloud@h00:~$ cd ~/nextcloud&lt;br /&gt;
xyz00-cloud@h00:~/nextcloud$ php occ app:update --all -n --no-ansi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für weitere Informationen kann auf die offizielle Doku ab Ziffer 2. zurückgegriffen werden.&lt;br /&gt;
&lt;br /&gt;
* [https://docs.nextcloud.com/server/latest/admin_manual/maintenance/update.html#using-the-command-line-based-updater https://docs.nextcloud.com]&lt;br /&gt;
&lt;br /&gt;
Hier gibt es ein kurzes Video, das die Anmeldung über die Kommandozeile mit Putty erklärt und die Aktualisierung von Nextcloud auf der Kommandozeile:&lt;br /&gt;
&lt;br /&gt;
* [https://tube.solidcharity.net/w/0cf5ee97-ba7c-41df-a56f-8d1fea842ab0 Nextcloud auf der Kommandozeile aktualisieren]&lt;br /&gt;
&lt;br /&gt;
== Wartungsmodus per Shell ein- oder ausschalten ==&lt;br /&gt;
&lt;br /&gt;
So kann der Wartungsmodus angeschaltet werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell line&amp;gt;&lt;br /&gt;
xyz00-cloud@h00:~$ cd ~/nextcloud&lt;br /&gt;
xyz00-cloud@h00:~/nextcloud$ php occ maintenance:mode --on&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So kann der Wartungsmodus wieder ausgeschaltet werden, d.h. die Nextcloud ist dann wieder in Betrieb:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell line&amp;gt;&lt;br /&gt;
xyz00-cloud@h00:~$ cd ~/nextcloud&lt;br /&gt;
xyz00-cloud@h00:~/nextcloud$ php occ maintenance:mode --off&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Webfrontend-Updater Probleme / Lösungen ==&lt;br /&gt;
&lt;br /&gt;
=== Datenbank: Indizes | Primärschlüssel | Konvertierungen ===&lt;br /&gt;
&lt;br /&gt;
Aufgetreten nach erfolgtem Versionsupdate Nextcloud 19 auf Nextcloud 20&lt;br /&gt;
&lt;br /&gt;
Nach dem erfolgten Update lädt automatisch die Seite: &#039;&#039;&#039;Sicherheits- und Einrichtungswarnungen&#039;&#039;&#039; auf dieser wird angemerkt, dass manuelle Schritte für die Datenbank durchzuführen sind. Dies betrifft Indizes, Primärschlüssel und Konvertierungen. &lt;br /&gt;
&lt;br /&gt;
Per Shell in der directory /nextcloud folgende Kommandos ausführen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell line&amp;gt;&lt;br /&gt;
xyz00-cloud@h00:~$ cd ~/nextcloud&lt;br /&gt;
xyz00-cloud@h00:~/nextcloud$ php occ db:add-missing-primary-keys --no-interaction&lt;br /&gt;
xyz00-cloud@h00:~/nextcloud$ php occ db:add-missing-columns --no-interaction&lt;br /&gt;
xyz00-cloud@h00:~/nextcloud$ php occ db:add-missing-indices --no-interaction&lt;br /&gt;
xyz00-cloud@h00:~/nextcloud$ php occ db:convert-filecache-bigint --no-interaction&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wichtig ist hier dem durch Nextcloud angegebenen Kommando ein &#039;&#039;&#039;php&#039;&#039;&#039; voranzustellen.&lt;br /&gt;
&lt;br /&gt;
== Update per Skript ==&lt;br /&gt;
&lt;br /&gt;
Es ist möglich die regelmäßigen Updates weitgehend zu automatisieren. Ein Skript wäre etwa:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell line&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
if [ -f $HOME/nextcloud/occ ]; then &lt;br /&gt;
  echo &amp;quot;Nextcloud Update&amp;quot;; &lt;br /&gt;
  cd $HOME/nextcloud;&lt;br /&gt;
  php updater/updater.phar -vv --no-backup --no-interaction&lt;br /&gt;
  php occ maintenance:mode --on&lt;br /&gt;
  php occ db:add-missing-primary-keys --no-interaction&lt;br /&gt;
  php occ db:add-missing-columns --no-interaction&lt;br /&gt;
  php occ db:add-missing-indices --no-interaction&lt;br /&gt;
  php occ db:convert-filecache-bigint --no-interaction&lt;br /&gt;
  php occ app:update --all&lt;br /&gt;
  php occ maintenance:mode --off&lt;br /&gt;
else &lt;br /&gt;
  echo &amp;quot;Keine Nextcloud Installation gefunden&amp;quot;; &lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Update: bei old-stable Version bleiben ==&lt;br /&gt;
&lt;br /&gt;
Normalerweise fragt jede Nextcloud Instanz zentral ab, welches Update zur Verfügung steht, abhängig vom Release Channel. Dabei wird aber relativ schnell auf die nächste Version gewechselt, also z.B. von Nextcloud 28 auf Nextcloud 29, obwohl Nextcloud 28 noch mehrere Monate gepflegt wird, und manche Apps noch nicht bereit sind für Nextcloud 29.&lt;br /&gt;
&lt;br /&gt;
Es kann aber auch eine Alternative eingerichtet werden, in der Datei nextcloud/config/config.php, unter dem Eintrag updater.server.url&lt;br /&gt;
&lt;br /&gt;
Hier wird z.B. auf einen Updater von unserem Mitglied Timotheus Pokorra verwiesen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=php line&amp;gt;&lt;br /&gt;
updater_server_url: &amp;quot;https://ncupdater.solidcharity.com&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dahinter läuft ein Skript, mit dem wir noch länger eine bestimmte Version anbieten können: https://codeberg.org/tpokorra/ncupdater&lt;br /&gt;
&lt;br /&gt;
= Daten auf HDD Storage =&lt;br /&gt;
== Einrichtung des HDD Storage ==&lt;br /&gt;
&lt;br /&gt;
Um den langsameren aber günstigeren HDD Storage von Hostsharing zu nutzen, kann das data Verzeichnis von SSD auf HDD Storage verschoben werden. Ein symbolischer Link reicht nicht aus, man muss den Pfad in der Nextcloud Konfigurationsdatei anpassen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
# Nextcloud in Wartungsmodus versetzen&lt;br /&gt;
xyz00-cloud@h00:~/nextcloud$ php occ maintenance:mode --on&lt;br /&gt;
# Daten auf HDD Storage verschieben&lt;br /&gt;
xyz00-cloud@h00:~/nextcloud$ mv data /home/storage/xyz00/users/cloud/&lt;br /&gt;
# symbolischen Link anlegen&lt;br /&gt;
xyz00-cloud@h00:~/nextcloud$ ln -s /home/storage/xyz00/users/cloud/data data&lt;br /&gt;
# Pfad in config.php ändern&lt;br /&gt;
nano config/config.php&lt;br /&gt;
# Die Zeile mit &#039;datadirectory&#039; finden und entsprechend ändern:&lt;br /&gt;
# &#039;datadirectory&#039; =&amp;gt; &#039;/home/storage/xyz00/users/cloud/data&#039;,&lt;br /&gt;
# Wartungsmodus beenden&lt;br /&gt;
xyz00-cloud@h00:~/nextcloud$ php occ maintenance:mode --off&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ein Fallstrick: Im data-Verzeichnis liegt eine versteckte Datei &amp;quot;.ncdata&amp;quot;. Beim Move-Befehl &amp;quot;mv&amp;quot; für das komplette Data-Verzeichnis wird diese Datei mit verschoben. Sonst muss die Datei ggf. ins neue data-Verzeichnis kopiert werden!&lt;br /&gt;
&lt;br /&gt;
= Einschränkende Bemerkungen =&lt;br /&gt;
== Nextcloud Sync Client ==&lt;br /&gt;
&lt;br /&gt;
Der Nextcloud Sync Client erfüllt eine Funktion ähnlich wie Dropbox, und synchronisiert ganze Ordnerstrukturen. &lt;br /&gt;
&lt;br /&gt;
Gerade wenn man mit mehreren Menschen in einer Nextcloud arbeitet, ist diese Funktion mit Vorsicht zu benutzen.&lt;br /&gt;
&lt;br /&gt;
* Änderungen an der Ordnerstruktur sollten nicht lokal, sondern im Webbrowser vorgenommen werden.&lt;br /&gt;
* Wenn die Gefahr besteht, dass mehrere Menschen gleichzeitig eine Datei bearbeiten, sollte die Datei nicht lokal, sondern im Webbrowser bearbeitet werden.&lt;br /&gt;
* Aus Sicht des Datenschutzes und der Daten-Minimierung sollte überlegt werden, ob die Daten wirklich auf jeden Laptop und Rechner synchronisiert werden sollen, oder ob es reicht, ausschließlich über den Webbrowser auf die Daten zuzugreifen.&lt;br /&gt;
&lt;br /&gt;
= weiterführende Links =&lt;br /&gt;
&lt;br /&gt;
* [https://docs.nextcloud.com/ Nextcloud Dokumentation]&lt;br /&gt;
* [https://apps.nextcloud.com/ Nextcloud Erweiterungen (&amp;quot;Apps&amp;quot;)]&lt;br /&gt;
* [https://ownyourbits.com/2019/06/29/understanding-and-improving-nextcloud-previews/ Optimierung des Caches für Previews]&lt;br /&gt;
* [https://codeberg.org/tpokorra/hs.ansible/src/branch/main/playbooks/nextcloud Ansible Playbook für Hostsharing]&lt;br /&gt;
&lt;br /&gt;
= Nextcloud Reseller bei HS =&lt;br /&gt;
&lt;br /&gt;
[https://nextcloud.ossaas.de OS SaaS]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[Kategorie:HSDoku]]&lt;br /&gt;
[[Kategorie:Installationsanleitungen]]&lt;br /&gt;
[[Kategorie:Ansible Playbook]]&lt;br /&gt;
[[Kategorie:Software]]&lt;br /&gt;
[[Kategorie:CalDAV]]&lt;br /&gt;
[[Kategorie:Nextcloud]]&lt;/div&gt;</summary>
		<author><name>Peh</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Nextcloud&amp;diff=7342</id>
		<title>Nextcloud</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Nextcloud&amp;diff=7342"/>
		<updated>2025-04-22T10:14:31Z</updated>

		<summary type="html">&lt;p&gt;Peh: /* Redis Cache */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Nextcloud =&lt;br /&gt;
&lt;br /&gt;
[https://nextcloud.com/ Nextcloud] ist eine PHP-basierte Open Source Lösung für gängige Cloud-Anwendungen, u.a.:&lt;br /&gt;
&lt;br /&gt;
* Filesharing unter Nutzern derselben Nextcloud, und mit der Öffentlichkeit&lt;br /&gt;
* Single-Sign-On Authentifizierung (SSO)&lt;br /&gt;
* Videokonferenzen (WebRTC)&lt;br /&gt;
* Online-Office Anwendung [https://www.collaboraoffice.com/ Collabora Online]&lt;br /&gt;
&lt;br /&gt;
Beispiel-Funktionalität, die über Plugins, sogenannte [https://apps.nextcloud.com/ &amp;quot;Apps&amp;quot;], bereit gestellt werden kann:&lt;br /&gt;
&lt;br /&gt;
* Kalender, Aufgabenverwaltung, Adressbuch&lt;br /&gt;
* Datei-Kollaboration (Kommentare zu Dateien, Verschlagwortung)&lt;br /&gt;
* Feedreader&lt;br /&gt;
* E-Mail-Programm&lt;br /&gt;
* Fotogalerie&lt;br /&gt;
* Musik- und Videowiedergabe&lt;br /&gt;
&lt;br /&gt;
= Nextcloud installieren =&lt;br /&gt;
&lt;br /&gt;
== Vorbereitungen ==&lt;br /&gt;
&lt;br /&gt;
In &#039;&#039;hsadmin&#039;&#039;, zum Beispiel mit &#039;&#039;hsscript&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;hsadmin&#039;&#039;-Shell starten mit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
hsscript -u xyz00 -i&lt;br /&gt;
Password: ********&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann nacheinander anlegen:&lt;br /&gt;
&lt;br /&gt;
* Linux User als Domain-Administrator&lt;br /&gt;
* Subdomain &#039;&#039;cloud.example.org&#039;&#039;&lt;br /&gt;
* PostgreSQL-User &lt;br /&gt;
* PostgreSQL Datenbank&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
xyz00@hsadmin&amp;gt; user.add({set:{name:&#039;xyz00-cloud&#039;,password:&#039;geheim&#039;,shell:&#039;/bin/bash&#039;,comment:&#039;Nextcloud&#039;}})&lt;br /&gt;
xyz00@hsadmin&amp;gt; domain.add({set:{name:&#039;cloud.example.org&#039;,user:&#039;xyz00-cloud&#039;}})&lt;br /&gt;
xyz00@hsadmin&amp;gt; postgresqluser.add({set:{name:&#039;xyz00_nextclusr&#039;,password:&#039;geheim&#039;}})&lt;br /&gt;
xyz00@hsadmin&amp;gt; postgresqldb.add({set:{name:&#039;xyz00_nextcloud&#039;,owner:&#039;xyz00_nextclusr&#039;}})&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Nextcloud installieren ==&lt;br /&gt;
&lt;br /&gt;
Anmelden als Linux-User &#039;&#039;xyz00-cloud&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
ssh -l xyz00-cloud xyz00.hostsharing.net&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;htdocs&#039;&#039; Verzeichnis vorbereiten&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
cd&lt;br /&gt;
mkdir nextcloud&lt;br /&gt;
cd doms/cloud.example.org&lt;br /&gt;
rm -rf subs/www subs-ssl/www htdocs-ssl&lt;br /&gt;
ln -s $HOME/nextcloud htdocs-ssl&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Falls der &#039;&#039;Redirect&#039;&#039; auf die Domain &#039;&#039;example.org&#039;&#039; umleitet statt auf die Subdomain &#039;&#039;cloud.example.org&#039;&#039;, kann diese Aktion helfen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
cd doms/cloud.example.org&lt;br /&gt;
mkdir -p subs-ssl/www&lt;br /&gt;
cp htdocs/.htaccess subs-ssl/www/.htaccess&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nextcloud herunterladen und entpacken.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
cd &lt;br /&gt;
wget https://download.nextcloud.com/server/releases/nextcloud-30.0.6.zip&lt;br /&gt;
unzip nextcloud-30.0.6.zip &lt;br /&gt;
rm nextcloud-30.0.6.zip&lt;br /&gt;
mkdir data tmp&lt;br /&gt;
chmod 700 data tmp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um Probleme mit der Anmeldung der Nextcloud App am Mobilgerät zu vermeiden, müssen folgende Zeilen in der Datei &amp;lt;code&amp;gt;doms/cloud.example.org/.htaccess&amp;lt;/code&amp;gt; eingefügt werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=htaccess&amp;gt;&lt;br /&gt;
RewriteEngine On&lt;br /&gt;
RewriteCond %{HTTP:Authorization} ^(.*)&lt;br /&gt;
RewriteRule .* - [e=HTTP_AUTHORIZATION:%1]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Nextcloud konfigurieren ==&lt;br /&gt;
&lt;br /&gt;
Im Verzeichnis &amp;quot;$HOME/doms/cloud.example.org/fastcgi-ssl/&amp;quot; eine Datei &amp;quot;php.ini&amp;quot; anlegen mit folgendem Inhalt: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
memory_limit=512M&lt;br /&gt;
session.save_path=/home/pacs/xyz00/users/cloud/tmp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann mit einem Editor diese Datei bearbeiten: In der zweiten Zeile den korrekten Pfad des vorher angelegten tmp-Verzeichnisses eintragen.&lt;br /&gt;
&lt;br /&gt;
Im Browser auf die Seite &lt;br /&gt;
http://cloud.example.org gehen und den Anweisungen folgen.&lt;br /&gt;
&lt;br /&gt;
Auf der ersten Seite sind anzugeben:&lt;br /&gt;
&lt;br /&gt;
* Login und Passwort für den Administrator definieren&lt;br /&gt;
* PostgreSQL als Datenbanksystem&lt;br /&gt;
* PostgreSQL-User und Passwort aus dem ersten Schritt oben&lt;br /&gt;
* Name der PostgreSQL-Datenbank aus dem ersten Schritt&lt;br /&gt;
* &amp;quot;localhost&amp;quot; als Datenbankserver (Nextcloud 23.0.2 empfiehlt hier die Angabe des Ports, diesen also lt. [[PostgreSQL]] angeben)&lt;br /&gt;
* Das Verzeichnis &amp;quot;/home/pacs/xyz00/users/cloud/data/&amp;quot; als Daten-Verzeichnis (bitte beachten: das im Eingabefeld voreingestellte verweist auf das Verzeichnis &amp;quot;/home/pacs/xyz00/users/cloud/&#039;&#039;&#039;nextcloud&#039;&#039;&#039;/data/&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Achtung!&#039;&#039;&#039; Die Felder für die Datenbank sind auf dem Startscreen hinter einem unscheinbaren Link versteckt. Um man das Formular für die Datenbank-Daten zu gelangen, muss man auf den Link klicken. Anschließend kann man die gewünschte Datenbank auswählen und die entsprechenden Daten eintragen. &#039;&#039;&#039;Das sollte geschehen, bevor man die Installation abschließt!&#039;&#039;&#039; Tut man dies nicht, wird Nextcloud mit SQLite installiert. Eine Änderung der Datenbank soll zwar laut Dokumentation auch später noch möglich sein, ging aber bei einem Test schief.&lt;br /&gt;
&lt;br /&gt;
In der Konfigurationsdatei der Nextcloud (in &#039;&#039;~/nextcloud/config/config.php&#039;&#039;) lassen sich weitere Voreinstellungen treffen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=php line&amp;gt;&lt;br /&gt;
&#039;maintenance_window_start&#039; =&amp;gt; 1,    // Wartungsfenster ab 1:00 Uhr&lt;br /&gt;
&#039;defaultapp&#039; =&amp;gt; &#039;calendar,files&#039;,   // bei Start wird der Kalender gezeigt&lt;br /&gt;
&#039;default_phone_region&#039; =&amp;gt; &#039;DE&#039;,     // Format Telefonnummern&lt;br /&gt;
&#039;default_language&#039; =&amp;gt; &#039;de&#039;,         // Sprache deutsch&lt;br /&gt;
&#039;force_language&#039; =&amp;gt; &#039;de&#039;,&lt;br /&gt;
&#039;default_locale&#039; =&amp;gt; &#039;de_DE&#039;,        // Locale (Formatierung Zeitangaben etc.) &lt;br /&gt;
&#039;force_locale&#039; =&amp;gt; &#039;de_DE&#039;,&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Nextcloud beschleunigen ==&lt;br /&gt;
&lt;br /&gt;
Dieser Teil ist optional.&lt;br /&gt;
&lt;br /&gt;
Wenn regelmäßig &#039;&#039;&#039;im Browser&#039;&#039;&#039; mit Nextcloud gearbeitet werden soll, ist Nextcloud im Browser oft sehr langsam. Um dies zu verbessern, unterstützt Nextcloud die Anwendung von unterschiedlichen Cache-Verfahren (zum Beispiel Memcache, Redis).&lt;br /&gt;
&lt;br /&gt;
=== Redis Cache ===&lt;br /&gt;
&lt;br /&gt;
Redis ist auf den Hostsharing-Servern vorinstalliert und wird von den Nextcloud-Entwicklern empfohlen. Redis wird als eigener Serverdienst gestartet. &#039;&#039;&#039;In Verbindung mit Hostsharing Managed Webspace muss für Redis [https://www.hostsharing.net/paas/managed-webspace/ Arbeitsspeicher für eigene Serverdienste] gebucht werden&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Die Konfiguration des Redis-Dientes ist auf der Seite [[Redis]] beschrieben. Hier wird für Nextcloud die Variante mit einem Unixsocket benutzt.&lt;br /&gt;
&lt;br /&gt;
In der Konfiguration der Nextcloud (in &#039;&#039;~/nextcloud/config/config.php&#039;&#039;) wird der Redis-Cache wie folgt konfiguriert:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=php line&amp;gt;&lt;br /&gt;
&#039;memcache.local&#039; =&amp;gt; &#039;\\OC\\Memcache\\Redis&#039;,&lt;br /&gt;
&#039;memcache.distributed&#039; =&amp;gt; &#039;\\OC\\Memcache\\Redis&#039;,&lt;br /&gt;
&#039;memcache.locking&#039; =&amp;gt; &#039;\\OC\\Memcache\\Redis&#039;,&lt;br /&gt;
&#039;redis&#039; =&amp;gt; &lt;br /&gt;
  array (&lt;br /&gt;
    &#039;host&#039; =&amp;gt; &#039;/home/pacs/xyz00/users/cloud/redis/var/redis-server.sock&#039;,&lt;br /&gt;
    &#039;port&#039; =&amp;gt; 0,&lt;br /&gt;
    &#039;password&#039; =&amp;gt; &#039;mein-redis-passwort&#039;,&lt;br /&gt;
    &#039;timeout&#039; =&amp;gt; 1.5,&lt;br /&gt;
  ),&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um es perfekt zu machen, nutze ich &#039;&#039;logrotate&#039;&#039; um die Logdateien zu organisieren. Dazu die Konfiguration in &#039;&#039;~/.logrotate&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell line&amp;gt;&lt;br /&gt;
compress&lt;br /&gt;
/home/pacs/xyz00/users/cloud/redis/var/redis.log {&lt;br /&gt;
  rotate 5&lt;br /&gt;
  daily&lt;br /&gt;
  missingok&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Mit systemd-Timern werden die Logdateien täglich rotiert:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;~/.config/systemd/user/logrotate.service&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini line&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=rotate log files&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
ExecStart=/usr/sbin/logrotate -s %h/.logrotate.state %h/.logrotate&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;~/.config/systemd/user/logrotate.timer&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini line&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=timer for nextcloud cleanup job&lt;br /&gt;
&lt;br /&gt;
[Timer]&lt;br /&gt;
OnCalendar=1:1&lt;br /&gt;
Persistent=True&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=timers.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Den Timer aktivieren und starten:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell line&amp;gt;&lt;br /&gt;
$ systemctl --user enable logrotate.timer&lt;br /&gt;
$ systemctl --user start logrotate.timer&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mit einem weiteren Timer für die regelmäßigen Hintergrundaufgaben von Nextcloud lässt sie sich noch etwas beschleunigen:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;~/.config/systemd/user/nextcloud_background.service&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini line&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=nextcloud cleanup job&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
ExecStart=/usr/bin/php %h/nextcloud/cron.php&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;~/.config/systemd/user/nextcloud_background.timer&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini line&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=timer for nextcloud cleanup job&lt;br /&gt;
&lt;br /&gt;
[Timer]&lt;br /&gt;
OnCalendar=*:0/5&lt;br /&gt;
Persistent=True&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=timers.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Den Timer aktivieren und starten:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell line&amp;gt;&lt;br /&gt;
$ systemctl --user enable nextcloud_background.timer&lt;br /&gt;
$ systemctl --user start nextcloud_background.timer&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Nextcloud Push ===&lt;br /&gt;
&lt;br /&gt;
Um Vorgänge wie Sync und Benachrichtigungen bei sehr großen Nextcloud Installationen zu beschleunigen, kann der &amp;lt;code&amp;gt;notify_push&amp;lt;/code&amp;gt; Dienst hinzuinstalliert werden.&lt;br /&gt;
&lt;br /&gt;
==== Abhängigkeiten und Einschränkungen ====&lt;br /&gt;
* &amp;lt;code&amp;gt;notify_push&amp;lt;/code&amp;gt; muss Zugriff auf den gleichen Redis-Cache wie die Nextcloud haben &lt;br /&gt;
** aufgrund von eingeschränktem Passwort Support sollte ein Redis Socket mit sicheren Berechtigungseinstellungen als Alternative zum Redis Port mit Passwort konfiguriert werden.&lt;br /&gt;
* optimaler Weise holt sich &amp;lt;code&amp;gt;notify_push&amp;lt;/code&amp;gt; benötigte informationen aus der &amp;lt;code&amp;gt;config.php&amp;lt;/code&amp;gt; der bestehenden Nextcloud-Installation&lt;br /&gt;
* eine zusätzliche (Sub)domain im gleichen User ist nötig. Andernfalls muss die bestehende &amp;lt;code&amp;gt;.htaccess&amp;lt;/code&amp;gt; muss aus o.g. Gründen modifiziert werden, dies könnte bei Nextcloud-Updates verloren gehen(!)&lt;br /&gt;
* Bestimmte Portbereiche sind bei Hostsharing eingeschränkt, es empfiehlt sich, direkt beispielsweise Port &amp;lt;code&amp;gt;37867&amp;lt;/code&amp;gt; zu nehmen. &amp;lt;strong&amp;gt;aus diesem Grund ist das automatische Setup durch das Plugin bei Hostsharing nicht möglich!&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Installation ====&lt;br /&gt;
Siehe auch: https://github.com/nextcloud/notify_push#manual-setup &lt;br /&gt;
&lt;br /&gt;
1. Installieren der Nextcloud-App &amp;lt;code&amp;gt;notify_push&amp;lt;/code&amp;gt; – (nach Push suchen, &amp;quot;Client Push&amp;quot; wählen)&amp;lt;br&amp;gt;&lt;br /&gt;
2. falls noch nicht erstellt: &amp;lt;code&amp;gt;mkdir -p ~/.config/systemd/user&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
3. mit Lieblingseditor die Datei &amp;lt;code&amp;gt;~/.config/systemd/user/notify_push.service&amp;lt;/code&amp;gt; anlegen:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot; line&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description = Push daemon for Nextcloud clients&lt;br /&gt;
Documentation = https://github.com/nextcloud/notify_push&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
# Change if you already have something running on this port&lt;br /&gt;
Environment = PORT=37867&lt;br /&gt;
# We don&#039;t want to bind to 0.0.0.0, hence the --bind&lt;br /&gt;
ExecStart = /home/pacs/xyz00/users/cloud/bin/notify_push --bind 127.0.0.1 /home/pacs/xyz00/users/cloud/nextcloud/config/config.php&lt;br /&gt;
Type=notify&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy = default.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
4. das Verzeichnis &amp;lt;code&amp;gt;~/bin&amp;lt;/code&amp;gt; anlegen und die aktuellste binary herunterladen und ausführbar machen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot; line&amp;gt;release=`curl -L https://api.github.com/repos/nextcloud/notify_push/releases/latest -s | jq -r &#039;.tag_name&#039;` &amp;amp;&amp;amp; wget --show-progress -qO ~/bin/notify_push https://github.com/nextcloud/notify_push/releases/download/$release/notify_push-x86_64-unknown-linux-musl &amp;amp;&amp;amp; chmod +x ~/bin/notify_push&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
5. es könnte die folgende Umgebungsvariable zum Bedienen von systemd notwendig werden:&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;export XDG_RUNTIME_DIR=/run/user/$UID&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
6. den neuen systemd-Dienst automatisch bei Systemstart, sowie jetzt sofort starten:&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;systemctl enable --now --user notify_push&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
7. nun gehen wir in &amp;lt;code&amp;gt;doms/push.cloud.example.com/htdocs-ssl/.htaccess&amp;lt;/code&amp;gt; und ersetzen den Inhalt (bevorzugt), oder wir ergänzen die .htaccess der Nextcloud im unteren Teil um die folgenden Zeilen (letzteres kann bei Updates überschrieben werden!):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;apache&amp;quot; line&amp;gt;&lt;br /&gt;
# bei eigener (sub)domain ist /push/ nicht erforderlich, aber wer weiß, eventuell ist das mit robuster&lt;br /&gt;
RewriteCond %{REQUEST_URI}  ^/push/ws    [NC,OR]&lt;br /&gt;
RewriteCond %{HTTP:UPGRADE} ^WebSocket$           [NC,OR]&lt;br /&gt;
RewriteCond %{HTTP:CONNECTION} ^Upgrade$          [NC]&lt;br /&gt;
RewriteRule .* ws://127.0.0.1:37867/ws  [proxy]&lt;br /&gt;
&lt;br /&gt;
RewriteCond %{REQUEST_URI}  ^/push    [NC]&lt;br /&gt;
RewriteRule .* http://127.0.0.1:37867%{REQUEST_URI}  [proxy]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
8. abschließend im Nextcloud Ordner die Konfiguration des Plugins anstoßen: &amp;lt;code&amp;gt;php occ notify_push:setup https://cloud.example.com/push&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;php occ notify_push:setup https://push.cloud.example.com/push&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
9. es ist möglich, das die erkannte IP-Adresse des Hives noch nicht vertraut ist. In diesem Fall wird der obige Befehl scheitern und es muss jene aus der Fehlermeldung des Setups unter &amp;lt;code&amp;gt;trusted_proxies&amp;lt;/code&amp;gt; in der &amp;lt;code&amp;gt;config.php&amp;lt;/code&amp;gt; ergänzt werden. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es wird im Repo außerdem ein Testclient bereitgestellt, der sich testweise mit dem Push-Dienst verbindet&lt;br /&gt;
&lt;br /&gt;
== Nextcloud mit Online Office ==&lt;br /&gt;
&lt;br /&gt;
In Nextcloud können Office-Dokumente (Textverarbeitung, Tabellen und Präsentationen) im Browser bearbeitet werden. Dazu steht bei Hostsharing die Collabora Developer Version zur Verfügung. Bestellung und Konfiguration sind hier im Wiki auf der Seite [[Collabora_Online]] beschrieben.&lt;br /&gt;
&lt;br /&gt;
== Nextcloud mit Nextcloud Talk ==&lt;br /&gt;
&lt;br /&gt;
Über die Nextcloud-App &amp;quot;Talk&amp;quot; können Videokonfererenzen mit Screensharing durchgeführt werden. Für die regelmäßige Nutzung kann es sinnvoll sein, einen eigenen TURN Server zu betreiben. Siehe dazu [[Coturn_Installieren]]&lt;br /&gt;
&lt;br /&gt;
== Virenscanner ==&lt;br /&gt;
&lt;br /&gt;
Einige Nutzer wollen die Dateien in Ihrer Nextcloud regelmäßig auf Viren überprüfen. Auf unseren Servern steht dafür der OpenSource-Virenscanner &amp;quot;ClamAV&amp;quot; zur Verfügung. Wenn dieser Scanner benutzt wird, dann sollten die Einstellungen so gewählt sein, dass der ClamAV-Daemon über eine Socket Verbindung angesprochen wird. Die Einstellungen sind im Screenshot dokumentiert.&lt;br /&gt;
&lt;br /&gt;
* Es wird die App [https://apps.nextcloud.com/apps/files_antivirus Antivirus für Dateien] installiert.&lt;br /&gt;
* Bei Modus wird gewählt: &amp;lt;code&amp;gt;ClamAV-Daemon (Socket)&amp;lt;/code&amp;gt;&lt;br /&gt;
* Bei Socket wird gewählt: &amp;lt;code&amp;gt;/var/run/clamav/clamd.ctl&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Datei:Nextcloud-ClamAV-Einstellungen.png||nextcloud einstellungen für die virenscanner-app]]&lt;br /&gt;
&lt;br /&gt;
== Volltextsuche ==&lt;br /&gt;
&lt;br /&gt;
Über die Dokumente einer Nextcloud kann ein Volltextindex erstellt werden. Die Volltextsuche ermöglicht über den Index eine Suche über beliebige Begriffe, die in Dokumenten vorkommen.&lt;br /&gt;
&lt;br /&gt;
Voraussetzung ist der Betrieb eines Elasticsearch Servers. Der Betrieb im Managed Webspace erfodert die Buchung von zwei &amp;quot;Serverdiensten&amp;quot;. Nutzer eines Managed Server müssen mit einem spürbaren Mehrbedarf an Hauptspeicher rechnen.&lt;br /&gt;
&lt;br /&gt;
Zur Installation von Elasticsearch existiert eine eigene Wikiseite: [[Elasticsearch]].&lt;br /&gt;
&lt;br /&gt;
In der Nextcloud sind folgende &#039;&#039;Apps&#039;&#039; zu installieren:&lt;br /&gt;
* Full Text Search&lt;br /&gt;
* Full Text Search - Elasticsearch Platform&lt;br /&gt;
* Full Text Search - Files&lt;br /&gt;
&lt;br /&gt;
nach der Installation der drei Apps steht in den Einstellungen ein neuer Menüpunkt &amp;quot;Volltextsuche&amp;quot; zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
Hier ist einzustellen:&lt;br /&gt;
* Suchplattform: Elasticsearch&lt;br /&gt;
* Adresse des Servlets: http://elastic:das-erzeugt-passwort@127.0.0.1:39200&lt;br /&gt;
* Index: frei-gewaehlter-name-idx&lt;br /&gt;
* Analyzer tokenizer: standard&lt;br /&gt;
&lt;br /&gt;
Die anderen Einstellung nach den eigenen Vorstellungen vornehmen.&lt;br /&gt;
&lt;br /&gt;
Der initiale Aufbau des Suchindex erfolgt über ein &amp;quot;occ&amp;quot;-Kommando auf der Shell:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell line&amp;gt;&lt;br /&gt;
cd nextcloud/&lt;br /&gt;
php occ fulltextsearch:index --output&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn dieser Fehler kommt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=text&amp;gt;&lt;br /&gt;
TypeError: Return value of OCA\Files_FullTextSearch\Model\MountPoint::isGlobal()&lt;br /&gt;
must be of the type bool, null returned in [...]/apps/files_fulltextsearch/lib/Model/MountPoint.php:103&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
sollte dieser Patch angewendet werden: https://github.com/nextcloud/files_fulltextsearch/issues/125#issuecomment-877789742&lt;br /&gt;
&lt;br /&gt;
Zur Pflege des Indexes wird ein weiterer Hintergrundprozess gestartet:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell line&amp;gt;&lt;br /&gt;
cd nextcloud/&lt;br /&gt;
php occ fulltextsearch:live -q&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Monit Konfiguration dafür sieht so aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell line&amp;gt;&lt;br /&gt;
#~/bin/start-fulltextsearchlive&lt;br /&gt;
#&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
export HOME=/home/pacs/xyz00/users/cloud&lt;br /&gt;
cd $HOME&lt;br /&gt;
mkdir -p $HOME/var&lt;br /&gt;
cd $HOME/nextcloud&lt;br /&gt;
exec php occ fulltextsearch:live -q &amp;amp;&lt;br /&gt;
echo $! &amp;gt;$HOME/var/fulltextsearchlive.pid&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell line&amp;gt;&lt;br /&gt;
#~/bin/stop-fulltextsearchlive&lt;br /&gt;
#&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
export HOME=/home/pacs/xyz00/users/cloud&lt;br /&gt;
kill $( cat $HOME/var/fulltextsearchlive.pid )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
~/.monitrc (siehe oben von der Redis Installation) entsprechend ergänzen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell line&amp;gt;&lt;br /&gt;
check process fulltextsearchlive with pidfile /home/pacs/xyz00/users/cloud/var/fulltextsearchlive.pid&lt;br /&gt;
    start program &amp;quot;/home/pacs/xyz00/users/cloud/bin/start-fulltextsearchlive&amp;quot;&lt;br /&gt;
    stop program &amp;quot;/home/pacs/xyz00/users/cloud/bin/stop-fulltextsearchlive&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Integration mit LDAP ==&lt;br /&gt;
&lt;br /&gt;
Um einheitliche Benutzerzugänge für verschiedene Anwendungen zu ermöglichen, wird oft auf ein zentrales LDAP Verzeichnis gesetzt. &lt;br /&gt;
&lt;br /&gt;
Dieses kann für Nextcloud eingesetzt werden, damit Benutzer nicht lokal in Nextcloud, sondern in LDAP verwaltet werden können.&lt;br /&gt;
&lt;br /&gt;
Siehe auch https://docs.nextcloud.com/server/latest/admin_manual/configuration_user/user_auth_ldap.html&lt;br /&gt;
&lt;br /&gt;
Dazu muss die App &amp;quot;LDAP user and group backend&amp;quot; in den Nextcloud Apps aktiviert werden.&lt;br /&gt;
&lt;br /&gt;
Dann muss die LDAP Anbindung in den Administrationseinstellungen unter &amp;quot;LDAP/AD-Integration&amp;quot; eingerichtet werden.&lt;br /&gt;
&lt;br /&gt;
Der Server mit Port, die BenutzerDN mit Passwort und die BaseDN müssen eingetragen werden.&lt;br /&gt;
&lt;br /&gt;
Es muss auch bestimmt werden, welche Klasse (z.B. inetOrgPerson) die Benutzer brauchen, um Zugriff auf die Nextcloud zu erhalten.&lt;br /&gt;
&lt;br /&gt;
Falls schon Benutzer in der Nextcloud existieren, und diese zu LDAP mitgenommen werden sollen, kann der Anleitung aus diesem Forum Eintrag gefolgt werden: https://help.nextcloud.com/t/migration-to-ldap-keeping-users-and-data/13205&lt;br /&gt;
&lt;br /&gt;
* Voraussetzung ist, dass der Benutzernamen der zu übernehmenden Benutzer in Nextcloud der uid in LDAP entspricht.&lt;br /&gt;
* Es wird ein Administrator Benutzer benötigt, der lokal angelegt wurde, und auch lokal bleibt.&lt;br /&gt;
* Mit diesem Administrator Benutzer wird die LDAP Anbindung eingerichtet.&lt;br /&gt;
* In der Experten Ansicht von LDAP/AD muss bei &amp;quot;Attribut für interne Benutzernamen&amp;quot; eingetragen werden: uid&lt;br /&gt;
* Klicke den Schalter &amp;quot;LDAP Benutzernamenzuordnung löschen&amp;quot;&lt;br /&gt;
* Klicke den Schalter &amp;quot;LDAP Gruppennamenzuordnung löschen&amp;quot;&lt;br /&gt;
* dann in der MySQL Datenbank anmelden, und aus uc_users alle Benutzer bis auf den Administrator Benutzer löschen&lt;br /&gt;
* Dann in der Nextcloud Weboberfläche sich alle Benutzer anzeigen lassen&lt;br /&gt;
* Nun gelingt die Anmeldung mit den anderen Benutzern mit dem LDAP Passwort, und die Dateien wurden übernommen.&lt;br /&gt;
&lt;br /&gt;
== Optimierung der Geschwindigkeit ==&lt;br /&gt;
Manchmal fühlt sich die Nextcloud träge an.&lt;br /&gt;
&lt;br /&gt;
Folgende Änderungen können helfen:&lt;br /&gt;
&lt;br /&gt;
* HTTP/2.0 aktivieren: dem Service von Hostsharing Bescheid geben&lt;br /&gt;
* Die App Dashboard deaktivieren, und dafür werden direkt die Dateien angezeigt&lt;br /&gt;
* Einblenden der README in den Ordnern abschalten: das kann pro Ordner in der UI geschehen (links unten), oder global: &amp;lt;code&amp;gt;occ config:app:set text workspace_available --value=0&amp;lt;/code&amp;gt;. Siehe auch [https://docs.nextcloud.com/server/latest/admin_manual/configuration_server/text_configuration.html#disable-rich-workspaces-globally]&lt;br /&gt;
&lt;br /&gt;
== Default App einstellen ==&lt;br /&gt;
&lt;br /&gt;
In der Datei config.php können wir einstellen, welche App direkt nach der Anmeldung gezeigt wird.&lt;br /&gt;
&lt;br /&gt;
Das ist entweder die Dashboard App, wenn sie aktiviert ist, oder die Dateien App (files).&lt;br /&gt;
&lt;br /&gt;
Falls der Kalender direkt angezeigt werden soll, muss folgende Zeile in der config.php hinzugefügt werden (siehe auch [https://docs.nextcloud.com/server/stable/admin_manual/configuration_server/config_sample_php_parameters.html#defaultapp]):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
&#039;defaultapp&#039; =&amp;gt; &#039;calendar&#039;,&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Nextcloud Updates =&lt;br /&gt;
&lt;br /&gt;
== Updater über die Shell starten ==&lt;br /&gt;
&lt;br /&gt;
Wenn die NextCloud sich nicht über das Webfrontend updaten lässt, kann der Updater auch per Shell im directory /updater durch ausführen des updater.phar gestartet werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell line&amp;gt;&lt;br /&gt;
xyz00-cloud@h00:~$ cd ~/nextcloud&lt;br /&gt;
xyz00-cloud@h00:~/nextcloud$ php updater/updater.phar&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Falls während des Updates kein Backup angelegt werden soll:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell line&amp;gt;&lt;br /&gt;
xyz00-cloud@h00:~$ cd ~/nextcloud&lt;br /&gt;
xyz00-cloud@h00:~/nextcloud$ php updater/updater.phar --no-backup&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es sollten außerdem ein paar Routine-Aufräumarbeiten durchgeführt werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell line&amp;gt;&lt;br /&gt;
xyz00-cloud@h00:~$ cd ~/nextcloud&lt;br /&gt;
xyz00-cloud@h00:~/nextcloud$ php occ db:add-missing-primary-keys --no-interaction&lt;br /&gt;
xyz00-cloud@h00:~/nextcloud$ php occ db:add-missing-columns --no-interaction&lt;br /&gt;
xyz00-cloud@h00:~/nextcloud$ php occ db:add-missing-indices --no-interaction&lt;br /&gt;
xyz00-cloud@h00:~/nextcloud$ php occ db:convert-filecache-bigint --no-interaction&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So können die Apps noch alle aktualisiert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell line&amp;gt;&lt;br /&gt;
xyz00-cloud@h00:~$ cd ~/nextcloud&lt;br /&gt;
xyz00-cloud@h00:~/nextcloud$ php occ app:update --all -n --no-ansi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für weitere Informationen kann auf die offizielle Doku ab Ziffer 2. zurückgegriffen werden.&lt;br /&gt;
&lt;br /&gt;
* [https://docs.nextcloud.com/server/latest/admin_manual/maintenance/update.html#using-the-command-line-based-updater https://docs.nextcloud.com]&lt;br /&gt;
&lt;br /&gt;
Hier gibt es ein kurzes Video, das die Anmeldung über die Kommandozeile mit Putty erklärt und die Aktualisierung von Nextcloud auf der Kommandozeile:&lt;br /&gt;
&lt;br /&gt;
* [https://tube.solidcharity.net/w/0cf5ee97-ba7c-41df-a56f-8d1fea842ab0 Nextcloud auf der Kommandozeile aktualisieren]&lt;br /&gt;
&lt;br /&gt;
== Wartungsmodus per Shell ein- oder ausschalten ==&lt;br /&gt;
&lt;br /&gt;
So kann der Wartungsmodus angeschaltet werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell line&amp;gt;&lt;br /&gt;
xyz00-cloud@h00:~$ cd ~/nextcloud&lt;br /&gt;
xyz00-cloud@h00:~/nextcloud$ php occ maintenance:mode --on&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So kann der Wartungsmodus wieder ausgeschaltet werden, d.h. die Nextcloud ist dann wieder in Betrieb:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell line&amp;gt;&lt;br /&gt;
xyz00-cloud@h00:~$ cd ~/nextcloud&lt;br /&gt;
xyz00-cloud@h00:~/nextcloud$ php occ maintenance:mode --off&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Webfrontend-Updater Probleme / Lösungen ==&lt;br /&gt;
&lt;br /&gt;
=== Datenbank: Indizes | Primärschlüssel | Konvertierungen ===&lt;br /&gt;
&lt;br /&gt;
Aufgetreten nach erfolgtem Versionsupdate Nextcloud 19 auf Nextcloud 20&lt;br /&gt;
&lt;br /&gt;
Nach dem erfolgten Update lädt automatisch die Seite: &#039;&#039;&#039;Sicherheits- und Einrichtungswarnungen&#039;&#039;&#039; auf dieser wird angemerkt, dass manuelle Schritte für die Datenbank durchzuführen sind. Dies betrifft Indizes, Primärschlüssel und Konvertierungen. &lt;br /&gt;
&lt;br /&gt;
Per Shell in der directory /nextcloud folgende Kommandos ausführen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell line&amp;gt;&lt;br /&gt;
xyz00-cloud@h00:~$ cd ~/nextcloud&lt;br /&gt;
xyz00-cloud@h00:~/nextcloud$ php occ db:add-missing-primary-keys --no-interaction&lt;br /&gt;
xyz00-cloud@h00:~/nextcloud$ php occ db:add-missing-columns --no-interaction&lt;br /&gt;
xyz00-cloud@h00:~/nextcloud$ php occ db:add-missing-indices --no-interaction&lt;br /&gt;
xyz00-cloud@h00:~/nextcloud$ php occ db:convert-filecache-bigint --no-interaction&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wichtig ist hier dem durch Nextcloud angegebenen Kommando ein &#039;&#039;&#039;php&#039;&#039;&#039; voranzustellen.&lt;br /&gt;
&lt;br /&gt;
== Update per Skript ==&lt;br /&gt;
&lt;br /&gt;
Es ist möglich die regelmäßigen Updates weitgehend zu automatisieren. Ein Skript wäre etwa:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell line&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
if [ -f $HOME/nextcloud/occ ]; then &lt;br /&gt;
  echo &amp;quot;Nextcloud Update&amp;quot;; &lt;br /&gt;
  cd $HOME/nextcloud;&lt;br /&gt;
  php updater/updater.phar -vv --no-backup --no-interaction&lt;br /&gt;
  php occ maintenance:mode --on&lt;br /&gt;
  php occ db:add-missing-primary-keys --no-interaction&lt;br /&gt;
  php occ db:add-missing-columns --no-interaction&lt;br /&gt;
  php occ db:add-missing-indices --no-interaction&lt;br /&gt;
  php occ db:convert-filecache-bigint --no-interaction&lt;br /&gt;
  php occ app:update --all&lt;br /&gt;
  php occ maintenance:mode --off&lt;br /&gt;
else &lt;br /&gt;
  echo &amp;quot;Keine Nextcloud Installation gefunden&amp;quot;; &lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Update: bei old-stable Version bleiben ==&lt;br /&gt;
&lt;br /&gt;
Normalerweise fragt jede Nextcloud Instanz zentral ab, welches Update zur Verfügung steht, abhängig vom Release Channel. Dabei wird aber relativ schnell auf die nächste Version gewechselt, also z.B. von Nextcloud 28 auf Nextcloud 29, obwohl Nextcloud 28 noch mehrere Monate gepflegt wird, und manche Apps noch nicht bereit sind für Nextcloud 29.&lt;br /&gt;
&lt;br /&gt;
Es kann aber auch eine Alternative eingerichtet werden, in der Datei nextcloud/config/config.php, unter dem Eintrag updater.server.url&lt;br /&gt;
&lt;br /&gt;
Hier wird z.B. auf einen Updater von unserem Mitglied Timotheus Pokorra verwiesen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=php line&amp;gt;&lt;br /&gt;
updater_server_url: &amp;quot;https://ncupdater.solidcharity.com&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dahinter läuft ein Skript, mit dem wir noch länger eine bestimmte Version anbieten können: https://codeberg.org/tpokorra/ncupdater&lt;br /&gt;
&lt;br /&gt;
= Daten auf HDD Storage =&lt;br /&gt;
== Einrichtung des HDD Storage ==&lt;br /&gt;
&lt;br /&gt;
Um den langsameren aber günstigeren HDD Storage von Hostsharing zu nutzen, kann das data Verzeichnis von SSD auf HDD Storage verschoben werden. Ein symbolischer Link reicht nicht aus, man muss den Pfad in der Nextcloud Konfigurationsdatei anpassen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
# Nextcloud in Wartungsmodus versetzen&lt;br /&gt;
xyz00-cloud@h00:~/nextcloud$ php occ maintenance:mode --on&lt;br /&gt;
# Daten auf HDD Storage verschieben&lt;br /&gt;
xyz00-cloud@h00:~/nextcloud$ mv data /home/storage/xyz00/users/cloud/&lt;br /&gt;
# symbolischen Link anlegen&lt;br /&gt;
xyz00-cloud@h00:~/nextcloud$ ln -s /home/storage/xyz00/users/cloud/data data&lt;br /&gt;
# Pfad in config.php ändern&lt;br /&gt;
nano config/config.php&lt;br /&gt;
# Die Zeile mit &#039;datadirectory&#039; finden und entsprechend ändern:&lt;br /&gt;
# &#039;datadirectory&#039; =&amp;gt; &#039;/home/storage/xyz00/users/cloud/data&#039;,&lt;br /&gt;
# Wartungsmodus beenden&lt;br /&gt;
xyz00-cloud@h00:~/nextcloud$ php occ maintenance:mode --off&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ein Fallstrick: Im data-Verzeichnis liegt eine versteckte Datei &amp;quot;.ncdata&amp;quot;. Beim Move-Befehl &amp;quot;mv&amp;quot; für das komplette Data-Verzeichnis wird diese Datei mit verschoben. Sonst muss die Datei ggf. ins neue data-Verzeichnis kopiert werden!&lt;br /&gt;
&lt;br /&gt;
= Einschränkende Bemerkungen =&lt;br /&gt;
== Nextcloud Sync Client ==&lt;br /&gt;
&lt;br /&gt;
Der Nextcloud Sync Client erfüllt eine Funktion ähnlich wie Dropbox, und synchronisiert ganze Ordnerstrukturen. &lt;br /&gt;
&lt;br /&gt;
Gerade wenn man mit mehreren Menschen in einer Nextcloud arbeitet, ist diese Funktion mit Vorsicht zu benutzen.&lt;br /&gt;
&lt;br /&gt;
* Änderungen an der Ordnerstruktur sollten nicht lokal, sondern im Webbrowser vorgenommen werden.&lt;br /&gt;
* Wenn die Gefahr besteht, dass mehrere Menschen gleichzeitig eine Datei bearbeiten, sollte die Datei nicht lokal, sondern im Webbrowser bearbeitet werden.&lt;br /&gt;
* Aus Sicht des Datenschutzes und der Daten-Minimierung sollte überlegt werden, ob die Daten wirklich auf jeden Laptop und Rechner synchronisiert werden sollen, oder ob es reicht, ausschließlich über den Webbrowser auf die Daten zuzugreifen.&lt;br /&gt;
&lt;br /&gt;
= weiterführende Links =&lt;br /&gt;
&lt;br /&gt;
* [https://docs.nextcloud.com/ Nextcloud Dokumentation]&lt;br /&gt;
* [https://apps.nextcloud.com/ Nextcloud Erweiterungen (&amp;quot;Apps&amp;quot;)]&lt;br /&gt;
* [https://ownyourbits.com/2019/06/29/understanding-and-improving-nextcloud-previews/ Optimierung des Caches für Previews]&lt;br /&gt;
* [https://codeberg.org/tpokorra/hs.ansible/src/branch/main/playbooks/nextcloud Ansible Playbook für Hostsharing]&lt;br /&gt;
&lt;br /&gt;
= Nextcloud Reseller bei HS =&lt;br /&gt;
&lt;br /&gt;
[https://nextcloud.ossaas.de OS SaaS]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[Kategorie:HSDoku]]&lt;br /&gt;
[[Kategorie:Installationsanleitungen]]&lt;br /&gt;
[[Kategorie:Ansible Playbook]]&lt;br /&gt;
[[Kategorie:Software]]&lt;br /&gt;
[[Kategorie:CalDAV]]&lt;br /&gt;
[[Kategorie:Nextcloud]]&lt;/div&gt;</summary>
		<author><name>Peh</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Grouprise&amp;diff=7043</id>
		<title>Grouprise</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Grouprise&amp;diff=7043"/>
		<updated>2024-11-13T18:26:32Z</updated>

		<summary type="html">&lt;p&gt;Peh: /* Notizen zur Installation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Installation von Grouprise ==&lt;br /&gt;
&lt;br /&gt;
Grouprise / Stadtgestalten ist eine Software für die Menschen in einer Stadt oder Region. Sie ermöglicht es, dass einzelne Personen sich in Gruppen engagieren und austauschen. Grouprise ist freie Software (FOSS), die Lizenz ist die AGPL.&lt;br /&gt;
&lt;br /&gt;
Die Software beinhaltet eine Mailinglisten-ähnliche Funktionalität in Kombination mit der Diskussion über die HTML-Oberfläche. Für Die Mailfunktionalität nutzen wir hier die Subdomain, unter der auch die Anwendung läuft. Im Beispiel ist das &amp;quot;groups.hs-example.de&amp;quot;. Für diese Domain wird hier eine Catch-All-Mailadresse eingerichtet.&lt;br /&gt;
&lt;br /&gt;
==== Vorbereitungen in HSAdmin ====&lt;br /&gt;
&lt;br /&gt;
In HSAdmin werden angelegt:&lt;br /&gt;
* ein Service-User,&lt;br /&gt;
* eine Domain,&lt;br /&gt;
* ein Postgres-User und eine Datenbank,&lt;br /&gt;
* eine Catch-All E-Mail Adresse&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xyz00@h00:~$ hsscript -i&lt;br /&gt;
Password: *********************&lt;br /&gt;
xyz00@hsadmin&amp;gt; user.add({ set: { name:&#039;xyz00-groups&#039;, password:&#039;******&#039;, shell:&#039;/bin/bash&#039; } })&lt;br /&gt;
xyz00@hsadmin&amp;gt; domain.add({ set: { name:&#039;groups.hs-example.de&#039;, user:&#039;xyz00-groups&#039; } })&lt;br /&gt;
xyz00@hsadmin&amp;gt; postgresqluser.add({ set: { name:&#039;xyz00_groups&#039;, password:&#039;******&#039; } })&lt;br /&gt;
xyz00@hsadmin&amp;gt; postgresqldb.add({ set: { name:&#039;xyz00_groups&#039;, owner:&#039;xyz00_groups&#039; } })&lt;br /&gt;
xyz00@hsadmin&amp;gt; emailaddress.add({ set: { localpart:&#039;&#039;, domain:&#039;groups.hs-example.de&#039;, target:&#039;xyz00-groups&#039; } })&lt;br /&gt;
xyz00@hsadmin&amp;gt; bye&lt;br /&gt;
xyz00@h00:~$ &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Notizen zur Installation ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xyz00-groups@h00:~$ git clone https://git.hack-hro.de/grouprise/grouprise.git&lt;br /&gt;
xyz00-groups@h00:~$ cd grouprise/&lt;br /&gt;
xyz00-groups@h00:~/grouprise$ git tag&lt;br /&gt;
xyz00-groups@h00:~/grouprise$ git checkout v5.5.1&lt;br /&gt;
xyz00-groups@h00:~/grouprise$ make virtualenv-update&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Den Secret_Key kann man wie folgt erzeugen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
python3 -c &amp;quot;import secrets; print(secrets.token_urlsafe(32))&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anlegen einer Datei &#039;&#039;$HOME/.config/grouprise/conf.d/grouprise.yaml&#039;&#039; mit folgendem Inhalt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
domain: groups.hs-example.de&lt;br /&gt;
log_recipient_emails:&lt;br /&gt;
        - webmaster@groups.hs-example.de&lt;br /&gt;
database:&lt;br /&gt;
        engine: postgresql&lt;br /&gt;
        host: localhost&lt;br /&gt;
        name: xyz00_groups&lt;br /&gt;
        user: xyz00_groups&lt;br /&gt;
        password: &amp;quot;*****&amp;quot;&lt;br /&gt;
secret_key: &amp;quot;XXXXXXXXXXXXXXXXXXXXXXXXXXX&amp;quot;&lt;br /&gt;
feed_importer_gestalt_id: 1&lt;br /&gt;
operator_group_id: 1&lt;br /&gt;
unknown_gestalt_id: 32&lt;br /&gt;
&lt;br /&gt;
mailinglist_enabled: True&lt;br /&gt;
&lt;br /&gt;
branding:&lt;br /&gt;
        logo_backdrop: /-/site/logo_backdrop.svg&lt;br /&gt;
        logo_favicon: /-/site/favicon.ico&lt;br /&gt;
        logo_square: /-/site/logo_large.svg&lt;br /&gt;
        logo_text: /-/site/logo_text.svg&lt;br /&gt;
&lt;br /&gt;
backup_path: /home/storage/xyz00/users/groups/backup&lt;br /&gt;
&lt;br /&gt;
extra_django_settings_filenames:&lt;br /&gt;
        - /home/pacs/xyz00/users/groups/etc/settings.py&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Datenbankmigration und statische Assets erzeugen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xyz00-groups@h00:~/grouprise$ mkdir -p $HOME/var&lt;br /&gt;
xyz00-groups@h00:~/grouprise$ mkdir -p $HOME/etc&lt;br /&gt;
xyz00-groups@h00:~/grouprise$ . build/venv/bin/activate&lt;br /&gt;
xyz00-groups@h00:~/grouprise$ python manage.py migrate&lt;br /&gt;
xyz00-groups@h00:~/grouprise$ make&lt;br /&gt;
xyz00-groups@h00:~/grouprise$&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Integration in den Apache ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xyz00@h00:~$ hsscript -i&lt;br /&gt;
Password: *********************&lt;br /&gt;
xyz00@hsadmin&amp;gt; domain.update({where:{name:&#039;groups.hs-example.de&#039;},set:{passengerpython:&#039;/home/pacs/xyz00/users/groups/grouprise/build/venv/bin/python&#039;,domainoptions:[&#039;htdocsfallback&#039;,&#039;indexes&#039;,&#039;dkim&#039;,&#039;passenger&#039;,&#039;autoconfig&#039;,&#039;greylisting&#039;,&#039;letsencrypt&#039;]}})&lt;br /&gt;
xyz00@hsadmin&amp;gt; bye&lt;br /&gt;
xyz00@h00:~$ &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xyz00-groups@h00:~/grouprise$ cd $HOME/doms/groups.hs-example.de/&lt;br /&gt;
xyz00-groups@h00:~/doms/groups.hs-example.de$ rm -rf subs/www/ subs-ssl/www/ htdocs-ssl/.htaccess &lt;br /&gt;
xyz00-groups@h00:~/doms/groups.hs-example.de$ vi .htaccess&lt;br /&gt;
xyz00-groups@h00:~/doms/groups.hs-example.de$ cat .htaccess&lt;br /&gt;
PassengerPython /home/pacs/xyz00/users/groups/grouprise/build/venv/bin/python&lt;br /&gt;
xyz00-groups@h00:~/doms/groups.hs-example.de$ cd htdocs-ssl/&lt;br /&gt;
xyz00-groups@h00:~/doms/groups.hs-example.de/htdocs-ssl$ mkdir stadt&lt;br /&gt;
xyz00-groups@h00:~/doms/groups.hs-example.de/htdocs-ssl$ cd stadt/&lt;br /&gt;
xyz00-groups@h00:~/doms/groups.hs-example.de/htdocs-ssl/stadt$ ln -s $HOME/grouprise/static .&lt;br /&gt;
xyz00-groups@h00:~/doms/groups.hs-example.de/htdocs-ssl/stadt$ ln -s $HOME/grouprise/media .&lt;br /&gt;
xyz00-groups@h00:~/doms/groups.hs-example.de/htdocs-ssl/stadt$ cd $HOME/doms/groups.hs-example.de/app-ssl&lt;br /&gt;
xyz00-groups@h00:~/doms/groups.hs-example.de/app-ssl$ vi passenger_wsgi.py&lt;br /&gt;
xyz00-groups@h00:~/doms/groups.hs-example.de/app-ssl$ cat passenger_wsgi.py&lt;br /&gt;
import sys, os&lt;br /&gt;
sys.path.append(&amp;quot;/home/pacs/xyz00/users/groups/grouprise&amp;quot;)&lt;br /&gt;
from django.conf import settings&lt;br /&gt;
from django.core.wsgi import get_wsgi_application&lt;br /&gt;
os.environ.setdefault(&amp;quot;DJANGO_SETTINGS_MODULE&amp;quot;, &amp;quot;grouprise.settings&amp;quot;)&lt;br /&gt;
application = get_wsgi_application()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Datei &#039;&#039;$HOME/doms/groups.hs-example.de/.htaccess&#039;&#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
PassengerPython /home/pacs/xyz00/users/groups/grouprise/build/venv/bin/python&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Datei &#039;&#039;$HOME/doms/groups.hs-example.de/app-ssl/passenger_wsgi.py&#039;&#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
import sys, os&lt;br /&gt;
sys.path.append(&amp;quot;/home/pacs/xyz00/users/groups/grouprise&amp;quot;)&lt;br /&gt;
from django.conf import settings&lt;br /&gt;
from django.core.wsgi import get_wsgi_application&lt;br /&gt;
os.environ.setdefault(&amp;quot;DJANGO_SETTINGS_MODULE&amp;quot;, &amp;quot;grouprise.settings&amp;quot;)&lt;br /&gt;
application = get_wsgi_application()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Senden von E-Mail ====&lt;br /&gt;
&lt;br /&gt;
Der Versand auf E-Mail erfolgt asynchron durch einen eigenen Prozess. Das Starten des Prozess erfolgt von Hand wie folgt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd $HOME/grouprise&lt;br /&gt;
. build/venv/bin/activate&lt;br /&gt;
python manage.py run_huey --logfile $HOME/var/huey_consumer.log&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es ist sinnvoll ein kleines Start- und Stopskript zu schreiben und den Prozess zum Beispiel mit &amp;quot;monit&amp;quot; zu kontrollieren.&lt;br /&gt;
&lt;br /&gt;
==== Empfang von E-Mail ====&lt;br /&gt;
&lt;br /&gt;
Ankommmende E-Mail an ein Grouprise-Forum werden über die Datei &amp;quot;.forward&amp;quot; im $HOME des Service-Users in ein Skript &amp;quot;~/bin/mailin&amp;quot; geleitet.&lt;br /&gt;
&lt;br /&gt;
Inhalt des Skriptes&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
xyz00-groups@h00:~$ cat bin/mailin&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
umask 0022&lt;br /&gt;
export LANG=de_DE.ISO-8859-1&lt;br /&gt;
(cd /home/pacs/xyz00/users/groups/stadtgestalten &amp;amp;&amp;amp; /home/pacs/xyz00/users/groups/stadtgestalten/build/venv/bin/python manage.py processincomingmessage)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Datei &amp;quot;.forward&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
xyz00-groups@h00:~$ cat .forward &lt;br /&gt;
|/home/pacs/xyz00/users/groups/bin/mailin&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Suchfunktion ====&lt;br /&gt;
&lt;br /&gt;
Aufbau des Suchindex für Artikel in Grouprise&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd ~/stadtgestalten&lt;br /&gt;
. build/venv/bin/activate&lt;br /&gt;
python manage.py clear_index &lt;br /&gt;
python manage.py rebuild_index&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Regelmäßige Updates des Suchindex per Cron:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
xyz00-groups@h00:~$ crontab -l&lt;br /&gt;
# m h  dom mon dow   command&lt;br /&gt;
HOME=/home/pacs/xyz00/users/groups&lt;br /&gt;
VIRTUAL_ENV=/home/pacs/xyz00/users/stadt/stadtgestalten/build/venv&lt;br /&gt;
PATH=/home/pacs/xyz00/users/groups/stadtgestalten/build/venv/bin:/home/pacs/xyz00/users/groups/.nvm/versions/node/v10.21.0/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games&lt;br /&gt;
MAILTO=webmaster@groups.hs-example.com&lt;br /&gt;
0 */5 * * * cd $HOME/stadtgestalten &amp;amp;&amp;amp; $VIRTUAL_ENV/bin/python manage.py update_index &amp;gt;/dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
=== Webseite ===&lt;br /&gt;
&lt;br /&gt;
* https://grouprise.org&lt;br /&gt;
* https://git.hack-hro.de/grouprise/grouprise/ (Git Repository)&lt;br /&gt;
&lt;br /&gt;
=== Grouprise Installationen ===&lt;br /&gt;
&lt;br /&gt;
* https://stadtgestalten.org/ Rostock&lt;br /&gt;
* https://stadtimpuls.org/ Greifswald&lt;br /&gt;
* https://schwerin-aktiv.org/ Schwerin&lt;br /&gt;
&lt;br /&gt;
=== Handbuch für Nutzer:innen ===&lt;br /&gt;
&lt;br /&gt;
* https://stadtgestalten.org/stadtgestalten/tools/&lt;br /&gt;
* https://stadtgestalten.org/stadtgestalten/tools-print/ (als PDF)&lt;/div&gt;</summary>
		<author><name>Peh</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Grouprise&amp;diff=7042</id>
		<title>Grouprise</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Grouprise&amp;diff=7042"/>
		<updated>2024-11-13T18:24:50Z</updated>

		<summary type="html">&lt;p&gt;Peh: /* Notizen zur Installation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Installation von Grouprise ==&lt;br /&gt;
&lt;br /&gt;
Grouprise / Stadtgestalten ist eine Software für die Menschen in einer Stadt oder Region. Sie ermöglicht es, dass einzelne Personen sich in Gruppen engagieren und austauschen. Grouprise ist freie Software (FOSS), die Lizenz ist die AGPL.&lt;br /&gt;
&lt;br /&gt;
Die Software beinhaltet eine Mailinglisten-ähnliche Funktionalität in Kombination mit der Diskussion über die HTML-Oberfläche. Für Die Mailfunktionalität nutzen wir hier die Subdomain, unter der auch die Anwendung läuft. Im Beispiel ist das &amp;quot;groups.hs-example.de&amp;quot;. Für diese Domain wird hier eine Catch-All-Mailadresse eingerichtet.&lt;br /&gt;
&lt;br /&gt;
==== Vorbereitungen in HSAdmin ====&lt;br /&gt;
&lt;br /&gt;
In HSAdmin werden angelegt:&lt;br /&gt;
* ein Service-User,&lt;br /&gt;
* eine Domain,&lt;br /&gt;
* ein Postgres-User und eine Datenbank,&lt;br /&gt;
* eine Catch-All E-Mail Adresse&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xyz00@h00:~$ hsscript -i&lt;br /&gt;
Password: *********************&lt;br /&gt;
xyz00@hsadmin&amp;gt; user.add({ set: { name:&#039;xyz00-groups&#039;, password:&#039;******&#039;, shell:&#039;/bin/bash&#039; } })&lt;br /&gt;
xyz00@hsadmin&amp;gt; domain.add({ set: { name:&#039;groups.hs-example.de&#039;, user:&#039;xyz00-groups&#039; } })&lt;br /&gt;
xyz00@hsadmin&amp;gt; postgresqluser.add({ set: { name:&#039;xyz00_groups&#039;, password:&#039;******&#039; } })&lt;br /&gt;
xyz00@hsadmin&amp;gt; postgresqldb.add({ set: { name:&#039;xyz00_groups&#039;, owner:&#039;xyz00_groups&#039; } })&lt;br /&gt;
xyz00@hsadmin&amp;gt; emailaddress.add({ set: { localpart:&#039;&#039;, domain:&#039;groups.hs-example.de&#039;, target:&#039;xyz00-groups&#039; } })&lt;br /&gt;
xyz00@hsadmin&amp;gt; bye&lt;br /&gt;
xyz00@h00:~$ &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Notizen zur Installation ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xyz00-groups@h00:~$ git clone https://git.hack-hro.de/grouprise/grouprise.git&lt;br /&gt;
xyz00-groups@h00:~$ cd grouprise/&lt;br /&gt;
xyz00-groups@h00:~/grouprise$ git tag&lt;br /&gt;
xyz00-groups@h00:~/grouprise$ git checkout v5.5.1&lt;br /&gt;
xyz00-groups@h00:~/grouprise$ make virtualenv-update&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Den Secret_Key kann man wie folgt erzeugen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
python3 -c &amp;quot;import secrets; print(secrets.token_urlsafe(32))&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anlegen einer Datei &#039;&#039;$HOME/.config/grouprise/conf.d/grouprise.yaml&#039;&#039; mit folgendem Inhalt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
domain: groups.hs-example.de&lt;br /&gt;
log_recipient_emails:&lt;br /&gt;
        - webmaster@groups.hs-example.de&lt;br /&gt;
database:&lt;br /&gt;
        engine: postgresql&lt;br /&gt;
        host: localhost&lt;br /&gt;
        name: xyz00_groups&lt;br /&gt;
        user: xyz00_groups&lt;br /&gt;
        password: &amp;quot;*****&amp;quot;&lt;br /&gt;
secret_key: &amp;quot;XXXXXXXXXXXXXXXXXXXXXXXXXXX&amp;quot;&lt;br /&gt;
feed_importer_gestalt_id: 1&lt;br /&gt;
operator_group_id: 1&lt;br /&gt;
unknown_gestalt_id: 32&lt;br /&gt;
&lt;br /&gt;
mailinglist_enabled: True&lt;br /&gt;
&lt;br /&gt;
branding:&lt;br /&gt;
        logo_backdrop: /-/site/logo_backdrop.svg&lt;br /&gt;
        logo_favicon: /-/site/favicon.ico&lt;br /&gt;
        logo_square: /-/site/logo_large.svg&lt;br /&gt;
        logo_text: /-/site/logo_text.svg&lt;br /&gt;
&lt;br /&gt;
backup_path: /home/storage/xyz00/users/groups/backup&lt;br /&gt;
&lt;br /&gt;
extra_django_settings_filenames:&lt;br /&gt;
        - /home/pacs/xyz00/users/groups/etc/settings.py&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verlinken nach &#039;&#039;$HOME/grouprise/grouprise/settings.py&#039;&#039; und Datenbankmigration:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xyz00-groups@h00:~/grouprise$ mkdir -p $HOME/var&lt;br /&gt;
xyz00-groups@h00:~/grouprise$ mkdir -p $HOME/etc&lt;br /&gt;
xyz00-groups@h00:~/grouprise$ vi $HOME/etc/settings.py&lt;br /&gt;
xyz00-groups@h00:~/grouprise$ ln -s $HOME/etc/settings.py ./grouprise/ &lt;br /&gt;
xyz00-groups@h00:~/grouprise$ . build/venv/bin/activate&lt;br /&gt;
xyz00-groups@h00:~/grouprise$ python manage.py migrate&lt;br /&gt;
xyz00-groups@h00:~/grouprise$ make&lt;br /&gt;
xyz00-groups@h00:~/grouprise$&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Integration in den Apache ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xyz00@h00:~$ hsscript -i&lt;br /&gt;
Password: *********************&lt;br /&gt;
xyz00@hsadmin&amp;gt; domain.update({where:{name:&#039;groups.hs-example.de&#039;},set:{passengerpython:&#039;/home/pacs/xyz00/users/groups/grouprise/build/venv/bin/python&#039;,domainoptions:[&#039;htdocsfallback&#039;,&#039;indexes&#039;,&#039;dkim&#039;,&#039;passenger&#039;,&#039;autoconfig&#039;,&#039;greylisting&#039;,&#039;letsencrypt&#039;]}})&lt;br /&gt;
xyz00@hsadmin&amp;gt; bye&lt;br /&gt;
xyz00@h00:~$ &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xyz00-groups@h00:~/grouprise$ cd $HOME/doms/groups.hs-example.de/&lt;br /&gt;
xyz00-groups@h00:~/doms/groups.hs-example.de$ rm -rf subs/www/ subs-ssl/www/ htdocs-ssl/.htaccess &lt;br /&gt;
xyz00-groups@h00:~/doms/groups.hs-example.de$ vi .htaccess&lt;br /&gt;
xyz00-groups@h00:~/doms/groups.hs-example.de$ cat .htaccess&lt;br /&gt;
PassengerPython /home/pacs/xyz00/users/groups/grouprise/build/venv/bin/python&lt;br /&gt;
xyz00-groups@h00:~/doms/groups.hs-example.de$ cd htdocs-ssl/&lt;br /&gt;
xyz00-groups@h00:~/doms/groups.hs-example.de/htdocs-ssl$ mkdir stadt&lt;br /&gt;
xyz00-groups@h00:~/doms/groups.hs-example.de/htdocs-ssl$ cd stadt/&lt;br /&gt;
xyz00-groups@h00:~/doms/groups.hs-example.de/htdocs-ssl/stadt$ ln -s $HOME/grouprise/static .&lt;br /&gt;
xyz00-groups@h00:~/doms/groups.hs-example.de/htdocs-ssl/stadt$ ln -s $HOME/grouprise/media .&lt;br /&gt;
xyz00-groups@h00:~/doms/groups.hs-example.de/htdocs-ssl/stadt$ cd $HOME/doms/groups.hs-example.de/app-ssl&lt;br /&gt;
xyz00-groups@h00:~/doms/groups.hs-example.de/app-ssl$ vi passenger_wsgi.py&lt;br /&gt;
xyz00-groups@h00:~/doms/groups.hs-example.de/app-ssl$ cat passenger_wsgi.py&lt;br /&gt;
import sys, os&lt;br /&gt;
sys.path.append(&amp;quot;/home/pacs/xyz00/users/groups/grouprise&amp;quot;)&lt;br /&gt;
from django.conf import settings&lt;br /&gt;
from django.core.wsgi import get_wsgi_application&lt;br /&gt;
os.environ.setdefault(&amp;quot;DJANGO_SETTINGS_MODULE&amp;quot;, &amp;quot;grouprise.settings&amp;quot;)&lt;br /&gt;
application = get_wsgi_application()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Datei &#039;&#039;$HOME/doms/groups.hs-example.de/.htaccess&#039;&#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
PassengerPython /home/pacs/xyz00/users/groups/grouprise/build/venv/bin/python&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Datei &#039;&#039;$HOME/doms/groups.hs-example.de/app-ssl/passenger_wsgi.py&#039;&#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
import sys, os&lt;br /&gt;
sys.path.append(&amp;quot;/home/pacs/xyz00/users/groups/grouprise&amp;quot;)&lt;br /&gt;
from django.conf import settings&lt;br /&gt;
from django.core.wsgi import get_wsgi_application&lt;br /&gt;
os.environ.setdefault(&amp;quot;DJANGO_SETTINGS_MODULE&amp;quot;, &amp;quot;grouprise.settings&amp;quot;)&lt;br /&gt;
application = get_wsgi_application()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Senden von E-Mail ====&lt;br /&gt;
&lt;br /&gt;
Der Versand auf E-Mail erfolgt asynchron durch einen eigenen Prozess. Das Starten des Prozess erfolgt von Hand wie folgt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd $HOME/grouprise&lt;br /&gt;
. build/venv/bin/activate&lt;br /&gt;
python manage.py run_huey --logfile $HOME/var/huey_consumer.log&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es ist sinnvoll ein kleines Start- und Stopskript zu schreiben und den Prozess zum Beispiel mit &amp;quot;monit&amp;quot; zu kontrollieren.&lt;br /&gt;
&lt;br /&gt;
==== Empfang von E-Mail ====&lt;br /&gt;
&lt;br /&gt;
Ankommmende E-Mail an ein Grouprise-Forum werden über die Datei &amp;quot;.forward&amp;quot; im $HOME des Service-Users in ein Skript &amp;quot;~/bin/mailin&amp;quot; geleitet.&lt;br /&gt;
&lt;br /&gt;
Inhalt des Skriptes&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
xyz00-groups@h00:~$ cat bin/mailin&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
umask 0022&lt;br /&gt;
export LANG=de_DE.ISO-8859-1&lt;br /&gt;
(cd /home/pacs/xyz00/users/groups/stadtgestalten &amp;amp;&amp;amp; /home/pacs/xyz00/users/groups/stadtgestalten/build/venv/bin/python manage.py processincomingmessage)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Datei &amp;quot;.forward&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
xyz00-groups@h00:~$ cat .forward &lt;br /&gt;
|/home/pacs/xyz00/users/groups/bin/mailin&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Suchfunktion ====&lt;br /&gt;
&lt;br /&gt;
Aufbau des Suchindex für Artikel in Grouprise&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd ~/stadtgestalten&lt;br /&gt;
. build/venv/bin/activate&lt;br /&gt;
python manage.py clear_index &lt;br /&gt;
python manage.py rebuild_index&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Regelmäßige Updates des Suchindex per Cron:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
xyz00-groups@h00:~$ crontab -l&lt;br /&gt;
# m h  dom mon dow   command&lt;br /&gt;
HOME=/home/pacs/xyz00/users/groups&lt;br /&gt;
VIRTUAL_ENV=/home/pacs/xyz00/users/stadt/stadtgestalten/build/venv&lt;br /&gt;
PATH=/home/pacs/xyz00/users/groups/stadtgestalten/build/venv/bin:/home/pacs/xyz00/users/groups/.nvm/versions/node/v10.21.0/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games&lt;br /&gt;
MAILTO=webmaster@groups.hs-example.com&lt;br /&gt;
0 */5 * * * cd $HOME/stadtgestalten &amp;amp;&amp;amp; $VIRTUAL_ENV/bin/python manage.py update_index &amp;gt;/dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
=== Webseite ===&lt;br /&gt;
&lt;br /&gt;
* https://grouprise.org&lt;br /&gt;
* https://git.hack-hro.de/grouprise/grouprise/ (Git Repository)&lt;br /&gt;
&lt;br /&gt;
=== Grouprise Installationen ===&lt;br /&gt;
&lt;br /&gt;
* https://stadtgestalten.org/ Rostock&lt;br /&gt;
* https://stadtimpuls.org/ Greifswald&lt;br /&gt;
* https://schwerin-aktiv.org/ Schwerin&lt;br /&gt;
&lt;br /&gt;
=== Handbuch für Nutzer:innen ===&lt;br /&gt;
&lt;br /&gt;
* https://stadtgestalten.org/stadtgestalten/tools/&lt;br /&gt;
* https://stadtgestalten.org/stadtgestalten/tools-print/ (als PDF)&lt;/div&gt;</summary>
		<author><name>Peh</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Grouprise&amp;diff=7041</id>
		<title>Grouprise</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Grouprise&amp;diff=7041"/>
		<updated>2024-11-13T18:19:37Z</updated>

		<summary type="html">&lt;p&gt;Peh: v5.5.1 klappt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Installation von Grouprise ==&lt;br /&gt;
&lt;br /&gt;
Grouprise / Stadtgestalten ist eine Software für die Menschen in einer Stadt oder Region. Sie ermöglicht es, dass einzelne Personen sich in Gruppen engagieren und austauschen. Grouprise ist freie Software (FOSS), die Lizenz ist die AGPL.&lt;br /&gt;
&lt;br /&gt;
Die Software beinhaltet eine Mailinglisten-ähnliche Funktionalität in Kombination mit der Diskussion über die HTML-Oberfläche. Für Die Mailfunktionalität nutzen wir hier die Subdomain, unter der auch die Anwendung läuft. Im Beispiel ist das &amp;quot;groups.hs-example.de&amp;quot;. Für diese Domain wird hier eine Catch-All-Mailadresse eingerichtet.&lt;br /&gt;
&lt;br /&gt;
==== Vorbereitungen in HSAdmin ====&lt;br /&gt;
&lt;br /&gt;
In HSAdmin werden angelegt:&lt;br /&gt;
* ein Service-User,&lt;br /&gt;
* eine Domain,&lt;br /&gt;
* ein Postgres-User und eine Datenbank,&lt;br /&gt;
* eine Catch-All E-Mail Adresse&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xyz00@h00:~$ hsscript -i&lt;br /&gt;
Password: *********************&lt;br /&gt;
xyz00@hsadmin&amp;gt; user.add({ set: { name:&#039;xyz00-groups&#039;, password:&#039;******&#039;, shell:&#039;/bin/bash&#039; } })&lt;br /&gt;
xyz00@hsadmin&amp;gt; domain.add({ set: { name:&#039;groups.hs-example.de&#039;, user:&#039;xyz00-groups&#039; } })&lt;br /&gt;
xyz00@hsadmin&amp;gt; postgresqluser.add({ set: { name:&#039;xyz00_groups&#039;, password:&#039;******&#039; } })&lt;br /&gt;
xyz00@hsadmin&amp;gt; postgresqldb.add({ set: { name:&#039;xyz00_groups&#039;, owner:&#039;xyz00_groups&#039; } })&lt;br /&gt;
xyz00@hsadmin&amp;gt; emailaddress.add({ set: { localpart:&#039;&#039;, domain:&#039;groups.hs-example.de&#039;, target:&#039;xyz00-groups&#039; } })&lt;br /&gt;
xyz00@hsadmin&amp;gt; bye&lt;br /&gt;
xyz00@h00:~$ &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Notizen zur Installation ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xyz00-groups@h00:~$ git clone https://git.hack-hro.de/grouprise/grouprise.git&lt;br /&gt;
xyz00-groups@h00:~$ cd grouprise/&lt;br /&gt;
xyz00-groups@h00:~/grouprise$ git tag&lt;br /&gt;
xyz00-groups@h00:~/grouprise$ git checkout v5.5.1&lt;br /&gt;
xyz00-groups@h00:~/grouprise$ make virtualenv-update&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Den Secret_Key kann man wie folgt erzeugen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
python3 -c &amp;quot;import secrets; print(secrets.token_urlsafe(32))&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anlegen einer Datei &#039;&#039;$HOME/etc/settings.py&#039;&#039; mit folgendem Inhalt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
from grouprise.common_settings import *&lt;br /&gt;
&lt;br /&gt;
SECRET_KEY = &#039;XXXXXX&#039;&lt;br /&gt;
&lt;br /&gt;
ALLOWED_HOSTS = [ &#039;groups.hs-example.de&#039; ]&lt;br /&gt;
&lt;br /&gt;
DEBUG = True&lt;br /&gt;
&lt;br /&gt;
DATA_PATH = &#039;/home/storage/xyz00/users/groups/data&#039;&lt;br /&gt;
&lt;br /&gt;
MEDIA_ROOT = &#039;/home/storage/xyz00/users/groups/data/media&#039;&lt;br /&gt;
&lt;br /&gt;
DATABASES = {&lt;br /&gt;
    &#039;default&#039;: {&lt;br /&gt;
        &#039;ENGINE&#039;: &#039;django.db.backends.postgresql&#039;,&lt;br /&gt;
        &#039;HOST&#039;: &#039;localhost&#039;,&lt;br /&gt;
        &#039;NAME&#039;: &#039;xyz00_groups&#039;,&lt;br /&gt;
        &#039;USER&#039;: &#039;xyz00_groups&#039;,&lt;br /&gt;
        &#039;PASSWORD&#039;: &#039;******&#039;,&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
HUEY= {&lt;br /&gt;
    &#039;huey_class&#039;: &#039;huey.SqliteHuey&#039;,&lt;br /&gt;
    &#039;filename&#039;: &#039;/home/pacs/xyz00/users/groups/var/huey.sqlite&#039;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
SESSION_COOKIE_AGE = 60 * 60 * 24 * 365&lt;br /&gt;
&lt;br /&gt;
ADMINS = [ (&#039;Admins&#039;, &#039;webmaster@groups.hs-example.de&#039;) ]&lt;br /&gt;
&lt;br /&gt;
DEFAULT_FROM_EMAIL = &#039;noreply@groups.hs-example.de&#039;&lt;br /&gt;
&lt;br /&gt;
SERVER_EMAIL = &#039;noreply@groups.hs-example.de&#039;&lt;br /&gt;
&lt;br /&gt;
ACCOUNT_DEFAULT_HTTP_PROTOCOL = &#039;https&#039;&lt;br /&gt;
&lt;br /&gt;
GROUPRISE = {&lt;br /&gt;
    &#039;CLAIMS&#039;: [ &#039;Meine Stadt&#039;, &#039;Zuhause in&#039;, &#039;Stadt gestalten&#039; ],&lt;br /&gt;
    &#039;SCORE_CONTENT_AGE&#039;: 100,&lt;br /&gt;
    &#039;UPLOAD_MAX_FILE_SIZE&#039;: 0,&lt;br /&gt;
&lt;br /&gt;
    # special users and groups&lt;br /&gt;
    &#039;FEED_IMPORTER_GESTALT_ID&#039;: 1,&lt;br /&gt;
    &#039;OPERATOR_GROUP_ID&#039;: 1,&lt;br /&gt;
    &#039;UNKNOWN_GESTALT_ID&#039;: 1,&lt;br /&gt;
&lt;br /&gt;
    # email settings&lt;br /&gt;
    &#039;DEFAULT_DISTINCT_FROM_EMAIL&#039;: &#039;noreply+{slug}@groups.hs-example.de&#039;,&lt;br /&gt;
    &#039;DEFAULT_REPLY_TO_EMAIL&#039;: &#039;reply+{reply_key}@groups.hs-example.de&#039;,&lt;br /&gt;
    &#039;MAILBOX_DELIVERED_TO_EMAIL&#039;: &#039;xyz00-groups@h00.hostsharing.net&#039;,&lt;br /&gt;
    &#039;POSTMASTER_EMAIL&#039;: &#039;postmaster@groups.hs-example.de&#039;,&lt;br /&gt;
    &#039;MAILINGLIST_ENABLED&#039;: True,&lt;br /&gt;
&lt;br /&gt;
    &#039;ENTITY_SLUG_BLACKLIST&#039;: [&lt;br /&gt;
        &#039;all&#039;, &#039;grouprise&#039;, &#039;info&#039;, &#039;mail&#039;, &#039;noreply&#039;, &#039;postmaster&#039;, &#039;reply&#039;, &#039;stadt&#039;,&lt;br /&gt;
        &#039;webmaster&#039;, &#039;www&#039;&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verlinken nach &#039;&#039;$HOME/grouprise/grouprise/settings.py&#039;&#039; und Datenbankmigration:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xyz00-groups@h00:~/grouprise$ mkdir -p $HOME/var&lt;br /&gt;
xyz00-groups@h00:~/grouprise$ mkdir -p $HOME/etc&lt;br /&gt;
xyz00-groups@h00:~/grouprise$ vi $HOME/etc/settings.py&lt;br /&gt;
xyz00-groups@h00:~/grouprise$ ln -s $HOME/etc/settings.py ./grouprise/ &lt;br /&gt;
xyz00-groups@h00:~/grouprise$ . build/venv/bin/activate&lt;br /&gt;
xyz00-groups@h00:~/grouprise$ python manage.py migrate&lt;br /&gt;
xyz00-groups@h00:~/grouprise$ make&lt;br /&gt;
xyz00-groups@h00:~/grouprise$&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Integration in den Apache ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xyz00@h00:~$ hsscript -i&lt;br /&gt;
Password: *********************&lt;br /&gt;
xyz00@hsadmin&amp;gt; domain.update({where:{name:&#039;groups.hs-example.de&#039;},set:{passengerpython:&#039;/home/pacs/xyz00/users/groups/grouprise/build/venv/bin/python&#039;,domainoptions:[&#039;htdocsfallback&#039;,&#039;indexes&#039;,&#039;dkim&#039;,&#039;passenger&#039;,&#039;autoconfig&#039;,&#039;greylisting&#039;,&#039;letsencrypt&#039;]}})&lt;br /&gt;
xyz00@hsadmin&amp;gt; bye&lt;br /&gt;
xyz00@h00:~$ &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xyz00-groups@h00:~/grouprise$ cd $HOME/doms/groups.hs-example.de/&lt;br /&gt;
xyz00-groups@h00:~/doms/groups.hs-example.de$ rm -rf subs/www/ subs-ssl/www/ htdocs-ssl/.htaccess &lt;br /&gt;
xyz00-groups@h00:~/doms/groups.hs-example.de$ vi .htaccess&lt;br /&gt;
xyz00-groups@h00:~/doms/groups.hs-example.de$ cat .htaccess&lt;br /&gt;
PassengerPython /home/pacs/xyz00/users/groups/grouprise/build/venv/bin/python&lt;br /&gt;
xyz00-groups@h00:~/doms/groups.hs-example.de$ cd htdocs-ssl/&lt;br /&gt;
xyz00-groups@h00:~/doms/groups.hs-example.de/htdocs-ssl$ mkdir stadt&lt;br /&gt;
xyz00-groups@h00:~/doms/groups.hs-example.de/htdocs-ssl$ cd stadt/&lt;br /&gt;
xyz00-groups@h00:~/doms/groups.hs-example.de/htdocs-ssl/stadt$ ln -s $HOME/grouprise/static .&lt;br /&gt;
xyz00-groups@h00:~/doms/groups.hs-example.de/htdocs-ssl/stadt$ ln -s $HOME/grouprise/media .&lt;br /&gt;
xyz00-groups@h00:~/doms/groups.hs-example.de/htdocs-ssl/stadt$ cd $HOME/doms/groups.hs-example.de/app-ssl&lt;br /&gt;
xyz00-groups@h00:~/doms/groups.hs-example.de/app-ssl$ vi passenger_wsgi.py&lt;br /&gt;
xyz00-groups@h00:~/doms/groups.hs-example.de/app-ssl$ cat passenger_wsgi.py&lt;br /&gt;
import sys, os&lt;br /&gt;
sys.path.append(&amp;quot;/home/pacs/xyz00/users/groups/grouprise&amp;quot;)&lt;br /&gt;
from django.conf import settings&lt;br /&gt;
from django.core.wsgi import get_wsgi_application&lt;br /&gt;
os.environ.setdefault(&amp;quot;DJANGO_SETTINGS_MODULE&amp;quot;, &amp;quot;grouprise.settings&amp;quot;)&lt;br /&gt;
application = get_wsgi_application()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Datei &#039;&#039;$HOME/doms/groups.hs-example.de/.htaccess&#039;&#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
PassengerPython /home/pacs/xyz00/users/groups/grouprise/build/venv/bin/python&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Datei &#039;&#039;$HOME/doms/groups.hs-example.de/app-ssl/passenger_wsgi.py&#039;&#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
import sys, os&lt;br /&gt;
sys.path.append(&amp;quot;/home/pacs/xyz00/users/groups/grouprise&amp;quot;)&lt;br /&gt;
from django.conf import settings&lt;br /&gt;
from django.core.wsgi import get_wsgi_application&lt;br /&gt;
os.environ.setdefault(&amp;quot;DJANGO_SETTINGS_MODULE&amp;quot;, &amp;quot;grouprise.settings&amp;quot;)&lt;br /&gt;
application = get_wsgi_application()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Senden von E-Mail ====&lt;br /&gt;
&lt;br /&gt;
Der Versand auf E-Mail erfolgt asynchron durch einen eigenen Prozess. Das Starten des Prozess erfolgt von Hand wie folgt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd $HOME/grouprise&lt;br /&gt;
. build/venv/bin/activate&lt;br /&gt;
python manage.py run_huey --logfile $HOME/var/huey_consumer.log&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es ist sinnvoll ein kleines Start- und Stopskript zu schreiben und den Prozess zum Beispiel mit &amp;quot;monit&amp;quot; zu kontrollieren.&lt;br /&gt;
&lt;br /&gt;
==== Empfang von E-Mail ====&lt;br /&gt;
&lt;br /&gt;
Ankommmende E-Mail an ein Grouprise-Forum werden über die Datei &amp;quot;.forward&amp;quot; im $HOME des Service-Users in ein Skript &amp;quot;~/bin/mailin&amp;quot; geleitet.&lt;br /&gt;
&lt;br /&gt;
Inhalt des Skriptes&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
xyz00-groups@h00:~$ cat bin/mailin&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
umask 0022&lt;br /&gt;
export LANG=de_DE.ISO-8859-1&lt;br /&gt;
(cd /home/pacs/xyz00/users/groups/stadtgestalten &amp;amp;&amp;amp; /home/pacs/xyz00/users/groups/stadtgestalten/build/venv/bin/python manage.py processincomingmessage)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Datei &amp;quot;.forward&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
xyz00-groups@h00:~$ cat .forward &lt;br /&gt;
|/home/pacs/xyz00/users/groups/bin/mailin&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Suchfunktion ====&lt;br /&gt;
&lt;br /&gt;
Aufbau des Suchindex für Artikel in Grouprise&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd ~/stadtgestalten&lt;br /&gt;
. build/venv/bin/activate&lt;br /&gt;
python manage.py clear_index &lt;br /&gt;
python manage.py rebuild_index&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Regelmäßige Updates des Suchindex per Cron:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
xyz00-groups@h00:~$ crontab -l&lt;br /&gt;
# m h  dom mon dow   command&lt;br /&gt;
HOME=/home/pacs/xyz00/users/groups&lt;br /&gt;
VIRTUAL_ENV=/home/pacs/xyz00/users/stadt/stadtgestalten/build/venv&lt;br /&gt;
PATH=/home/pacs/xyz00/users/groups/stadtgestalten/build/venv/bin:/home/pacs/xyz00/users/groups/.nvm/versions/node/v10.21.0/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games&lt;br /&gt;
MAILTO=webmaster@groups.hs-example.com&lt;br /&gt;
0 */5 * * * cd $HOME/stadtgestalten &amp;amp;&amp;amp; $VIRTUAL_ENV/bin/python manage.py update_index &amp;gt;/dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
=== Webseite ===&lt;br /&gt;
&lt;br /&gt;
* https://grouprise.org&lt;br /&gt;
* https://git.hack-hro.de/grouprise/grouprise/ (Git Repository)&lt;br /&gt;
&lt;br /&gt;
=== Grouprise Installationen ===&lt;br /&gt;
&lt;br /&gt;
* https://stadtgestalten.org/ Rostock&lt;br /&gt;
* https://stadtimpuls.org/ Greifswald&lt;br /&gt;
* https://schwerin-aktiv.org/ Schwerin&lt;br /&gt;
&lt;br /&gt;
=== Handbuch für Nutzer:innen ===&lt;br /&gt;
&lt;br /&gt;
* https://stadtgestalten.org/stadtgestalten/tools/&lt;br /&gt;
* https://stadtgestalten.org/stadtgestalten/tools-print/ (als PDF)&lt;/div&gt;</summary>
		<author><name>Peh</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Grouprise&amp;diff=7040</id>
		<title>Grouprise</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Grouprise&amp;diff=7040"/>
		<updated>2024-11-13T15:56:00Z</updated>

		<summary type="html">&lt;p&gt;Peh: passenger einrichten&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Installation von Grouprise ==&lt;br /&gt;
&lt;br /&gt;
Grouprise / Stadtgestalten ist eine Software für die Menschen in einer Stadt oder Region. Sie ermöglicht es, dass einzelne Personen sich in Gruppen engagieren und austauschen. Grouprise ist freie Software (FOSS), die Lizenz ist die AGPL.&lt;br /&gt;
&lt;br /&gt;
Die Software beinhaltet eine Mailinglisten-ähnliche Funktionalität in Kombination mit der Diskussion über die HTML-Oberfläche. Für Die Mailfunktionalität nutzen wir hier die Subdomain, unter der auch die Anwendung läuft. Im Beispiel ist das &amp;quot;groups.hs-example.de&amp;quot;. Für diese Domain wird hier eine Catch-All-Mailadresse eingerichtet.&lt;br /&gt;
&lt;br /&gt;
==== Vorbereitungen in HSAdmin ====&lt;br /&gt;
&lt;br /&gt;
In HSAdmin werden angelegt:&lt;br /&gt;
* ein Service-User,&lt;br /&gt;
* eine Domain,&lt;br /&gt;
* ein Postgres-User und eine Datenbank,&lt;br /&gt;
* eine Catch-All E-Mail Adresse&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xyz00@h00:~$ hsscript -i&lt;br /&gt;
Password: *********************&lt;br /&gt;
xyz00@hsadmin&amp;gt; user.add({ set: { name:&#039;xyz00-groups&#039;, password:&#039;******&#039;, shell:&#039;/bin/bash&#039; } })&lt;br /&gt;
xyz00@hsadmin&amp;gt; domain.add({ set: { name:&#039;groups.hs-example.de&#039;, user:&#039;xyz00-groups&#039; } })&lt;br /&gt;
xyz00@hsadmin&amp;gt; postgresqluser.add({ set: { name:&#039;xyz00_groups&#039;, password:&#039;******&#039; } })&lt;br /&gt;
xyz00@hsadmin&amp;gt; postgresqldb.add({ set: { name:&#039;xyz00_groups&#039;, owner:&#039;xyz00_groups&#039; } })&lt;br /&gt;
xyz00@hsadmin&amp;gt; emailaddress.add({ set: { localpart:&#039;&#039;, domain:&#039;groups.hs-example.de&#039;, target:&#039;xyz00-groups&#039; } })&lt;br /&gt;
xyz00@hsadmin&amp;gt; bye&lt;br /&gt;
xyz00@h00:~$ &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Notizen zur Installation ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xyz00-groups@h00:~$ git clone https://git.hack-hro.de/grouprise/grouprise.git&lt;br /&gt;
xyz00-groups@h00:~$ cd grouprise/&lt;br /&gt;
xyz00-groups@h00:~/grouprise$ git tag&lt;br /&gt;
xyz00-groups@h00:~/grouprise$ git checkout v5.5.3&lt;br /&gt;
xyz00-groups@h00:~/grouprise$ make virtualenv-update&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Den Secret_Key kann man wie folgt erzeugen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
python3 -c &amp;quot;import secrets; print(secrets.token_urlsafe(32))&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anlegen einer Datei &#039;&#039;$HOME/etc/settings.py&#039;&#039; mit folgendem Inhalt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
from grouprise.common_settings import *&lt;br /&gt;
&lt;br /&gt;
SECRET_KEY = &#039;XXXXXX&#039;&lt;br /&gt;
&lt;br /&gt;
ALLOWED_HOSTS = [ &#039;groups.hs-example.de&#039; ]&lt;br /&gt;
&lt;br /&gt;
DEBUG = True&lt;br /&gt;
&lt;br /&gt;
DATA_PATH = &#039;/home/storage/xyz00/users/groups/data&#039;&lt;br /&gt;
&lt;br /&gt;
MEDIA_ROOT = &#039;/home/storage/xyz00/users/groups/data/media&#039;&lt;br /&gt;
&lt;br /&gt;
DATABASES = {&lt;br /&gt;
    &#039;default&#039;: {&lt;br /&gt;
        &#039;ENGINE&#039;: &#039;django.db.backends.postgresql&#039;,&lt;br /&gt;
        &#039;HOST&#039;: &#039;localhost&#039;,&lt;br /&gt;
        &#039;NAME&#039;: &#039;xyz00_groups&#039;,&lt;br /&gt;
        &#039;USER&#039;: &#039;xyz00_groups&#039;,&lt;br /&gt;
        &#039;PASSWORD&#039;: &#039;******&#039;,&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
HUEY= {&lt;br /&gt;
    &#039;huey_class&#039;: &#039;huey.SqliteHuey&#039;,&lt;br /&gt;
    &#039;filename&#039;: &#039;/home/pacs/xyz00/users/groups/var/huey.sqlite&#039;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
SESSION_COOKIE_AGE = 60 * 60 * 24 * 365&lt;br /&gt;
&lt;br /&gt;
ADMINS = [ (&#039;Admins&#039;, &#039;webmaster@groups.hs-example.de&#039;) ]&lt;br /&gt;
&lt;br /&gt;
DEFAULT_FROM_EMAIL = &#039;noreply@groups.hs-example.de&#039;&lt;br /&gt;
&lt;br /&gt;
SERVER_EMAIL = &#039;noreply@groups.hs-example.de&#039;&lt;br /&gt;
&lt;br /&gt;
ACCOUNT_DEFAULT_HTTP_PROTOCOL = &#039;https&#039;&lt;br /&gt;
&lt;br /&gt;
GROUPRISE = {&lt;br /&gt;
    &#039;CLAIMS&#039;: [ &#039;Meine Stadt&#039;, &#039;Zuhause in&#039;, &#039;Stadt gestalten&#039; ],&lt;br /&gt;
    &#039;SCORE_CONTENT_AGE&#039;: 100,&lt;br /&gt;
    &#039;UPLOAD_MAX_FILE_SIZE&#039;: 0,&lt;br /&gt;
&lt;br /&gt;
    # special users and groups&lt;br /&gt;
    &#039;FEED_IMPORTER_GESTALT_ID&#039;: 1,&lt;br /&gt;
    &#039;OPERATOR_GROUP_ID&#039;: 1,&lt;br /&gt;
    &#039;UNKNOWN_GESTALT_ID&#039;: 1,&lt;br /&gt;
&lt;br /&gt;
    # email settings&lt;br /&gt;
    &#039;DEFAULT_DISTINCT_FROM_EMAIL&#039;: &#039;noreply+{slug}@groups.hs-example.de&#039;,&lt;br /&gt;
    &#039;DEFAULT_REPLY_TO_EMAIL&#039;: &#039;reply+{reply_key}@groups.hs-example.de&#039;,&lt;br /&gt;
    &#039;MAILBOX_DELIVERED_TO_EMAIL&#039;: &#039;xyz00-groups@h00.hostsharing.net&#039;,&lt;br /&gt;
    &#039;POSTMASTER_EMAIL&#039;: &#039;postmaster@groups.hs-example.de&#039;,&lt;br /&gt;
    &#039;MAILINGLIST_ENABLED&#039;: True,&lt;br /&gt;
&lt;br /&gt;
    &#039;ENTITY_SLUG_BLACKLIST&#039;: [&lt;br /&gt;
        &#039;all&#039;, &#039;grouprise&#039;, &#039;info&#039;, &#039;mail&#039;, &#039;noreply&#039;, &#039;postmaster&#039;, &#039;reply&#039;, &#039;stadt&#039;,&lt;br /&gt;
        &#039;webmaster&#039;, &#039;www&#039;&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verlinken nach &#039;&#039;$HOME/grouprise/grouprise/settings.py&#039;&#039; und Datenbankmigration:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xyz00-groups@h00:~/grouprise$ mkdir -p $HOME/var&lt;br /&gt;
xyz00-groups@h00:~/grouprise$ mkdir -p $HOME/etc&lt;br /&gt;
xyz00-groups@h00:~/grouprise$ vi $HOME/etc/settings.py&lt;br /&gt;
xyz00-groups@h00:~/grouprise$ ln -s $HOME/etc/settings.py ./grouprise/ &lt;br /&gt;
xyz00-groups@h00:~/grouprise$ . build/venv/bin/activate&lt;br /&gt;
xyz00-groups@h00:~/grouprise$ python manage.py migrate&lt;br /&gt;
xyz00-groups@h00:~/grouprise$ make&lt;br /&gt;
xyz00-groups@h00:~/grouprise$&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Integration in den Apache ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xyz00@h00:~$ hsscript -i&lt;br /&gt;
Password: *********************&lt;br /&gt;
xyz00@hsadmin&amp;gt; domain.update({where:{name:&#039;groups.hs-example.de&#039;},set:{passengerpython:&#039;/home/pacs/xyz00/users/groups/grouprise/build/venv/bin/python&#039;,domainoptions:[&#039;htdocsfallback&#039;,&#039;indexes&#039;,&#039;dkim&#039;,&#039;passenger&#039;,&#039;autoconfig&#039;,&#039;greylisting&#039;,&#039;letsencrypt&#039;]}})&lt;br /&gt;
xyz00@hsadmin&amp;gt; bye&lt;br /&gt;
xyz00@h00:~$ &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xyz00-groups@h00:~/grouprise$ cd $HOME/doms/groups.hs-example.de/&lt;br /&gt;
xyz00-groups@h00:~/doms/groups.hs-example.de$ rm -rf subs/www/ subs-ssl/www/ htdocs-ssl/.htaccess &lt;br /&gt;
xyz00-groups@h00:~/doms/groups.hs-example.de$ vi .htaccess&lt;br /&gt;
xyz00-groups@h00:~/doms/groups.hs-example.de$ cat .htaccess&lt;br /&gt;
PassengerPython /home/pacs/xyz00/users/groups/grouprise/build/venv/bin/python&lt;br /&gt;
xyz00-groups@h00:~/doms/groups.hs-example.de$ cd htdocs-ssl/&lt;br /&gt;
xyz00-groups@h00:~/doms/groups.hs-example.de/htdocs-ssl$ mkdir stadt&lt;br /&gt;
xyz00-groups@h00:~/doms/groups.hs-example.de/htdocs-ssl$ cd stadt/&lt;br /&gt;
xyz00-groups@h00:~/doms/groups.hs-example.de/htdocs-ssl/stadt$ ln -s $HOME/grouprise/static .&lt;br /&gt;
xyz00-groups@h00:~/doms/groups.hs-example.de/htdocs-ssl/stadt$ ln -s $HOME/grouprise/media .&lt;br /&gt;
xyz00-groups@h00:~/doms/groups.hs-example.de/htdocs-ssl/stadt$ cd $HOME/doms/groups.hs-example.de/app-ssl&lt;br /&gt;
xyz00-groups@h00:~/doms/groups.hs-example.de/app-ssl$ vi passenger_wsgi.py&lt;br /&gt;
xyz00-groups@h00:~/doms/groups.hs-example.de/app-ssl$ cat passenger_wsgi.py&lt;br /&gt;
import sys, os&lt;br /&gt;
sys.path.append(&amp;quot;/home/pacs/xyz00/users/groups/grouprise&amp;quot;)&lt;br /&gt;
from django.conf import settings&lt;br /&gt;
from django.core.wsgi import get_wsgi_application&lt;br /&gt;
os.environ.setdefault(&amp;quot;DJANGO_SETTINGS_MODULE&amp;quot;, &amp;quot;grouprise.settings&amp;quot;)&lt;br /&gt;
application = get_wsgi_application()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Datei &#039;&#039;$HOME/doms/groups.hs-example.de/.htaccess&#039;&#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
PassengerPython /home/pacs/xyz00/users/groups/grouprise/build/venv/bin/python&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Datei &#039;&#039;$HOME/doms/groups.hs-example.de/app-ssl/passenger_wsgi.py&#039;&#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
import sys, os&lt;br /&gt;
sys.path.append(&amp;quot;/home/pacs/xyz00/users/groups/grouprise&amp;quot;)&lt;br /&gt;
from django.conf import settings&lt;br /&gt;
from django.core.wsgi import get_wsgi_application&lt;br /&gt;
os.environ.setdefault(&amp;quot;DJANGO_SETTINGS_MODULE&amp;quot;, &amp;quot;grouprise.settings&amp;quot;)&lt;br /&gt;
application = get_wsgi_application()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Senden von E-Mail ====&lt;br /&gt;
&lt;br /&gt;
Der Versand auf E-Mail erfolgt asynchron durch einen eigenen Prozess. Das Starten des Prozess erfolgt von Hand wie folgt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd $HOME/grouprise&lt;br /&gt;
. build/venv/bin/activate&lt;br /&gt;
python manage.py run_huey --logfile $HOME/var/huey_consumer.log&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es ist sinnvoll ein kleines Start- und Stopskript zu schreiben und den Prozess zum Beispiel mit &amp;quot;monit&amp;quot; zu kontrollieren.&lt;br /&gt;
&lt;br /&gt;
==== Empfang von E-Mail ====&lt;br /&gt;
&lt;br /&gt;
Ankommmende E-Mail an ein Grouprise-Forum werden über die Datei &amp;quot;.forward&amp;quot; im $HOME des Service-Users in ein Skript &amp;quot;~/bin/mailin&amp;quot; geleitet.&lt;br /&gt;
&lt;br /&gt;
Inhalt des Skriptes&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
xyz00-groups@h00:~$ cat bin/mailin&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
umask 0022&lt;br /&gt;
export LANG=de_DE.ISO-8859-1&lt;br /&gt;
(cd /home/pacs/xyz00/users/groups/stadtgestalten &amp;amp;&amp;amp; /home/pacs/xyz00/users/groups/stadtgestalten/build/venv/bin/python manage.py processincomingmessage)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Datei &amp;quot;.forward&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
xyz00-groups@h00:~$ cat .forward &lt;br /&gt;
|/home/pacs/xyz00/users/groups/bin/mailin&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Suchfunktion ====&lt;br /&gt;
&lt;br /&gt;
Aufbau des Suchindex für Artikel in Grouprise&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd ~/stadtgestalten&lt;br /&gt;
. build/venv/bin/activate&lt;br /&gt;
python manage.py clear_index &lt;br /&gt;
python manage.py rebuild_index&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Regelmäßige Updates des Suchindex per Cron:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
xyz00-groups@h00:~$ crontab -l&lt;br /&gt;
# m h  dom mon dow   command&lt;br /&gt;
HOME=/home/pacs/xyz00/users/groups&lt;br /&gt;
VIRTUAL_ENV=/home/pacs/xyz00/users/stadt/stadtgestalten/build/venv&lt;br /&gt;
PATH=/home/pacs/xyz00/users/groups/stadtgestalten/build/venv/bin:/home/pacs/xyz00/users/groups/.nvm/versions/node/v10.21.0/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games&lt;br /&gt;
MAILTO=webmaster@groups.hs-example.com&lt;br /&gt;
0 */5 * * * cd $HOME/stadtgestalten &amp;amp;&amp;amp; $VIRTUAL_ENV/bin/python manage.py update_index &amp;gt;/dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
=== Webseite ===&lt;br /&gt;
&lt;br /&gt;
* https://grouprise.org&lt;br /&gt;
* https://git.hack-hro.de/grouprise/grouprise/ (Git Repository)&lt;br /&gt;
&lt;br /&gt;
=== Grouprise Installationen ===&lt;br /&gt;
&lt;br /&gt;
* https://stadtgestalten.org/ Rostock&lt;br /&gt;
* https://stadtimpuls.org/ Greifswald&lt;br /&gt;
* https://schwerin-aktiv.org/ Schwerin&lt;br /&gt;
&lt;br /&gt;
=== Handbuch für Nutzer:innen ===&lt;br /&gt;
&lt;br /&gt;
* https://stadtgestalten.org/stadtgestalten/tools/&lt;br /&gt;
* https://stadtgestalten.org/stadtgestalten/tools-print/ (als PDF)&lt;/div&gt;</summary>
		<author><name>Peh</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Grouprise&amp;diff=7039</id>
		<title>Grouprise</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Grouprise&amp;diff=7039"/>
		<updated>2024-11-13T15:45:00Z</updated>

		<summary type="html">&lt;p&gt;Peh: /* Notizen zur Installation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Installation von Grouprise ==&lt;br /&gt;
&lt;br /&gt;
Grouprise / Stadtgestalten ist eine Software für die Menschen in einer Stadt oder Region. Sie ermöglicht es, dass einzelne Personen sich in Gruppen engagieren und austauschen. Grouprise ist freie Software (FOSS), die Lizenz ist die AGPL.&lt;br /&gt;
&lt;br /&gt;
Die Software beinhaltet eine Mailinglisten-ähnliche Funktionalität in Kombination mit der Diskussion über die HTML-Oberfläche. Für Die Mailfunktionalität nutzen wir hier die Subdomain, unter der auch die Anwendung läuft. Im Beispiel ist das &amp;quot;groups.hs-example.de&amp;quot;. Für diese Domain wird hier eine Catch-All-Mailadresse eingerichtet.&lt;br /&gt;
&lt;br /&gt;
==== Vorbereitungen in HSAdmin ====&lt;br /&gt;
&lt;br /&gt;
In HSAdmin werden angelegt:&lt;br /&gt;
* ein Service-User,&lt;br /&gt;
* eine Domain,&lt;br /&gt;
* ein Postgres-User und eine Datenbank,&lt;br /&gt;
* eine Catch-All E-Mail Adresse&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xyz00@h00:~$ hsscript -i&lt;br /&gt;
Password: *********************&lt;br /&gt;
xyz00@hsadmin&amp;gt; user.add({ set: { name:&#039;xyz00-groups&#039;, password:&#039;******&#039;, shell:&#039;/bin/bash&#039; } })&lt;br /&gt;
xyz00@hsadmin&amp;gt; domain.add({ set: { name:&#039;groups.hs-example.de&#039;, user:&#039;xyz00-groups&#039; } })&lt;br /&gt;
xyz00@hsadmin&amp;gt; postgresqluser.add({ set: { name:&#039;xyz00_groups&#039;, password:&#039;******&#039; } })&lt;br /&gt;
xyz00@hsadmin&amp;gt; postgresqldb.add({ set: { name:&#039;xyz00_groups&#039;, owner:&#039;xyz00_groups&#039; } })&lt;br /&gt;
xyz00@hsadmin&amp;gt; emailaddress.add({ set: { localpart:&#039;&#039;, domain:&#039;groups.hs-example.de&#039;, target:&#039;xyz00-groups&#039; } })&lt;br /&gt;
xyz00@hsadmin&amp;gt; bye&lt;br /&gt;
xyz00@h00:~$ &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Notizen zur Installation ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xyz00-groups@h00:~$ git clone https://git.hack-hro.de/grouprise/grouprise.git&lt;br /&gt;
xyz00-groups@h00:~$ cd grouprise/&lt;br /&gt;
xyz00-groups@h00:~/grouprise$ git tag&lt;br /&gt;
xyz00-groups@h00:~/grouprise$ git checkout v5.5.3&lt;br /&gt;
xyz00-groups@h00:~/grouprise$ make virtualenv-update&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Den Secret_Key kann man wie folgt erzeugen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
python3 -c &amp;quot;import secrets; print(secrets.token_urlsafe(32))&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anlegen einer Datei &#039;&#039;$HOME/etc/settings.py&#039;&#039; mit folgendem Inhalt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
from grouprise.common_settings import *&lt;br /&gt;
&lt;br /&gt;
SECRET_KEY = &#039;XXXXXX&#039;&lt;br /&gt;
&lt;br /&gt;
ALLOWED_HOSTS = [ &#039;groups.hs-example.de&#039; ]&lt;br /&gt;
&lt;br /&gt;
DEBUG = True&lt;br /&gt;
&lt;br /&gt;
DATA_PATH = &#039;/home/storage/xyz00/users/groups/data&#039;&lt;br /&gt;
&lt;br /&gt;
MEDIA_ROOT = &#039;/home/storage/xyz00/users/groups/data/media&#039;&lt;br /&gt;
&lt;br /&gt;
DATABASES = {&lt;br /&gt;
    &#039;default&#039;: {&lt;br /&gt;
        &#039;ENGINE&#039;: &#039;django.db.backends.postgresql&#039;,&lt;br /&gt;
        &#039;HOST&#039;: &#039;localhost&#039;,&lt;br /&gt;
        &#039;NAME&#039;: &#039;xyz00_groups&#039;,&lt;br /&gt;
        &#039;USER&#039;: &#039;xyz00_groups&#039;,&lt;br /&gt;
        &#039;PASSWORD&#039;: &#039;******&#039;,&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
HUEY= {&lt;br /&gt;
    &#039;huey_class&#039;: &#039;huey.SqliteHuey&#039;,&lt;br /&gt;
    &#039;filename&#039;: &#039;/home/pacs/xyz00/users/groups/var/huey.sqlite&#039;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
SESSION_COOKIE_AGE = 60 * 60 * 24 * 365&lt;br /&gt;
&lt;br /&gt;
ADMINS = [ (&#039;Admins&#039;, &#039;webmaster@groups.hs-example.de&#039;) ]&lt;br /&gt;
&lt;br /&gt;
DEFAULT_FROM_EMAIL = &#039;noreply@groups.hs-example.de&#039;&lt;br /&gt;
&lt;br /&gt;
SERVER_EMAIL = &#039;noreply@groups.hs-example.de&#039;&lt;br /&gt;
&lt;br /&gt;
ACCOUNT_DEFAULT_HTTP_PROTOCOL = &#039;https&#039;&lt;br /&gt;
&lt;br /&gt;
GROUPRISE = {&lt;br /&gt;
    &#039;CLAIMS&#039;: [ &#039;Meine Stadt&#039;, &#039;Zuhause in&#039;, &#039;Stadt gestalten&#039; ],&lt;br /&gt;
    &#039;SCORE_CONTENT_AGE&#039;: 100,&lt;br /&gt;
    &#039;UPLOAD_MAX_FILE_SIZE&#039;: 0,&lt;br /&gt;
&lt;br /&gt;
    # special users and groups&lt;br /&gt;
    &#039;FEED_IMPORTER_GESTALT_ID&#039;: 1,&lt;br /&gt;
    &#039;OPERATOR_GROUP_ID&#039;: 1,&lt;br /&gt;
    &#039;UNKNOWN_GESTALT_ID&#039;: 1,&lt;br /&gt;
&lt;br /&gt;
    # email settings&lt;br /&gt;
    &#039;DEFAULT_DISTINCT_FROM_EMAIL&#039;: &#039;noreply+{slug}@groups.hs-example.de&#039;,&lt;br /&gt;
    &#039;DEFAULT_REPLY_TO_EMAIL&#039;: &#039;reply+{reply_key}@groups.hs-example.de&#039;,&lt;br /&gt;
    &#039;MAILBOX_DELIVERED_TO_EMAIL&#039;: &#039;xyz00-groups@h00.hostsharing.net&#039;,&lt;br /&gt;
    &#039;POSTMASTER_EMAIL&#039;: &#039;postmaster@groups.hs-example.de&#039;,&lt;br /&gt;
    &#039;MAILINGLIST_ENABLED&#039;: True,&lt;br /&gt;
&lt;br /&gt;
    &#039;ENTITY_SLUG_BLACKLIST&#039;: [&lt;br /&gt;
        &#039;all&#039;, &#039;grouprise&#039;, &#039;info&#039;, &#039;mail&#039;, &#039;noreply&#039;, &#039;postmaster&#039;, &#039;reply&#039;, &#039;stadt&#039;,&lt;br /&gt;
        &#039;webmaster&#039;, &#039;www&#039;&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verlinken nach &#039;&#039;$HOME/grouprise/stadt/settings/local.py&#039;&#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xyz00-groups@h00:~/grouprise$ mkdir -p $HOME/var&lt;br /&gt;
xyz00-groups@h00:~/grouprise$ mkdir -p $HOME/etc&lt;br /&gt;
xyz00-groups@h00:~/grouprise$ vi $HOME/etc/settings.py&lt;br /&gt;
xyz00-groups@h00:~/grouprise$ ln -s $HOME/etc/settings.py ./grouprise/ &lt;br /&gt;
xyz00-groups@h00:~/grouprise$ . build/venv/bin/activate&lt;br /&gt;
xyz00-groups@h00:~/grouprise$ python manage.py migrate&lt;br /&gt;
xyz00-groups@h00:~/grouprise$ make&lt;br /&gt;
xyz00-groups@h00:~/grouprise$&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Integration in den Apache ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xyz00-groups@h00:~/grouprise$ cd $HOME/doms/groups.hs-example.de/&lt;br /&gt;
xyz00-groups@h00:~/doms/groups.hs-example.de$ rm -rf subs/www/ subs-ssl/www/ htdocs-ssl/.htaccess &lt;br /&gt;
xyz00-groups@h00:~/doms/groups.hs-example.de$ vi .htaccess&lt;br /&gt;
xyz00-groups@h00:~/doms/groups.hs-example.de$ cat .htaccess&lt;br /&gt;
PassengerPython /home/pacs/xyz00/users/groups/grouprise/build/venv/bin/python&lt;br /&gt;
xyz00-groups@h00:~/doms/groups.hs-example.de$ cd htdocs-ssl/&lt;br /&gt;
xyz00-groups@h00:~/doms/groups.hs-example.de/htdocs-ssl$ mkdir stadt&lt;br /&gt;
xyz00-groups@h00:~/doms/groups.hs-example.de/htdocs-ssl$ cd stadt/&lt;br /&gt;
xyz00-groups@h00:~/doms/groups.hs-example.de/htdocs-ssl/stadt$ ln -s $HOME/grouprise/static .&lt;br /&gt;
xyz00-groups@h00:~/doms/groups.hs-example.de/htdocs-ssl/stadt$ ln -s $HOME/grouprise/media .&lt;br /&gt;
xyz00-groups@h00:~/doms/groups.hs-example.de/htdocs-ssl/stadt$ cd $HOME/doms/groups.hs-example.de/app-ssl&lt;br /&gt;
xyz00-groups@h00:~/doms/groups.hs-example.de/app-ssl$ vi passenger_wsgi.py&lt;br /&gt;
xyz00-groups@h00:~/doms/groups.hs-example.de/app-ssl$ cat passenger_wsgi.py&lt;br /&gt;
import sys, os&lt;br /&gt;
sys.path.append(&amp;quot;/home/pacs/xyz00/users/groups/grouprise&amp;quot;)&lt;br /&gt;
from django.conf import settings&lt;br /&gt;
from django.core.wsgi import get_wsgi_application&lt;br /&gt;
os.environ.setdefault(&amp;quot;DJANGO_SETTINGS_MODULE&amp;quot;, &amp;quot;grouprise.settings&amp;quot;)&lt;br /&gt;
application = get_wsgi_application()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Datei &#039;&#039;$HOME/doms/groups.hs-example.de/.htaccess&#039;&#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
PassengerPython /home/pacs/xyz00/users/groups/grouprise/build/venv/bin/python&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Datei &#039;&#039;$HOME/doms/groups.hs-example.de/app-ssl/passenger_wsgi.py&#039;&#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
import sys, os&lt;br /&gt;
sys.path.append(&amp;quot;/home/pacs/xyz00/users/groups/grouprise&amp;quot;)&lt;br /&gt;
from django.conf import settings&lt;br /&gt;
from django.core.wsgi import get_wsgi_application&lt;br /&gt;
os.environ.setdefault(&amp;quot;DJANGO_SETTINGS_MODULE&amp;quot;, &amp;quot;grouprise.settings&amp;quot;)&lt;br /&gt;
application = get_wsgi_application()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Senden von E-Mail ====&lt;br /&gt;
&lt;br /&gt;
Der Versand auf E-Mail erfolgt asynchron durch einen eigenen Prozess. Das Starten des Prozess erfolgt von Hand wie folgt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd $HOME/grouprise&lt;br /&gt;
. build/venv/bin/activate&lt;br /&gt;
python manage.py run_huey --logfile $HOME/var/huey_consumer.log&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es ist sinnvoll ein kleines Start- und Stopskript zu schreiben und den Prozess zum Beispiel mit &amp;quot;monit&amp;quot; zu kontrollieren.&lt;br /&gt;
&lt;br /&gt;
==== Empfang von E-Mail ====&lt;br /&gt;
&lt;br /&gt;
Ankommmende E-Mail an ein Grouprise-Forum werden über die Datei &amp;quot;.forward&amp;quot; im $HOME des Service-Users in ein Skript &amp;quot;~/bin/mailin&amp;quot; geleitet.&lt;br /&gt;
&lt;br /&gt;
Inhalt des Skriptes&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
xyz00-groups@h00:~$ cat bin/mailin&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
umask 0022&lt;br /&gt;
export LANG=de_DE.ISO-8859-1&lt;br /&gt;
(cd /home/pacs/xyz00/users/groups/stadtgestalten &amp;amp;&amp;amp; /home/pacs/xyz00/users/groups/stadtgestalten/build/venv/bin/python manage.py processincomingmessage)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Datei &amp;quot;.forward&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
xyz00-groups@h00:~$ cat .forward &lt;br /&gt;
|/home/pacs/xyz00/users/groups/bin/mailin&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Suchfunktion ====&lt;br /&gt;
&lt;br /&gt;
Aufbau des Suchindex für Artikel in Grouprise&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd ~/stadtgestalten&lt;br /&gt;
. build/venv/bin/activate&lt;br /&gt;
python manage.py clear_index &lt;br /&gt;
python manage.py rebuild_index&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Regelmäßige Updates des Suchindex per Cron:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
xyz00-groups@h00:~$ crontab -l&lt;br /&gt;
# m h  dom mon dow   command&lt;br /&gt;
HOME=/home/pacs/xyz00/users/groups&lt;br /&gt;
VIRTUAL_ENV=/home/pacs/xyz00/users/stadt/stadtgestalten/build/venv&lt;br /&gt;
PATH=/home/pacs/xyz00/users/groups/stadtgestalten/build/venv/bin:/home/pacs/xyz00/users/groups/.nvm/versions/node/v10.21.0/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games&lt;br /&gt;
MAILTO=webmaster@groups.hs-example.com&lt;br /&gt;
0 */5 * * * cd $HOME/stadtgestalten &amp;amp;&amp;amp; $VIRTUAL_ENV/bin/python manage.py update_index &amp;gt;/dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
=== Webseite ===&lt;br /&gt;
&lt;br /&gt;
* https://grouprise.org&lt;br /&gt;
* https://git.hack-hro.de/grouprise/grouprise/ (Git Repository)&lt;br /&gt;
&lt;br /&gt;
=== Grouprise Installationen ===&lt;br /&gt;
&lt;br /&gt;
* https://stadtgestalten.org/ Rostock&lt;br /&gt;
* https://stadtimpuls.org/ Greifswald&lt;br /&gt;
* https://schwerin-aktiv.org/ Schwerin&lt;br /&gt;
&lt;br /&gt;
=== Handbuch für Nutzer:innen ===&lt;br /&gt;
&lt;br /&gt;
* https://stadtgestalten.org/stadtgestalten/tools/&lt;br /&gt;
* https://stadtgestalten.org/stadtgestalten/tools-print/ (als PDF)&lt;/div&gt;</summary>
		<author><name>Peh</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Grouprise&amp;diff=7038</id>
		<title>Grouprise</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Grouprise&amp;diff=7038"/>
		<updated>2024-11-13T15:42:57Z</updated>

		<summary type="html">&lt;p&gt;Peh: /* Notizen zur Installation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Installation von Grouprise ==&lt;br /&gt;
&lt;br /&gt;
Grouprise / Stadtgestalten ist eine Software für die Menschen in einer Stadt oder Region. Sie ermöglicht es, dass einzelne Personen sich in Gruppen engagieren und austauschen. Grouprise ist freie Software (FOSS), die Lizenz ist die AGPL.&lt;br /&gt;
&lt;br /&gt;
Die Software beinhaltet eine Mailinglisten-ähnliche Funktionalität in Kombination mit der Diskussion über die HTML-Oberfläche. Für Die Mailfunktionalität nutzen wir hier die Subdomain, unter der auch die Anwendung läuft. Im Beispiel ist das &amp;quot;groups.hs-example.de&amp;quot;. Für diese Domain wird hier eine Catch-All-Mailadresse eingerichtet.&lt;br /&gt;
&lt;br /&gt;
==== Vorbereitungen in HSAdmin ====&lt;br /&gt;
&lt;br /&gt;
In HSAdmin werden angelegt:&lt;br /&gt;
* ein Service-User,&lt;br /&gt;
* eine Domain,&lt;br /&gt;
* ein Postgres-User und eine Datenbank,&lt;br /&gt;
* eine Catch-All E-Mail Adresse&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xyz00@h00:~$ hsscript -i&lt;br /&gt;
Password: *********************&lt;br /&gt;
xyz00@hsadmin&amp;gt; user.add({ set: { name:&#039;xyz00-groups&#039;, password:&#039;******&#039;, shell:&#039;/bin/bash&#039; } })&lt;br /&gt;
xyz00@hsadmin&amp;gt; domain.add({ set: { name:&#039;groups.hs-example.de&#039;, user:&#039;xyz00-groups&#039; } })&lt;br /&gt;
xyz00@hsadmin&amp;gt; postgresqluser.add({ set: { name:&#039;xyz00_groups&#039;, password:&#039;******&#039; } })&lt;br /&gt;
xyz00@hsadmin&amp;gt; postgresqldb.add({ set: { name:&#039;xyz00_groups&#039;, owner:&#039;xyz00_groups&#039; } })&lt;br /&gt;
xyz00@hsadmin&amp;gt; emailaddress.add({ set: { localpart:&#039;&#039;, domain:&#039;groups.hs-example.de&#039;, target:&#039;xyz00-groups&#039; } })&lt;br /&gt;
xyz00@hsadmin&amp;gt; bye&lt;br /&gt;
xyz00@h00:~$ &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Notizen zur Installation ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xyz00-groups@h00:~$ git clone https://git.hack-hro.de/grouprise/grouprise.git&lt;br /&gt;
xyz00-groups@h00:~$ cd grouprise/&lt;br /&gt;
xyz00-groups@h00:~/grouprise$ git tag&lt;br /&gt;
xyz00-groups@h00:~/grouprise$ git checkout v3.1.1&lt;br /&gt;
xyz00-groups@h00:~/grouprise$ make virtualenv-update&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Den Secret_Key kann man wie folgt erzeugen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
python3 -c &amp;quot;import secrets; print(secrets.token_urlsafe(32))&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anlegen einer Datei &#039;&#039;$HOME/etc/settings.py&#039;&#039; mit folgendem Inhalt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
from grouprise.common_settings import *&lt;br /&gt;
&lt;br /&gt;
SECRET_KEY = &#039;XXXXXX&#039;&lt;br /&gt;
&lt;br /&gt;
ALLOWED_HOSTS = [ &#039;groups.hs-example.de&#039; ]&lt;br /&gt;
&lt;br /&gt;
DEBUG = True&lt;br /&gt;
&lt;br /&gt;
DATA_PATH = &#039;/home/storage/xyz00/users/groups/data&#039;&lt;br /&gt;
&lt;br /&gt;
MEDIA_ROOT = &#039;/home/storage/xyz00/users/groups/data/media&#039;&lt;br /&gt;
&lt;br /&gt;
DATABASES = {&lt;br /&gt;
    &#039;default&#039;: {&lt;br /&gt;
        &#039;ENGINE&#039;: &#039;django.db.backends.postgresql&#039;,&lt;br /&gt;
        &#039;HOST&#039;: &#039;localhost&#039;,&lt;br /&gt;
        &#039;NAME&#039;: &#039;xyz00_groups&#039;,&lt;br /&gt;
        &#039;USER&#039;: &#039;xyz00_groups&#039;,&lt;br /&gt;
        &#039;PASSWORD&#039;: &#039;******&#039;,&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
HUEY= {&lt;br /&gt;
    &#039;huey_class&#039;: &#039;huey.SqliteHuey&#039;,&lt;br /&gt;
    &#039;filename&#039;: &#039;/home/pacs/xyz00/users/groups/var/huey.sqlite&#039;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
SESSION_COOKIE_AGE = 60 * 60 * 24 * 365&lt;br /&gt;
&lt;br /&gt;
ADMINS = [ (&#039;Admins&#039;, &#039;webmaster@groups.hs-example.de&#039;) ]&lt;br /&gt;
&lt;br /&gt;
DEFAULT_FROM_EMAIL = &#039;noreply@groups.hs-example.de&#039;&lt;br /&gt;
&lt;br /&gt;
SERVER_EMAIL = &#039;noreply@groups.hs-example.de&#039;&lt;br /&gt;
&lt;br /&gt;
ACCOUNT_DEFAULT_HTTP_PROTOCOL = &#039;https&#039;&lt;br /&gt;
&lt;br /&gt;
GROUPRISE = {&lt;br /&gt;
    &#039;CLAIMS&#039;: [ &#039;Meine Stadt&#039;, &#039;Zuhause in&#039;, &#039;Stadt gestalten&#039; ],&lt;br /&gt;
    &#039;SCORE_CONTENT_AGE&#039;: 100,&lt;br /&gt;
    &#039;UPLOAD_MAX_FILE_SIZE&#039;: 0,&lt;br /&gt;
&lt;br /&gt;
    # special users and groups&lt;br /&gt;
    &#039;FEED_IMPORTER_GESTALT_ID&#039;: 1,&lt;br /&gt;
    &#039;OPERATOR_GROUP_ID&#039;: 1,&lt;br /&gt;
    &#039;UNKNOWN_GESTALT_ID&#039;: 1,&lt;br /&gt;
&lt;br /&gt;
    # email settings&lt;br /&gt;
    &#039;DEFAULT_DISTINCT_FROM_EMAIL&#039;: &#039;noreply+{slug}@groups.hs-example.de&#039;,&lt;br /&gt;
    &#039;DEFAULT_REPLY_TO_EMAIL&#039;: &#039;reply+{reply_key}@groups.hs-example.de&#039;,&lt;br /&gt;
    &#039;MAILBOX_DELIVERED_TO_EMAIL&#039;: &#039;xyz00-groups@h00.hostsharing.net&#039;,&lt;br /&gt;
    &#039;POSTMASTER_EMAIL&#039;: &#039;postmaster@groups.hs-example.de&#039;,&lt;br /&gt;
    &#039;MAILINGLIST_ENABLED&#039;: True,&lt;br /&gt;
&lt;br /&gt;
    &#039;ENTITY_SLUG_BLACKLIST&#039;: [&lt;br /&gt;
        &#039;all&#039;, &#039;grouprise&#039;, &#039;info&#039;, &#039;mail&#039;, &#039;noreply&#039;, &#039;postmaster&#039;, &#039;reply&#039;, &#039;stadt&#039;,&lt;br /&gt;
        &#039;webmaster&#039;, &#039;www&#039;&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verlinken nach &#039;&#039;$HOME/grouprise/stadt/settings/local.py&#039;&#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xyz00-groups@h00:~/grouprise$ mkdir -p $HOME/var&lt;br /&gt;
xyz00-groups@h00:~/grouprise$ mkdir -p $HOME/etc&lt;br /&gt;
xyz00-groups@h00:~/grouprise$ vi $HOME/etc/settings.py&lt;br /&gt;
xyz00-groups@h00:~/grouprise$ ln -s $HOME/etc/settings.py ./grouprise/ &lt;br /&gt;
xyz00-groups@h00:~/grouprise$ . build/venv/bin/activate&lt;br /&gt;
xyz00-groups@h00:~/grouprise$ python manage.py migrate&lt;br /&gt;
xyz00-groups@h00:~/grouprise$ make&lt;br /&gt;
xyz00-groups@h00:~/grouprise$&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Integration in den Apache ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xyz00-groups@h00:~/grouprise$ cd $HOME/doms/groups.hs-example.de/&lt;br /&gt;
xyz00-groups@h00:~/doms/groups.hs-example.de$ rm -rf subs/www/ subs-ssl/www/ htdocs-ssl/.htaccess &lt;br /&gt;
xyz00-groups@h00:~/doms/groups.hs-example.de$ vi .htaccess&lt;br /&gt;
xyz00-groups@h00:~/doms/groups.hs-example.de$ cat .htaccess&lt;br /&gt;
PassengerPython /home/pacs/xyz00/users/groups/grouprise/build/venv/bin/python&lt;br /&gt;
xyz00-groups@h00:~/doms/groups.hs-example.de$ cd htdocs-ssl/&lt;br /&gt;
xyz00-groups@h00:~/doms/groups.hs-example.de/htdocs-ssl$ mkdir stadt&lt;br /&gt;
xyz00-groups@h00:~/doms/groups.hs-example.de/htdocs-ssl$ cd stadt/&lt;br /&gt;
xyz00-groups@h00:~/doms/groups.hs-example.de/htdocs-ssl/stadt$ ln -s $HOME/grouprise/static .&lt;br /&gt;
xyz00-groups@h00:~/doms/groups.hs-example.de/htdocs-ssl/stadt$ ln -s $HOME/grouprise/media .&lt;br /&gt;
xyz00-groups@h00:~/doms/groups.hs-example.de/htdocs-ssl/stadt$ cd $HOME/doms/groups.hs-example.de/app-ssl&lt;br /&gt;
xyz00-groups@h00:~/doms/groups.hs-example.de/app-ssl$ vi passenger_wsgi.py&lt;br /&gt;
xyz00-groups@h00:~/doms/groups.hs-example.de/app-ssl$ cat passenger_wsgi.py&lt;br /&gt;
import sys, os&lt;br /&gt;
sys.path.append(&amp;quot;/home/pacs/xyz00/users/groups/grouprise&amp;quot;)&lt;br /&gt;
from django.conf import settings&lt;br /&gt;
from django.core.wsgi import get_wsgi_application&lt;br /&gt;
os.environ.setdefault(&amp;quot;DJANGO_SETTINGS_MODULE&amp;quot;, &amp;quot;grouprise.settings&amp;quot;)&lt;br /&gt;
application = get_wsgi_application()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Datei &#039;&#039;$HOME/doms/groups.hs-example.de/.htaccess&#039;&#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
PassengerPython /home/pacs/xyz00/users/groups/grouprise/build/venv/bin/python&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Datei &#039;&#039;$HOME/doms/groups.hs-example.de/app-ssl/passenger_wsgi.py&#039;&#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
import sys, os&lt;br /&gt;
sys.path.append(&amp;quot;/home/pacs/xyz00/users/groups/grouprise&amp;quot;)&lt;br /&gt;
from django.conf import settings&lt;br /&gt;
from django.core.wsgi import get_wsgi_application&lt;br /&gt;
os.environ.setdefault(&amp;quot;DJANGO_SETTINGS_MODULE&amp;quot;, &amp;quot;grouprise.settings&amp;quot;)&lt;br /&gt;
application = get_wsgi_application()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Senden von E-Mail ====&lt;br /&gt;
&lt;br /&gt;
Der Versand auf E-Mail erfolgt asynchron durch einen eigenen Prozess. Das Starten des Prozess erfolgt von Hand wie folgt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd $HOME/grouprise&lt;br /&gt;
. build/venv/bin/activate&lt;br /&gt;
python manage.py run_huey --logfile $HOME/var/huey_consumer.log&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es ist sinnvoll ein kleines Start- und Stopskript zu schreiben und den Prozess zum Beispiel mit &amp;quot;monit&amp;quot; zu kontrollieren.&lt;br /&gt;
&lt;br /&gt;
==== Empfang von E-Mail ====&lt;br /&gt;
&lt;br /&gt;
Ankommmende E-Mail an ein Grouprise-Forum werden über die Datei &amp;quot;.forward&amp;quot; im $HOME des Service-Users in ein Skript &amp;quot;~/bin/mailin&amp;quot; geleitet.&lt;br /&gt;
&lt;br /&gt;
Inhalt des Skriptes&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
xyz00-groups@h00:~$ cat bin/mailin&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
umask 0022&lt;br /&gt;
export LANG=de_DE.ISO-8859-1&lt;br /&gt;
(cd /home/pacs/xyz00/users/groups/stadtgestalten &amp;amp;&amp;amp; /home/pacs/xyz00/users/groups/stadtgestalten/build/venv/bin/python manage.py processincomingmessage)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Datei &amp;quot;.forward&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
xyz00-groups@h00:~$ cat .forward &lt;br /&gt;
|/home/pacs/xyz00/users/groups/bin/mailin&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Suchfunktion ====&lt;br /&gt;
&lt;br /&gt;
Aufbau des Suchindex für Artikel in Grouprise&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd ~/stadtgestalten&lt;br /&gt;
. build/venv/bin/activate&lt;br /&gt;
python manage.py clear_index &lt;br /&gt;
python manage.py rebuild_index&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Regelmäßige Updates des Suchindex per Cron:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
xyz00-groups@h00:~$ crontab -l&lt;br /&gt;
# m h  dom mon dow   command&lt;br /&gt;
HOME=/home/pacs/xyz00/users/groups&lt;br /&gt;
VIRTUAL_ENV=/home/pacs/xyz00/users/stadt/stadtgestalten/build/venv&lt;br /&gt;
PATH=/home/pacs/xyz00/users/groups/stadtgestalten/build/venv/bin:/home/pacs/xyz00/users/groups/.nvm/versions/node/v10.21.0/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games&lt;br /&gt;
MAILTO=webmaster@groups.hs-example.com&lt;br /&gt;
0 */5 * * * cd $HOME/stadtgestalten &amp;amp;&amp;amp; $VIRTUAL_ENV/bin/python manage.py update_index &amp;gt;/dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
=== Webseite ===&lt;br /&gt;
&lt;br /&gt;
* https://grouprise.org&lt;br /&gt;
* https://git.hack-hro.de/grouprise/grouprise/ (Git Repository)&lt;br /&gt;
&lt;br /&gt;
=== Grouprise Installationen ===&lt;br /&gt;
&lt;br /&gt;
* https://stadtgestalten.org/ Rostock&lt;br /&gt;
* https://stadtimpuls.org/ Greifswald&lt;br /&gt;
* https://schwerin-aktiv.org/ Schwerin&lt;br /&gt;
&lt;br /&gt;
=== Handbuch für Nutzer:innen ===&lt;br /&gt;
&lt;br /&gt;
* https://stadtgestalten.org/stadtgestalten/tools/&lt;br /&gt;
* https://stadtgestalten.org/stadtgestalten/tools-print/ (als PDF)&lt;/div&gt;</summary>
		<author><name>Peh</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Grouprise&amp;diff=7037</id>
		<title>Grouprise</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Grouprise&amp;diff=7037"/>
		<updated>2024-11-13T15:22:48Z</updated>

		<summary type="html">&lt;p&gt;Peh: Formatierung&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Installation von Grouprise ==&lt;br /&gt;
&lt;br /&gt;
Grouprise / Stadtgestalten ist eine Software für die Menschen in einer Stadt oder Region. Sie ermöglicht es, dass einzelne Personen sich in Gruppen engagieren und austauschen. Grouprise ist freie Software (FOSS), die Lizenz ist die AGPL.&lt;br /&gt;
&lt;br /&gt;
Die Software beinhaltet eine Mailinglisten-ähnliche Funktionalität in Kombination mit der Diskussion über die HTML-Oberfläche. Für Die Mailfunktionalität nutzen wir hier die Subdomain, unter der auch die Anwendung läuft. Im Beispiel ist das &amp;quot;groups.hs-example.de&amp;quot;. Für diese Domain wird hier eine Catch-All-Mailadresse eingerichtet.&lt;br /&gt;
&lt;br /&gt;
==== Vorbereitungen in HSAdmin ====&lt;br /&gt;
&lt;br /&gt;
In HSAdmin werden angelegt:&lt;br /&gt;
* ein Service-User,&lt;br /&gt;
* eine Domain,&lt;br /&gt;
* ein Postgres-User und eine Datenbank,&lt;br /&gt;
* eine Catch-All E-Mail Adresse&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xyz00@h00:~$ hsscript -i&lt;br /&gt;
Password: *********************&lt;br /&gt;
xyz00@hsadmin&amp;gt; user.add({ set: { name:&#039;xyz00-groups&#039;, password:&#039;******&#039;, shell:&#039;/bin/bash&#039; } })&lt;br /&gt;
xyz00@hsadmin&amp;gt; domain.add({ set: { name:&#039;groups.hs-example.de&#039;, user:&#039;xyz00-groups&#039; } })&lt;br /&gt;
xyz00@hsadmin&amp;gt; postgresqluser.add({ set: { name:&#039;xyz00_groups&#039;, password:&#039;******&#039; } })&lt;br /&gt;
xyz00@hsadmin&amp;gt; postgresqldb.add({ set: { name:&#039;xyz00_groups&#039;, owner:&#039;xyz00_groups&#039; } })&lt;br /&gt;
xyz00@hsadmin&amp;gt; emailaddress.add({ set: { localpart:&#039;&#039;, domain:&#039;groups.hs-example.de&#039;, target:&#039;xyz00-groups&#039; } })&lt;br /&gt;
xyz00@hsadmin&amp;gt; bye&lt;br /&gt;
xyz00@h00:~$ &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Notizen zur Installation ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xyz00-groups@h00:~$ git clone https://git.hack-hro.de/grouprise/grouprise.git&lt;br /&gt;
xyz00-groups@h00:~$ cd grouprise/&lt;br /&gt;
xyz00-groups@h00:~/grouprise$ git tag&lt;br /&gt;
xyz00-groups@h00:~/grouprise$ git checkout v3.1.1&lt;br /&gt;
xyz00-groups@h00:~/grouprise$ make virtualenv-update&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Den Secret_Key kann man wie folgt erzeugen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
python3 -c &amp;quot;import secrets; print(secrets.token_urlsafe(32))&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anlegen einer Datei &#039;&#039;$HOME/etc/settings.py&#039;&#039; mit folgendem Inhalt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
from grouprise.common_settings import *&lt;br /&gt;
&lt;br /&gt;
SECRET_KEY = &#039;XXXXXX&#039;&lt;br /&gt;
&lt;br /&gt;
ALLOWED_HOSTS = [ &#039;groups.hs-example.de&#039; ]&lt;br /&gt;
&lt;br /&gt;
DEBUG = True&lt;br /&gt;
&lt;br /&gt;
DATABASES = {&lt;br /&gt;
    &#039;default&#039;: {&lt;br /&gt;
        &#039;ENGINE&#039;: &#039;django.db.backends.postgresql&#039;,&lt;br /&gt;
        &#039;HOST&#039;: &#039;localhost&#039;,&lt;br /&gt;
        &#039;NAME&#039;: &#039;xyz00_groups&#039;,&lt;br /&gt;
        &#039;USER&#039;: &#039;xyz00_groups&#039;,&lt;br /&gt;
        &#039;PASSWORD&#039;: &#039;******&#039;,&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
HUEY= {&lt;br /&gt;
    &#039;huey_class&#039;: &#039;huey.SqliteHuey&#039;,&lt;br /&gt;
    &#039;filename&#039;: &#039;/home/pacs/xyz00/users/groups/var/huey.sqlite&#039;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
SESSION_COOKIE_AGE = 60 * 60 * 24 * 365&lt;br /&gt;
&lt;br /&gt;
ADMINS = [ (&#039;Admins&#039;, &#039;webmaster@groups.hs-example.de&#039;) ]&lt;br /&gt;
&lt;br /&gt;
DEFAULT_FROM_EMAIL = &#039;noreply@groups.hs-example.de&#039;&lt;br /&gt;
&lt;br /&gt;
SERVER_EMAIL = &#039;noreply@groups.hs-example.de&#039;&lt;br /&gt;
&lt;br /&gt;
ACCOUNT_DEFAULT_HTTP_PROTOCOL = &#039;https&#039;&lt;br /&gt;
&lt;br /&gt;
GROUPRISE = {&lt;br /&gt;
    &#039;CLAIMS&#039;: [ &#039;Meine Stadt&#039;, &#039;Zuhause in&#039;, &#039;Stadt gestalten&#039; ],&lt;br /&gt;
    &#039;SCORE_CONTENT_AGE&#039;: 100,&lt;br /&gt;
    &#039;UPLOAD_MAX_FILE_SIZE&#039;: 0,&lt;br /&gt;
&lt;br /&gt;
    # special users and groups&lt;br /&gt;
    &#039;FEED_IMPORTER_GESTALT_ID&#039;: 1,&lt;br /&gt;
    &#039;OPERATOR_GROUP_ID&#039;: 1,&lt;br /&gt;
    &#039;UNKNOWN_GESTALT_ID&#039;: 1,&lt;br /&gt;
&lt;br /&gt;
    # email settings&lt;br /&gt;
    &#039;DEFAULT_DISTINCT_FROM_EMAIL&#039;: &#039;noreply+{slug}@groups.hs-example.de&#039;,&lt;br /&gt;
    &#039;DEFAULT_REPLY_TO_EMAIL&#039;: &#039;reply+{reply_key}@groups.hs-example.de&#039;,&lt;br /&gt;
    &#039;MAILBOX_DELIVERED_TO_EMAIL&#039;: &#039;xyz00-groups@h00.hostsharing.net&#039;,&lt;br /&gt;
    &#039;POSTMASTER_EMAIL&#039;: &#039;postmaster@groups.hs-example.de&#039;,&lt;br /&gt;
    &#039;MAILINGLIST_ENABLED&#039;: True,&lt;br /&gt;
&lt;br /&gt;
    &#039;ENTITY_SLUG_BLACKLIST&#039;: [&lt;br /&gt;
        &#039;all&#039;, &#039;grouprise&#039;, &#039;info&#039;, &#039;mail&#039;, &#039;noreply&#039;, &#039;postmaster&#039;, &#039;reply&#039;, &#039;stadt&#039;,&lt;br /&gt;
        &#039;webmaster&#039;, &#039;www&#039;&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verlinken nach &#039;&#039;$HOME/grouprise/stadt/settings/local.py&#039;&#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xyz00-groups@h00:~/grouprise$ mkdir -p $HOME/var&lt;br /&gt;
xyz00-groups@h00:~/grouprise$ mkdir -p $HOME/etc&lt;br /&gt;
xyz00-groups@h00:~/grouprise$ vi $HOME/etc/settings.py&lt;br /&gt;
xyz00-groups@h00:~/grouprise$ ln -s $HOME/etc/settings.py ./grouprise/ &lt;br /&gt;
xyz00-groups@h00:~/grouprise$ . build/venv/bin/activate&lt;br /&gt;
xyz00-groups@h00:~/grouprise$ python manage.py migrate&lt;br /&gt;
xyz00-groups@h00:~/grouprise$ make&lt;br /&gt;
xyz00-groups@h00:~/grouprise$&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Integration in den Apache ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xyz00-groups@h00:~/grouprise$ cd $HOME/doms/groups.hs-example.de/&lt;br /&gt;
xyz00-groups@h00:~/doms/groups.hs-example.de$ rm -rf subs/www/ subs-ssl/www/ htdocs-ssl/.htaccess &lt;br /&gt;
xyz00-groups@h00:~/doms/groups.hs-example.de$ vi .htaccess&lt;br /&gt;
xyz00-groups@h00:~/doms/groups.hs-example.de$ cat .htaccess&lt;br /&gt;
PassengerPython /home/pacs/xyz00/users/groups/grouprise/build/venv/bin/python&lt;br /&gt;
xyz00-groups@h00:~/doms/groups.hs-example.de$ cd htdocs-ssl/&lt;br /&gt;
xyz00-groups@h00:~/doms/groups.hs-example.de/htdocs-ssl$ mkdir stadt&lt;br /&gt;
xyz00-groups@h00:~/doms/groups.hs-example.de/htdocs-ssl$ cd stadt/&lt;br /&gt;
xyz00-groups@h00:~/doms/groups.hs-example.de/htdocs-ssl/stadt$ ln -s $HOME/grouprise/static .&lt;br /&gt;
xyz00-groups@h00:~/doms/groups.hs-example.de/htdocs-ssl/stadt$ ln -s $HOME/grouprise/media .&lt;br /&gt;
xyz00-groups@h00:~/doms/groups.hs-example.de/htdocs-ssl/stadt$ cd $HOME/doms/groups.hs-example.de/app-ssl&lt;br /&gt;
xyz00-groups@h00:~/doms/groups.hs-example.de/app-ssl$ vi passenger_wsgi.py&lt;br /&gt;
xyz00-groups@h00:~/doms/groups.hs-example.de/app-ssl$ cat passenger_wsgi.py&lt;br /&gt;
import sys, os&lt;br /&gt;
sys.path.append(&amp;quot;/home/pacs/xyz00/users/groups/grouprise&amp;quot;)&lt;br /&gt;
from django.conf import settings&lt;br /&gt;
from django.core.wsgi import get_wsgi_application&lt;br /&gt;
os.environ.setdefault(&amp;quot;DJANGO_SETTINGS_MODULE&amp;quot;, &amp;quot;grouprise.settings&amp;quot;)&lt;br /&gt;
application = get_wsgi_application()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Datei &#039;&#039;$HOME/doms/groups.hs-example.de/.htaccess&#039;&#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
PassengerPython /home/pacs/xyz00/users/groups/grouprise/build/venv/bin/python&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Datei &#039;&#039;$HOME/doms/groups.hs-example.de/app-ssl/passenger_wsgi.py&#039;&#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
import sys, os&lt;br /&gt;
sys.path.append(&amp;quot;/home/pacs/xyz00/users/groups/grouprise&amp;quot;)&lt;br /&gt;
from django.conf import settings&lt;br /&gt;
from django.core.wsgi import get_wsgi_application&lt;br /&gt;
os.environ.setdefault(&amp;quot;DJANGO_SETTINGS_MODULE&amp;quot;, &amp;quot;grouprise.settings&amp;quot;)&lt;br /&gt;
application = get_wsgi_application()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Senden von E-Mail ====&lt;br /&gt;
&lt;br /&gt;
Der Versand auf E-Mail erfolgt asynchron durch einen eigenen Prozess. Das Starten des Prozess erfolgt von Hand wie folgt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd $HOME/grouprise&lt;br /&gt;
. build/venv/bin/activate&lt;br /&gt;
python manage.py run_huey --logfile $HOME/var/huey_consumer.log&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es ist sinnvoll ein kleines Start- und Stopskript zu schreiben und den Prozess zum Beispiel mit &amp;quot;monit&amp;quot; zu kontrollieren.&lt;br /&gt;
&lt;br /&gt;
==== Empfang von E-Mail ====&lt;br /&gt;
&lt;br /&gt;
Ankommmende E-Mail an ein Grouprise-Forum werden über die Datei &amp;quot;.forward&amp;quot; im $HOME des Service-Users in ein Skript &amp;quot;~/bin/mailin&amp;quot; geleitet.&lt;br /&gt;
&lt;br /&gt;
Inhalt des Skriptes&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
xyz00-groups@h00:~$ cat bin/mailin&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
umask 0022&lt;br /&gt;
export LANG=de_DE.ISO-8859-1&lt;br /&gt;
(cd /home/pacs/xyz00/users/groups/stadtgestalten &amp;amp;&amp;amp; /home/pacs/xyz00/users/groups/stadtgestalten/build/venv/bin/python manage.py processincomingmessage)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Datei &amp;quot;.forward&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
xyz00-groups@h00:~$ cat .forward &lt;br /&gt;
|/home/pacs/xyz00/users/groups/bin/mailin&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Suchfunktion ====&lt;br /&gt;
&lt;br /&gt;
Aufbau des Suchindex für Artikel in Grouprise&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd ~/stadtgestalten&lt;br /&gt;
. build/venv/bin/activate&lt;br /&gt;
python manage.py clear_index &lt;br /&gt;
python manage.py rebuild_index&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Regelmäßige Updates des Suchindex per Cron:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
xyz00-groups@h00:~$ crontab -l&lt;br /&gt;
# m h  dom mon dow   command&lt;br /&gt;
HOME=/home/pacs/xyz00/users/groups&lt;br /&gt;
VIRTUAL_ENV=/home/pacs/xyz00/users/stadt/stadtgestalten/build/venv&lt;br /&gt;
PATH=/home/pacs/xyz00/users/groups/stadtgestalten/build/venv/bin:/home/pacs/xyz00/users/groups/.nvm/versions/node/v10.21.0/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games&lt;br /&gt;
MAILTO=webmaster@groups.hs-example.com&lt;br /&gt;
0 */5 * * * cd $HOME/stadtgestalten &amp;amp;&amp;amp; $VIRTUAL_ENV/bin/python manage.py update_index &amp;gt;/dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
=== Webseite ===&lt;br /&gt;
&lt;br /&gt;
* https://grouprise.org&lt;br /&gt;
* https://git.hack-hro.de/grouprise/grouprise/ (Git Repository)&lt;br /&gt;
&lt;br /&gt;
=== Grouprise Installationen ===&lt;br /&gt;
&lt;br /&gt;
* https://stadtgestalten.org/ Rostock&lt;br /&gt;
* https://stadtimpuls.org/ Greifswald&lt;br /&gt;
* https://schwerin-aktiv.org/ Schwerin&lt;br /&gt;
&lt;br /&gt;
=== Handbuch für Nutzer:innen ===&lt;br /&gt;
&lt;br /&gt;
* https://stadtgestalten.org/stadtgestalten/tools/&lt;br /&gt;
* https://stadtgestalten.org/stadtgestalten/tools-print/ (als PDF)&lt;/div&gt;</summary>
		<author><name>Peh</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Grouprise&amp;diff=7036</id>
		<title>Grouprise</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Grouprise&amp;diff=7036"/>
		<updated>2024-11-13T15:18:48Z</updated>

		<summary type="html">&lt;p&gt;Peh: Formatierung&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Installation von Grouprise ==&lt;br /&gt;
&lt;br /&gt;
Grouprise / Stadtgestalten ist eine Software für die Menschen in einer Stadt oder Region. Sie ermöglicht es, dass einzelne Personen sich in Gruppen engagieren und austauschen. Grouprise ist freie Software (FOSS), die Lizenz ist die AGPL.&lt;br /&gt;
&lt;br /&gt;
Die Software beinhaltet eine Mailinglisten-ähnliche Funktionalität in Kombination mit der Diskussion über die HTML-Oberfläche. Für Die Mailfunktionalität nutzen wir hier die Subdomain, unter der auch die Anwendung läuft. Im Beispiel ist das &amp;quot;groups.hs-example.de&amp;quot;. Für diese Domain wird hier eine Catch-All-Mailadresse eingerichtet.&lt;br /&gt;
&lt;br /&gt;
==== Vorbereitungen in HSAdmin ====&lt;br /&gt;
&lt;br /&gt;
In HSAdmin werden angelegt:&lt;br /&gt;
* ein Service-User,&lt;br /&gt;
* eine Domain,&lt;br /&gt;
* ein Postgres-User und eine Datenbank,&lt;br /&gt;
* eine Catch-All E-Mail Adresse&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
xyz00@h00:~$ hsscript -i&lt;br /&gt;
Password: *********************&lt;br /&gt;
xyz00@hsadmin&amp;gt; user.add({ set: { name:&#039;xyz00-groups&#039;, password:&#039;******&#039;, shell:&#039;/bin/bash&#039; } })&lt;br /&gt;
xyz00@hsadmin&amp;gt; domain.add({ set: { name:&#039;groups.hs-example.de&#039;, user:&#039;xyz00-groups&#039; } })&lt;br /&gt;
xyz00@hsadmin&amp;gt; postgresqluser.add({ set: { name:&#039;xyz00_groups&#039;, password:&#039;******&#039; } })&lt;br /&gt;
xyz00@hsadmin&amp;gt; postgresqldb.add({ set: { name:&#039;xyz00_groups&#039;, owner:&#039;xyz00_groups&#039; } })&lt;br /&gt;
xyz00@hsadmin&amp;gt; emailaddress.add({ set: { localpart:&#039;&#039;, domain:&#039;groups.hs-example.de&#039;, target:&#039;xyz00-groups&#039; } })&lt;br /&gt;
xyz00@hsadmin&amp;gt; bye&lt;br /&gt;
xyz00@h00:~$ &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Notizen zur Installation ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
xyz00-groups@h00:~$ git clone https://git.hack-hro.de/grouprise/grouprise.git&lt;br /&gt;
xyz00-groups@h00:~$ cd grouprise/&lt;br /&gt;
xyz00-groups@h00:~/grouprise$ git tag&lt;br /&gt;
xyz00-groups@h00:~/grouprise$ git checkout v3.1.1&lt;br /&gt;
xyz00-groups@h00:~/grouprise$ make virtualenv-update&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Den Secret_Key kann man wie folgt erzeugen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
python3 -c &amp;quot;import secrets; print(secrets.token_urlsafe(32))&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anlegen einer Datei &#039;&#039;$HOME/etc/settings.py&#039;&#039; mit folgendem Inhalt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from grouprise.common_settings import *&lt;br /&gt;
&lt;br /&gt;
SECRET_KEY = &#039;XXXXXX&#039;&lt;br /&gt;
&lt;br /&gt;
ALLOWED_HOSTS = [ &#039;groups.hs-example.de&#039; ]&lt;br /&gt;
&lt;br /&gt;
DEBUG = True&lt;br /&gt;
&lt;br /&gt;
DATABASES = {&lt;br /&gt;
    &#039;default&#039;: {&lt;br /&gt;
        &#039;ENGINE&#039;: &#039;django.db.backends.postgresql&#039;,&lt;br /&gt;
        &#039;HOST&#039;: &#039;localhost&#039;,&lt;br /&gt;
        &#039;NAME&#039;: &#039;xyz00_groups&#039;,&lt;br /&gt;
        &#039;USER&#039;: &#039;xyz00_groups&#039;,&lt;br /&gt;
        &#039;PASSWORD&#039;: &#039;******&#039;,&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
HUEY= {&lt;br /&gt;
    &#039;huey_class&#039;: &#039;huey.SqliteHuey&#039;,&lt;br /&gt;
    &#039;filename&#039;: &#039;/home/pacs/xyz00/users/groups/var/huey.sqlite&#039;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
SESSION_COOKIE_AGE = 60 * 60 * 24 * 365&lt;br /&gt;
&lt;br /&gt;
ADMINS = [ (&#039;Admins&#039;, &#039;webmaster@groups.hs-example.de&#039;) ]&lt;br /&gt;
&lt;br /&gt;
DEFAULT_FROM_EMAIL = &#039;noreply@groups.hs-example.de&#039;&lt;br /&gt;
&lt;br /&gt;
SERVER_EMAIL = &#039;noreply@groups.hs-example.de&#039;&lt;br /&gt;
&lt;br /&gt;
ACCOUNT_DEFAULT_HTTP_PROTOCOL = &#039;https&#039;&lt;br /&gt;
&lt;br /&gt;
GROUPRISE = {&lt;br /&gt;
    &#039;CLAIMS&#039;: [ &#039;Meine Stadt&#039;, &#039;Zuhause in&#039;, &#039;Stadt gestalten&#039; ],&lt;br /&gt;
    &#039;SCORE_CONTENT_AGE&#039;: 100,&lt;br /&gt;
    &#039;UPLOAD_MAX_FILE_SIZE&#039;: 0,&lt;br /&gt;
&lt;br /&gt;
    # special users and groups&lt;br /&gt;
    &#039;FEED_IMPORTER_GESTALT_ID&#039;: 1,&lt;br /&gt;
    &#039;OPERATOR_GROUP_ID&#039;: 1,&lt;br /&gt;
    &#039;UNKNOWN_GESTALT_ID&#039;: 1,&lt;br /&gt;
&lt;br /&gt;
    # email settings&lt;br /&gt;
    &#039;DEFAULT_DISTINCT_FROM_EMAIL&#039;: &#039;noreply+{slug}@groups.hs-example.de&#039;,&lt;br /&gt;
    &#039;DEFAULT_REPLY_TO_EMAIL&#039;: &#039;reply+{reply_key}@groups.hs-example.de&#039;,&lt;br /&gt;
    &#039;MAILBOX_DELIVERED_TO_EMAIL&#039;: &#039;xyz00-groups@h00.hostsharing.net&#039;,&lt;br /&gt;
    &#039;POSTMASTER_EMAIL&#039;: &#039;postmaster@groups.hs-example.de&#039;,&lt;br /&gt;
    &#039;MAILINGLIST_ENABLED&#039;: True,&lt;br /&gt;
&lt;br /&gt;
    &#039;ENTITY_SLUG_BLACKLIST&#039;: [&lt;br /&gt;
        &#039;all&#039;, &#039;grouprise&#039;, &#039;info&#039;, &#039;mail&#039;, &#039;noreply&#039;, &#039;postmaster&#039;, &#039;reply&#039;, &#039;stadt&#039;,&lt;br /&gt;
        &#039;webmaster&#039;, &#039;www&#039;&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verlinken nach &#039;&#039;$HOME/grouprise/stadt/settings/local.py&#039;&#039;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
xyz00-groups@h00:~/grouprise$ mkdir -p $HOME/var&lt;br /&gt;
xyz00-groups@h00:~/grouprise$ mkdir -p $HOME/etc&lt;br /&gt;
xyz00-groups@h00:~/grouprise$ vi $HOME/etc/settings.py&lt;br /&gt;
xyz00-groups@h00:~/grouprise$ ln -s $HOME/etc/settings.py ./grouprise/ &lt;br /&gt;
xyz00-groups@h00:~/grouprise$ . build/venv/bin/activate&lt;br /&gt;
xyz00-groups@h00:~/grouprise$ python manage.py migrate&lt;br /&gt;
xyz00-groups@h00:~/grouprise$ make&lt;br /&gt;
xyz00-groups@h00:~/grouprise$&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Integration in den Apache ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
xyz00-groups@h00:~/grouprise$ cd $HOME/doms/groups.hs-example.de/&lt;br /&gt;
xyz00-groups@h00:~/doms/groups.hs-example.de$ rm -rf subs/www/ subs-ssl/www/ htdocs-ssl/.htaccess &lt;br /&gt;
xyz00-groups@h00:~/doms/groups.hs-example.de$ vi .htaccess&lt;br /&gt;
xyz00-groups@h00:~/doms/groups.hs-example.de$ cat .htaccess&lt;br /&gt;
PassengerPython /home/pacs/xyz00/users/groups/grouprise/build/venv/bin/python&lt;br /&gt;
xyz00-groups@h00:~/doms/groups.hs-example.de$ cd htdocs-ssl/&lt;br /&gt;
xyz00-groups@h00:~/doms/groups.hs-example.de/htdocs-ssl$ mkdir stadt&lt;br /&gt;
xyz00-groups@h00:~/doms/groups.hs-example.de/htdocs-ssl$ cd stadt/&lt;br /&gt;
xyz00-groups@h00:~/doms/groups.hs-example.de/htdocs-ssl/stadt$ ln -s $HOME/grouprise/static .&lt;br /&gt;
xyz00-groups@h00:~/doms/groups.hs-example.de/htdocs-ssl/stadt$ ln -s $HOME/grouprise/media .&lt;br /&gt;
xyz00-groups@h00:~/doms/groups.hs-example.de/htdocs-ssl/stadt$ cd $HOME/doms/groups.hs-example.de/app-ssl&lt;br /&gt;
xyz00-groups@h00:~/doms/groups.hs-example.de/app-ssl$ vi passenger_wsgi.py&lt;br /&gt;
xyz00-groups@h00:~/doms/groups.hs-example.de/app-ssl$ cat passenger_wsgi.py&lt;br /&gt;
import sys, os&lt;br /&gt;
sys.path.append(&amp;quot;/home/pacs/xyz00/users/groups/grouprise&amp;quot;)&lt;br /&gt;
from django.conf import settings&lt;br /&gt;
from django.core.wsgi import get_wsgi_application&lt;br /&gt;
os.environ.setdefault(&amp;quot;DJANGO_SETTINGS_MODULE&amp;quot;, &amp;quot;grouprise.settings&amp;quot;)&lt;br /&gt;
application = get_wsgi_application()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Datei &#039;&#039;$HOME/doms/groups.hs-example.de/.htaccess&#039;&#039;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
PassengerPython /home/pacs/xyz00/users/groups/grouprise/build/venv/bin/python&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Datei &#039;&#039;$HOME/doms/groups.hs-example.de/app-ssl/passenger_wsgi.py&#039;&#039;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import sys, os&lt;br /&gt;
sys.path.append(&amp;quot;/home/pacs/xyz00/users/groups/grouprise&amp;quot;)&lt;br /&gt;
from django.conf import settings&lt;br /&gt;
from django.core.wsgi import get_wsgi_application&lt;br /&gt;
os.environ.setdefault(&amp;quot;DJANGO_SETTINGS_MODULE&amp;quot;, &amp;quot;grouprise.settings&amp;quot;)&lt;br /&gt;
application = get_wsgi_application()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Senden von E-Mail ====&lt;br /&gt;
&lt;br /&gt;
Der Versand auf E-Mail erfolgt asynchron durch einen eigenen Prozess. Das Starten des Prozess erfolgt von Hand wie folgt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd $HOME/grouprise&lt;br /&gt;
. build/venv/bin/activate&lt;br /&gt;
python manage.py run_huey --logfile $HOME/var/huey_consumer.log&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es ist sinnvoll ein kleines Start- und Stopskript zu schreiben und den Prozess zum Beispiel mit &amp;quot;monit&amp;quot; zu kontrollieren.&lt;br /&gt;
&lt;br /&gt;
==== Empfang von E-Mail ====&lt;br /&gt;
&lt;br /&gt;
Ankommmende E-Mail an ein Grouprise-Forum werden über die Datei &amp;quot;.forward&amp;quot; im $HOME des Service-Users in ein Skript &amp;quot;~/bin/mailin&amp;quot; geleitet.&lt;br /&gt;
&lt;br /&gt;
Inhalt des Skriptes&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
xyz00-groups@h00:~$ cat bin/mailin&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
umask 0022&lt;br /&gt;
export LANG=de_DE.ISO-8859-1&lt;br /&gt;
(cd /home/pacs/xyz00/users/groups/stadtgestalten &amp;amp;&amp;amp; /home/pacs/xyz00/users/groups/stadtgestalten/build/venv/bin/python manage.py processincomingmessage)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Datei &amp;quot;.forward&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
xyz00-groups@h00:~$ cat .forward &lt;br /&gt;
|/home/pacs/xyz00/users/groups/bin/mailin&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Suchfunktion ====&lt;br /&gt;
&lt;br /&gt;
Aufbau des Suchindex für Artikel in Grouprise&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd ~/stadtgestalten&lt;br /&gt;
. build/venv/bin/activate&lt;br /&gt;
python manage.py clear_index &lt;br /&gt;
python manage.py rebuild_index&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Regelmäßige Updates des Suchindex per Cron:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
xyz00-groups@h00:~$ crontab -l&lt;br /&gt;
# m h  dom mon dow   command&lt;br /&gt;
HOME=/home/pacs/xyz00/users/groups&lt;br /&gt;
VIRTUAL_ENV=/home/pacs/xyz00/users/stadt/stadtgestalten/build/venv&lt;br /&gt;
PATH=/home/pacs/xyz00/users/groups/stadtgestalten/build/venv/bin:/home/pacs/xyz00/users/groups/.nvm/versions/node/v10.21.0/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games&lt;br /&gt;
MAILTO=webmaster@groups.hs-example.com&lt;br /&gt;
0 */5 * * * cd $HOME/stadtgestalten &amp;amp;&amp;amp; $VIRTUAL_ENV/bin/python manage.py update_index &amp;gt;/dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
=== Webseite ===&lt;br /&gt;
&lt;br /&gt;
* https://grouprise.org&lt;br /&gt;
* https://git.hack-hro.de/grouprise/grouprise/ (Git Repository)&lt;br /&gt;
&lt;br /&gt;
=== Grouprise Installationen ===&lt;br /&gt;
&lt;br /&gt;
* https://stadtgestalten.org/ Rostock&lt;br /&gt;
* https://stadtimpuls.org/ Greifswald&lt;br /&gt;
* https://schwerin-aktiv.org/ Schwerin&lt;br /&gt;
&lt;br /&gt;
=== Handbuch für Nutzer:innen ===&lt;br /&gt;
&lt;br /&gt;
* https://stadtgestalten.org/stadtgestalten/tools/&lt;br /&gt;
* https://stadtgestalten.org/stadtgestalten/tools-print/ (als PDF)&lt;/div&gt;</summary>
		<author><name>Peh</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Feber&amp;diff=7033</id>
		<title>Feber</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Feber&amp;diff=7033"/>
		<updated>2024-11-06T20:28:29Z</updated>

		<summary type="html">&lt;p&gt;Peh: erste Version&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Gruppen-/Ressourcenkalender mit Feber ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Feber&#039;&#039;&#039; ist eine eine einfache PHP-Anwendung zur Verwaltung eines Gruppen- oder Ressourcenkalender. Verschiedene Berechtigungsstufen ermöglichen die Pflege des Kalenders für mehrere Personen. Ein ical-Link ermöglicht das Lesen des Kalenders auf Mobilgeräten oder in Kalenderanwendungen.&lt;br /&gt;
&lt;br /&gt;
Die Installation ist denkbar einfach: &lt;br /&gt;
# User anlegen&lt;br /&gt;
# Domain aufschalten&lt;br /&gt;
# ZIP-Archiv herunterladen&lt;br /&gt;
# ZIP im &#039;&#039;htdocs-ssl&#039;&#039;-Verzeichnis entpacken&lt;br /&gt;
# Setup im Browser aufrufen&lt;br /&gt;
&lt;br /&gt;
=== Links ===&lt;br /&gt;
&lt;br /&gt;
* [https://simonrepp.com/feber Feber Homepage]&lt;br /&gt;
* [https://codeberg.org/simonrepp/feber Feber Git Repository]&lt;br /&gt;
* [https://simonrepp.com/video/feber/ Einführungsvideo]&lt;/div&gt;</summary>
		<author><name>Peh</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=PHP_FPM&amp;diff=7032</id>
		<title>PHP FPM</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=PHP_FPM&amp;diff=7032"/>
		<updated>2024-11-05T19:13:02Z</updated>

		<summary type="html">&lt;p&gt;Peh: /* Start und Autostart des FPM-Prozess */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= PHP als eigener Prozess =&lt;br /&gt;
&lt;br /&gt;
Normalerweise starten PHP-Prozesse im Managed Webspace als FastCGi-Prozess unter Kontrolle des Apache Webserver. Der Apache übernimmt die Skalierung und startet bei Bedarf weitere Prozesse nach.&lt;br /&gt;
&lt;br /&gt;
Nutzer:innen eines Managed Server können alternativ PHP-FPM Nutzen. Sie starten einen FPM-Prozess unter der eigenen Kontrolle. Dieser Hauptprozess übernimmt die Skalierung und Kontrolliert den Lifecycle von PHP-Prozessen nach den wünschen der Webseitenbetreiber:in.&lt;br /&gt;
&lt;br /&gt;
== Konfiguration von FPM ==&lt;br /&gt;
&lt;br /&gt;
Hier nur ein minimales Beispiel. Für die Optimierung sein auf die entsprechende Originaldokumentation verwiesen.&lt;br /&gt;
&lt;br /&gt;
    ~/php-fpm$ cat ~/php-fpm/php-fpm.conf&lt;br /&gt;
    &lt;br /&gt;
    [global]&lt;br /&gt;
    pid = /home/pacs/xyz00/users/username/php-fpm/php-fpm.pid&lt;br /&gt;
    error_log = /home/pacs/xyz00/users/username/php-fpm/php-fpm.log&lt;br /&gt;
    &lt;br /&gt;
    [www]&lt;br /&gt;
    listen = 127.0.0.1:30080&lt;br /&gt;
    listen.allowed_clients = 127.0.0.1&lt;br /&gt;
    pm = dynamic&lt;br /&gt;
    pm.max_children = 5&lt;br /&gt;
    pm.start_servers = 2&lt;br /&gt;
    pm.min_spare_servers = 1&lt;br /&gt;
    pm.max_spare_servers = 3&lt;br /&gt;
    ;pm.process_idle_timeout = 10s;&lt;br /&gt;
    ;pm.max_requests = 500&lt;br /&gt;
&lt;br /&gt;
== Apache Konfiguration ==&lt;br /&gt;
&lt;br /&gt;
Der FPM-Server wird über das Apache Modul &amp;quot;mod_proxy_fcgi&amp;quot; angesteuert. Dazu legt man im Verzeichnis &lt;br /&gt;
~/doms/hs-example.de/ eine Datei .htaccess an.&lt;br /&gt;
&lt;br /&gt;
    $ cat doms/hs-example.de/.htaccess&lt;br /&gt;
    RewriteEngine on&lt;br /&gt;
    RewriteRule ^(.*)\.php(/.*)?$ fcgi://127.0.0.1:30080/home/doms/hs-example.de/htdocs-ssl/$1.php$2 [proxy,last]&lt;br /&gt;
&lt;br /&gt;
== Start und Autostart des FPM-Prozess ==&lt;br /&gt;
&lt;br /&gt;
Der FPM-Prozess wird wie folgt gestartet:&lt;br /&gt;
&lt;br /&gt;
  /usr/sbin/php-fpm8.2 --fpm-config php-fpm/php-fpm.conf --php-ini php-fpm/php.ini --nodaemonize&lt;br /&gt;
&lt;br /&gt;
Eine Unit für SystemD könnte wie folgt aussehen:&lt;br /&gt;
&lt;br /&gt;
 [Unit]&lt;br /&gt;
 Description=PHP FPM Service&lt;br /&gt;
 &lt;br /&gt;
 [Service]&lt;br /&gt;
 Type=simple&lt;br /&gt;
 WorkingDirectory=%h&lt;br /&gt;
 Environment=&amp;quot;PATH=/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin&amp;quot;&lt;br /&gt;
 ExecStart=/usr/sbin/php-fpm8.2 --fpm-config %h/php-fpm/php-fpm.conf --php-ini %h/php-fpm/php.ini --nodaemonize&lt;br /&gt;
 StandardOutput=file:%h/var/php-fpm.log&lt;br /&gt;
 StandardError=inherit&lt;br /&gt;
 Restart=always&lt;br /&gt;
 PrivateTmp=true&lt;br /&gt;
 &lt;br /&gt;
 [Install]&lt;br /&gt;
 WantedBy=default.target&lt;/div&gt;</summary>
		<author><name>Peh</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=PHP_FPM&amp;diff=7030</id>
		<title>PHP FPM</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=PHP_FPM&amp;diff=7030"/>
		<updated>2024-11-05T19:05:46Z</updated>

		<summary type="html">&lt;p&gt;Peh: /* Start und Monitoring des FPM-Prozess */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= PHP als eigener Prozess =&lt;br /&gt;
&lt;br /&gt;
Normalerweise starten PHP-Prozesse im Managed Webspace als FastCGi-Prozess unter Kontrolle des Apache Webserver. Der Apache übernimmt die Skalierung und startet bei Bedarf weitere Prozesse nach.&lt;br /&gt;
&lt;br /&gt;
Nutzer:innen eines Managed Server können alternativ PHP-FPM Nutzen. Sie starten einen FPM-Prozess unter der eigenen Kontrolle. Dieser Hauptprozess übernimmt die Skalierung und Kontrolliert den Lifecycle von PHP-Prozessen nach den wünschen der Webseitenbetreiber:in.&lt;br /&gt;
&lt;br /&gt;
== Konfiguration von FPM ==&lt;br /&gt;
&lt;br /&gt;
Hier nur ein minimales Beispiel. Für die Optimierung sein auf die entsprechende Originaldokumentation verwiesen.&lt;br /&gt;
&lt;br /&gt;
    ~/php-fpm$ cat ~/php-fpm/php-fpm.conf&lt;br /&gt;
    &lt;br /&gt;
    [global]&lt;br /&gt;
    pid = /home/pacs/xyz00/users/username/php-fpm/php-fpm.pid&lt;br /&gt;
    error_log = /home/pacs/xyz00/users/username/php-fpm/php-fpm.log&lt;br /&gt;
    &lt;br /&gt;
    [www]&lt;br /&gt;
    listen = 127.0.0.1:30080&lt;br /&gt;
    listen.allowed_clients = 127.0.0.1&lt;br /&gt;
    pm = dynamic&lt;br /&gt;
    pm.max_children = 5&lt;br /&gt;
    pm.start_servers = 2&lt;br /&gt;
    pm.min_spare_servers = 1&lt;br /&gt;
    pm.max_spare_servers = 3&lt;br /&gt;
    ;pm.process_idle_timeout = 10s;&lt;br /&gt;
    ;pm.max_requests = 500&lt;br /&gt;
&lt;br /&gt;
== Apache Konfiguration ==&lt;br /&gt;
&lt;br /&gt;
Der FPM-Server wird über das Apache Modul &amp;quot;mod_proxy_fcgi&amp;quot; angesteuert. Dazu legt man im Verzeichnis &lt;br /&gt;
~/doms/hs-example.de/ eine Datei .htaccess an.&lt;br /&gt;
&lt;br /&gt;
    $ cat doms/hs-example.de/.htaccess&lt;br /&gt;
    RewriteEngine on&lt;br /&gt;
    RewriteRule ^(.*)\.php(/.*)?$ fcgi://127.0.0.1:30080/home/doms/hs-example.de/htdocs-ssl/$1.php$2 [proxy,last]&lt;br /&gt;
&lt;br /&gt;
== Start und Autostart des FPM-Prozess ==&lt;br /&gt;
&lt;br /&gt;
Der FPM-Prozess wird wie folgt gestartet:&lt;br /&gt;
&lt;br /&gt;
  /usr/sbin/php-fpm8.2 --fpm-config php-fpm/php-fpm.conf --php-ini php-fpm/php.ini --nodaemonize&lt;/div&gt;</summary>
		<author><name>Peh</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=PHP_FPM&amp;diff=7029</id>
		<title>PHP FPM</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=PHP_FPM&amp;diff=7029"/>
		<updated>2024-11-05T19:02:50Z</updated>

		<summary type="html">&lt;p&gt;Peh: htaccess repariert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= PHP als eigener Prozess =&lt;br /&gt;
&lt;br /&gt;
Normalerweise starten PHP-Prozesse im Managed Webspace als FastCGi-Prozess unter Kontrolle des Apache Webserver. Der Apache übernimmt die Skalierung und startet bei Bedarf weitere Prozesse nach.&lt;br /&gt;
&lt;br /&gt;
Nutzer:innen eines Managed Server können alternativ PHP-FPM Nutzen. Sie starten einen FPM-Prozess unter der eigenen Kontrolle. Dieser Hauptprozess übernimmt die Skalierung und Kontrolliert den Lifecycle von PHP-Prozessen nach den wünschen der Webseitenbetreiber:in.&lt;br /&gt;
&lt;br /&gt;
== Konfiguration von FPM ==&lt;br /&gt;
&lt;br /&gt;
Hier nur ein minimales Beispiel. Für die Optimierung sein auf die entsprechende Originaldokumentation verwiesen.&lt;br /&gt;
&lt;br /&gt;
    ~/php-fpm$ cat ~/php-fpm/php-fpm.conf&lt;br /&gt;
    &lt;br /&gt;
    [global]&lt;br /&gt;
    pid = /home/pacs/xyz00/users/username/php-fpm/php-fpm.pid&lt;br /&gt;
    error_log = /home/pacs/xyz00/users/username/php-fpm/php-fpm.log&lt;br /&gt;
    &lt;br /&gt;
    [www]&lt;br /&gt;
    listen = 127.0.0.1:30080&lt;br /&gt;
    listen.allowed_clients = 127.0.0.1&lt;br /&gt;
    pm = dynamic&lt;br /&gt;
    pm.max_children = 5&lt;br /&gt;
    pm.start_servers = 2&lt;br /&gt;
    pm.min_spare_servers = 1&lt;br /&gt;
    pm.max_spare_servers = 3&lt;br /&gt;
    ;pm.process_idle_timeout = 10s;&lt;br /&gt;
    ;pm.max_requests = 500&lt;br /&gt;
&lt;br /&gt;
== Apache Konfiguration ==&lt;br /&gt;
&lt;br /&gt;
Der FPM-Server wird über das Apache Modul &amp;quot;mod_proxy_fcgi&amp;quot; angesteuert. Dazu legt man im Verzeichnis &lt;br /&gt;
~/doms/hs-example.de/ eine Datei .htaccess an.&lt;br /&gt;
&lt;br /&gt;
    $ cat doms/hs-example.de/.htaccess&lt;br /&gt;
    RewriteEngine on&lt;br /&gt;
    RewriteRule ^(.*)\.php(/.*)?$ fcgi://127.0.0.1:30080/home/doms/hs-example.de/htdocs-ssl/$1.php$2 [proxy,last]&lt;br /&gt;
&lt;br /&gt;
== Start und Monitoring des FPM-Prozess ==&lt;br /&gt;
&lt;br /&gt;
Der Prozess kann direkt oder indirekt über einen Eintrag &amp;quot;@reboot&amp;quot; in der Crontab des Website-User gestartet werden. Für das Monitoring bieten sich [[Monit_installieren|Monit]] oder &amp;quot;supervisord&amp;quot; an.&lt;/div&gt;</summary>
		<author><name>Peh</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Mlmmj&amp;diff=7028</id>
		<title>Mlmmj</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Mlmmj&amp;diff=7028"/>
		<updated>2024-11-05T11:48:54Z</updated>

		<summary type="html">&lt;p&gt;Peh: Link korrigiert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[http://www.mlmmj.org/ mlmmj], angeblich eine Abkürzung für &amp;quot;Mailing List Management Made Joyful&amp;quot;, ist ein Programm, mit dem in einem Hostsharing Paket E-Mail-Verteiler realisiert werden kann.&lt;br /&gt;
&lt;br /&gt;
Wer noch nicht weiß, was ein E-Mail-Verteiler machen soll oder wie, lese vielleicht auch den Wikipedia-Artikel:&lt;br /&gt;
[http://de.wikipedia.org/wiki/Mailingliste Mailingliste]&lt;br /&gt;
&lt;br /&gt;
Eine leistungsfähigere Alternative zu mlmmj könnte [[Mailman_3_installieren|Mailman 3]] sein.&lt;br /&gt;
&lt;br /&gt;
Diese Anleitung beschreibt die Einrichtung einer Mailingliste für eine Domain in einem Hostsharing-Webspace.&lt;br /&gt;
&lt;br /&gt;
== Voraussetzungen  ==&lt;br /&gt;
&lt;br /&gt;
Das Debian Paket [http://packages.debian.org/search?keywords=mlmmj mlmmj] ist auf den Shared-Hosting-Servern bereits installiert. (Wer die Software selbst kompilieren möchte kann aktuellen Source-Code bei [https://codeberg.org/mlmmj/mlmmj codeberg.org] finden.)&lt;br /&gt;
&lt;br /&gt;
Für den Betrieb der Mailingliste empfiehlt sich das Anlegen eines eigenen Users für diesen Zweck mit hsadmin.&lt;br /&gt;
&lt;br /&gt;
In dieser Anleitung heißt das Paket &#039;&#039;xyz00&#039;&#039; und der für Mailinglisten eingesetzte User &#039;&#039;xyz00-list&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Die E-Mail-Adresse der einzurichtende Mailing-Liste soll &#039;&#039;discuss@example.org&#039;&#039; sein. Den lokalen Teil dieser Adresse, &#039;&#039;discuss&#039;&#039;, ist der Listenname. Der Listenname darf auf keinen Fall das Plus-Zeichen (+) enthalten, weil dies ein Sonderbedeutung für die Listensteuerung hat: &#039;&#039;mlmmj&#039;&#039; wird nämlich Befehle der Abonnenten über erweiterte Adressen annehmen, wie z.B. &#039;&#039;discuss+help@example.org&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Die Domain &#039;&#039;example.org&#039;&#039; muss dazu bei einem beliebigen User im Paket &#039;&#039;xyz00&#039;&#039; [[aufgeschaltet]] sein. (&amp;quot;Aufgeschaltet&amp;quot; bedeutet, daß diese Domain bei Hostsharing gehostet wird und der Domainname als Verzeichnis /home/pacs/xyz00/*User*/doms/example.org/ erscheint.)&lt;br /&gt;
&lt;br /&gt;
== Einrichtung ==&lt;br /&gt;
&lt;br /&gt;
Ich melde mich über SSH auf der Hostsharing-Console als der Paketuser &#039;&#039;xyz00&#039;&#039; an.&lt;br /&gt;
&lt;br /&gt;
Im Shell kann ich dann durch den Befehl &#039;&#039;hsscript -i&#039;&#039; das Verwaltungswerkzeug [[hsadmin]] interaktiv ausführen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
xyz00@h03:~$ hsscript -i&lt;br /&gt;
Password: *************&lt;br /&gt;
xyz00@hsadmin&amp;gt; &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In &#039;&#039;hsadmin&#039;&#039; werden User und E-Mail-Adresse angelegt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
xyz00@hsadmin&amp;gt; user.add({set:{name:&#039;xyz00-list&#039;,comment:&#039;Mailingliste Discuss&#039;,shell:&#039;/bin/bash&#039;,password:&#039;geheimnis&#039;}})&lt;br /&gt;
xyz00@hsadmin&amp;gt; emailaddress.add({set:{target:&#039;xyz00-list&#039;,localpart:&#039;discuss&#039;,domain:&#039;example.org&#039;}})&lt;br /&gt;
xyz00@hsadmin&amp;gt; bye&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mit dem Parameter &amp;quot;target&amp;quot; wird die für diese Adresse eingehende Post zunächst in das Postfach des Users xyz00-list abgelegt.&lt;br /&gt;
&lt;br /&gt;
Für den User xyz00-list lege ich in seinem Heimat-Verzeichnis das Unterverzeichnis &amp;lt;tt&amp;gt;mlmmj&amp;lt;/tt&amp;gt; an:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
mkdir /home/pacs/xyz00/users/list/mlmmj&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann lege ich die Mailingliste mit folgendem Kommando an:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
mlmmj-make-ml -L discuss -s /home/pacs/xyz00/users/list/mlmmj&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Skript &#039;&#039;mlmmj-make-ml&#039;&#039; fragt weitere Parameter der Mailingliste ab:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=output line&amp;gt;&lt;br /&gt;
The Domain for the List? [] : example.org&lt;br /&gt;
The emailaddress of the list owner? [postmaster] : webmaster@example.org&lt;br /&gt;
For the list texts you can choose between the following languages or&lt;br /&gt;
give an absolute path to a directory containing the texts.&lt;br /&gt;
Available languages:&lt;br /&gt;
cz  da	de  en	es  fr	it  nl	ru&lt;br /&gt;
The path to texts for the list? [en] : de&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das skript &#039;&#039;mlmmj-make-ml&#039;&#039; legt daraufhin unter &amp;quot;/home/pacs/xyz00/users/list/mlmmj&amp;quot; ein Verzeichnis &amp;quot;discuss&amp;quot; an, das die Datenstruktur zur Verwaltung der Mailingliste enthält.&lt;br /&gt;
&lt;br /&gt;
Weitere Konfigurationen der Liste erfolgen durch das Anlegen von Dateien im&lt;br /&gt;
Verzeichnis &amp;quot;/home/pacs/xyz00/users/list/mlmmj/discuss/control&amp;quot;.&lt;br /&gt;
Die Konfigurationsmöglichkeiten finden Sie auf der [http://mlmmj.org/TUNABLES.html Internetseite von mlmmj].&lt;br /&gt;
&lt;br /&gt;
Damit mlmmj die Verteilung der Post übernimmt, muß ich im Heimat-Verzeichnis des users xyz00-list die Datei &amp;lt;tt&amp;gt;.forward&amp;lt;/tt&amp;gt; mit folgenden Inhalt (INKLUSIVE der Anführungszeichen!) erstellen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
&amp;quot;|/usr/bin/mlmmj-recieve -L /home/pacs/xyz00/users/list/mlmmj/discuss/&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Ja, &#039;&#039;receive&#039;&#039; schreibt sich mit &#039;&#039;-ei-&#039;&#039;, aber mlmmj hält einen symbolischen Link bereit für diejenigen, die in englischer Rechtschreibung unsicher sind:)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
xyz00-list@h03:~$ ls -la /usr/bin/mlmmj-rec*&lt;br /&gt;
-rwxr-xr-x 1 root root 27104 Sep 25  2018 /usr/bin/mlmmj-receive&lt;br /&gt;
lrwxrwxrwx 1 root root    13 Sep 25  2018 /usr/bin/mlmmj-recieve -&amp;gt; mlmmj-receive&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die &amp;lt;tt&amp;gt;.forward&amp;lt;/tt&amp;gt;-Datei sorgt dafür, dass eingehende E-Mails an das User-Postfach an das Programm &#039;&#039;mlmmj-recieve&#039;&#039; übergeben werden.&lt;br /&gt;
&lt;br /&gt;
Für regelmäßige Aufgaben der Listen-Managers definiere ich die&lt;br /&gt;
[[Cron|crontab]] wie folgt (immer noch als &#039;&#039;xyz00-list&#039;&#039;):&lt;br /&gt;
&lt;br /&gt;
  xyz00-list@h03:~$ crontab -e&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell line&amp;gt;&lt;br /&gt;
MAILTO=webmaster@example.org&lt;br /&gt;
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin&lt;br /&gt;
HOME=/home/pacs/xyz00/users/list&lt;br /&gt;
SHELL=/bin/bash&lt;br /&gt;
LANG=en_US.UTF-8&lt;br /&gt;
# m h  dom mon dow   command&lt;br /&gt;
28 */4 * * * /usr/bin/mlmmj-maintd -d /home/pacs/xyz00/users/list/mlmmj -F&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zum Schluss rufe ich das Skript mlmmj-sub auf, um die E-Mail-Adressen der gewünschten Abonnenten des Verteilers einzutragen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
/usr/bin/mlmmj-sub -L /home/pacs/xyz00/users/list/mlmmj/discuss -a klaus.muster@gmx.de -c &lt;br /&gt;
/usr/bin/mlmmj-sub -L /home/pacs/xyz00/users/list/mlmmj/discuss -a sabine.beispiel@arcor.de -c &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dabei bewirkt &amp;quot;-c&amp;quot;, dass der Abonnent eine Begrüßungs-Nachricht erhält. Alternativ kann man &amp;quot;-C&amp;quot; (großes C) angeben: dann muss der Abonnent das Abo durch Antworten auf die Nachricht bestätigen.&lt;br /&gt;
&lt;br /&gt;
== weitere Optionen  ==&lt;br /&gt;
&lt;br /&gt;
Noch ein paar Dinge, die Sie möglicherweise einstellen wollen:&lt;br /&gt;
&lt;br /&gt;
Ein Prefix in der Betreffzeile setzen, z.B.: &amp;quot;[discuss]&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
echo &amp;quot;[discuss]&amp;quot; &amp;gt; /home/pacs/xyz00/users/list/mlmmj/discuss/control/prefix&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn die Liste nur E-Mails von eingetragenen Abonnenten weiterleiten soll:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
touch /home/pacs/xyz00/users/list/mlmmj/discuss/control/subonlypost&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit der Listen-Owner weitere Abonnements bestätigen muss:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
touch /home/pacs/xyz00/users/list/mlmmj/discuss/control/submod&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Einen &amp;quot;Reply-To:&amp;quot;-Header setzen, damit Antwort-Mails standardmäßig an die Mailing-Liste gehen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
echo &amp;quot;Reply-To:&amp;quot; &amp;gt; /home/pacs/xyz00/users/list/mlmmj/discuss/control/delheaders&lt;br /&gt;
echo &amp;quot;Reply-To: discuss@example.org&amp;quot; &amp;gt; /home/pacs/xyz00/users/list/mlmmj/discuss/control/customheaders&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beim Massenversand, z.B. bei Newslettern, nutzen Sie bitte möglichst den dedizierten Postausgangsserver für den Massenversand. Dadurch tragen Sie dazu bei, die Reputation unserer regulären Ausgangsserver aufrechtzuerhalten.&lt;br /&gt;
&lt;br /&gt;
Um dies zu tun, setzen Sie den SMTP-Port entsprechend:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
echo &amp;quot;4025&amp;quot; &amp;gt; /home/pacs/xyz00/users/list/mlmmj/discuss/control/smtpport&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Weitere Konfigurationsvariante des Ausgangsserver sind unter https://www.hostsharing.net/doc/managed-operations-platform/email/ zu finden.&lt;br /&gt;
&lt;br /&gt;
Weitere Möglichkeiten finden Sie (wie oben bereits angegeben) &lt;br /&gt;
auf der [http://mlmmj.org/docs/tunables/ Internetseite von mlmmj].&lt;br /&gt;
&lt;br /&gt;
=== Achtung: DKIM ===&lt;br /&gt;
&lt;br /&gt;
Mlmmj gibt die Möglichkeit, mit &#039;&#039;&#039;delheaders&#039;&#039;&#039; und &#039;&#039;&#039;customheaders&#039;&#039;&#039; die Header der durchgeleiteten Mail umfangreich zu ändern. Allerdings tragen Mails heute häufig kryptografische Signaturen der sendenden Mailserver. Eine DKIM-Signatur sichert damit in der Regel die Integrität des Body der Mail sowie der Header &#039;&#039;Subject:&#039;&#039;, &#039;&#039;From:&#039;&#039;, &#039;&#039;To:&#039;&#039;, &#039;&#039;Date:&#039;&#039;, &#039;&#039;From&#039;&#039;, und oft auch &#039;&#039;Reply-To:&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Wird zum Beispiel mit einem Prefix das Subject geändert oder ein Footer angehängt, macht dies die DKIM-Signatur ungültig. Das ist für viele Mailprovider ein Grund die Nachricht abzuweisen. (siehe auch Diskussions-Seite zum Artikel)&lt;br /&gt;
&lt;br /&gt;
== Zur Konfiguration im Browser ==&lt;br /&gt;
&lt;br /&gt;
Die Original-Distribution von &#039;&#039;mlmmj&#039;&#039; enthält ein paar einfache PHP- und Perl-Skripte.  Das sind Beispiele für Subscribe-/Unsubscribe-Formulare, ein Admin-Formular zum Eintragen und Löschen von Abonnements und eine Seite mit der gesamten Listen-Konfiguration.&lt;br /&gt;
&lt;br /&gt;
Wer es sich ansehen möchte:&lt;br /&gt;
&lt;br /&gt;
Als Paket-Admin eine Domain aufschalten:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
hsscript -u xyz00 -e &amp;quot;domain.add({set:{name:&#039;lists.example.org&#039;,user:&#039;xyz00-list&#039;}})&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Und weiter als &amp;quot;xyz00-list&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Download der neuesten Version der Sourcen von mlmmj von http://mlmmj.org/downloads/ (noch besser: Download des aktuellen Debian-Pakets von [https://packages.debian.org/bookworm/all/mlmmj-php-web-admin/download debian.org]: da sind einige veraltete PHP-Ausdrücke schon herausgepatcht) und diese in einem temporären Verzeichnis entpacken (mit tar oder dpkg-deb).&lt;br /&gt;
&lt;br /&gt;
Unter &amp;quot;/mlmmj-$versionsnummer/contrib/web/php-admin/&amp;quot;, oder beim .deb-Paket unter &amp;quot;usr/share/mlmmj-...&amp;quot;, findet sich die PHP-Admin-Anwendung. Also ...&lt;br /&gt;
&lt;br /&gt;
* den Inhalt diese Verzeichnisses nach &amp;quot;/home/pacs/xyz00/users/list/doms/lists.example.org/&amp;quot; packen;&lt;br /&gt;
* in &amp;quot;/home/pacs/xyz00/users/list/doms/lists.example.org/conf/config.php&amp;quot; die Variable &amp;quot;$topdir&amp;quot; anpassen;&lt;br /&gt;
* die Dateien aus &amp;quot;/home/pacs/xyz00/users/list/doms/lists.example.org/htdocs/&amp;quot; nach &amp;quot;/home/pacs/xyz00/users/list/doms/lists.example.org/htdocs-ssl/&amp;quot; verschieben;&lt;br /&gt;
* Beim .deb-Paket die config.php, die templates/ und die tunables.pl aus etc/ nach example.org/conf/ verschieben;&lt;br /&gt;
* in &amp;quot;/home/pacs/xyz00/users/list/mlmmj&amp;quot; und in &amp;quot;/home/pacs/xyz00/users/list/doms/lists.example.org/htdocs-ssl/&amp;quot; eine &amp;quot;.htaccess&amp;quot; mit folgendem Inhalt ablegen: &lt;br /&gt;
&amp;lt;syntaxhighlight lang=apache line&amp;gt;&lt;br /&gt;
Require valid-user&lt;br /&gt;
AuthType Basic&lt;br /&gt;
AuthName &amp;quot;mlmmj web-interface&amp;quot;&lt;br /&gt;
AuthUserFile /home/pacs/xyz00/users/list/doms/lists.example.org/etc/htpasswd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Und schließlich die &amp;quot;htpasswd&amp;quot;-Datei anlegen.&lt;br /&gt;
&lt;br /&gt;
 cd /home/pacs/xyz00/users/list/doms/lists.example.org/etc/&lt;br /&gt;
 htpasswd -c htpasswd listadmin&lt;br /&gt;
&lt;br /&gt;
* Ein Passwort angeben.&lt;br /&gt;
&lt;br /&gt;
Nun enthält diese PHP-Anwendung, wenn man sie nicht dem Debian-Paket entnommen hat, leider noch eine Zeile, die schon seit PHP 7 nicht mehr lauffähig ist. Also muß man noch&lt;br /&gt;
&lt;br /&gt;
* in &amp;lt;tt&amp;gt;.../htdocs-ssl/index.php&amp;lt;/tt&amp;gt; folgende Änderung vornehmen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=diff line&amp;gt;&lt;br /&gt;
@@ -38,4 +38,5 @@&lt;br /&gt;
 # use scandir to have alphabetical order &lt;br /&gt;
 foreach (scandir($topdir) as $file) {&lt;br /&gt;
-    if (!ereg(&amp;quot;^\.&amp;quot;,$file))&lt;br /&gt;
+# ereg obsolete!! Vormals:    if (!ereg(&amp;quot;^\.&amp;quot;,$file))&lt;br /&gt;
+    if (!preg_match(&#039;/^\./&#039;,$file))&lt;br /&gt;
     {&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
und das Ergebnis auf https://lists.example.org anschauen.&lt;br /&gt;
&lt;br /&gt;
== Mehrere Mailinglisten betreiben ==&lt;br /&gt;
&lt;br /&gt;
Wenn mehrere Mailinglisten in einem Account und mit einer Admin-Oberfläche betrieben werden soll, empfiehlt sich die Nutzung von Procmail für den Aufruf von &#039;&#039;mlmmj&#039;&#039; für die jeweiligen Liste mit ihrem Daten-Verzeichnis.&lt;br /&gt;
&lt;br /&gt;
Dazu trägt man in der Datei &amp;lt;tt&amp;gt;.forward&amp;lt;/tt&amp;gt; statt des Aufrufs von &#039;&#039;mlmmj-recieve&#039;&#039; einen Aufruf von &#039;&#039;procmail&#039;&#039; ein:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
|/usr/bin/procmail&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Konfiguration von Procmail kann generisch erfolgen. Dazu legt man eine Datei &amp;lt;tt&amp;gt;.procmailrc&amp;lt;/tt&amp;gt; mit folgendem Inhalt ins $HOME des Users:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
SHELL=/bin/sh&lt;br /&gt;
HOMEDIR=/home/pacs/xyz00/users/list&lt;br /&gt;
MAILDIR=/home/pacs/xyz00/users/list/Maildir&lt;br /&gt;
PMDIR=/home/pacs/xyz00/users/list&lt;br /&gt;
VERBOSE=yes&lt;br /&gt;
LOGFILE=/home/pacs/xyz00/users/list/var/procmail.log&lt;br /&gt;
DEFAULT&lt;br /&gt;
 &lt;br /&gt;
:0:&lt;br /&gt;
* ^X-Original-To: ()\/[^@+]+&lt;br /&gt;
|/usr/bin/mlmmj-receive -F -L /home/pacs/xyz00/users/list/mlmmj/${MATCH}/&lt;br /&gt;
 &lt;br /&gt;
:0&lt;br /&gt;
{ EXITCODE 67 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bitte dafür sorgen, dass das Verzeichnis &#039;&#039;/home/pacs/xyz00/users/list/var&#039;&#039; existiert.&lt;br /&gt;
&lt;br /&gt;
Der kryptische reguläre Ausdruck hinter dem Header &#039;&#039;X-Original-To:&#039;&#039; passt auf den Beginn der E-Mail-Adresse bis zum ersten &#039;&#039;@&#039;&#039;- oder &#039;&#039;+&#039;&#039;-Zeichen. In der Variable &#039;&#039;MATCH&#039;&#039; steht also der Name der Mailingliste, d.h. der Name der Verzeichnisses, in dem die Liste verwaltet wird.&lt;br /&gt;
&lt;br /&gt;
Sehr wichtig ist die Zeile &#039;&#039;DEFAULT&#039;&#039; zu Beginn der &#039;&#039;.procmailrc&#039;&#039;. Die Variable &#039;&#039;DEFAULT&#039;&#039; wird von &#039;&#039;procmail&#039;&#039; gesetzt. Wir sorgen mit dieser Zeile dafür, dass sie wieder undefiniert ist. Diese Variable wird intern von &#039;&#039;mlmmj&#039;&#039; benutzt, wenn sie gesetzt ist. Das führt in Kombination mit &#039;&#039;procmail&#039;&#039; zu Fehlfunktionen (vgl. Links).&lt;br /&gt;
&lt;br /&gt;
===Groß- und Kleinschreibung===&lt;br /&gt;
&lt;br /&gt;
Achtung, mit der Groß- und Kleinschreibung von Listennamen gibt es bei dieser Procmail-Lösung eine kleine Tücke. Procmail übernimmt in die Variable $MATCH genau die in der X-Original-To-Headerzeile vorgefundene Schreibweise, und diese kann denkbarerweise &amp;quot;Listen-Name&amp;quot; oder &amp;quot;listen-name&amp;quot; oder &amp;quot;Listen-name&amp;quot; sein. &amp;lt;tt&amp;gt;mlmmj&amp;lt;/tt&amp;gt; hingegen wird diesen Wert in Unix-Manier mit dem genauen Verzeichnisnamen &amp;lt;tt&amp;gt;${HOME}/mlmmj/listen-name&amp;lt;/tt&amp;gt; vergleichen, und bei unterschiedlicher Schreibweise die Mail nicht verteilen.&lt;br /&gt;
&lt;br /&gt;
====Lösung 1====&lt;br /&gt;
&lt;br /&gt;
Eine teilweise Lösung besteht darin, den Listennamen in dem &amp;lt;tt&amp;gt;mlmmj&amp;lt;/tt&amp;gt;-Aufruf in der &amp;lt;tt&amp;gt;.procmailrc&amp;lt;/tt&amp;gt; in Kleinbuchstaben umzuschreiben. Dann lautet das Rezept so:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
:0:&lt;br /&gt;
* ^X-Original-To: ()\/[^@+]+&lt;br /&gt;
|/usr/bin/mlmmj-receive -F -L /home/pacs/xyz00/users/list/mlmmj/$(echo ${MATCH} | tr [:upper:] [:lower:])/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Rest der Datei muß gleich bleiben, wie weiter oben angezeigt.&lt;br /&gt;
&lt;br /&gt;
In diesem Fall müssen aber alle Mailing-Listen ohne Großbuchstaben im Namen angelegt werden!&lt;br /&gt;
&lt;br /&gt;
(Man kann auch in &amp;lt;tt&amp;gt;${HOME}/mlmmj/&amp;lt;/tt&amp;gt; durch kleingeschriebene Symlinks großgeschriebene Listennamen ansprechbar machen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=output&amp;gt;&lt;br /&gt;
xyz00-list@h02:~$ ls -lA mlmmj/&lt;br /&gt;
total 8&lt;br /&gt;
-rw-r--r--  1 xyz00-list xyz00  148 Feb  1 16:56 .htaccess&lt;br /&gt;
lrwxrwxrwx  1 xyz00-list xyz00   10 Feb  2 18:01 mitglieder -&amp;gt; Mitglieder&lt;br /&gt;
drwxr-xr-x 15 xyz00-list xyz00 4096 Feb  2 16:53 Mitglieder&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Lösung 2====&lt;br /&gt;
&lt;br /&gt;
Bash kann bei der Auflösung von Variablen die Groß- und Kleinschreibung manipulieren. (Siehe dazu bei der Zeichenfolge &amp;lt;tt&amp;gt;,,&amp;lt;/tt&amp;gt; in &amp;lt;tt&amp;gt;man bash&amp;lt;/tt&amp;gt;.) Dann ist &amp;lt;tt&amp;gt;$(echo ${MATCH} | tr [:upper:] [:lower:])&amp;lt;/tt&amp;gt; gleichbedeutend mit &amp;lt;tt&amp;gt;${MATCH,,}&amp;lt;/tt&amp;gt;. Allerdings braucht procmail einige Überredung, um Bash zu verwenden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
SHELL=/bin/bash&lt;br /&gt;
SHELLMETAS=&amp;amp;|&amp;lt;&amp;gt;~;?*[{&lt;br /&gt;
HOMEDIR= ...&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
:0:&lt;br /&gt;
* ^X-Original-To: ()\/[^@+]+&lt;br /&gt;
|/usr/bin/mlmmj-receive -F -L /home/pacs/xyz00/users/list/mlmmj/${MATCH,,}/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Tücke ist, daß procmail den in SHELL angegebenen Shell nur dann verwendet, wenn die Befehlszeile eines der in SHELLMETAS angegebenen Zeichen enthält. Und das &#039;|&#039; am Anfang der Zeile zählt dabei nicht! In diesem Beispiel ist es das Zeichen &amp;lt;tt&amp;gt;{&amp;lt;/tt&amp;gt;, das den Einsatz von Bash auslöst.&lt;br /&gt;
&lt;br /&gt;
Beide Lösungen scheinen zu funktionieren; Angabe ohne Gewähr.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* http://mlmmj.org/ Projektseite&lt;br /&gt;
* https://codeberg.org/mlmmj mlmmj auf Codeberg&lt;br /&gt;
* https://github.com/tchapi/mlmmj-simple-web-interface ein Admin-Interface in NodeJS&lt;br /&gt;
* [https://web.archive.org/web/20221228110514/https://www.tablix.org/~avian/blog/archives/2010/04/the_faulty_default/ https://www.tablix.org/~avian/blog/archives/2010/04/the_faulty_default/ (via web.archive.org)] Nutzung von mlmmj in Verbindung mit Procmail&lt;br /&gt;
* [https://gist.github.com/kboss/7c9593f0fd9219406226c4f11256b98a Einfaches Python-Script zum Massenimport aus einem Texfile.] Geht bestimmt auch eleganter mit purem Bash&lt;br /&gt;
* Ein Self-Service zum Subscriben/Unsubscriben lässt sich in Form von Mail-to-Links in Webseiten einbinden. Beispiele gibt es bei Hostsharing für die öffentlichen &amp;quot;public&amp;quot;-Mailinglisten: https://www.hostsharing.net/lists/public-discussion/ . Alternativ auf https://github.com/hblasum/mlmmj-php-web-simplified ein Webfrontend mit dem sich Benutzerinnen und Benutzer selbst ein-/austragen können (Vereinfachung von mlmmj-php-web von Christoph Thiel).&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[Kategorie:HSDoku]]&lt;br /&gt;
[[Kategorie:Installationsanleitungen]]&lt;br /&gt;
[[Kategorie:Software]]&lt;br /&gt;
[[Kategorie:Mailinglisten]]&lt;br /&gt;
[[Kategorie:E-Mail]]&lt;/div&gt;</summary>
		<author><name>Peh</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Mlmmj&amp;diff=7027</id>
		<title>Mlmmj</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Mlmmj&amp;diff=7027"/>
		<updated>2024-11-05T11:46:02Z</updated>

		<summary type="html">&lt;p&gt;Peh: Link Formatierung&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[http://www.mlmmj.org/ mlmmj], angeblich eine Abkürzung für &amp;quot;Mailing List Management Made Joyful&amp;quot;, ist ein Programm, mit dem in einem Hostsharing Paket E-Mail-Verteiler realisiert werden kann.&lt;br /&gt;
&lt;br /&gt;
Wer noch nicht weiß, was ein E-Mail-Verteiler machen soll oder wie, lese vielleicht auch den Wikipedia-Artikel:&lt;br /&gt;
[http://de.wikipedia.org/wiki/Mailingliste Mailingliste]&lt;br /&gt;
&lt;br /&gt;
Eine leistungsfähigere Alternative zu mlmmj könnte [[Mailman_3_installieren|Mailman 3]] sein.&lt;br /&gt;
&lt;br /&gt;
Diese Anleitung beschreibt die Einrichtung einer Mailingliste für eine Domain in einem Hostsharing-Webspace.&lt;br /&gt;
&lt;br /&gt;
== Voraussetzungen  ==&lt;br /&gt;
&lt;br /&gt;
Das Debian Paket [http://packages.debian.org/search?keywords=mlmmj mlmmj] ist auf den Shared-Hosting-Servern bereits installiert. (Wer die Software selbst kompilieren möchte kann aktuellen Source-Code bei [https://codeberg.org/mlmmj/mlmmj codeberg.org] finden.)&lt;br /&gt;
&lt;br /&gt;
Für den Betrieb der Mailingliste empfiehlt sich das Anlegen eines eigenen Users für diesen Zweck mit hsadmin.&lt;br /&gt;
&lt;br /&gt;
In dieser Anleitung heißt das Paket &#039;&#039;xyz00&#039;&#039; und der für Mailinglisten eingesetzte User &#039;&#039;xyz00-list&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Die E-Mail-Adresse der einzurichtende Mailing-Liste soll &#039;&#039;discuss@example.org&#039;&#039; sein. Den lokalen Teil dieser Adresse, &#039;&#039;discuss&#039;&#039;, ist der Listenname. Der Listenname darf auf keinen Fall das Plus-Zeichen (+) enthalten, weil dies ein Sonderbedeutung für die Listensteuerung hat: &#039;&#039;mlmmj&#039;&#039; wird nämlich Befehle der Abonnenten über erweiterte Adressen annehmen, wie z.B. &#039;&#039;discuss+help@example.org&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Die Domain &#039;&#039;example.org&#039;&#039; muss dazu bei einem beliebigen User im Paket &#039;&#039;xyz00&#039;&#039; [[aufgeschaltet]] sein. (&amp;quot;Aufgeschaltet&amp;quot; bedeutet, daß diese Domain bei Hostsharing gehostet wird und der Domainname als Verzeichnis /home/pacs/xyz00/*User*/doms/example.org/ erscheint.)&lt;br /&gt;
&lt;br /&gt;
== Einrichtung ==&lt;br /&gt;
&lt;br /&gt;
Ich melde mich über SSH auf der Hostsharing-Console als der Paketuser &#039;&#039;xyz00&#039;&#039; an.&lt;br /&gt;
&lt;br /&gt;
Im Shell kann ich dann durch den Befehl &#039;&#039;hsscript -i&#039;&#039; das Verwaltungswerkzeug [[hsadmin]] interaktiv ausführen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
xyz00@h03:~$ hsscript -i&lt;br /&gt;
Password: *************&lt;br /&gt;
xyz00@hsadmin&amp;gt; &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In &#039;&#039;hsadmin&#039;&#039; werden User und E-Mail-Adresse angelegt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
xyz00@hsadmin&amp;gt; user.add({set:{name:&#039;xyz00-list&#039;,comment:&#039;Mailingliste Discuss&#039;,shell:&#039;/bin/bash&#039;,password:&#039;geheimnis&#039;}})&lt;br /&gt;
xyz00@hsadmin&amp;gt; emailaddress.add({set:{target:&#039;xyz00-list&#039;,localpart:&#039;discuss&#039;,domain:&#039;example.org&#039;}})&lt;br /&gt;
xyz00@hsadmin&amp;gt; bye&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mit dem Parameter &amp;quot;target&amp;quot; wird die für diese Adresse eingehende Post zunächst in das Postfach des Users xyz00-list abgelegt.&lt;br /&gt;
&lt;br /&gt;
Für den User xyz00-list lege ich in seinem Heimat-Verzeichnis das Unterverzeichnis &amp;lt;tt&amp;gt;mlmmj&amp;lt;/tt&amp;gt; an:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
mkdir /home/pacs/xyz00/users/list/mlmmj&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann lege ich die Mailingliste mit folgendem Kommando an:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
mlmmj-make-ml -L discuss -s /home/pacs/xyz00/users/list/mlmmj&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Skript &#039;&#039;mlmmj-make-ml&#039;&#039; fragt weitere Parameter der Mailingliste ab:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=output line&amp;gt;&lt;br /&gt;
The Domain for the List? [] : example.org&lt;br /&gt;
The emailaddress of the list owner? [postmaster] : webmaster@example.org&lt;br /&gt;
For the list texts you can choose between the following languages or&lt;br /&gt;
give an absolute path to a directory containing the texts.&lt;br /&gt;
Available languages:&lt;br /&gt;
cz  da	de  en	es  fr	it  nl	ru&lt;br /&gt;
The path to texts for the list? [en] : de&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das skript &#039;&#039;mlmmj-make-ml&#039;&#039; legt daraufhin unter &amp;quot;/home/pacs/xyz00/users/list/mlmmj&amp;quot; ein Verzeichnis &amp;quot;discuss&amp;quot; an, das die Datenstruktur zur Verwaltung der Mailingliste enthält.&lt;br /&gt;
&lt;br /&gt;
Weitere Konfigurationen der Liste erfolgen durch das Anlegen von Dateien im&lt;br /&gt;
Verzeichnis &amp;quot;/home/pacs/xyz00/users/list/mlmmj/discuss/control&amp;quot;.&lt;br /&gt;
Die Konfigurationsmöglichkeiten finden Sie auf der [http://mlmmj.org/docs/tunables/ Internetseite von mlmmj].&lt;br /&gt;
&lt;br /&gt;
Damit mlmmj die Verteilung der Post übernimmt, muß ich im Heimat-Verzeichnis des users xyz00-list die Datei &amp;lt;tt&amp;gt;.forward&amp;lt;/tt&amp;gt; mit folgenden Inhalt (INKLUSIVE der Anführungszeichen!) erstellen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
&amp;quot;|/usr/bin/mlmmj-recieve -L /home/pacs/xyz00/users/list/mlmmj/discuss/&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Ja, &#039;&#039;receive&#039;&#039; schreibt sich mit &#039;&#039;-ei-&#039;&#039;, aber mlmmj hält einen symbolischen Link bereit für diejenigen, die in englischer Rechtschreibung unsicher sind:)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
xyz00-list@h03:~$ ls -la /usr/bin/mlmmj-rec*&lt;br /&gt;
-rwxr-xr-x 1 root root 27104 Sep 25  2018 /usr/bin/mlmmj-receive&lt;br /&gt;
lrwxrwxrwx 1 root root    13 Sep 25  2018 /usr/bin/mlmmj-recieve -&amp;gt; mlmmj-receive&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die &amp;lt;tt&amp;gt;.forward&amp;lt;/tt&amp;gt;-Datei sorgt dafür, dass eingehende E-Mails an das User-Postfach an das Programm &#039;&#039;mlmmj-recieve&#039;&#039; übergeben werden.&lt;br /&gt;
&lt;br /&gt;
Für regelmäßige Aufgaben der Listen-Managers definiere ich die&lt;br /&gt;
[[Cron|crontab]] wie folgt (immer noch als &#039;&#039;xyz00-list&#039;&#039;):&lt;br /&gt;
&lt;br /&gt;
  xyz00-list@h03:~$ crontab -e&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell line&amp;gt;&lt;br /&gt;
MAILTO=webmaster@example.org&lt;br /&gt;
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin&lt;br /&gt;
HOME=/home/pacs/xyz00/users/list&lt;br /&gt;
SHELL=/bin/bash&lt;br /&gt;
LANG=en_US.UTF-8&lt;br /&gt;
# m h  dom mon dow   command&lt;br /&gt;
28 */4 * * * /usr/bin/mlmmj-maintd -d /home/pacs/xyz00/users/list/mlmmj -F&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zum Schluss rufe ich das Skript mlmmj-sub auf, um die E-Mail-Adressen der gewünschten Abonnenten des Verteilers einzutragen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
/usr/bin/mlmmj-sub -L /home/pacs/xyz00/users/list/mlmmj/discuss -a klaus.muster@gmx.de -c &lt;br /&gt;
/usr/bin/mlmmj-sub -L /home/pacs/xyz00/users/list/mlmmj/discuss -a sabine.beispiel@arcor.de -c &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dabei bewirkt &amp;quot;-c&amp;quot;, dass der Abonnent eine Begrüßungs-Nachricht erhält. Alternativ kann man &amp;quot;-C&amp;quot; (großes C) angeben: dann muss der Abonnent das Abo durch Antworten auf die Nachricht bestätigen.&lt;br /&gt;
&lt;br /&gt;
== weitere Optionen  ==&lt;br /&gt;
&lt;br /&gt;
Noch ein paar Dinge, die Sie möglicherweise einstellen wollen:&lt;br /&gt;
&lt;br /&gt;
Ein Prefix in der Betreffzeile setzen, z.B.: &amp;quot;[discuss]&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
echo &amp;quot;[discuss]&amp;quot; &amp;gt; /home/pacs/xyz00/users/list/mlmmj/discuss/control/prefix&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn die Liste nur E-Mails von eingetragenen Abonnenten weiterleiten soll:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
touch /home/pacs/xyz00/users/list/mlmmj/discuss/control/subonlypost&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit der Listen-Owner weitere Abonnements bestätigen muss:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
touch /home/pacs/xyz00/users/list/mlmmj/discuss/control/submod&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Einen &amp;quot;Reply-To:&amp;quot;-Header setzen, damit Antwort-Mails standardmäßig an die Mailing-Liste gehen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
echo &amp;quot;Reply-To:&amp;quot; &amp;gt; /home/pacs/xyz00/users/list/mlmmj/discuss/control/delheaders&lt;br /&gt;
echo &amp;quot;Reply-To: discuss@example.org&amp;quot; &amp;gt; /home/pacs/xyz00/users/list/mlmmj/discuss/control/customheaders&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beim Massenversand, z.B. bei Newslettern, nutzen Sie bitte möglichst den dedizierten Postausgangsserver für den Massenversand. Dadurch tragen Sie dazu bei, die Reputation unserer regulären Ausgangsserver aufrechtzuerhalten.&lt;br /&gt;
&lt;br /&gt;
Um dies zu tun, setzen Sie den SMTP-Port entsprechend:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
echo &amp;quot;4025&amp;quot; &amp;gt; /home/pacs/xyz00/users/list/mlmmj/discuss/control/smtpport&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Weitere Konfigurationsvariante des Ausgangsserver sind unter https://www.hostsharing.net/doc/managed-operations-platform/email/ zu finden.&lt;br /&gt;
&lt;br /&gt;
Weitere Möglichkeiten finden Sie (wie oben bereits angegeben) &lt;br /&gt;
auf der [http://mlmmj.org/docs/tunables/ Internetseite von mlmmj].&lt;br /&gt;
&lt;br /&gt;
=== Achtung: DKIM ===&lt;br /&gt;
&lt;br /&gt;
Mlmmj gibt die Möglichkeit, mit &#039;&#039;&#039;delheaders&#039;&#039;&#039; und &#039;&#039;&#039;customheaders&#039;&#039;&#039; die Header der durchgeleiteten Mail umfangreich zu ändern. Allerdings tragen Mails heute häufig kryptografische Signaturen der sendenden Mailserver. Eine DKIM-Signatur sichert damit in der Regel die Integrität des Body der Mail sowie der Header &#039;&#039;Subject:&#039;&#039;, &#039;&#039;From:&#039;&#039;, &#039;&#039;To:&#039;&#039;, &#039;&#039;Date:&#039;&#039;, &#039;&#039;From&#039;&#039;, und oft auch &#039;&#039;Reply-To:&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Wird zum Beispiel mit einem Prefix das Subject geändert oder ein Footer angehängt, macht dies die DKIM-Signatur ungültig. Das ist für viele Mailprovider ein Grund die Nachricht abzuweisen. (siehe auch Diskussions-Seite zum Artikel)&lt;br /&gt;
&lt;br /&gt;
== Zur Konfiguration im Browser ==&lt;br /&gt;
&lt;br /&gt;
Die Original-Distribution von &#039;&#039;mlmmj&#039;&#039; enthält ein paar einfache PHP- und Perl-Skripte.  Das sind Beispiele für Subscribe-/Unsubscribe-Formulare, ein Admin-Formular zum Eintragen und Löschen von Abonnements und eine Seite mit der gesamten Listen-Konfiguration.&lt;br /&gt;
&lt;br /&gt;
Wer es sich ansehen möchte:&lt;br /&gt;
&lt;br /&gt;
Als Paket-Admin eine Domain aufschalten:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
hsscript -u xyz00 -e &amp;quot;domain.add({set:{name:&#039;lists.example.org&#039;,user:&#039;xyz00-list&#039;}})&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Und weiter als &amp;quot;xyz00-list&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Download der neuesten Version der Sourcen von mlmmj von http://mlmmj.org/downloads/ (noch besser: Download des aktuellen Debian-Pakets von [https://packages.debian.org/bookworm/all/mlmmj-php-web-admin/download debian.org]: da sind einige veraltete PHP-Ausdrücke schon herausgepatcht) und diese in einem temporären Verzeichnis entpacken (mit tar oder dpkg-deb).&lt;br /&gt;
&lt;br /&gt;
Unter &amp;quot;/mlmmj-$versionsnummer/contrib/web/php-admin/&amp;quot;, oder beim .deb-Paket unter &amp;quot;usr/share/mlmmj-...&amp;quot;, findet sich die PHP-Admin-Anwendung. Also ...&lt;br /&gt;
&lt;br /&gt;
* den Inhalt diese Verzeichnisses nach &amp;quot;/home/pacs/xyz00/users/list/doms/lists.example.org/&amp;quot; packen;&lt;br /&gt;
* in &amp;quot;/home/pacs/xyz00/users/list/doms/lists.example.org/conf/config.php&amp;quot; die Variable &amp;quot;$topdir&amp;quot; anpassen;&lt;br /&gt;
* die Dateien aus &amp;quot;/home/pacs/xyz00/users/list/doms/lists.example.org/htdocs/&amp;quot; nach &amp;quot;/home/pacs/xyz00/users/list/doms/lists.example.org/htdocs-ssl/&amp;quot; verschieben;&lt;br /&gt;
* Beim .deb-Paket die config.php, die templates/ und die tunables.pl aus etc/ nach example.org/conf/ verschieben;&lt;br /&gt;
* in &amp;quot;/home/pacs/xyz00/users/list/mlmmj&amp;quot; und in &amp;quot;/home/pacs/xyz00/users/list/doms/lists.example.org/htdocs-ssl/&amp;quot; eine &amp;quot;.htaccess&amp;quot; mit folgendem Inhalt ablegen: &lt;br /&gt;
&amp;lt;syntaxhighlight lang=apache line&amp;gt;&lt;br /&gt;
Require valid-user&lt;br /&gt;
AuthType Basic&lt;br /&gt;
AuthName &amp;quot;mlmmj web-interface&amp;quot;&lt;br /&gt;
AuthUserFile /home/pacs/xyz00/users/list/doms/lists.example.org/etc/htpasswd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Und schließlich die &amp;quot;htpasswd&amp;quot;-Datei anlegen.&lt;br /&gt;
&lt;br /&gt;
 cd /home/pacs/xyz00/users/list/doms/lists.example.org/etc/&lt;br /&gt;
 htpasswd -c htpasswd listadmin&lt;br /&gt;
&lt;br /&gt;
* Ein Passwort angeben.&lt;br /&gt;
&lt;br /&gt;
Nun enthält diese PHP-Anwendung, wenn man sie nicht dem Debian-Paket entnommen hat, leider noch eine Zeile, die schon seit PHP 7 nicht mehr lauffähig ist. Also muß man noch&lt;br /&gt;
&lt;br /&gt;
* in &amp;lt;tt&amp;gt;.../htdocs-ssl/index.php&amp;lt;/tt&amp;gt; folgende Änderung vornehmen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=diff line&amp;gt;&lt;br /&gt;
@@ -38,4 +38,5 @@&lt;br /&gt;
 # use scandir to have alphabetical order &lt;br /&gt;
 foreach (scandir($topdir) as $file) {&lt;br /&gt;
-    if (!ereg(&amp;quot;^\.&amp;quot;,$file))&lt;br /&gt;
+# ereg obsolete!! Vormals:    if (!ereg(&amp;quot;^\.&amp;quot;,$file))&lt;br /&gt;
+    if (!preg_match(&#039;/^\./&#039;,$file))&lt;br /&gt;
     {&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
und das Ergebnis auf https://lists.example.org anschauen.&lt;br /&gt;
&lt;br /&gt;
== Mehrere Mailinglisten betreiben ==&lt;br /&gt;
&lt;br /&gt;
Wenn mehrere Mailinglisten in einem Account und mit einer Admin-Oberfläche betrieben werden soll, empfiehlt sich die Nutzung von Procmail für den Aufruf von &#039;&#039;mlmmj&#039;&#039; für die jeweiligen Liste mit ihrem Daten-Verzeichnis.&lt;br /&gt;
&lt;br /&gt;
Dazu trägt man in der Datei &amp;lt;tt&amp;gt;.forward&amp;lt;/tt&amp;gt; statt des Aufrufs von &#039;&#039;mlmmj-recieve&#039;&#039; einen Aufruf von &#039;&#039;procmail&#039;&#039; ein:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
|/usr/bin/procmail&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Konfiguration von Procmail kann generisch erfolgen. Dazu legt man eine Datei &amp;lt;tt&amp;gt;.procmailrc&amp;lt;/tt&amp;gt; mit folgendem Inhalt ins $HOME des Users:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
SHELL=/bin/sh&lt;br /&gt;
HOMEDIR=/home/pacs/xyz00/users/list&lt;br /&gt;
MAILDIR=/home/pacs/xyz00/users/list/Maildir&lt;br /&gt;
PMDIR=/home/pacs/xyz00/users/list&lt;br /&gt;
VERBOSE=yes&lt;br /&gt;
LOGFILE=/home/pacs/xyz00/users/list/var/procmail.log&lt;br /&gt;
DEFAULT&lt;br /&gt;
 &lt;br /&gt;
:0:&lt;br /&gt;
* ^X-Original-To: ()\/[^@+]+&lt;br /&gt;
|/usr/bin/mlmmj-receive -F -L /home/pacs/xyz00/users/list/mlmmj/${MATCH}/&lt;br /&gt;
 &lt;br /&gt;
:0&lt;br /&gt;
{ EXITCODE 67 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bitte dafür sorgen, dass das Verzeichnis &#039;&#039;/home/pacs/xyz00/users/list/var&#039;&#039; existiert.&lt;br /&gt;
&lt;br /&gt;
Der kryptische reguläre Ausdruck hinter dem Header &#039;&#039;X-Original-To:&#039;&#039; passt auf den Beginn der E-Mail-Adresse bis zum ersten &#039;&#039;@&#039;&#039;- oder &#039;&#039;+&#039;&#039;-Zeichen. In der Variable &#039;&#039;MATCH&#039;&#039; steht also der Name der Mailingliste, d.h. der Name der Verzeichnisses, in dem die Liste verwaltet wird.&lt;br /&gt;
&lt;br /&gt;
Sehr wichtig ist die Zeile &#039;&#039;DEFAULT&#039;&#039; zu Beginn der &#039;&#039;.procmailrc&#039;&#039;. Die Variable &#039;&#039;DEFAULT&#039;&#039; wird von &#039;&#039;procmail&#039;&#039; gesetzt. Wir sorgen mit dieser Zeile dafür, dass sie wieder undefiniert ist. Diese Variable wird intern von &#039;&#039;mlmmj&#039;&#039; benutzt, wenn sie gesetzt ist. Das führt in Kombination mit &#039;&#039;procmail&#039;&#039; zu Fehlfunktionen (vgl. Links).&lt;br /&gt;
&lt;br /&gt;
===Groß- und Kleinschreibung===&lt;br /&gt;
&lt;br /&gt;
Achtung, mit der Groß- und Kleinschreibung von Listennamen gibt es bei dieser Procmail-Lösung eine kleine Tücke. Procmail übernimmt in die Variable $MATCH genau die in der X-Original-To-Headerzeile vorgefundene Schreibweise, und diese kann denkbarerweise &amp;quot;Listen-Name&amp;quot; oder &amp;quot;listen-name&amp;quot; oder &amp;quot;Listen-name&amp;quot; sein. &amp;lt;tt&amp;gt;mlmmj&amp;lt;/tt&amp;gt; hingegen wird diesen Wert in Unix-Manier mit dem genauen Verzeichnisnamen &amp;lt;tt&amp;gt;${HOME}/mlmmj/listen-name&amp;lt;/tt&amp;gt; vergleichen, und bei unterschiedlicher Schreibweise die Mail nicht verteilen.&lt;br /&gt;
&lt;br /&gt;
====Lösung 1====&lt;br /&gt;
&lt;br /&gt;
Eine teilweise Lösung besteht darin, den Listennamen in dem &amp;lt;tt&amp;gt;mlmmj&amp;lt;/tt&amp;gt;-Aufruf in der &amp;lt;tt&amp;gt;.procmailrc&amp;lt;/tt&amp;gt; in Kleinbuchstaben umzuschreiben. Dann lautet das Rezept so:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
:0:&lt;br /&gt;
* ^X-Original-To: ()\/[^@+]+&lt;br /&gt;
|/usr/bin/mlmmj-receive -F -L /home/pacs/xyz00/users/list/mlmmj/$(echo ${MATCH} | tr [:upper:] [:lower:])/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Rest der Datei muß gleich bleiben, wie weiter oben angezeigt.&lt;br /&gt;
&lt;br /&gt;
In diesem Fall müssen aber alle Mailing-Listen ohne Großbuchstaben im Namen angelegt werden!&lt;br /&gt;
&lt;br /&gt;
(Man kann auch in &amp;lt;tt&amp;gt;${HOME}/mlmmj/&amp;lt;/tt&amp;gt; durch kleingeschriebene Symlinks großgeschriebene Listennamen ansprechbar machen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=output&amp;gt;&lt;br /&gt;
xyz00-list@h02:~$ ls -lA mlmmj/&lt;br /&gt;
total 8&lt;br /&gt;
-rw-r--r--  1 xyz00-list xyz00  148 Feb  1 16:56 .htaccess&lt;br /&gt;
lrwxrwxrwx  1 xyz00-list xyz00   10 Feb  2 18:01 mitglieder -&amp;gt; Mitglieder&lt;br /&gt;
drwxr-xr-x 15 xyz00-list xyz00 4096 Feb  2 16:53 Mitglieder&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Lösung 2====&lt;br /&gt;
&lt;br /&gt;
Bash kann bei der Auflösung von Variablen die Groß- und Kleinschreibung manipulieren. (Siehe dazu bei der Zeichenfolge &amp;lt;tt&amp;gt;,,&amp;lt;/tt&amp;gt; in &amp;lt;tt&amp;gt;man bash&amp;lt;/tt&amp;gt;.) Dann ist &amp;lt;tt&amp;gt;$(echo ${MATCH} | tr [:upper:] [:lower:])&amp;lt;/tt&amp;gt; gleichbedeutend mit &amp;lt;tt&amp;gt;${MATCH,,}&amp;lt;/tt&amp;gt;. Allerdings braucht procmail einige Überredung, um Bash zu verwenden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
SHELL=/bin/bash&lt;br /&gt;
SHELLMETAS=&amp;amp;|&amp;lt;&amp;gt;~;?*[{&lt;br /&gt;
HOMEDIR= ...&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
:0:&lt;br /&gt;
* ^X-Original-To: ()\/[^@+]+&lt;br /&gt;
|/usr/bin/mlmmj-receive -F -L /home/pacs/xyz00/users/list/mlmmj/${MATCH,,}/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Tücke ist, daß procmail den in SHELL angegebenen Shell nur dann verwendet, wenn die Befehlszeile eines der in SHELLMETAS angegebenen Zeichen enthält. Und das &#039;|&#039; am Anfang der Zeile zählt dabei nicht! In diesem Beispiel ist es das Zeichen &amp;lt;tt&amp;gt;{&amp;lt;/tt&amp;gt;, das den Einsatz von Bash auslöst.&lt;br /&gt;
&lt;br /&gt;
Beide Lösungen scheinen zu funktionieren; Angabe ohne Gewähr.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* http://mlmmj.org/ Projektseite&lt;br /&gt;
* https://codeberg.org/mlmmj mlmmj auf Codeberg&lt;br /&gt;
* https://github.com/tchapi/mlmmj-simple-web-interface ein Admin-Interface in NodeJS&lt;br /&gt;
* [https://web.archive.org/web/20221228110514/https://www.tablix.org/~avian/blog/archives/2010/04/the_faulty_default/ https://www.tablix.org/~avian/blog/archives/2010/04/the_faulty_default/ (via web.archive.org)] Nutzung von mlmmj in Verbindung mit Procmail&lt;br /&gt;
* [https://gist.github.com/kboss/7c9593f0fd9219406226c4f11256b98a Einfaches Python-Script zum Massenimport aus einem Texfile.] Geht bestimmt auch eleganter mit purem Bash&lt;br /&gt;
* Ein Self-Service zum Subscriben/Unsubscriben lässt sich in Form von Mail-to-Links in Webseiten einbinden. Beispiele gibt es bei Hostsharing für die öffentlichen &amp;quot;public&amp;quot;-Mailinglisten: https://www.hostsharing.net/lists/public-discussion/ . Alternativ auf https://github.com/hblasum/mlmmj-php-web-simplified ein Webfrontend mit dem sich Benutzerinnen und Benutzer selbst ein-/austragen können (Vereinfachung von mlmmj-php-web von Christoph Thiel).&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[Kategorie:HSDoku]]&lt;br /&gt;
[[Kategorie:Installationsanleitungen]]&lt;br /&gt;
[[Kategorie:Software]]&lt;br /&gt;
[[Kategorie:Mailinglisten]]&lt;br /&gt;
[[Kategorie:E-Mail]]&lt;/div&gt;</summary>
		<author><name>Peh</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=ImapCopy&amp;diff=7024</id>
		<title>ImapCopy</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=ImapCopy&amp;diff=7024"/>
		<updated>2024-10-29T13:24:16Z</updated>

		<summary type="html">&lt;p&gt;Peh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ImapCopy ==&lt;br /&gt;
&lt;br /&gt;
ImapCopy ist ein Werkzeug, mit dem man ein komplettes IMAP-Postfach in ein IMAP-Postfach auf einem anderen Server (bei einem anderen Anbieter) kopieren kann. Wir verwenden es für die Migration von Postfächern. Eine Alternative ist [[OfflineIMAP]].&lt;br /&gt;
&lt;br /&gt;
== Installation ImapCopy ==&lt;br /&gt;
&lt;br /&gt;
ImapCopy ist auf den HS Hive schon installiert&lt;br /&gt;
&lt;br /&gt;
== Einrichtung allgemein ==&lt;br /&gt;
&lt;br /&gt;
Anmelden per ssh als ein Benutzer in einem HS-Paket.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xyz00-imapcopy@h01:~$&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dort wird ein Arbeitsverzeichnis erstellt&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xyz00-imapcopy@h01:~$ mkdir imapcopy&lt;br /&gt;
xyz00-imapcopy@h01:~$ cd imapcopy&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Konfiguration wird in einer Datei ImapCopy.cfg gespeichert&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xyz00-imapcopy@h01:~/imapcopy$ vi ImapCopy.cfg&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Config Web.de -&amp;gt; HS Benutzer ===&lt;br /&gt;
&lt;br /&gt;
Muster Inhalt der Datei ImapCopy.cfg&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
#############################################################&lt;br /&gt;
# imapcopy config&lt;br /&gt;
# all lines beginning with # are comments and will be ignored&lt;br /&gt;
#############################################################&lt;br /&gt;
&lt;br /&gt;
##############&lt;br /&gt;
# Sourceserver&lt;br /&gt;
##############&lt;br /&gt;
SourceServer imap.web.de&lt;br /&gt;
SourcePort 143&lt;br /&gt;
&lt;br /&gt;
###################&lt;br /&gt;
# Destinationserver&lt;br /&gt;
###################&lt;br /&gt;
DestServer xyz00.hostsharing.net&lt;br /&gt;
DestPort 143&lt;br /&gt;
&lt;br /&gt;
#########&lt;br /&gt;
# Options&lt;br /&gt;
#########&lt;br /&gt;
#&lt;br /&gt;
# DebugSrc and DebugDest will show all traffic between IMAPCopy and Server&lt;br /&gt;
#&lt;br /&gt;
#DebugSrc&lt;br /&gt;
#DebugDst&lt;br /&gt;
&lt;br /&gt;
#################&lt;br /&gt;
# Folders to skip&lt;br /&gt;
#################&lt;br /&gt;
#skipfolder INBOX.Trash&lt;br /&gt;
#skipfolder INBOX.Sent&lt;br /&gt;
#skipfolder &amp;quot;INBOX.Sent Objects&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#################&lt;br /&gt;
# Folders to copy&lt;br /&gt;
#################&lt;br /&gt;
#copyfolder INBOX&lt;br /&gt;
#copyfolder &amp;quot;INBOX.My personal files&amp;quot;&lt;br /&gt;
#copyfolder INBOX.Net-Connection.dy&lt;br /&gt;
#copyfolder INBOX.test&lt;br /&gt;
&lt;br /&gt;
####################################################### &lt;br /&gt;
# Rootfolder&lt;br /&gt;
# Can be specified to copy the Folder-Structure under&lt;br /&gt;
# a separate folder instead of inbox&lt;br /&gt;
#######################################################&lt;br /&gt;
#DstRootFolder &amp;quot;Your old Mails&amp;quot;&lt;br /&gt;
&lt;br /&gt;
###############################################################&lt;br /&gt;
# Specify Flags that are supported on the destination server&lt;br /&gt;
# (AllowFlags) or flags that should be filtered out (DenyFlags)&lt;br /&gt;
# If not specified, all Flags are copyied 1:1&lt;br /&gt;
# If AllowFlags is specified, all not specified Flags will be&lt;br /&gt;
# removed and  not copied to the destination&lt;br /&gt;
# If DenyFlags is specified, those flags will be removed and&lt;br /&gt;
# the remaining ones will be copied&lt;br /&gt;
# Both (AllowFlags and DenyFlags) could be specified but&lt;br /&gt;
# would (in most cases) make no sense&lt;br /&gt;
##############################################################&lt;br /&gt;
#AllowFlags &amp;quot;\Seen\Answered\Flagged\Deleted\Draft Junk NonJunk $MDNSent $Forwared&amp;quot;&lt;br /&gt;
DenyFlags &amp;quot;\Recent&amp;quot;&lt;br /&gt;
&lt;br /&gt;
##############################################################&lt;br /&gt;
# Timezone conversion&lt;br /&gt;
# The imap rfc is not clear on what kind of time offsets&lt;br /&gt;
# can be used. +XXXX -XXXX will be supported on all servers&lt;br /&gt;
# You can add as many entries as needed in the form&lt;br /&gt;
# converttimezone SRC DST&lt;br /&gt;
# to convert zones that your target server rejects&lt;br /&gt;
##############################################################&lt;br /&gt;
converttimezone &amp;quot;UTC&amp;quot; &amp;quot;+0000&amp;quot;&lt;br /&gt;
converttimezone &amp;quot;UT&amp;quot;  &amp;quot;+0000&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#############################&lt;br /&gt;
# List of users and passwords&lt;br /&gt;
#############################&lt;br /&gt;
#       SourceUser           SourcePassword        DestinationUser        DestinationPassword&lt;br /&gt;
Copy    &amp;quot;xyz@web.de&amp;quot;         &amp;quot;Euer-Passwort&amp;quot;       &amp;quot;xyz00-imap&amp;quot;           &amp;quot;Benuzter-Passwort&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Config gmail.com -&amp;gt; HS Benutzer ===&lt;br /&gt;
&lt;br /&gt;
Da ImapCopy nicht direkt SSL unterstützt benötigt z.b. gmail und ggf einige andere die weiter unten beschrieben Lösung mit einem stunnel.&lt;br /&gt;
&lt;br /&gt;
== Testen einer Verbindung ==&lt;br /&gt;
&lt;br /&gt;
Zum testen ob die Daten alle OK sind auf der shell einfach:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xyz00-imapcopy@h01:~/imapcopy$ imapcopy -t&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
eingeben.&lt;br /&gt;
&lt;br /&gt;
== Daten austauschen ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xyz00-imapcopy@h01:~/imapcopy$ imapcopy&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Hilfe ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xyz00-imapcopy@h01:~/imapcopy$ imapcopy -h&lt;br /&gt;
xyz00-imapcopy@h01:~/imapcopy$ man imapcopy&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ssl via stunnel ==&lt;br /&gt;
&lt;br /&gt;
Es wird eine Konfuguration Datei , hier stunnel-to-gmail.conf, benötigt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xyz00-imapcopy@h01:~/imapcopy$ vi stunnel-to-gmail.conf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Inhalt der Datei stunnel-to-gmail.conf:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot; line&amp;gt;&lt;br /&gt;
foreground=yes&lt;br /&gt;
&lt;br /&gt;
; Some performance tunings&lt;br /&gt;
socket = l:TCP_NODELAY=1&lt;br /&gt;
socket = r:TCP_NODELAY=1&lt;br /&gt;
&lt;br /&gt;
; Some debugging stuff useful for troubleshooting&lt;br /&gt;
debug = 7&lt;br /&gt;
&lt;br /&gt;
; Pfad for pid file&lt;br /&gt;
pid = /tmp/stunnel4-xyz00.pid&lt;br /&gt;
&lt;br /&gt;
; Use it for client mode&lt;br /&gt;
client = yes&lt;br /&gt;
&lt;br /&gt;
; Service-level configuration&lt;br /&gt;
&lt;br /&gt;
[imap]&lt;br /&gt;
accept = 127.0.0.1:10143&lt;br /&gt;
connect = imap.gmail.com:993&lt;br /&gt;
retry = yes&lt;br /&gt;
&lt;br /&gt;
[imap]&lt;br /&gt;
accept = 127.0.0.1:20143&lt;br /&gt;
connect = xyz00.hostsharing.net:993&lt;br /&gt;
retry = yes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Änderung in der ImapCopy.cfg ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot; line&amp;gt;&lt;br /&gt;
##############&lt;br /&gt;
# Sourceserver&lt;br /&gt;
##############&lt;br /&gt;
SourceServer 127.0.0.1&lt;br /&gt;
SourcePort 10143&lt;br /&gt;
&lt;br /&gt;
###################&lt;br /&gt;
# Destinationserver&lt;br /&gt;
###################&lt;br /&gt;
DestServer 127.0.0.1&lt;br /&gt;
DestPort 20143&lt;br /&gt;
&lt;br /&gt;
#############################&lt;br /&gt;
# List of users and passwords&lt;br /&gt;
#############################&lt;br /&gt;
#     SourceUser       SourcePassword  DestinationUser  DestinationPassword&lt;br /&gt;
Copy  &amp;quot;xyz@gmail.com&amp;quot;  &amp;quot;passwort&amp;quot;      &amp;quot;xyz00-imap&amp;quot;     &amp;quot;passwort&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== stunnel aufbauen ===&lt;br /&gt;
&lt;br /&gt;
Wir öffnen eine zweite shell.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
xyz00-imapcopy@h01:~/imapcopy$ stunnel4 stunnel-to-gmail.conf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Verbindung prüfen und herstellen ===&lt;br /&gt;
&lt;br /&gt;
Siehe -&amp;gt; Testen einer Verbindung&lt;br /&gt;
und   -&amp;gt; Daten austauschen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HSDoku]]&lt;br /&gt;
[[Kategorie:Installationsanleitungen]]&lt;br /&gt;
[[Kategorie:Glossar]]&lt;br /&gt;
[[Kategorie:Software]]&lt;br /&gt;
[[Kategorie:E-Mail]]&lt;/div&gt;</summary>
		<author><name>Peh</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=ImapCopy&amp;diff=7023</id>
		<title>ImapCopy</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=ImapCopy&amp;diff=7023"/>
		<updated>2024-10-29T13:22:47Z</updated>

		<summary type="html">&lt;p&gt;Peh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ImapCopy ==&lt;br /&gt;
&lt;br /&gt;
ImapCopy ist ein Werkzeug, mit dem man ein koplettes IMAP-Postfach in ein IMAP-Postfach auf eine anderen Server (bei einem anderen Anbieter) kopieren kann. Wir verwenden es für die Migration von Postfächern. Eine Alternative ist [[OfflineIMAP]].&lt;br /&gt;
&lt;br /&gt;
== Installation ImapCopy ==&lt;br /&gt;
&lt;br /&gt;
ImapCopy ist auf den HS Hive schon installiert&lt;br /&gt;
&lt;br /&gt;
== Einrichtung allgemein ==&lt;br /&gt;
&lt;br /&gt;
Anmelden per ssh als ein Benutzer in einem HS-Paket.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xyz00-imapcopy@h01:~$&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dort wird ein Arbeitsverzeichnis erstellt&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xyz00-imapcopy@h01:~$ mkdir imapcopy&lt;br /&gt;
xyz00-imapcopy@h01:~$ cd imapcopy&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Konfiguration wird in einer Datei ImapCopy.cfg gespeichert&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xyz00-imapcopy@h01:~/imapcopy$ vi ImapCopy.cfg&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Config Web.de -&amp;gt; HS Benutzer ===&lt;br /&gt;
&lt;br /&gt;
Muster Inhalt der Datei ImapCopy.cfg&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
#############################################################&lt;br /&gt;
# imapcopy config&lt;br /&gt;
# all lines beginning with # are comments and will be ignored&lt;br /&gt;
#############################################################&lt;br /&gt;
&lt;br /&gt;
##############&lt;br /&gt;
# Sourceserver&lt;br /&gt;
##############&lt;br /&gt;
SourceServer imap.web.de&lt;br /&gt;
SourcePort 143&lt;br /&gt;
&lt;br /&gt;
###################&lt;br /&gt;
# Destinationserver&lt;br /&gt;
###################&lt;br /&gt;
DestServer xyz00.hostsharing.net&lt;br /&gt;
DestPort 143&lt;br /&gt;
&lt;br /&gt;
#########&lt;br /&gt;
# Options&lt;br /&gt;
#########&lt;br /&gt;
#&lt;br /&gt;
# DebugSrc and DebugDest will show all traffic between IMAPCopy and Server&lt;br /&gt;
#&lt;br /&gt;
#DebugSrc&lt;br /&gt;
#DebugDst&lt;br /&gt;
&lt;br /&gt;
#################&lt;br /&gt;
# Folders to skip&lt;br /&gt;
#################&lt;br /&gt;
#skipfolder INBOX.Trash&lt;br /&gt;
#skipfolder INBOX.Sent&lt;br /&gt;
#skipfolder &amp;quot;INBOX.Sent Objects&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#################&lt;br /&gt;
# Folders to copy&lt;br /&gt;
#################&lt;br /&gt;
#copyfolder INBOX&lt;br /&gt;
#copyfolder &amp;quot;INBOX.My personal files&amp;quot;&lt;br /&gt;
#copyfolder INBOX.Net-Connection.dy&lt;br /&gt;
#copyfolder INBOX.test&lt;br /&gt;
&lt;br /&gt;
####################################################### &lt;br /&gt;
# Rootfolder&lt;br /&gt;
# Can be specified to copy the Folder-Structure under&lt;br /&gt;
# a separate folder instead of inbox&lt;br /&gt;
#######################################################&lt;br /&gt;
#DstRootFolder &amp;quot;Your old Mails&amp;quot;&lt;br /&gt;
&lt;br /&gt;
###############################################################&lt;br /&gt;
# Specify Flags that are supported on the destination server&lt;br /&gt;
# (AllowFlags) or flags that should be filtered out (DenyFlags)&lt;br /&gt;
# If not specified, all Flags are copyied 1:1&lt;br /&gt;
# If AllowFlags is specified, all not specified Flags will be&lt;br /&gt;
# removed and  not copied to the destination&lt;br /&gt;
# If DenyFlags is specified, those flags will be removed and&lt;br /&gt;
# the remaining ones will be copied&lt;br /&gt;
# Both (AllowFlags and DenyFlags) could be specified but&lt;br /&gt;
# would (in most cases) make no sense&lt;br /&gt;
##############################################################&lt;br /&gt;
#AllowFlags &amp;quot;\Seen\Answered\Flagged\Deleted\Draft Junk NonJunk $MDNSent $Forwared&amp;quot;&lt;br /&gt;
DenyFlags &amp;quot;\Recent&amp;quot;&lt;br /&gt;
&lt;br /&gt;
##############################################################&lt;br /&gt;
# Timezone conversion&lt;br /&gt;
# The imap rfc is not clear on what kind of time offsets&lt;br /&gt;
# can be used. +XXXX -XXXX will be supported on all servers&lt;br /&gt;
# You can add as many entries as needed in the form&lt;br /&gt;
# converttimezone SRC DST&lt;br /&gt;
# to convert zones that your target server rejects&lt;br /&gt;
##############################################################&lt;br /&gt;
converttimezone &amp;quot;UTC&amp;quot; &amp;quot;+0000&amp;quot;&lt;br /&gt;
converttimezone &amp;quot;UT&amp;quot;  &amp;quot;+0000&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#############################&lt;br /&gt;
# List of users and passwords&lt;br /&gt;
#############################&lt;br /&gt;
#       SourceUser           SourcePassword        DestinationUser        DestinationPassword&lt;br /&gt;
Copy    &amp;quot;xyz@web.de&amp;quot;         &amp;quot;Euer-Passwort&amp;quot;       &amp;quot;xyz00-imap&amp;quot;           &amp;quot;Benuzter-Passwort&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Config gmail.com -&amp;gt; HS Benutzer ===&lt;br /&gt;
&lt;br /&gt;
Da ImapCopy nicht direkt SSL unterstützt benötigt z.b. gmail und ggf einige andere die weiter unten beschrieben Lösung mit einem stunnel.&lt;br /&gt;
&lt;br /&gt;
== Testen einer Verbindung ==&lt;br /&gt;
&lt;br /&gt;
Zum testen ob die Daten alle OK sind auf der shell einfach:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xyz00-imapcopy@h01:~/imapcopy$ imapcopy -t&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
eingeben.&lt;br /&gt;
&lt;br /&gt;
== Daten austauschen ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xyz00-imapcopy@h01:~/imapcopy$ imapcopy&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Hilfe ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xyz00-imapcopy@h01:~/imapcopy$ imapcopy -h&lt;br /&gt;
xyz00-imapcopy@h01:~/imapcopy$ man imapcopy&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ssl via stunnel ==&lt;br /&gt;
&lt;br /&gt;
Es wird eine Konfuguration Datei , hier stunnel-to-gmail.conf, benötigt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xyz00-imapcopy@h01:~/imapcopy$ vi stunnel-to-gmail.conf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Inhalt der Datei stunnel-to-gmail.conf:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot; line&amp;gt;&lt;br /&gt;
foreground=yes&lt;br /&gt;
&lt;br /&gt;
; Some performance tunings&lt;br /&gt;
socket = l:TCP_NODELAY=1&lt;br /&gt;
socket = r:TCP_NODELAY=1&lt;br /&gt;
&lt;br /&gt;
; Some debugging stuff useful for troubleshooting&lt;br /&gt;
debug = 7&lt;br /&gt;
&lt;br /&gt;
; Pfad for pid file&lt;br /&gt;
pid = /tmp/stunnel4-xyz00.pid&lt;br /&gt;
&lt;br /&gt;
; Use it for client mode&lt;br /&gt;
client = yes&lt;br /&gt;
&lt;br /&gt;
; Service-level configuration&lt;br /&gt;
&lt;br /&gt;
[imap]&lt;br /&gt;
accept = 127.0.0.1:10143&lt;br /&gt;
connect = imap.gmail.com:993&lt;br /&gt;
retry = yes&lt;br /&gt;
&lt;br /&gt;
[imap]&lt;br /&gt;
accept = 127.0.0.1:20143&lt;br /&gt;
connect = xyz00.hostsharing.net:993&lt;br /&gt;
retry = yes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Änderung in der ImapCopy.cfg ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot; line&amp;gt;&lt;br /&gt;
##############&lt;br /&gt;
# Sourceserver&lt;br /&gt;
##############&lt;br /&gt;
SourceServer 127.0.0.1&lt;br /&gt;
SourcePort 10143&lt;br /&gt;
&lt;br /&gt;
###################&lt;br /&gt;
# Destinationserver&lt;br /&gt;
###################&lt;br /&gt;
DestServer 127.0.0.1&lt;br /&gt;
DestPort 20143&lt;br /&gt;
&lt;br /&gt;
#############################&lt;br /&gt;
# List of users and passwords&lt;br /&gt;
#############################&lt;br /&gt;
#     SourceUser       SourcePassword  DestinationUser  DestinationPassword&lt;br /&gt;
Copy  &amp;quot;xyz@gmail.com&amp;quot;  &amp;quot;passwort&amp;quot;      &amp;quot;xyz00-imap&amp;quot;     &amp;quot;passwort&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== stunnel aufbauen ===&lt;br /&gt;
&lt;br /&gt;
Wir öffnen eine zweite shell.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
xyz00-imapcopy@h01:~/imapcopy$ stunnel4 stunnel-to-gmail.conf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Verbindung prüfen und herstellen ===&lt;br /&gt;
&lt;br /&gt;
Siehe -&amp;gt; Testen einer Verbindung&lt;br /&gt;
und   -&amp;gt; Daten austauschen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HSDoku]]&lt;br /&gt;
[[Kategorie:Installationsanleitungen]]&lt;br /&gt;
[[Kategorie:Glossar]]&lt;br /&gt;
[[Kategorie:Software]]&lt;br /&gt;
[[Kategorie:E-Mail]]&lt;/div&gt;</summary>
		<author><name>Peh</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=OfflineIMAP&amp;diff=7022</id>
		<title>OfflineIMAP</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=OfflineIMAP&amp;diff=7022"/>
		<updated>2024-10-29T13:19:09Z</updated>

		<summary type="html">&lt;p&gt;Peh: /* IMAP Postfach migrieren */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== IMAP Postfach migrieren ==&lt;br /&gt;
&lt;br /&gt;
Für neue Mitglieder ist es eine der ersten Aufgaben, das E-Mail Postfach zu Hostsharing umzuziehen.&lt;br /&gt;
&lt;br /&gt;
Dazu werden mit Hilfe von HSAdmin ein Postfach (ein &amp;quot;User&amp;quot; unter Linux) und eine oder mehrere E-Mail-Adressen angelegt. &lt;br /&gt;
&lt;br /&gt;
Achtung: Wenn eine Domain umgezogen werden soll, erfolgt der Umzug der Domain in der Regel erst nach diesem Schritt! Viele andere Provider nehmen das Löschen einer Domain gleich um Anlass auch alle E-Mails aus den zugehörigen Postfächern zu löschen, oder die Postfächer sind ohne die Domain nicht mehr erreichbar. Vorsicht ist geboten!&lt;br /&gt;
&lt;br /&gt;
Zur Migration der Daten kann man das Tool &#039;&#039;&#039;offlineimap&#039;&#039;&#039; verwenden. Eine Alternative ist [[ImapCopy]]&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
&lt;br /&gt;
Zur Konfiguration wird im neu angelegten Postfach-Account bei Hostsharing eine Datei &#039;&#039;&#039;.offlineimaprc&#039;&#039;&#039; angelegt.&lt;br /&gt;
&lt;br /&gt;
Für ein Postfach bei Mailbox.org müsste die Konfiguration für einen Umzug so aussehen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot; line&amp;gt;&lt;br /&gt;
[general]&lt;br /&gt;
accounts = Umzug&lt;br /&gt;
&lt;br /&gt;
[Account Umzug]&lt;br /&gt;
localrepository = Local&lt;br /&gt;
remoterepository = Remote&lt;br /&gt;
&lt;br /&gt;
[Repository Local]&lt;br /&gt;
type = Maildir&lt;br /&gt;
localfolders = ~/Maildir&lt;br /&gt;
nametrans = lambda folder: &#039;INBOX&#039; if folder == &#039;&#039; else re.sub(&#039;^\.&#039;, &#039;&#039;, folder)&lt;br /&gt;
&lt;br /&gt;
[Repository Remote]&lt;br /&gt;
type = IMAP&lt;br /&gt;
remotehost = imap.mailbox.org&lt;br /&gt;
remoteuser = alteadresse@mailbox.org&lt;br /&gt;
remotepass = mailbox-org-password&lt;br /&gt;
sslcacertfile = OS-DEFAULT&lt;br /&gt;
nametrans = lambda folder: &#039;&#039; if folder == &#039;INBOX&#039; else &#039;.&#039; + folder&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lokal greift das Tool &#039;&#039;&#039;offlineimap&#039;&#039;&#039; direkt auf das Maildir-Verzeichnis zu. Daher müssen die Ordner mit Hilfe der &amp;quot;nametrans&amp;quot;-Regeln in die physischen Ordnernamen des &amp;quot;Maildir++&amp;quot;-Formats umgewandelt werden (Der INBOX-Ordner entfällt in der Hostsharing-Konfiguration, andere Ordner beginnen mit einem Punkt &amp;quot;.&amp;quot; als Präfix).&lt;br /&gt;
&lt;br /&gt;
Die rechte Seite der Zeilen &amp;quot;remoteuser&amp;quot; und &amp;quot;remotepass&amp;quot; muss natürlich jeweils angepasst werden.&lt;br /&gt;
&lt;br /&gt;
=== Ausführung ===&lt;br /&gt;
&lt;br /&gt;
Mit dem Kommando&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
offlineimap&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
wird die eigentliche Migration ausgeführt. &lt;br /&gt;
&lt;br /&gt;
Das Postfach kann in der Regel nach dem ersten Aufruf mehrfach synchronisiert werden. Ich hatte bei der Rück-Synchronisierung allerdings Schwierigkeiten mit neuen Mails im &amp;quot;Gesendet&amp;quot;-Ordner, bei denen die Mail-Header unvollständig waren.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HSDoku]]&lt;br /&gt;
[[Kategorie:Installationsanleitungen]]&lt;br /&gt;
[[Kategorie:Glossar]]&lt;br /&gt;
[[Kategorie:Software]]&lt;br /&gt;
[[Kategorie:E-Mail]]&lt;/div&gt;</summary>
		<author><name>Peh</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=OfflineIMAP&amp;diff=7021</id>
		<title>OfflineIMAP</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=OfflineIMAP&amp;diff=7021"/>
		<updated>2024-10-29T11:38:54Z</updated>

		<summary type="html">&lt;p&gt;Peh: /* IMAP Postfach migrieren */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== IMAP Postfach migrieren ==&lt;br /&gt;
&lt;br /&gt;
Für neue Mitglieder ist es eine der ersten Aufgaben, das E-Mail Postfach zu Hostsharing umzuziehen.&lt;br /&gt;
&lt;br /&gt;
Dazu werden mit Hilfe von HSAdmin ein Postfach (ein &amp;quot;User&amp;quot; unter Linux) und eine oder mehrere E-Mail-Adressen angelegt. &lt;br /&gt;
&lt;br /&gt;
Achtung: Wenn eine Domain umgezogen werden soll, erfolgt der Umzug der Domain in der Regel erst nach diesem Schritt! Viele andere Provider nehmen das Löschen einer Domain gleich um Anlass auch alle E-Mails aus den zugehörigen Postfächern zu löschen, oder die Postfächer sind ohne die Domain nicht mehr erreichbar. Vorsicht ist geboten!&lt;br /&gt;
&lt;br /&gt;
Zur Migration der Daten kann man das Tool &#039;&#039;&#039;offlineimap&#039;&#039;&#039; verwenden.&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
&lt;br /&gt;
Zur Konfiguration wird im neu angelegten Postfach-Account bei Hostsharing eine Datei &#039;&#039;&#039;.offlineimaprc&#039;&#039;&#039; angelegt.&lt;br /&gt;
&lt;br /&gt;
Für ein Postfach bei Mailbox.org müsste die Konfiguration für einen Umzug so aussehen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot; line&amp;gt;&lt;br /&gt;
[general]&lt;br /&gt;
accounts = Umzug&lt;br /&gt;
&lt;br /&gt;
[Account Umzug]&lt;br /&gt;
localrepository = Local&lt;br /&gt;
remoterepository = Remote&lt;br /&gt;
&lt;br /&gt;
[Repository Local]&lt;br /&gt;
type = Maildir&lt;br /&gt;
localfolders = ~/Maildir&lt;br /&gt;
nametrans = lambda folder: &#039;INBOX&#039; if folder == &#039;&#039; else re.sub(&#039;^\.&#039;, &#039;&#039;, folder)&lt;br /&gt;
&lt;br /&gt;
[Repository Remote]&lt;br /&gt;
type = IMAP&lt;br /&gt;
remotehost = imap.mailbox.org&lt;br /&gt;
remoteuser = alteadresse@mailbox.org&lt;br /&gt;
remotepass = mailbox-org-password&lt;br /&gt;
sslcacertfile = OS-DEFAULT&lt;br /&gt;
nametrans = lambda folder: &#039;&#039; if folder == &#039;INBOX&#039; else &#039;.&#039; + folder&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lokal greift das Tool &#039;&#039;&#039;offlineimap&#039;&#039;&#039; direkt auf das Maildir-Verzeichnis zu. Daher müssen die Ordner mit Hilfe der &amp;quot;nametrans&amp;quot;-Regeln in die physischen Ordnernamen des &amp;quot;Maildir++&amp;quot;-Formats umgewandelt werden (Der INBOX-Ordner entfällt in der Hostsharing-Konfiguration, andere Ordner beginnen mit einem Punkt &amp;quot;.&amp;quot; als Präfix).&lt;br /&gt;
&lt;br /&gt;
Die rechte Seite der Zeilen &amp;quot;remoteuser&amp;quot; und &amp;quot;remotepass&amp;quot; muss natürlich jeweils angepasst werden.&lt;br /&gt;
&lt;br /&gt;
=== Ausführung ===&lt;br /&gt;
&lt;br /&gt;
Mit dem Kommando&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
offlineimap&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
wird die eigentliche Migration ausgeführt. &lt;br /&gt;
&lt;br /&gt;
Das Postfach kann in der Regel nach dem ersten Aufruf mehrfach synchronisiert werden. Ich hatte bei der Rück-Synchronisierung allerdings Schwierigkeiten mit neuen Mails im &amp;quot;Gesendet&amp;quot;-Ordner, bei denen die Mail-Header unvollständig waren.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HSDoku]]&lt;br /&gt;
[[Kategorie:Installationsanleitungen]]&lt;br /&gt;
[[Kategorie:Glossar]]&lt;br /&gt;
[[Kategorie:Software]]&lt;br /&gt;
[[Kategorie:E-Mail]]&lt;/div&gt;</summary>
		<author><name>Peh</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=OfflineIMAP&amp;diff=7020</id>
		<title>OfflineIMAP</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=OfflineIMAP&amp;diff=7020"/>
		<updated>2024-10-29T11:38:04Z</updated>

		<summary type="html">&lt;p&gt;Peh: /* IMAP Postfach migrieren */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== IMAP Postfach migrieren ==&lt;br /&gt;
&lt;br /&gt;
Für neue Mitglieder ist es eine der ersten Aufgaben, das E-Mail Postfach zu Hostsharing umzuziehen.&lt;br /&gt;
&lt;br /&gt;
Dazu werden mit Hilfe von HSAdmin ein Postfach (ein &amp;quot;User&amp;quot; unter Linux) und eine oder mehrere E-Mail-Adressen angelegt. &lt;br /&gt;
&lt;br /&gt;
Achtung: Wenn eine Domain umgezogen werden soll, erfolgt der Umzug der Domain in der Regel erst nach diesem Schritt! Viele andere Provider mehen das Löschen einer Domain gleich um Anlass auch alle E-Mails aus den zugehörigen Postfächern zu löschen, oder die Postfächer sind ohne die Domain nicht mehr erreichbar.&lt;br /&gt;
&lt;br /&gt;
Zur Migration der Daten kann man das Tool &#039;&#039;&#039;offlineimap&#039;&#039;&#039; verwenden.&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
&lt;br /&gt;
Zur Konfiguration wird im neu angelegten Postfach-Account bei Hostsharing eine Datei &#039;&#039;&#039;.offlineimaprc&#039;&#039;&#039; angelegt.&lt;br /&gt;
&lt;br /&gt;
Für ein Postfach bei Mailbox.org müsste die Konfiguration für einen Umzug so aussehen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot; line&amp;gt;&lt;br /&gt;
[general]&lt;br /&gt;
accounts = Umzug&lt;br /&gt;
&lt;br /&gt;
[Account Umzug]&lt;br /&gt;
localrepository = Local&lt;br /&gt;
remoterepository = Remote&lt;br /&gt;
&lt;br /&gt;
[Repository Local]&lt;br /&gt;
type = Maildir&lt;br /&gt;
localfolders = ~/Maildir&lt;br /&gt;
nametrans = lambda folder: &#039;INBOX&#039; if folder == &#039;&#039; else re.sub(&#039;^\.&#039;, &#039;&#039;, folder)&lt;br /&gt;
&lt;br /&gt;
[Repository Remote]&lt;br /&gt;
type = IMAP&lt;br /&gt;
remotehost = imap.mailbox.org&lt;br /&gt;
remoteuser = alteadresse@mailbox.org&lt;br /&gt;
remotepass = mailbox-org-password&lt;br /&gt;
sslcacertfile = OS-DEFAULT&lt;br /&gt;
nametrans = lambda folder: &#039;&#039; if folder == &#039;INBOX&#039; else &#039;.&#039; + folder&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lokal greift das Tool &#039;&#039;&#039;offlineimap&#039;&#039;&#039; direkt auf das Maildir-Verzeichnis zu. Daher müssen die Ordner mit Hilfe der &amp;quot;nametrans&amp;quot;-Regeln in die physischen Ordnernamen des &amp;quot;Maildir++&amp;quot;-Formats umgewandelt werden (Der INBOX-Ordner entfällt in der Hostsharing-Konfiguration, andere Ordner beginnen mit einem Punkt &amp;quot;.&amp;quot; als Präfix).&lt;br /&gt;
&lt;br /&gt;
Die rechte Seite der Zeilen &amp;quot;remoteuser&amp;quot; und &amp;quot;remotepass&amp;quot; muss natürlich jeweils angepasst werden.&lt;br /&gt;
&lt;br /&gt;
=== Ausführung ===&lt;br /&gt;
&lt;br /&gt;
Mit dem Kommando&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
offlineimap&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
wird die eigentliche Migration ausgeführt. &lt;br /&gt;
&lt;br /&gt;
Das Postfach kann in der Regel nach dem ersten Aufruf mehrfach synchronisiert werden. Ich hatte bei der Rück-Synchronisierung allerdings Schwierigkeiten mit neuen Mails im &amp;quot;Gesendet&amp;quot;-Ordner, bei denen die Mail-Header unvollständig waren.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HSDoku]]&lt;br /&gt;
[[Kategorie:Installationsanleitungen]]&lt;br /&gt;
[[Kategorie:Glossar]]&lt;br /&gt;
[[Kategorie:Software]]&lt;br /&gt;
[[Kategorie:E-Mail]]&lt;/div&gt;</summary>
		<author><name>Peh</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=OfflineIMAP&amp;diff=7019</id>
		<title>OfflineIMAP</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=OfflineIMAP&amp;diff=7019"/>
		<updated>2024-10-29T11:37:38Z</updated>

		<summary type="html">&lt;p&gt;Peh: /* IMAP Postfach migrieren */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== IMAP Postfach migrieren ==&lt;br /&gt;
&lt;br /&gt;
Für neue Mitglieder ist es eine der ersten Aufgaben, das E-Mail Postfach zu Hostsharing umzuziehen.&lt;br /&gt;
&lt;br /&gt;
Dazu wird mit Hilfe von HSAdmin ein Postfach (ein &amp;quot;User&amp;quot; unter Linux) und eine oder mehrere E-Mail-Adressen angelegt. &lt;br /&gt;
&lt;br /&gt;
Achtung: Wenn eine Domain umgezogen werden soll, erfolgt der Umzug der Domain in der Regel erst nach diesem Schritt! Viele andere Provider mehen das Löschen einer Domain gleich um Anlass auch alle E-Mails aus den zugehörigen Postfächern zu löschen, oder die Postfächer sind ohne die Domain nicht mehr erreichbar.&lt;br /&gt;
&lt;br /&gt;
Zur Migration der Daten kann man das Tool &#039;&#039;&#039;offlineimap&#039;&#039;&#039; verwenden.&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
&lt;br /&gt;
Zur Konfiguration wird im neu angelegten Postfach-Account bei Hostsharing eine Datei &#039;&#039;&#039;.offlineimaprc&#039;&#039;&#039; angelegt.&lt;br /&gt;
&lt;br /&gt;
Für ein Postfach bei Mailbox.org müsste die Konfiguration für einen Umzug so aussehen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot; line&amp;gt;&lt;br /&gt;
[general]&lt;br /&gt;
accounts = Umzug&lt;br /&gt;
&lt;br /&gt;
[Account Umzug]&lt;br /&gt;
localrepository = Local&lt;br /&gt;
remoterepository = Remote&lt;br /&gt;
&lt;br /&gt;
[Repository Local]&lt;br /&gt;
type = Maildir&lt;br /&gt;
localfolders = ~/Maildir&lt;br /&gt;
nametrans = lambda folder: &#039;INBOX&#039; if folder == &#039;&#039; else re.sub(&#039;^\.&#039;, &#039;&#039;, folder)&lt;br /&gt;
&lt;br /&gt;
[Repository Remote]&lt;br /&gt;
type = IMAP&lt;br /&gt;
remotehost = imap.mailbox.org&lt;br /&gt;
remoteuser = alteadresse@mailbox.org&lt;br /&gt;
remotepass = mailbox-org-password&lt;br /&gt;
sslcacertfile = OS-DEFAULT&lt;br /&gt;
nametrans = lambda folder: &#039;&#039; if folder == &#039;INBOX&#039; else &#039;.&#039; + folder&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lokal greift das Tool &#039;&#039;&#039;offlineimap&#039;&#039;&#039; direkt auf das Maildir-Verzeichnis zu. Daher müssen die Ordner mit Hilfe der &amp;quot;nametrans&amp;quot;-Regeln in die physischen Ordnernamen des &amp;quot;Maildir++&amp;quot;-Formats umgewandelt werden (Der INBOX-Ordner entfällt in der Hostsharing-Konfiguration, andere Ordner beginnen mit einem Punkt &amp;quot;.&amp;quot; als Präfix).&lt;br /&gt;
&lt;br /&gt;
Die rechte Seite der Zeilen &amp;quot;remoteuser&amp;quot; und &amp;quot;remotepass&amp;quot; muss natürlich jeweils angepasst werden.&lt;br /&gt;
&lt;br /&gt;
=== Ausführung ===&lt;br /&gt;
&lt;br /&gt;
Mit dem Kommando&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
offlineimap&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
wird die eigentliche Migration ausgeführt. &lt;br /&gt;
&lt;br /&gt;
Das Postfach kann in der Regel nach dem ersten Aufruf mehrfach synchronisiert werden. Ich hatte bei der Rück-Synchronisierung allerdings Schwierigkeiten mit neuen Mails im &amp;quot;Gesendet&amp;quot;-Ordner, bei denen die Mail-Header unvollständig waren.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HSDoku]]&lt;br /&gt;
[[Kategorie:Installationsanleitungen]]&lt;br /&gt;
[[Kategorie:Glossar]]&lt;br /&gt;
[[Kategorie:Software]]&lt;br /&gt;
[[Kategorie:E-Mail]]&lt;/div&gt;</summary>
		<author><name>Peh</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=OfflineIMAP&amp;diff=7018</id>
		<title>OfflineIMAP</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=OfflineIMAP&amp;diff=7018"/>
		<updated>2024-10-29T11:35:47Z</updated>

		<summary type="html">&lt;p&gt;Peh: /* Konfiguration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== IMAP Postfach migrieren ==&lt;br /&gt;
&lt;br /&gt;
Für neue Mitglieder ist es eine der ersten Aufgaben, das E-Mail Postfach zu Hpostsharing umzuziehen.&lt;br /&gt;
&lt;br /&gt;
Dazu wird mit Hilfe von HSAdmin ein Postfach (ein &amp;quot;User&amp;quot; unter Linux) und eine oder mehrere E-Mail-Adressen angelegt. &lt;br /&gt;
&lt;br /&gt;
Achtung: Wenn eine Domain umgezogen werden soll, erfolgt der Umzug der Domain in der Regel erst nach diesem Schritt! Viele andere Provider mehen das Löschen einer Domain gleich um Anlass auch alle E-Mails aus den zugehörigen Postfächern zu löschen, oder die Postfächer sind ohne die Domain nicht mehr erreichbar.&lt;br /&gt;
&lt;br /&gt;
Zur Migration der Daten kann man das Tool &#039;&#039;&#039;offlineimap&#039;&#039;&#039; verwenden.&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
&lt;br /&gt;
Zur Konfiguration wird im neu angelegten Postfach-Account bei Hostsharing eine Datei &#039;&#039;&#039;.offlineimaprc&#039;&#039;&#039; angelegt.&lt;br /&gt;
&lt;br /&gt;
Für ein Postfach bei Mailbox.org müsste die Konfiguration für einen Umzug so aussehen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot; line&amp;gt;&lt;br /&gt;
[general]&lt;br /&gt;
accounts = Umzug&lt;br /&gt;
&lt;br /&gt;
[Account Umzug]&lt;br /&gt;
localrepository = Local&lt;br /&gt;
remoterepository = Remote&lt;br /&gt;
&lt;br /&gt;
[Repository Local]&lt;br /&gt;
type = Maildir&lt;br /&gt;
localfolders = ~/Maildir&lt;br /&gt;
nametrans = lambda folder: &#039;INBOX&#039; if folder == &#039;&#039; else re.sub(&#039;^\.&#039;, &#039;&#039;, folder)&lt;br /&gt;
&lt;br /&gt;
[Repository Remote]&lt;br /&gt;
type = IMAP&lt;br /&gt;
remotehost = imap.mailbox.org&lt;br /&gt;
remoteuser = alteadresse@mailbox.org&lt;br /&gt;
remotepass = mailbox-org-password&lt;br /&gt;
sslcacertfile = OS-DEFAULT&lt;br /&gt;
nametrans = lambda folder: &#039;&#039; if folder == &#039;INBOX&#039; else &#039;.&#039; + folder&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lokal greift das Tool &#039;&#039;&#039;offlineimap&#039;&#039;&#039; direkt auf das Maildir-Verzeichnis zu. Daher müssen die Ordner mit Hilfe der &amp;quot;nametrans&amp;quot;-Regeln in die physischen Ordnernamen des &amp;quot;Maildir++&amp;quot;-Formats umgewandelt werden (Der INBOX-Ordner entfällt in der Hostsharing-Konfiguration, andere Ordner beginnen mit einem Punkt &amp;quot;.&amp;quot; als Präfix).&lt;br /&gt;
&lt;br /&gt;
Die rechte Seite der Zeilen &amp;quot;remoteuser&amp;quot; und &amp;quot;remotepass&amp;quot; muss natürlich jeweils angepasst werden.&lt;br /&gt;
&lt;br /&gt;
=== Ausführung ===&lt;br /&gt;
&lt;br /&gt;
Mit dem Kommando&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
offlineimap&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
wird die eigentliche Migration ausgeführt. &lt;br /&gt;
&lt;br /&gt;
Das Postfach kann in der Regel nach dem ersten Aufruf mehrfach synchronisiert werden. Ich hatte bei der Rück-Synchronisierung allerdings Schwierigkeiten mit neuen Mails im &amp;quot;Gesendet&amp;quot;-Ordner, bei denen die Mail-Header unvollständig waren.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HSDoku]]&lt;br /&gt;
[[Kategorie:Installationsanleitungen]]&lt;br /&gt;
[[Kategorie:Glossar]]&lt;br /&gt;
[[Kategorie:Software]]&lt;br /&gt;
[[Kategorie:E-Mail]]&lt;/div&gt;</summary>
		<author><name>Peh</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=OfflineIMAP&amp;diff=7017</id>
		<title>OfflineIMAP</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=OfflineIMAP&amp;diff=7017"/>
		<updated>2024-10-29T11:35:27Z</updated>

		<summary type="html">&lt;p&gt;Peh: /* Konfiguration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== IMAP Postfach migrieren ==&lt;br /&gt;
&lt;br /&gt;
Für neue Mitglieder ist es eine der ersten Aufgaben, das E-Mail Postfach zu Hpostsharing umzuziehen.&lt;br /&gt;
&lt;br /&gt;
Dazu wird mit Hilfe von HSAdmin ein Postfach (ein &amp;quot;User&amp;quot; unter Linux) und eine oder mehrere E-Mail-Adressen angelegt. &lt;br /&gt;
&lt;br /&gt;
Achtung: Wenn eine Domain umgezogen werden soll, erfolgt der Umzug der Domain in der Regel erst nach diesem Schritt! Viele andere Provider mehen das Löschen einer Domain gleich um Anlass auch alle E-Mails aus den zugehörigen Postfächern zu löschen, oder die Postfächer sind ohne die Domain nicht mehr erreichbar.&lt;br /&gt;
&lt;br /&gt;
Zur Migration der Daten kann man das Tool &#039;&#039;&#039;offlineimap&#039;&#039;&#039; verwenden.&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
&lt;br /&gt;
Zur Konfiguration wird im neu angelegten Postfach-Account bei Hostsharing eine Datei &#039;&#039;&#039;.offlineimaprc&#039;&#039;&#039; angelegt.&lt;br /&gt;
&lt;br /&gt;
Für ein Postfach bei Mailbox.org müsste die Konfiguration für einen Umzug so aussehen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot; line&amp;gt;&lt;br /&gt;
[general]&lt;br /&gt;
accounts = Umzug&lt;br /&gt;
&lt;br /&gt;
[Account Umzug]&lt;br /&gt;
localrepository = Local&lt;br /&gt;
remoterepository = Remote&lt;br /&gt;
&lt;br /&gt;
[Repository Local]&lt;br /&gt;
type = Maildir&lt;br /&gt;
localfolders = ~/Maildir&lt;br /&gt;
nametrans = lambda folder: &#039;INBOX&#039; if folder == &#039;&#039; else re.sub(&#039;^\.&#039;, &#039;&#039;, folder)&lt;br /&gt;
&lt;br /&gt;
[Repository Remote]&lt;br /&gt;
type = IMAP&lt;br /&gt;
remotehost = imap.mailbox.org&lt;br /&gt;
remoteuser = alteadresse@mailbox.org&lt;br /&gt;
remotepass = mailbox-org-password&lt;br /&gt;
sslcacertfile = OS-DEFAULT&lt;br /&gt;
nametrans = lambda folder: &#039;&#039; if folder == &#039;INBOX&#039; else &#039;.&#039; + folder&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lokal greift das Tool &#039;&#039;&#039;offlineimap&#039;&#039;&#039; direkt auf das Maildir-Verzeichnis zu. Daher müssen die Ordner mit Hilfe der &amp;quot;nametrans&amp;quot;-Regeln in die physischen Ordnernamen des &amp;quot;Maildir++&amp;quot;-Formats umgewandelt werden (Der INBOX-Ordner entfällt in der Hostsharing-Konfiguration, andere Ordner beginnen mit einm Punkt &amp;quot;.&amp;quot; als Präfix).&lt;br /&gt;
&lt;br /&gt;
Die rechte Seite der Zeilen &amp;quot;remoteuser&amp;quot; und &amp;quot;remotepass&amp;quot; muss natürlich jeweils angepasst werden.&lt;br /&gt;
&lt;br /&gt;
=== Ausführung ===&lt;br /&gt;
&lt;br /&gt;
Mit dem Kommando&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
offlineimap&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
wird die eigentliche Migration ausgeführt. &lt;br /&gt;
&lt;br /&gt;
Das Postfach kann in der Regel nach dem ersten Aufruf mehrfach synchronisiert werden. Ich hatte bei der Rück-Synchronisierung allerdings Schwierigkeiten mit neuen Mails im &amp;quot;Gesendet&amp;quot;-Ordner, bei denen die Mail-Header unvollständig waren.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HSDoku]]&lt;br /&gt;
[[Kategorie:Installationsanleitungen]]&lt;br /&gt;
[[Kategorie:Glossar]]&lt;br /&gt;
[[Kategorie:Software]]&lt;br /&gt;
[[Kategorie:E-Mail]]&lt;/div&gt;</summary>
		<author><name>Peh</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=OfflineIMAP&amp;diff=7016</id>
		<title>OfflineIMAP</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=OfflineIMAP&amp;diff=7016"/>
		<updated>2024-10-29T11:32:12Z</updated>

		<summary type="html">&lt;p&gt;Peh: /* Konfiguration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== IMAP Postfach migrieren ==&lt;br /&gt;
&lt;br /&gt;
Für neue Mitglieder ist es eine der ersten Aufgaben, das E-Mail Postfach zu Hpostsharing umzuziehen.&lt;br /&gt;
&lt;br /&gt;
Dazu wird mit Hilfe von HSAdmin ein Postfach (ein &amp;quot;User&amp;quot; unter Linux) und eine oder mehrere E-Mail-Adressen angelegt. &lt;br /&gt;
&lt;br /&gt;
Achtung: Wenn eine Domain umgezogen werden soll, erfolgt der Umzug der Domain in der Regel erst nach diesem Schritt! Viele andere Provider mehen das Löschen einer Domain gleich um Anlass auch alle E-Mails aus den zugehörigen Postfächern zu löschen, oder die Postfächer sind ohne die Domain nicht mehr erreichbar.&lt;br /&gt;
&lt;br /&gt;
Zur Migration der Daten kann man das Tool &#039;&#039;&#039;offlineimap&#039;&#039;&#039; verwenden.&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
&lt;br /&gt;
Zur Konfiguration wird im neu angelegten Postfach-Account bei Hostsharing eine Datei &#039;&#039;&#039;.offlineimaprc&#039;&#039;&#039; angelegt.&lt;br /&gt;
&lt;br /&gt;
Für ein Postfach bei Mailbox.org müsste die Konfiguration für einen Umzug so aussehen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot; line&amp;gt;&lt;br /&gt;
[general]&lt;br /&gt;
accounts = Umzug&lt;br /&gt;
&lt;br /&gt;
[Account Umzug]&lt;br /&gt;
localrepository = Local&lt;br /&gt;
remoterepository = Remote&lt;br /&gt;
&lt;br /&gt;
[Repository Local]&lt;br /&gt;
type = Maildir&lt;br /&gt;
localfolders = ~/Maildir&lt;br /&gt;
nametrans = lambda folder: &#039;INBOX&#039; if folder == &#039;&#039; else re.sub(&#039;^\.&#039;, &#039;&#039;, folder)&lt;br /&gt;
&lt;br /&gt;
[Repository Remote]&lt;br /&gt;
type = IMAP&lt;br /&gt;
remotehost = imap.mailbox.org&lt;br /&gt;
remoteuser = alteadresse@mailbox.org&lt;br /&gt;
remotepass = mailbox-org-password&lt;br /&gt;
sslcacertfile = OS-DEFAULT&lt;br /&gt;
nametrans = lambda folder: &#039;&#039; if folder == &#039;INBOX&#039; else &#039;.&#039; + folder&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lokal greift das Tool &#039;&#039;&#039;offlineimap&#039;&#039;&#039; direkt auf das Maildir-Verzeichnis zu. Daher müssen die Ordner mit Hilfe der &amp;quot;nametrans&amp;quot;-Regeln in die physischen Ordnernamen des &amp;quot;Maildir++&amp;quot;-Formats umgewandelt werden (Der INBOX-Ordner entfällt in der Hostsharing-Konfiguration, andere Ordner beginnen mit dem Punkt &amp;quot;.&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Die rechte Seite der Zeilen &amp;quot;remoteuser&amp;quot; und &amp;quot;remotepass&amp;quot; muss natürlich jeweils angepasst werden.&lt;br /&gt;
&lt;br /&gt;
=== Ausführung ===&lt;br /&gt;
&lt;br /&gt;
Mit dem Kommando&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
offlineimap&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
wird die eigentliche Migration ausgeführt. &lt;br /&gt;
&lt;br /&gt;
Das Postfach kann in der Regel nach dem ersten Aufruf mehrfach synchronisiert werden. Ich hatte bei der Rück-Synchronisierung allerdings Schwierigkeiten mit neuen Mails im &amp;quot;Gesendet&amp;quot;-Ordner, bei denen die Mail-Header unvollständig waren.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HSDoku]]&lt;br /&gt;
[[Kategorie:Installationsanleitungen]]&lt;br /&gt;
[[Kategorie:Glossar]]&lt;br /&gt;
[[Kategorie:Software]]&lt;br /&gt;
[[Kategorie:E-Mail]]&lt;/div&gt;</summary>
		<author><name>Peh</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=OfflineIMAP&amp;diff=7015</id>
		<title>OfflineIMAP</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=OfflineIMAP&amp;diff=7015"/>
		<updated>2024-10-29T11:21:52Z</updated>

		<summary type="html">&lt;p&gt;Peh: Kategorisierung&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== IMAP Postfach migrieren ==&lt;br /&gt;
&lt;br /&gt;
Für neue Mitglieder ist es eine der ersten Aufgaben, das E-Mail Postfach zu Hpostsharing umzuziehen.&lt;br /&gt;
&lt;br /&gt;
Dazu wird mit Hilfe von HSAdmin ein Postfach (ein &amp;quot;User&amp;quot; unter Linux) und eine oder mehrere E-Mail-Adressen angelegt. &lt;br /&gt;
&lt;br /&gt;
Achtung: Wenn eine Domain umgezogen werden soll, erfolgt der Umzug der Domain in der Regel erst nach diesem Schritt! Viele andere Provider mehen das Löschen einer Domain gleich um Anlass auch alle E-Mails aus den zugehörigen Postfächern zu löschen, oder die Postfächer sind ohne die Domain nicht mehr erreichbar.&lt;br /&gt;
&lt;br /&gt;
Zur Migration der Daten kann man das Tool &#039;&#039;&#039;offlineimap&#039;&#039;&#039; verwenden.&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
&lt;br /&gt;
Zur Konfiguration wird im neu angelegten Postfach-Account bei Hostsharing eine Datei &#039;&#039;&#039;.offlineimaprc&#039;&#039;&#039; angelegt.&lt;br /&gt;
&lt;br /&gt;
Für ein Postfach bei Mailbox.org müsste die Konfiguration für einen Umzug so aussehen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot; line&amp;gt;&lt;br /&gt;
[general]&lt;br /&gt;
accounts = Umzug&lt;br /&gt;
&lt;br /&gt;
[Account Umzug]&lt;br /&gt;
localrepository = Local&lt;br /&gt;
remoterepository = Remote&lt;br /&gt;
&lt;br /&gt;
[Repository Local]&lt;br /&gt;
type = Maildir&lt;br /&gt;
localfolders = ~/Maildir&lt;br /&gt;
nametrans = lambda folder: &#039;INBOX&#039; if folder == &#039;&#039; else re.sub(&#039;^\.&#039;, &#039;&#039;, folder)&lt;br /&gt;
&lt;br /&gt;
[Repository Remote]&lt;br /&gt;
type = IMAP&lt;br /&gt;
remotehost = imap.mailbox.org&lt;br /&gt;
remoteuser = alteadresse@mailbox.org&lt;br /&gt;
remotepass = mailbox-org-password&lt;br /&gt;
sslcacertfile = OS-DEFAULT&lt;br /&gt;
nametrans = lambda folder: &#039;&#039; if folder == &#039;INBOX&#039; else &#039;.&#039; + folder&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lokal greift das Tool &#039;&#039;&#039;offlineimap&#039;&#039;&#039; direkt auf das Maildir-Verzeichnis zu. Daher müssen die Ordner mit Hilfe der &amp;quot;nametrans&amp;quot;-Regeln in die physischen Ordnernamen des &amp;quot;Maildir++&amp;quot;-Formats umgewandelt werden (Der INBOX-Ordner entfällt in der Hostsharing-Konfiguration, andere Ordner beginnen mit dem Punkt &amp;quot;.&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Die rechte Seite der Zeilen &amp;quot;remoteuser&amp;quot; und &amp;quot;remotepass&amp;quot; muss natürlich jeweils angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HSDoku]]&lt;br /&gt;
[[Kategorie:Installationsanleitungen]]&lt;br /&gt;
[[Kategorie:Glossar]]&lt;br /&gt;
[[Kategorie:Software]]&lt;br /&gt;
[[Kategorie:E-Mail]]&lt;/div&gt;</summary>
		<author><name>Peh</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=OfflineIMAP&amp;diff=7014</id>
		<title>OfflineIMAP</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=OfflineIMAP&amp;diff=7014"/>
		<updated>2024-10-29T11:20:02Z</updated>

		<summary type="html">&lt;p&gt;Peh: erste komplette Version&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== IMAP Postfach migrieren ==&lt;br /&gt;
&lt;br /&gt;
Für neue Mitglieder ist es eine der ersten Aufgaben, das E-Mail Postfach zu Hpostsharing umzuziehen.&lt;br /&gt;
&lt;br /&gt;
Dazu wird mit Hilfe von HSAdmin ein Postfach (ein &amp;quot;User&amp;quot; unter Linux) und eine oder mehrere E-Mail-Adressen angelegt. &lt;br /&gt;
&lt;br /&gt;
Achtung: Wenn eine Domain umgezogen werden soll, erfolgt der Umzug der Domain in der Regel erst nach diesem Schritt! Viele andere Provider mehen das Löschen einer Domain gleich um Anlass auch alle E-Mails aus den zugehörigen Postfächern zu löschen, oder die Postfächer sind ohne die Domain nicht mehr erreichbar.&lt;br /&gt;
&lt;br /&gt;
Zur Migration der Daten kann man das Tool &#039;&#039;&#039;offlineimap&#039;&#039;&#039; verwenden.&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
&lt;br /&gt;
Zur Konfiguration wird im neu angelegten Postfach-Account bei Hostsharing eine Datei &#039;&#039;&#039;.offlineimaprc&#039;&#039;&#039; angelegt.&lt;br /&gt;
&lt;br /&gt;
Für ein Postfach bei Mailbox.org müsste die Konfiguration für einen Umzug so aussehen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot; line&amp;gt;&lt;br /&gt;
[general]&lt;br /&gt;
accounts = Umzug&lt;br /&gt;
&lt;br /&gt;
[Account Umzug]&lt;br /&gt;
localrepository = Local&lt;br /&gt;
remoterepository = Remote&lt;br /&gt;
&lt;br /&gt;
[Repository Local]&lt;br /&gt;
type = Maildir&lt;br /&gt;
localfolders = ~/Maildir&lt;br /&gt;
nametrans = lambda folder: &#039;INBOX&#039; if folder == &#039;&#039; else re.sub(&#039;^\.&#039;, &#039;&#039;, folder)&lt;br /&gt;
&lt;br /&gt;
[Repository Remote]&lt;br /&gt;
type = IMAP&lt;br /&gt;
remotehost = imap.mailbox.org&lt;br /&gt;
remoteuser = alteadresse@mailbox.org&lt;br /&gt;
remotepass = mailbox-org-password&lt;br /&gt;
sslcacertfile = OS-DEFAULT&lt;br /&gt;
nametrans = lambda folder: &#039;&#039; if folder == &#039;INBOX&#039; else &#039;.&#039; + folder&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lokal greift das Tool &#039;&#039;&#039;offlineimap&#039;&#039;&#039; direkt auf das Maildir-Verzeichnis zu. Daher müssen die Ordner mit Hilfe der &amp;quot;nametrans&amp;quot;-Regeln in die physischen Ordnernamen des &amp;quot;Maildir++&amp;quot;-Formats umgewandelt werden (Der INBOX-Ordner entfällt in der Hostsharing-Konfiguration, andere Ordner beginnen mit dem Punkt &amp;quot;.&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Die rechte Seite der Zeilen &amp;quot;remoteuser&amp;quot; und &amp;quot;remotepass&amp;quot; muss natürlich jeweils angelpasst werden.&lt;/div&gt;</summary>
		<author><name>Peh</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=OfflineIMAP&amp;diff=7013</id>
		<title>OfflineIMAP</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=OfflineIMAP&amp;diff=7013"/>
		<updated>2024-10-28T18:02:07Z</updated>

		<summary type="html">&lt;p&gt;Peh: Die Seite wurde neu angelegt: „== IMAP Postfach migrieren ==  Für neue Mitglieder ist es eine der ersten Aufgaben, das E-Mail Postfach zu Hpostsharing umzuziehen.  Dazu wird mit Hilfe von HSAdmin ein Postfach (ein &amp;quot;User&amp;quot; unter Linux) und eine oder mehrere E-Mail-Adressen angelegt.   Achtung: Wenn eine Domain umgezogen werden soll, erfolgt der Umzug der Domain in der Regel erst nach diesem Schritt! Viele andere Provider mehen das Löschen einer Domain gleich um Anlass auch alle E-Mails…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== IMAP Postfach migrieren ==&lt;br /&gt;
&lt;br /&gt;
Für neue Mitglieder ist es eine der ersten Aufgaben, das E-Mail Postfach zu Hpostsharing umzuziehen.&lt;br /&gt;
&lt;br /&gt;
Dazu wird mit Hilfe von HSAdmin ein Postfach (ein &amp;quot;User&amp;quot; unter Linux) und eine oder mehrere E-Mail-Adressen angelegt. &lt;br /&gt;
&lt;br /&gt;
Achtung: Wenn eine Domain umgezogen werden soll, erfolgt der Umzug der Domain in der Regel erst nach diesem Schritt! Viele andere Provider mehen das Löschen einer Domain gleich um Anlass auch alle E-Mails aus den zugehörigen Postfächern zu löschen, oder die Postfächer sind ohne die Domain nicht mehr erreichbar.&lt;br /&gt;
&lt;br /&gt;
Zur Migration der Daten kann man das Tool &#039;&#039;&#039;offlineimap&#039;&#039;&#039; verwenden.&lt;/div&gt;</summary>
		<author><name>Peh</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=LLDAP&amp;diff=6964</id>
		<title>LLDAP</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=LLDAP&amp;diff=6964"/>
		<updated>2024-09-30T18:46:23Z</updated>

		<summary type="html">&lt;p&gt;Peh: Kategorien&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== LDAP Kontoverwaltung mit LLDAP ==&lt;br /&gt;
&lt;br /&gt;
LLDAP ist ein LDAP Server, der in der Programmiersprache Rust implementiert ist. LLDAP verwendet eine relationale Datenbank zum Speichern der Accounts und Gruppen. LLDAP läßt sich als eigener Daemon betreiben. Er bringt ein einfaches Webfrontend für die Verwaltung der Konten und Gruppen und eine Funktion zum Passwort-Rücksetzen mit.&lt;br /&gt;
&lt;br /&gt;
=== Vorbereitungen in HSAdmin ===&lt;br /&gt;
&lt;br /&gt;
Mit Hilfe von HSAdmin werden im ersten Schritt ein Service-User, eine Domain und ein PostgreSQL-User mit PostgreSQL-Datenbank angelegt. Der Service-User heißt im folgenden &amp;quot;&#039;&#039;xyz00-lldap&#039;&#039;&amp;quot;, die Domain &amp;quot;&#039;&#039;account.hs-example.de&#039;&#039;&amp;quot;, PostgreSQL-User und -Datenbank heißen beide &amp;quot;&#039;&#039;xyz00_lldap&#039;&#039;&amp;quot;. Das PostgreSQL-Passwort sei &amp;quot;&#039;&#039;pg_password_99&#039;&#039;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Download und entpacken ===&lt;br /&gt;
&lt;br /&gt;
Die aktuelle Version von LLDAP ist v0.5.0.&lt;br /&gt;
&lt;br /&gt;
Ich melde mich als User &amp;quot;&#039;&#039;xyz00-lldap&#039;&#039;&amp;quot; und lade das Binärpaket mit wget:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 wget https://github.com/lldap/lldap/releases/download/v0.5.0/amd64-lldap.tar.gz&lt;br /&gt;
 tar xzf amd64-lldap.tar.gz&lt;br /&gt;
 mv amd64-lldap lldap &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
&lt;br /&gt;
Die Konfiguration erfolgt über eine Datei &amp;quot;&#039;&#039;lldap_config.toml&#039;&#039;&amp;quot; im Verzeichnis &amp;quot;&#039;&#039;~/lldap&#039;&#039;&amp;quot;. die Datei erstelle ich wie folgt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 cd ~/lldap&lt;br /&gt;
 touch lldap_config.toml&lt;br /&gt;
 vim lldap_config.toml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
der Inhalt nach dem Bearbeiten ist zum Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;toml&amp;quot;&amp;gt;&lt;br /&gt;
 verbose=true&lt;br /&gt;
 ldap_host = &amp;quot;127.0.0.1&amp;quot;&lt;br /&gt;
 ldap_port = 33891&lt;br /&gt;
 http_host = &amp;quot;127.0.0.1&amp;quot;&lt;br /&gt;
 http_port= 33881&lt;br /&gt;
 http_url = &amp;quot;https://account.hs-example.de&amp;quot;&lt;br /&gt;
 jwt_secret = &amp;quot;generierte-zufallszeichenkett-als-secret&amp;quot;&lt;br /&gt;
 ldap_base_dn = &amp;quot;dc=hs-example,dc=de&amp;quot;&lt;br /&gt;
 ldap_user_dn = &amp;quot;admin&amp;quot;&lt;br /&gt;
 ldap_user_email = &amp;quot;webmaster@hs-example.de&amp;quot;&lt;br /&gt;
 ldap_user_pass = &amp;quot;ldap-admin-password-generieren&amp;quot;&lt;br /&gt;
 force_ldap_user_pass_reset = false&lt;br /&gt;
 database_url = &amp;quot;postgres://xyz00_lldap:pg_password_99@localhost/xyz00_lldap&amp;quot;&lt;br /&gt;
 key_seed = &amp;quot;generierte-zufallszeichenkette&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 [smtp_options]&lt;br /&gt;
 enable_password_reset = true&lt;br /&gt;
 server = &amp;quot;localhost&amp;quot;&lt;br /&gt;
 port = 4025&lt;br /&gt;
 smtp_encryption = &amp;quot;NONE&amp;quot;&lt;br /&gt;
 from=&amp;quot;LLDAP Admin &amp;lt;webmaster@hs-example.de&amp;gt;&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 [ldaps_options]&lt;br /&gt;
 enabled = false&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bei der Installation sollten folgende Einstellungen angepasst werden:&lt;br /&gt;
* die Ports für LDAP und HTTP&lt;br /&gt;
* Die Domain &amp;quot;&#039;&#039;hs-example.de&#039;&#039;&amp;quot; bzw. &amp;quot;&#039;&#039;account.hs-example.de&#039;&#039;&amp;quot;&lt;br /&gt;
* Der Account-Präfix &amp;quot;&#039;&#039;xyz00&#039;&#039;&amp;quot;&lt;br /&gt;
* Die Passworte und Secret-Zeichenketten&lt;br /&gt;
* &amp;quot;&#039;&#039;verbose&#039;&#039;&amp;quot; soltle auf &amp;quot;&#039;&#039;false&#039;&#039;&amp;quot; geändert werden, wenn alles läuft.&lt;br /&gt;
&lt;br /&gt;
Das Anlegen der Datenbank-Tabellen erfolgt und ein ersten Start des Servers erfolgt mit den Befehlen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 cd ~/lldap&lt;br /&gt;
 ./lldap create_schema&lt;br /&gt;
 ./lldap run&lt;br /&gt;
 Ctrl-C&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Proxy-Konfiguration ===&lt;br /&gt;
&lt;br /&gt;
Für den Zugriff auf das Admin-Frontend über den Browser konfiguriere ich die Domain:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 cd ~/doms/account.hs-example.de&lt;br /&gt;
 rm -rf subs/www subs-ssl/www htdocs-ssl&lt;br /&gt;
 ln -s $HOME/lldap/app htdocs-ssl&lt;br /&gt;
 touch htdocs-ssl/.htaccess&lt;br /&gt;
 vim htdocs-ssl/.htaccess&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mit dem Inhalt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;apache&amp;quot;&amp;gt;&lt;br /&gt;
DirectoryIndex disabled&lt;br /&gt;
RewriteEngine On&lt;br /&gt;
RewriteBase /&lt;br /&gt;
    &lt;br /&gt;
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f&lt;br /&gt;
RewriteRule .* http://127.0.0.1:33881%{REQUEST_URI} [proxy]&lt;br /&gt;
RequestHeader set X-Forwarded-Proto &amp;quot;https&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Achtung: Port 33881 wie in der Konfig-Datei anpassen!&lt;br /&gt;
&lt;br /&gt;
=== LLDAP als Service einrichten ===&lt;br /&gt;
&lt;br /&gt;
LLDAP soll als Service unter Kontrolle von SystemD laufen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 cd ~&lt;br /&gt;
 mkdir -p .config/systemd/user&lt;br /&gt;
 mkdir var&lt;br /&gt;
 vim .config/systemd/user/lldap.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Inhalt der Datei:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;toml&amp;quot;&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=LLDAP Service&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
WorkingDirectory=%h/lldap&lt;br /&gt;
Environment=&amp;quot;PATH=/usr/local/bin:/usr/bin:/bin&amp;quot;&lt;br /&gt;
ExecStart=%h/lldap/lldap run&lt;br /&gt;
StandardOutput=file:%h/var/lldap.log&lt;br /&gt;
StandardError=inherit&lt;br /&gt;
Restart=always&lt;br /&gt;
PrivateTmp=true&lt;br /&gt;
NoNewPrivileges=true&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=default.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aktivieren und Starten des Dienstes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 cd ~&lt;br /&gt;
 systemctl --user daemon-reload&lt;br /&gt;
 systemctl --user enable lldap.service&lt;br /&gt;
 systemctl --user start lldap.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn alles gut gegangen ist, kann mann sich als &amp;quot;&#039;&#039;admin&#039;&#039;&amp;quot; mit dem Passwort aus der Zeile &amp;quot;&#039;&#039;ldap_user_pass&#039;&#039;&amp;quot; unter https://account.hs-exampel.de anmelden.&lt;br /&gt;
&lt;br /&gt;
=== weitere Verbesserungen ===&lt;br /&gt;
&lt;br /&gt;
Bisher ging es darum, schnell einen LDAP-Dienst aufzusetzen. Leider lädt die fertig kompilierte Distribution, die wir hier benutzt haben, ihre Fonts, das CSS und JavaScript aus CDN-Netzwerken und von Google Servern. Das wollte ihr vermutlich nicht. Ich habe dazu den folgenden Issue im Github-Tracker gefunden: https://github.com/lldap/lldap/issues/93 Wenn ich richtig verstehe, kann man selbst eine Distribution erstellen, die die entsprechenden Ressourcen lokal hostet.&lt;br /&gt;
&lt;br /&gt;
=== Links ===&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/lldap/lldap Github Projekt LLDAP]&lt;br /&gt;
* [https://github.com/lldap/lldap/tree/main?tab=readme-ov-file#client-configuration Client-Konfigurationsbeispiele]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[Kategorie:HSDoku]]&lt;br /&gt;
[[Kategorie:Installationsanleitungen]]&lt;br /&gt;
[[Kategorie:Software]]&lt;br /&gt;
[[Kategorie:SSO]]&lt;/div&gt;</summary>
		<author><name>Peh</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=LLDAP&amp;diff=6963</id>
		<title>LLDAP</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=LLDAP&amp;diff=6963"/>
		<updated>2024-09-30T18:44:27Z</updated>

		<summary type="html">&lt;p&gt;Peh: /* Links */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== LDAP Kontoverwaltung mit LLDAP ==&lt;br /&gt;
&lt;br /&gt;
LLDAP ist ein LDAP Server, der in der Programmiersprache Rust implementiert ist. LLDAP verwendet eine relationale Datenbank zum Speichern der Accounts und Gruppen. LLDAP läßt sich als eigener Daemon betreiben. Er bringt ein einfaches Webfrontend für die Verwaltung der Konten und Gruppen und eine Funktion zum Passwort-Rücksetzen mit.&lt;br /&gt;
&lt;br /&gt;
=== Vorbereitungen in HSAdmin ===&lt;br /&gt;
&lt;br /&gt;
Mit Hilfe von HSAdmin werden im ersten Schritt ein Service-User, eine Domain und ein PostgreSQL-User mit PostgreSQL-Datenbank angelegt. Der Service-User heißt im folgenden &amp;quot;&#039;&#039;xyz00-lldap&#039;&#039;&amp;quot;, die Domain &amp;quot;&#039;&#039;account.hs-example.de&#039;&#039;&amp;quot;, PostgreSQL-User und -Datenbank heißen beide &amp;quot;&#039;&#039;xyz00_lldap&#039;&#039;&amp;quot;. Das PostgreSQL-Passwort sei &amp;quot;&#039;&#039;pg_password_99&#039;&#039;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Download und entpacken ===&lt;br /&gt;
&lt;br /&gt;
Die aktuelle Version von LLDAP ist v0.5.0.&lt;br /&gt;
&lt;br /&gt;
Ich melde mich als User &amp;quot;&#039;&#039;xyz00-lldap&#039;&#039;&amp;quot; und lade das Binärpaket mit wget:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 wget https://github.com/lldap/lldap/releases/download/v0.5.0/amd64-lldap.tar.gz&lt;br /&gt;
 tar xzf amd64-lldap.tar.gz&lt;br /&gt;
 mv amd64-lldap lldap &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
&lt;br /&gt;
Die Konfiguration erfolgt über eine Datei &amp;quot;&#039;&#039;lldap_config.toml&#039;&#039;&amp;quot; im Verzeichnis &amp;quot;&#039;&#039;~/lldap&#039;&#039;&amp;quot;. die Datei erstelle ich wie folgt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 cd ~/lldap&lt;br /&gt;
 touch lldap_config.toml&lt;br /&gt;
 vim lldap_config.toml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
der Inhalt nach dem Bearbeiten ist zum Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;toml&amp;quot;&amp;gt;&lt;br /&gt;
 verbose=true&lt;br /&gt;
 ldap_host = &amp;quot;127.0.0.1&amp;quot;&lt;br /&gt;
 ldap_port = 33891&lt;br /&gt;
 http_host = &amp;quot;127.0.0.1&amp;quot;&lt;br /&gt;
 http_port= 33881&lt;br /&gt;
 http_url = &amp;quot;https://account.hs-example.de&amp;quot;&lt;br /&gt;
 jwt_secret = &amp;quot;generierte-zufallszeichenkett-als-secret&amp;quot;&lt;br /&gt;
 ldap_base_dn = &amp;quot;dc=hs-example,dc=de&amp;quot;&lt;br /&gt;
 ldap_user_dn = &amp;quot;admin&amp;quot;&lt;br /&gt;
 ldap_user_email = &amp;quot;webmaster@hs-example.de&amp;quot;&lt;br /&gt;
 ldap_user_pass = &amp;quot;ldap-admin-password-generieren&amp;quot;&lt;br /&gt;
 force_ldap_user_pass_reset = false&lt;br /&gt;
 database_url = &amp;quot;postgres://xyz00_lldap:pg_password_99@localhost/xyz00_lldap&amp;quot;&lt;br /&gt;
 key_seed = &amp;quot;generierte-zufallszeichenkette&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 [smtp_options]&lt;br /&gt;
 enable_password_reset = true&lt;br /&gt;
 server = &amp;quot;localhost&amp;quot;&lt;br /&gt;
 port = 4025&lt;br /&gt;
 smtp_encryption = &amp;quot;NONE&amp;quot;&lt;br /&gt;
 from=&amp;quot;LLDAP Admin &amp;lt;webmaster@hs-example.de&amp;gt;&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 [ldaps_options]&lt;br /&gt;
 enabled = false&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bei der Installation sollten folgende Einstellungen angepasst werden:&lt;br /&gt;
* die Ports für LDAP und HTTP&lt;br /&gt;
* Die Domain &amp;quot;&#039;&#039;hs-example.de&#039;&#039;&amp;quot; bzw. &amp;quot;&#039;&#039;account.hs-example.de&#039;&#039;&amp;quot;&lt;br /&gt;
* Der Account-Präfix &amp;quot;&#039;&#039;xyz00&#039;&#039;&amp;quot;&lt;br /&gt;
* Die Passworte und Secret-Zeichenketten&lt;br /&gt;
* &amp;quot;&#039;&#039;verbose&#039;&#039;&amp;quot; soltle auf &amp;quot;&#039;&#039;false&#039;&#039;&amp;quot; geändert werden, wenn alles läuft.&lt;br /&gt;
&lt;br /&gt;
Das Anlegen der Datenbank-Tabellen erfolgt und ein ersten Start des Servers erfolgt mit den Befehlen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 cd ~/lldap&lt;br /&gt;
 ./lldap create_schema&lt;br /&gt;
 ./lldap run&lt;br /&gt;
 Ctrl-C&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Proxy-Konfiguration ===&lt;br /&gt;
&lt;br /&gt;
Für den Zugriff auf das Admin-Frontend über den Browser konfiguriere ich die Domain:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 cd ~/doms/account.hs-example.de&lt;br /&gt;
 rm -rf subs/www subs-ssl/www htdocs-ssl&lt;br /&gt;
 ln -s $HOME/lldap/app htdocs-ssl&lt;br /&gt;
 touch htdocs-ssl/.htaccess&lt;br /&gt;
 vim htdocs-ssl/.htaccess&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mit dem Inhalt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;apache&amp;quot;&amp;gt;&lt;br /&gt;
DirectoryIndex disabled&lt;br /&gt;
RewriteEngine On&lt;br /&gt;
RewriteBase /&lt;br /&gt;
    &lt;br /&gt;
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f&lt;br /&gt;
RewriteRule .* http://127.0.0.1:33881%{REQUEST_URI} [proxy]&lt;br /&gt;
RequestHeader set X-Forwarded-Proto &amp;quot;https&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Achtung: Port 33881 wie in der Konfig-Datei anpassen!&lt;br /&gt;
&lt;br /&gt;
=== LLDAP als Service einrichten ===&lt;br /&gt;
&lt;br /&gt;
LLDAP soll als Service unter Kontrolle von SystemD laufen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 cd ~&lt;br /&gt;
 mkdir -p .config/systemd/user&lt;br /&gt;
 mkdir var&lt;br /&gt;
 vim .config/systemd/user/lldap.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Inhalt der Datei:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;toml&amp;quot;&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=LLDAP Service&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
WorkingDirectory=%h/lldap&lt;br /&gt;
Environment=&amp;quot;PATH=/usr/local/bin:/usr/bin:/bin&amp;quot;&lt;br /&gt;
ExecStart=%h/lldap/lldap run&lt;br /&gt;
StandardOutput=file:%h/var/lldap.log&lt;br /&gt;
StandardError=inherit&lt;br /&gt;
Restart=always&lt;br /&gt;
PrivateTmp=true&lt;br /&gt;
NoNewPrivileges=true&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=default.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aktivieren und Starten des Dienstes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 cd ~&lt;br /&gt;
 systemctl --user daemon-reload&lt;br /&gt;
 systemctl --user enable lldap.service&lt;br /&gt;
 systemctl --user start lldap.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn alles gut gegangen ist, kann mann sich als &amp;quot;&#039;&#039;admin&#039;&#039;&amp;quot; mit dem Passwort aus der Zeile &amp;quot;&#039;&#039;ldap_user_pass&#039;&#039;&amp;quot; unter https://account.hs-exampel.de anmelden.&lt;br /&gt;
&lt;br /&gt;
=== weitere Verbesserungen ===&lt;br /&gt;
&lt;br /&gt;
Bisher ging es darum, schnell einen LDAP-Dienst aufzusetzen. Leider lädt die fertig kompilierte Distribution, die wir hier benutzt haben, ihre Fonts, das CSS und JavaScript aus CDN-Netzwerken und von Google Servern. Das wollte ihr vermutlich nicht. Ich habe dazu den folgenden Issue im Github-Tracker gefunden: https://github.com/lldap/lldap/issues/93 Wenn ich richtig verstehe, kann man selbst eine Distribution erstellen, die die entsprechenden Ressourcen lokal hostet.&lt;br /&gt;
&lt;br /&gt;
=== Links ===&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/lldap/lldap Github Projekt LLDAP]&lt;br /&gt;
* [https://github.com/lldap/lldap/tree/main?tab=readme-ov-file#client-configuration Client-Konfigurationsbeispiele]&lt;/div&gt;</summary>
		<author><name>Peh</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=LLDAP&amp;diff=6962</id>
		<title>LLDAP</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=LLDAP&amp;diff=6962"/>
		<updated>2024-09-30T18:19:06Z</updated>

		<summary type="html">&lt;p&gt;Peh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== LDAP Kontoverwaltung mit LLDAP ==&lt;br /&gt;
&lt;br /&gt;
LLDAP ist ein LDAP Server, der in der Programmiersprache Rust implementiert ist. LLDAP verwendet eine relationale Datenbank zum Speichern der Accounts und Gruppen. LLDAP läßt sich als eigener Daemon betreiben. Er bringt ein einfaches Webfrontend für die Verwaltung der Konten und Gruppen und eine Funktion zum Passwort-Rücksetzen mit.&lt;br /&gt;
&lt;br /&gt;
=== Vorbereitungen in HSAdmin ===&lt;br /&gt;
&lt;br /&gt;
Mit Hilfe von HSAdmin werden im ersten Schritt ein Service-User, eine Domain und ein PostgreSQL-User mit PostgreSQL-Datenbank angelegt. Der Service-User heißt im folgenden &amp;quot;&#039;&#039;xyz00-lldap&#039;&#039;&amp;quot;, die Domain &amp;quot;&#039;&#039;account.hs-example.de&#039;&#039;&amp;quot;, PostgreSQL-User und -Datenbank heißen beide &amp;quot;&#039;&#039;xyz00_lldap&#039;&#039;&amp;quot;. Das PostgreSQL-Passwort sei &amp;quot;&#039;&#039;pg_password_99&#039;&#039;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Download und entpacken ===&lt;br /&gt;
&lt;br /&gt;
Die aktuelle Version von LLDAP ist v0.5.0.&lt;br /&gt;
&lt;br /&gt;
Ich melde mich als User &amp;quot;&#039;&#039;xyz00-lldap&#039;&#039;&amp;quot; und lade das Binärpaket mit wget:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 wget https://github.com/lldap/lldap/releases/download/v0.5.0/amd64-lldap.tar.gz&lt;br /&gt;
 tar xzf amd64-lldap.tar.gz&lt;br /&gt;
 mv amd64-lldap lldap &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
&lt;br /&gt;
Die Konfiguration erfolgt über eine Datei &amp;quot;&#039;&#039;lldap_config.toml&#039;&#039;&amp;quot; im Verzeichnis &amp;quot;&#039;&#039;~/lldap&#039;&#039;&amp;quot;. die Datei erstelle ich wie folgt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 cd ~/lldap&lt;br /&gt;
 touch lldap_config.toml&lt;br /&gt;
 vim lldap_config.toml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
der Inhalt nach dem Bearbeiten ist zum Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;toml&amp;quot;&amp;gt;&lt;br /&gt;
 verbose=true&lt;br /&gt;
 ldap_host = &amp;quot;127.0.0.1&amp;quot;&lt;br /&gt;
 ldap_port = 33891&lt;br /&gt;
 http_host = &amp;quot;127.0.0.1&amp;quot;&lt;br /&gt;
 http_port= 33881&lt;br /&gt;
 http_url = &amp;quot;https://account.hs-example.de&amp;quot;&lt;br /&gt;
 jwt_secret = &amp;quot;generierte-zufallszeichenkett-als-secret&amp;quot;&lt;br /&gt;
 ldap_base_dn = &amp;quot;dc=hs-example,dc=de&amp;quot;&lt;br /&gt;
 ldap_user_dn = &amp;quot;admin&amp;quot;&lt;br /&gt;
 ldap_user_email = &amp;quot;webmaster@hs-example.de&amp;quot;&lt;br /&gt;
 ldap_user_pass = &amp;quot;ldap-admin-password-generieren&amp;quot;&lt;br /&gt;
 force_ldap_user_pass_reset = false&lt;br /&gt;
 database_url = &amp;quot;postgres://xyz00_lldap:pg_password_99@localhost/xyz00_lldap&amp;quot;&lt;br /&gt;
 key_seed = &amp;quot;generierte-zufallszeichenkette&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 [smtp_options]&lt;br /&gt;
 enable_password_reset = true&lt;br /&gt;
 server = &amp;quot;localhost&amp;quot;&lt;br /&gt;
 port = 4025&lt;br /&gt;
 smtp_encryption = &amp;quot;NONE&amp;quot;&lt;br /&gt;
 from=&amp;quot;LLDAP Admin &amp;lt;webmaster@hs-example.de&amp;gt;&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 [ldaps_options]&lt;br /&gt;
 enabled = false&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bei der Installation sollten folgende Einstellungen angepasst werden:&lt;br /&gt;
* die Ports für LDAP und HTTP&lt;br /&gt;
* Die Domain &amp;quot;&#039;&#039;hs-example.de&#039;&#039;&amp;quot; bzw. &amp;quot;&#039;&#039;account.hs-example.de&#039;&#039;&amp;quot;&lt;br /&gt;
* Der Account-Präfix &amp;quot;&#039;&#039;xyz00&#039;&#039;&amp;quot;&lt;br /&gt;
* Die Passworte und Secret-Zeichenketten&lt;br /&gt;
* &amp;quot;&#039;&#039;verbose&#039;&#039;&amp;quot; soltle auf &amp;quot;&#039;&#039;false&#039;&#039;&amp;quot; geändert werden, wenn alles läuft.&lt;br /&gt;
&lt;br /&gt;
Das Anlegen der Datenbank-Tabellen erfolgt und ein ersten Start des Servers erfolgt mit den Befehlen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 cd ~/lldap&lt;br /&gt;
 ./lldap create_schema&lt;br /&gt;
 ./lldap run&lt;br /&gt;
 Ctrl-C&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Proxy-Konfiguration ===&lt;br /&gt;
&lt;br /&gt;
Für den Zugriff auf das Admin-Frontend über den Browser konfiguriere ich die Domain:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 cd ~/doms/account.hs-example.de&lt;br /&gt;
 rm -rf subs/www subs-ssl/www htdocs-ssl&lt;br /&gt;
 ln -s $HOME/lldap/app htdocs-ssl&lt;br /&gt;
 touch htdocs-ssl/.htaccess&lt;br /&gt;
 vim htdocs-ssl/.htaccess&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mit dem Inhalt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;apache&amp;quot;&amp;gt;&lt;br /&gt;
DirectoryIndex disabled&lt;br /&gt;
RewriteEngine On&lt;br /&gt;
RewriteBase /&lt;br /&gt;
    &lt;br /&gt;
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f&lt;br /&gt;
RewriteRule .* http://127.0.0.1:33881%{REQUEST_URI} [proxy]&lt;br /&gt;
RequestHeader set X-Forwarded-Proto &amp;quot;https&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Achtung: Port 33881 wie in der Konfig-Datei anpassen!&lt;br /&gt;
&lt;br /&gt;
=== LLDAP als Service einrichten ===&lt;br /&gt;
&lt;br /&gt;
LLDAP soll als Service unter Kontrolle von SystemD laufen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 cd ~&lt;br /&gt;
 mkdir -p .config/systemd/user&lt;br /&gt;
 mkdir var&lt;br /&gt;
 vim .config/systemd/user/lldap.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Inhalt der Datei:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;toml&amp;quot;&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=LLDAP Service&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
WorkingDirectory=%h/lldap&lt;br /&gt;
Environment=&amp;quot;PATH=/usr/local/bin:/usr/bin:/bin&amp;quot;&lt;br /&gt;
ExecStart=%h/lldap/lldap run&lt;br /&gt;
StandardOutput=file:%h/var/lldap.log&lt;br /&gt;
StandardError=inherit&lt;br /&gt;
Restart=always&lt;br /&gt;
PrivateTmp=true&lt;br /&gt;
NoNewPrivileges=true&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=default.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aktivieren und Starten des Dienstes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 cd ~&lt;br /&gt;
 systemctl --user daemon-reload&lt;br /&gt;
 systemctl --user enable lldap.service&lt;br /&gt;
 systemctl --user start lldap.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn alles gut gegangen ist, kann mann sich als &amp;quot;&#039;&#039;admin&#039;&#039;&amp;quot; mit dem Passwort aus der Zeile &amp;quot;&#039;&#039;ldap_user_pass&#039;&#039;&amp;quot; unter https://account.hs-exampel.de anmelden.&lt;br /&gt;
&lt;br /&gt;
=== weitere Verbesserungen ===&lt;br /&gt;
&lt;br /&gt;
Bisher ging es darum, schnell einen LDAP-Dienst aufzusetzen. Leider lädt die fertig kompilierte Distribution, die wir hier benutzt haben, ihre Fonts, das CSS und JavaScript aus CDN-Netzwerken und von Google Servern. Das wollte ihr vermutlich nicht. Ich habe dazu den folgenden Issue im Github-Tracker gefunden: https://github.com/lldap/lldap/issues/93 Wenn ich richtig verstehe, kann man selbst eine Distribution erstellen, die die entsprechenden Ressourcen lokal hostet.&lt;br /&gt;
&lt;br /&gt;
=== Links ===&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/lldap/lldap Github Projekt LLDAP]&lt;/div&gt;</summary>
		<author><name>Peh</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=LLDAP&amp;diff=6961</id>
		<title>LLDAP</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=LLDAP&amp;diff=6961"/>
		<updated>2024-09-30T18:11:09Z</updated>

		<summary type="html">&lt;p&gt;Peh: /* LLDAP als Service einrichten */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== LDAP Kontoverwaltung mit LLDAP ==&lt;br /&gt;
&lt;br /&gt;
LLDAP ist ein LDAP Server, der in der Programmiersprache Rust implementiert ist. LLDAP verwendet eine relationale Datenbank zum Speichern der Accounts und Gruppen. LLDAP läßt sich als eigener Daemon betreiben. Er bringt ein einfaches Webfrontend für die Verwaltung der Konten und Gruppen und eine Funktion zum Passwort-Rücksetzen mit.&lt;br /&gt;
&lt;br /&gt;
=== Vorbereitungen in HSAdmin ===&lt;br /&gt;
&lt;br /&gt;
Mit Hilfe von HSAdmin werden im ersten Schritt ein Service-User, eine Domain und ein PostgreSQL-User mit PostgreSQL-Datenbank angelegt. Der Service-User heißt im folgenden &amp;quot;&#039;&#039;xyz00-lldap&#039;&#039;&amp;quot;, die Domain &amp;quot;&#039;&#039;account.hs-example.de&#039;&#039;&amp;quot;, PostgreSQL-User und -Datenbank heißen beide &amp;quot;&#039;&#039;xyz00_lldap&#039;&#039;&amp;quot;. Das PostgreSQL-Passwort sei &amp;quot;&#039;&#039;pg_password_99&#039;&#039;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Download und entpacken ===&lt;br /&gt;
&lt;br /&gt;
Die aktuelle Version von LLDAP ist v0.5.0.&lt;br /&gt;
&lt;br /&gt;
Ich melde mich als User &amp;quot;&#039;&#039;xyz00-lldap&#039;&#039;&amp;quot; und lade das Binärpaket mit wget:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 wget https://github.com/lldap/lldap/releases/download/v0.5.0/amd64-lldap.tar.gz&lt;br /&gt;
 tar xzf amd64-lldap.tar.gz&lt;br /&gt;
 mv amd64-lldap lldap &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
&lt;br /&gt;
Die Konfiguration erfolgt über eine Datei &amp;quot;&#039;&#039;lldap_config.toml&#039;&#039;&amp;quot; im Verzeichnis &amp;quot;&#039;&#039;~/lldap&#039;&#039;&amp;quot;. die Datei erstelle ich wie folgt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 cd ~/lldap&lt;br /&gt;
 touch lldap_config.toml&lt;br /&gt;
 vim lldap_config.toml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
der Inhalt nach dem Bearbeiten ist zum Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;toml&amp;quot;&amp;gt;&lt;br /&gt;
 verbose=true&lt;br /&gt;
 ldap_host = &amp;quot;127.0.0.1&amp;quot;&lt;br /&gt;
 ldap_port = 33891&lt;br /&gt;
 http_host = &amp;quot;127.0.0.1&amp;quot;&lt;br /&gt;
 http_port= 33881&lt;br /&gt;
 http_url = &amp;quot;https://account.hs-example.de&amp;quot;&lt;br /&gt;
 jwt_secret = &amp;quot;generierte-zufallszeichenkett-als-secret&amp;quot;&lt;br /&gt;
 ldap_base_dn = &amp;quot;dc=hs-example,dc=de&amp;quot;&lt;br /&gt;
 ldap_user_dn = &amp;quot;admin&amp;quot;&lt;br /&gt;
 ldap_user_email = &amp;quot;webmaster@hs-example.de&amp;quot;&lt;br /&gt;
 ldap_user_pass = &amp;quot;ldap-admin-password-generieren&amp;quot;&lt;br /&gt;
 force_ldap_user_pass_reset = false&lt;br /&gt;
 database_url = &amp;quot;postgres://xyz00_lldap:pg_password_99@localhost/xyz00_lldap&amp;quot;&lt;br /&gt;
 key_seed = &amp;quot;generierte-zufallszeichenkette&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 [smtp_options]&lt;br /&gt;
 enable_password_reset = true&lt;br /&gt;
 server = &amp;quot;localhost&amp;quot;&lt;br /&gt;
 port = 4025&lt;br /&gt;
 smtp_encryption = &amp;quot;NONE&amp;quot;&lt;br /&gt;
 from=&amp;quot;LLDAP Admin &amp;lt;webmaster@hs-example.de&amp;gt;&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 [ldaps_options]&lt;br /&gt;
 enabled = false&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bei der Installation sollten folgende Einstellungen angepasst werden:&lt;br /&gt;
* die Ports für LDAP und HTTP&lt;br /&gt;
* Die Domain &amp;quot;&#039;&#039;hs-example.de&#039;&#039;&amp;quot; bzw. &amp;quot;&#039;&#039;account.hs-example.de&#039;&#039;&amp;quot;&lt;br /&gt;
* Der Account-Präfix &amp;quot;&#039;&#039;xyz00&#039;&#039;&amp;quot;&lt;br /&gt;
* Die Passworte und Secret-Zeichenketten&lt;br /&gt;
* &amp;quot;&#039;&#039;verbose&#039;&#039;&amp;quot; soltle auf &amp;quot;&#039;&#039;false&#039;&#039;&amp;quot; geändert werden, wenn alles läuft.&lt;br /&gt;
&lt;br /&gt;
Das Anlegen der Datenbank-Tabellen erfolgt und ein ersten Start des Servers erfolgt mit den Befehlen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 cd ~/lldap&lt;br /&gt;
 ./lldap create_schema&lt;br /&gt;
 ./lldap run&lt;br /&gt;
 Ctrl-C&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Proxy-Konfiguration ===&lt;br /&gt;
&lt;br /&gt;
Für den Zugriff auf das Admin-Frontend über den Browser konfiguriere ich die Domain:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 cd ~/doms/account.hs-example.de&lt;br /&gt;
 rm -rf subs/www subs-ssl/www htdocs-ssl&lt;br /&gt;
 ln -s $HOME/lldap/app htdocs-ssl&lt;br /&gt;
 touch htdocs-ssl/.htaccess&lt;br /&gt;
 vim htdocs-ssl/.htaccess&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mit dem Inhalt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;apache&amp;quot;&amp;gt;&lt;br /&gt;
DirectoryIndex disabled&lt;br /&gt;
RewriteEngine On&lt;br /&gt;
RewriteBase /&lt;br /&gt;
    &lt;br /&gt;
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f&lt;br /&gt;
RewriteRule .* http://127.0.0.1:33881%{REQUEST_URI} [proxy]&lt;br /&gt;
RequestHeader set X-Forwarded-Proto &amp;quot;https&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Achtung: Port 33881 wie in der Konfig-Datei anpassen!&lt;br /&gt;
&lt;br /&gt;
=== LLDAP als Service einrichten ===&lt;br /&gt;
&lt;br /&gt;
LLDAP soll als Service unter Kontrolle von SystemD laufen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 cd ~&lt;br /&gt;
 mkdir -p .config/systemd/user&lt;br /&gt;
 mkdir var&lt;br /&gt;
 vim .config/systemd/user/lldap.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Inhalt der Datei:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;toml&amp;quot;&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=LLDAP Service&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
WorkingDirectory=%h/lldap&lt;br /&gt;
Environment=&amp;quot;PATH=/usr/local/bin:/usr/bin:/bin&amp;quot;&lt;br /&gt;
ExecStart=%h/lldap/lldap run&lt;br /&gt;
StandardOutput=file:%h/var/lldap.log&lt;br /&gt;
StandardError=inherit&lt;br /&gt;
Restart=always&lt;br /&gt;
PrivateTmp=true&lt;br /&gt;
NoNewPrivileges=true&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=default.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aktivieren und Starten des Dienstes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 cd ~&lt;br /&gt;
 systemctl --user daemon-reload&lt;br /&gt;
 systemctl --user enable lldap.service&lt;br /&gt;
 systemctl --user start lldap.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn alles gut gegangen ist, kann mann sich als &amp;quot;&#039;&#039;admin&#039;&#039;&amp;quot; mit dem Passwort aus der Zeile &amp;quot;&#039;&#039;ldap_user_pass&#039;&#039;&amp;quot; unter https://account.hs-exampel.de anmelden.&lt;br /&gt;
&lt;br /&gt;
=== Links ===&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/lldap/lldap Github Projekt LLDAP]&lt;/div&gt;</summary>
		<author><name>Peh</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=LLDAP&amp;diff=6960</id>
		<title>LLDAP</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=LLDAP&amp;diff=6960"/>
		<updated>2024-09-30T18:08:55Z</updated>

		<summary type="html">&lt;p&gt;Peh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== LDAP Kontoverwaltung mit LLDAP ==&lt;br /&gt;
&lt;br /&gt;
LLDAP ist ein LDAP Server, der in der Programmiersprache Rust implementiert ist. LLDAP verwendet eine relationale Datenbank zum Speichern der Accounts und Gruppen. LLDAP läßt sich als eigener Daemon betreiben. Er bringt ein einfaches Webfrontend für die Verwaltung der Konten und Gruppen und eine Funktion zum Passwort-Rücksetzen mit.&lt;br /&gt;
&lt;br /&gt;
=== Vorbereitungen in HSAdmin ===&lt;br /&gt;
&lt;br /&gt;
Mit Hilfe von HSAdmin werden im ersten Schritt ein Service-User, eine Domain und ein PostgreSQL-User mit PostgreSQL-Datenbank angelegt. Der Service-User heißt im folgenden &amp;quot;&#039;&#039;xyz00-lldap&#039;&#039;&amp;quot;, die Domain &amp;quot;&#039;&#039;account.hs-example.de&#039;&#039;&amp;quot;, PostgreSQL-User und -Datenbank heißen beide &amp;quot;&#039;&#039;xyz00_lldap&#039;&#039;&amp;quot;. Das PostgreSQL-Passwort sei &amp;quot;&#039;&#039;pg_password_99&#039;&#039;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Download und entpacken ===&lt;br /&gt;
&lt;br /&gt;
Die aktuelle Version von LLDAP ist v0.5.0.&lt;br /&gt;
&lt;br /&gt;
Ich melde mich als User &amp;quot;&#039;&#039;xyz00-lldap&#039;&#039;&amp;quot; und lade das Binärpaket mit wget:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 wget https://github.com/lldap/lldap/releases/download/v0.5.0/amd64-lldap.tar.gz&lt;br /&gt;
 tar xzf amd64-lldap.tar.gz&lt;br /&gt;
 mv amd64-lldap lldap &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
&lt;br /&gt;
Die Konfiguration erfolgt über eine Datei &amp;quot;&#039;&#039;lldap_config.toml&#039;&#039;&amp;quot; im Verzeichnis &amp;quot;&#039;&#039;~/lldap&#039;&#039;&amp;quot;. die Datei erstelle ich wie folgt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 cd ~/lldap&lt;br /&gt;
 touch lldap_config.toml&lt;br /&gt;
 vim lldap_config.toml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
der Inhalt nach dem Bearbeiten ist zum Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;toml&amp;quot;&amp;gt;&lt;br /&gt;
 verbose=true&lt;br /&gt;
 ldap_host = &amp;quot;127.0.0.1&amp;quot;&lt;br /&gt;
 ldap_port = 33891&lt;br /&gt;
 http_host = &amp;quot;127.0.0.1&amp;quot;&lt;br /&gt;
 http_port= 33881&lt;br /&gt;
 http_url = &amp;quot;https://account.hs-example.de&amp;quot;&lt;br /&gt;
 jwt_secret = &amp;quot;generierte-zufallszeichenkett-als-secret&amp;quot;&lt;br /&gt;
 ldap_base_dn = &amp;quot;dc=hs-example,dc=de&amp;quot;&lt;br /&gt;
 ldap_user_dn = &amp;quot;admin&amp;quot;&lt;br /&gt;
 ldap_user_email = &amp;quot;webmaster@hs-example.de&amp;quot;&lt;br /&gt;
 ldap_user_pass = &amp;quot;ldap-admin-password-generieren&amp;quot;&lt;br /&gt;
 force_ldap_user_pass_reset = false&lt;br /&gt;
 database_url = &amp;quot;postgres://xyz00_lldap:pg_password_99@localhost/xyz00_lldap&amp;quot;&lt;br /&gt;
 key_seed = &amp;quot;generierte-zufallszeichenkette&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 [smtp_options]&lt;br /&gt;
 enable_password_reset = true&lt;br /&gt;
 server = &amp;quot;localhost&amp;quot;&lt;br /&gt;
 port = 4025&lt;br /&gt;
 smtp_encryption = &amp;quot;NONE&amp;quot;&lt;br /&gt;
 from=&amp;quot;LLDAP Admin &amp;lt;webmaster@hs-example.de&amp;gt;&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 [ldaps_options]&lt;br /&gt;
 enabled = false&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bei der Installation sollten folgende Einstellungen angepasst werden:&lt;br /&gt;
* die Ports für LDAP und HTTP&lt;br /&gt;
* Die Domain &amp;quot;&#039;&#039;hs-example.de&#039;&#039;&amp;quot; bzw. &amp;quot;&#039;&#039;account.hs-example.de&#039;&#039;&amp;quot;&lt;br /&gt;
* Der Account-Präfix &amp;quot;&#039;&#039;xyz00&#039;&#039;&amp;quot;&lt;br /&gt;
* Die Passworte und Secret-Zeichenketten&lt;br /&gt;
* &amp;quot;&#039;&#039;verbose&#039;&#039;&amp;quot; soltle auf &amp;quot;&#039;&#039;false&#039;&#039;&amp;quot; geändert werden, wenn alles läuft.&lt;br /&gt;
&lt;br /&gt;
Das Anlegen der Datenbank-Tabellen erfolgt und ein ersten Start des Servers erfolgt mit den Befehlen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 cd ~/lldap&lt;br /&gt;
 ./lldap create_schema&lt;br /&gt;
 ./lldap run&lt;br /&gt;
 Ctrl-C&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Proxy-Konfiguration ===&lt;br /&gt;
&lt;br /&gt;
Für den Zugriff auf das Admin-Frontend über den Browser konfiguriere ich die Domain:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 cd ~/doms/account.hs-example.de&lt;br /&gt;
 rm -rf subs/www subs-ssl/www htdocs-ssl&lt;br /&gt;
 ln -s $HOME/lldap/app htdocs-ssl&lt;br /&gt;
 touch htdocs-ssl/.htaccess&lt;br /&gt;
 vim htdocs-ssl/.htaccess&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mit dem Inhalt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;apache&amp;quot;&amp;gt;&lt;br /&gt;
DirectoryIndex disabled&lt;br /&gt;
RewriteEngine On&lt;br /&gt;
RewriteBase /&lt;br /&gt;
    &lt;br /&gt;
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f&lt;br /&gt;
RewriteRule .* http://127.0.0.1:33881%{REQUEST_URI} [proxy]&lt;br /&gt;
RequestHeader set X-Forwarded-Proto &amp;quot;https&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Achtung: Port 33881 wie in der Konfig-Datei anpassen!&lt;br /&gt;
&lt;br /&gt;
=== LLDAP als Service einrichten ===&lt;br /&gt;
&lt;br /&gt;
LLDAP soll als Service unter Kontrolle von SystemD laufen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 cd ~&lt;br /&gt;
 mkdir -p .config/systemd/user&lt;br /&gt;
 mkdir var&lt;br /&gt;
 vim .config/systemd/user/lldap.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Inhalt der Datei:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;toml&amp;quot;&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=LLDAP Service&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
WorkingDirectory=%h/lldap&lt;br /&gt;
Environment=&amp;quot;PATH=/usr/local/bin:/usr/bin:/bin&amp;quot;&lt;br /&gt;
ExecStart=%h/lldap/lldap run&lt;br /&gt;
StandardOutput=file:%h/var/lldap.log&lt;br /&gt;
StandardError=inherit&lt;br /&gt;
Restart=always&lt;br /&gt;
PrivateTmp=true&lt;br /&gt;
NoNewPrivileges=true&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=default.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aktivieren und Starten des Dienstes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 cd ~&lt;br /&gt;
 systemctl --user daemon-reload&lt;br /&gt;
 systemctl --user enable lldap.service&lt;br /&gt;
 systemctl --user start lldap.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Links ===&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/lldap/lldap Github Projekt LLDAP]&lt;/div&gt;</summary>
		<author><name>Peh</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=LLDAP&amp;diff=6959</id>
		<title>LLDAP</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=LLDAP&amp;diff=6959"/>
		<updated>2024-09-30T18:02:58Z</updated>

		<summary type="html">&lt;p&gt;Peh: Proxy-Konfig&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== LDAP Kontoverwaltung mit LLDAP ==&lt;br /&gt;
&lt;br /&gt;
LLDAP ist ein LDAP Server, der in der Programmiersprache Rust implementiert ist. LLDAP verwendet eine relationale Datenbank zum Speichern der Accounts und Gruppen. LLDAP läßt sich als eigener Daemon betreiben. Er bringt ein einfaches Webfrontend für die Verwaltung der Konten und Gruppen und eine Funktion zum Passwort-Rücksetzen mit.&lt;br /&gt;
&lt;br /&gt;
=== Vorbereitungen in HSAdmin ===&lt;br /&gt;
&lt;br /&gt;
Mit Hilfe von HSAdmin werden im ersten Schritt ein Service-User, eine Domain und ein PostgreSQL-User mit PostgreSQL-Datenbank angelegt. Der Service-User heißt im folgenden &amp;quot;&#039;&#039;xyz00-lldap&#039;&#039;&amp;quot;, die Domain &amp;quot;&#039;&#039;account.hs-example.de&#039;&#039;&amp;quot;, PostgreSQL-User und -Datenbank heißen beide &amp;quot;&#039;&#039;xyz00_lldap&#039;&#039;&amp;quot;. Das PostgreSQL-Passwort sei &amp;quot;&#039;&#039;pg_password_99&#039;&#039;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Download und entpacken ===&lt;br /&gt;
&lt;br /&gt;
Die aktuelle Version von LLDAP ist v0.5.0.&lt;br /&gt;
&lt;br /&gt;
Ich melde mich als User &amp;quot;&#039;&#039;xyz00-lldap&#039;&#039;&amp;quot; und lade das Binärpaket mit wget:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 wget https://github.com/lldap/lldap/releases/download/v0.5.0/amd64-lldap.tar.gz&lt;br /&gt;
 tar xzf amd64-lldap.tar.gz&lt;br /&gt;
 mv amd64-lldap lldap &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
&lt;br /&gt;
Die Konfiguration erfolgt über eine Datei &amp;quot;&#039;&#039;lldap_config.toml&#039;&#039;&amp;quot; im Verzeichnis &amp;quot;&#039;&#039;~/lldap&#039;&#039;&amp;quot;. die Datei erstelle ich wie folgt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 cd ~/lldap&lt;br /&gt;
 touch lldap_config.toml&lt;br /&gt;
 vim lldap_config.toml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
der Inhalt nach dem Bearbeiten ist zum Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;toml&amp;quot;&amp;gt;&lt;br /&gt;
 verbose=true&lt;br /&gt;
 ldap_host = &amp;quot;127.0.0.1&amp;quot;&lt;br /&gt;
 ldap_port = 33891&lt;br /&gt;
 http_host = &amp;quot;127.0.0.1&amp;quot;&lt;br /&gt;
 http_port= 33881&lt;br /&gt;
 http_url = &amp;quot;https://account.hs-example.de&amp;quot;&lt;br /&gt;
 jwt_secret = &amp;quot;generierte-zufallszeichenkett-als-secret&amp;quot;&lt;br /&gt;
 ldap_base_dn = &amp;quot;dc=hs-example,dc=de&amp;quot;&lt;br /&gt;
 ldap_user_dn = &amp;quot;admin&amp;quot;&lt;br /&gt;
 ldap_user_email = &amp;quot;webmaster@hs-example.de&amp;quot;&lt;br /&gt;
 ldap_user_pass = &amp;quot;ldap-admin-password-generieren&amp;quot;&lt;br /&gt;
 force_ldap_user_pass_reset = false&lt;br /&gt;
 database_url = &amp;quot;postgres://xyz00_lldap:pg_password_99@localhost/xyz00_lldap&amp;quot;&lt;br /&gt;
 key_seed = &amp;quot;generierte-zufallszeichenkette&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 [smtp_options]&lt;br /&gt;
 enable_password_reset = true&lt;br /&gt;
 server = &amp;quot;localhost&amp;quot;&lt;br /&gt;
 port = 4025&lt;br /&gt;
 smtp_encryption = &amp;quot;NONE&amp;quot;&lt;br /&gt;
 from=&amp;quot;LLDAP Admin &amp;lt;webmaster@hs-example.de&amp;gt;&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 [ldaps_options]&lt;br /&gt;
 enabled = false&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bei der Installation sollten folgende Einstellungen angepasst werden:&lt;br /&gt;
* die Ports für LDAP und HTTP&lt;br /&gt;
* Die Domain &amp;quot;&#039;&#039;hs-example.de&#039;&#039;&amp;quot; bzw. &amp;quot;&#039;&#039;account.hs-example.de&#039;&#039;&amp;quot;&lt;br /&gt;
* Der Account-Präfix &amp;quot;&#039;&#039;xyz00&#039;&#039;&amp;quot;&lt;br /&gt;
* Die Passworte und Secret-Zeichenketten&lt;br /&gt;
* &amp;quot;&#039;&#039;verbose&#039;&#039;&amp;quot; soltle auf &amp;quot;&#039;&#039;false&#039;&#039;&amp;quot; geändert werden, wenn alles läuft.&lt;br /&gt;
&lt;br /&gt;
Das Anlegen der Datenbank-Tabellen erfolgt und ein ersten Start des Servers erfolgt mit den Befehlen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 cd ~/lldap&lt;br /&gt;
 ./lldap create_schema&lt;br /&gt;
 ./lldap run&lt;br /&gt;
 Ctrl-C&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Proxy-Konfiguration ===&lt;br /&gt;
&lt;br /&gt;
Für den Zugriff auf das Admin-Frontend über den Browser konfiguriere ich die Domain:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 cd ~/doms/account.hs-example.de&lt;br /&gt;
 rm -rf subs/www subs-ssl/www htdocs-ssl&lt;br /&gt;
 ln -s $HOME/lldap/app htdocs-ssl&lt;br /&gt;
 touch htdocs-ssl/.htaccess&lt;br /&gt;
 vim htdocs-ssl/.htaccess&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mit dem Inhalt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;apache&amp;quot;&amp;gt;&lt;br /&gt;
DirectoryIndex disabled&lt;br /&gt;
RewriteEngine On&lt;br /&gt;
RewriteBase /&lt;br /&gt;
    &lt;br /&gt;
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f&lt;br /&gt;
RewriteRule .* http://127.0.0.1:33881%{REQUEST_URI} [proxy]&lt;br /&gt;
RequestHeader set X-Forwarded-Proto &amp;quot;https&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Achtung: Port 33881 wie in der Konfig-Datei anpassen!&lt;br /&gt;
&lt;br /&gt;
=== Links ===&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/lldap/lldap Github Projekt LLDAP]&lt;/div&gt;</summary>
		<author><name>Peh</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=LLDAP&amp;diff=6958</id>
		<title>LLDAP</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=LLDAP&amp;diff=6958"/>
		<updated>2024-09-30T17:55:47Z</updated>

		<summary type="html">&lt;p&gt;Peh: /* Konfiguration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== LDAP Kontoverwaltung mit LLDAP ==&lt;br /&gt;
&lt;br /&gt;
LLDAP ist ein LDAP Server, der in der Programmiersprache Rust implementiert ist. LLDAP verwendet eine relationale Datenbank zum Speichern der Accounts und Gruppen. LLDAP läßt sich als eigener Daemon betreiben. Er bringt ein einfaches Webfrontend für die Verwaltung der Konten und Gruppen und eine Funktion zum Passwort-Rücksetzen mit.&lt;br /&gt;
&lt;br /&gt;
=== Vorbereitungen in HSAdmin ===&lt;br /&gt;
&lt;br /&gt;
Mit Hilfe von HSAdmin werden im ersten Schritt ein Service-User, eine Domain und ein PostgreSQL-User mit PostgreSQL-Datenbank angelegt. Der Service-User heißt im folgenden &amp;quot;&#039;&#039;xyz00-lldap&#039;&#039;&amp;quot;, die Domain &amp;quot;&#039;&#039;account.hs-example.de&#039;&#039;&amp;quot;, PostgreSQL-User und -Datenbank heißen beide &amp;quot;&#039;&#039;xyz00_lldap&#039;&#039;&amp;quot;. Das PostgreSQL-Passwort sei &amp;quot;&#039;&#039;pg_password_99&#039;&#039;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Download und entpacken ===&lt;br /&gt;
&lt;br /&gt;
Die aktuelle Version von LLDAP ist v0.5.0.&lt;br /&gt;
&lt;br /&gt;
Ich melde mich als User &amp;quot;&#039;&#039;xyz00-lldap&#039;&#039;&amp;quot; und lade das Binärpaket mit wget:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 wget https://github.com/lldap/lldap/releases/download/v0.5.0/amd64-lldap.tar.gz&lt;br /&gt;
 tar xzf amd64-lldap.tar.gz&lt;br /&gt;
 mv amd64-lldap lldap &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
&lt;br /&gt;
Die Konfiguration erfolgt über eine Datei &amp;quot;&#039;&#039;lldap_config.toml&#039;&#039;&amp;quot; im Verzeichnis &amp;quot;&#039;&#039;~/lldap&#039;&#039;&amp;quot;. die Datei erstelle ich wie folgt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 cd ~/lldap&lt;br /&gt;
 touch lldap_config.toml&lt;br /&gt;
 vim lldap_config.toml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
der Inhalt nach dem Bearbeiten ist zum Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;toml&amp;quot;&amp;gt;&lt;br /&gt;
 verbose=true&lt;br /&gt;
 ldap_host = &amp;quot;127.0.0.1&amp;quot;&lt;br /&gt;
 ldap_port = 33891&lt;br /&gt;
 http_host = &amp;quot;127.0.0.1&amp;quot;&lt;br /&gt;
 http_port= 33881&lt;br /&gt;
 http_url = &amp;quot;https://account.hs-example.de&amp;quot;&lt;br /&gt;
 jwt_secret = &amp;quot;generierte-zufallszeichenkett-als-secret&amp;quot;&lt;br /&gt;
 ldap_base_dn = &amp;quot;dc=hs-example,dc=de&amp;quot;&lt;br /&gt;
 ldap_user_dn = &amp;quot;admin&amp;quot;&lt;br /&gt;
 ldap_user_email = &amp;quot;webmaster@hs-example.de&amp;quot;&lt;br /&gt;
 ldap_user_pass = &amp;quot;ldap-admin-password-generieren&amp;quot;&lt;br /&gt;
 force_ldap_user_pass_reset = false&lt;br /&gt;
 database_url = &amp;quot;postgres://xyz00_lldap:pg_password_99@localhost/xyz00_lldap&amp;quot;&lt;br /&gt;
 key_seed = &amp;quot;generierte-zufallszeichenkette&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 [smtp_options]&lt;br /&gt;
 enable_password_reset = true&lt;br /&gt;
 server = &amp;quot;localhost&amp;quot;&lt;br /&gt;
 port = 4025&lt;br /&gt;
 smtp_encryption = &amp;quot;NONE&amp;quot;&lt;br /&gt;
 from=&amp;quot;LLDAP Admin &amp;lt;webmaster@hs-example.de&amp;gt;&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 [ldaps_options]&lt;br /&gt;
 enabled = false&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bei der Installation sollten folgende Einstellungen angepasst werden:&lt;br /&gt;
* die Ports für LDAP und HTTP&lt;br /&gt;
* Die Domain &amp;quot;&#039;&#039;hs-example.de&#039;&#039;&amp;quot; bzw. &amp;quot;&#039;&#039;account.hs-example.de&#039;&#039;&amp;quot;&lt;br /&gt;
* Der Account-Präfix &amp;quot;&#039;&#039;xyz00&#039;&#039;&amp;quot;&lt;br /&gt;
* Die Passworte und Secret-Zeichenketten&lt;br /&gt;
* &amp;quot;&#039;&#039;verbose&#039;&#039;&amp;quot; soltle auf &amp;quot;&#039;&#039;false&#039;&#039;&amp;quot; geändert werden, wenn alles läuft.&lt;br /&gt;
&lt;br /&gt;
Das Anlegen der Datenbank-Tabellen erfolgt und ein ersten Start des Servers erfolgt mit den Befehlen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 cd ~/lldap&lt;br /&gt;
 ./lldap create_schema&lt;br /&gt;
 ./lldap run&lt;br /&gt;
 Ctrl-C&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Links ===&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/lldap/lldap Github Projekt LLDAP]&lt;/div&gt;</summary>
		<author><name>Peh</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=LLDAP&amp;diff=6957</id>
		<title>LLDAP</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=LLDAP&amp;diff=6957"/>
		<updated>2024-09-30T17:52:32Z</updated>

		<summary type="html">&lt;p&gt;Peh: /* Konfiguration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== LDAP Kontoverwaltung mit LLDAP ==&lt;br /&gt;
&lt;br /&gt;
LLDAP ist ein LDAP Server, der in der Programmiersprache Rust implementiert ist. LLDAP verwendet eine relationale Datenbank zum Speichern der Accounts und Gruppen. LLDAP läßt sich als eigener Daemon betreiben. Er bringt ein einfaches Webfrontend für die Verwaltung der Konten und Gruppen und eine Funktion zum Passwort-Rücksetzen mit.&lt;br /&gt;
&lt;br /&gt;
=== Vorbereitungen in HSAdmin ===&lt;br /&gt;
&lt;br /&gt;
Mit Hilfe von HSAdmin werden im ersten Schritt ein Service-User, eine Domain und ein PostgreSQL-User mit PostgreSQL-Datenbank angelegt. Der Service-User heißt im folgenden &amp;quot;&#039;&#039;xyz00-lldap&#039;&#039;&amp;quot;, die Domain &amp;quot;&#039;&#039;account.hs-example.de&#039;&#039;&amp;quot;, PostgreSQL-User und -Datenbank heißen beide &amp;quot;&#039;&#039;xyz00_lldap&#039;&#039;&amp;quot;. Das PostgreSQL-Passwort sei &amp;quot;&#039;&#039;pg_password_99&#039;&#039;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Download und entpacken ===&lt;br /&gt;
&lt;br /&gt;
Die aktuelle Version von LLDAP ist v0.5.0.&lt;br /&gt;
&lt;br /&gt;
Ich melde mich als User &amp;quot;&#039;&#039;xyz00-lldap&#039;&#039;&amp;quot; und lade das Binärpaket mit wget:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 wget https://github.com/lldap/lldap/releases/download/v0.5.0/amd64-lldap.tar.gz&lt;br /&gt;
 tar xzf amd64-lldap.tar.gz&lt;br /&gt;
 mv amd64-lldap lldap &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
&lt;br /&gt;
Die Konfiguration erfolgt über eine Datei &amp;quot;&#039;&#039;lldap_config.toml&#039;&#039;&amp;quot; im Verzeichnis &amp;quot;&#039;&#039;~/lldap&#039;&#039;&amp;quot;. die Datei erstelle ich wie folgt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 cd ~/lldap&lt;br /&gt;
 touch lldap_config.toml&lt;br /&gt;
 vim lldap_config.toml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
der Inhalt nach dem Bearbeiten ist zum Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;toml&amp;quot;&amp;gt;&lt;br /&gt;
 verbose=true&lt;br /&gt;
 ldap_host = &amp;quot;127.0.0.1&amp;quot;&lt;br /&gt;
 ldap_port = 33891&lt;br /&gt;
 http_host = &amp;quot;127.0.0.1&amp;quot;&lt;br /&gt;
 http_port= 33881&lt;br /&gt;
 http_url = &amp;quot;https://account.hs-example.de&amp;quot;&lt;br /&gt;
 jwt_secret = &amp;quot;generierte-zufallszeichenkett-als-secret&amp;quot;&lt;br /&gt;
 ldap_base_dn = &amp;quot;dc=hs-example,dc=de&amp;quot;&lt;br /&gt;
 ldap_user_dn = &amp;quot;admin&amp;quot;&lt;br /&gt;
 ldap_user_email = &amp;quot;webmaster@hs-example.de&amp;quot;&lt;br /&gt;
 ldap_user_pass = &amp;quot;ldap-admin-password-generieren&amp;quot;&lt;br /&gt;
 force_ldap_user_pass_reset = false&lt;br /&gt;
 database_url = &amp;quot;postgres://xyz00_lldap:pg_password_99@localhost/xyz00_lldap&amp;quot;&lt;br /&gt;
 key_seed = &amp;quot;generierte-zufallszeichenkette&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 [smtp_options]&lt;br /&gt;
 enable_password_reset = true&lt;br /&gt;
 server = &amp;quot;localhost&amp;quot;&lt;br /&gt;
 port = 4025&lt;br /&gt;
 smtp_encryption = &amp;quot;NONE&amp;quot;&lt;br /&gt;
 from=&amp;quot;LLDAP Admin &amp;lt;webmaster@hs-example.de&amp;gt;&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 [ldaps_options]&lt;br /&gt;
 enabled = false&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bei der Installation sollten folgende Einstellungen angepasst werden:&lt;br /&gt;
* die Ports für LDAP und HTTP&lt;br /&gt;
* Die Domain &amp;quot;&#039;&#039;hs-example.de&#039;&#039;&amp;quot; bzw. &amp;quot;&#039;&#039;account.hs-example.de&#039;&#039;&amp;quot;&lt;br /&gt;
* Der Account-Präfix &amp;quot;&#039;&#039;xyz00&#039;&#039;&amp;quot;&lt;br /&gt;
* Die Passworte und Secret-Zeichenketten&lt;br /&gt;
* &amp;quot;&#039;&#039;verbose&#039;&#039;&amp;quot; soltle auf &amp;quot;&#039;&#039;false&#039;&#039;&amp;quot; geändert werden, wenn alles läuft.&lt;br /&gt;
&lt;br /&gt;
=== Links ===&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/lldap/lldap Github Projekt LLDAP]&lt;/div&gt;</summary>
		<author><name>Peh</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=LLDAP&amp;diff=6956</id>
		<title>LLDAP</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=LLDAP&amp;diff=6956"/>
		<updated>2024-09-30T17:44:28Z</updated>

		<summary type="html">&lt;p&gt;Peh: /* Konfiguration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== LDAP Kontoverwaltung mit LLDAP ==&lt;br /&gt;
&lt;br /&gt;
LLDAP ist ein LDAP Server, der in der Programmiersprache Rust implementiert ist. LLDAP verwendet eine relationale Datenbank zum Speichern der Accounts und Gruppen. LLDAP läßt sich als eigener Daemon betreiben. Er bringt ein einfaches Webfrontend für die Verwaltung der Konten und Gruppen und eine Funktion zum Passwort-Rücksetzen mit.&lt;br /&gt;
&lt;br /&gt;
=== Vorbereitungen in HSAdmin ===&lt;br /&gt;
&lt;br /&gt;
Mit Hilfe von HSAdmin werden im ersten Schritt ein Service-User, eine Domain und ein PostgreSQL-User mit PostgreSQL-Datenbank angelegt. Der Service-User heißt im folgenden &amp;quot;&#039;&#039;xyz00-lldap&#039;&#039;&amp;quot;, die Domain &amp;quot;&#039;&#039;account.hs-example.de&#039;&#039;&amp;quot;, PostgreSQL-User und -Datenbank heißen beide &amp;quot;&#039;&#039;xyz00_lldap&#039;&#039;&amp;quot;. Das PostgreSQL-Passwort sei &amp;quot;&#039;&#039;pg_password_99&#039;&#039;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Download und entpacken ===&lt;br /&gt;
&lt;br /&gt;
Die aktuelle Version von LLDAP ist v0.5.0.&lt;br /&gt;
&lt;br /&gt;
Ich melde mich als User &amp;quot;&#039;&#039;xyz00-lldap&#039;&#039;&amp;quot; und lade das Binärpaket mit wget:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 wget https://github.com/lldap/lldap/releases/download/v0.5.0/amd64-lldap.tar.gz&lt;br /&gt;
 tar xzf amd64-lldap.tar.gz&lt;br /&gt;
 mv amd64-lldap lldap &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
&lt;br /&gt;
Die Konfiguration erfolgt über eine Datei &amp;quot;&#039;&#039;lldap_config.toml&#039;&#039;&amp;quot; im Verzeichnis &amp;quot;&#039;&#039;~/lldap&#039;&#039;&amp;quot;. die Datei erstelle ich wie folgt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 cd ~/lldap&lt;br /&gt;
 touch lldap_config.toml&lt;br /&gt;
 vim lldap_config.toml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
der Inhalt nach dem Bearbeiten ist zum Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;toml&amp;quot;&amp;gt;&lt;br /&gt;
 verbose=true&lt;br /&gt;
 ldap_host = &amp;quot;127.0.0.1&amp;quot;&lt;br /&gt;
 ldap_port = 33891&lt;br /&gt;
 http_host = &amp;quot;127.0.0.1&amp;quot;&lt;br /&gt;
 http_port= 33881&lt;br /&gt;
 http_url = &amp;quot;https://account.hs-example.de&amp;quot;&lt;br /&gt;
 jwt_secret = &amp;quot;generierte-zufallszeichenkett-als-secret&amp;quot;&lt;br /&gt;
 ldap_base_dn = &amp;quot;dc=hs-example,dc=de&amp;quot;&lt;br /&gt;
 ldap_user_dn = &amp;quot;admin&amp;quot;&lt;br /&gt;
 ldap_user_email = &amp;quot;webmaster@hs-example.de&amp;quot;&lt;br /&gt;
 ldap_user_pass = &amp;quot;ldap-admin-password-generieren&amp;quot;&lt;br /&gt;
 force_ldap_user_pass_reset = false&lt;br /&gt;
 database_url = &amp;quot;postgres://xyz00_lldap:pg_password_99@localhost/xyz00_lldap&amp;quot;&lt;br /&gt;
 key_seed = &amp;quot;generierte-zufallszeichenkette&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 [smtp_options]&lt;br /&gt;
 enable_password_reset = true&lt;br /&gt;
 server = &amp;quot;localhost&amp;quot;&lt;br /&gt;
 port = 4025&lt;br /&gt;
 smtp_encryption = &amp;quot;NONE&amp;quot;&lt;br /&gt;
 from=&amp;quot;LLDAP Admin &amp;lt;webmaster@hs-example.de&amp;gt;&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 [ldaps_options]&lt;br /&gt;
 enabled = false&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Links ===&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/lldap/lldap Github Projekt LLDAP]&lt;/div&gt;</summary>
		<author><name>Peh</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=LLDAP&amp;diff=6955</id>
		<title>LLDAP</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=LLDAP&amp;diff=6955"/>
		<updated>2024-09-30T17:43:42Z</updated>

		<summary type="html">&lt;p&gt;Peh: /* Download und entpacken */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== LDAP Kontoverwaltung mit LLDAP ==&lt;br /&gt;
&lt;br /&gt;
LLDAP ist ein LDAP Server, der in der Programmiersprache Rust implementiert ist. LLDAP verwendet eine relationale Datenbank zum Speichern der Accounts und Gruppen. LLDAP läßt sich als eigener Daemon betreiben. Er bringt ein einfaches Webfrontend für die Verwaltung der Konten und Gruppen und eine Funktion zum Passwort-Rücksetzen mit.&lt;br /&gt;
&lt;br /&gt;
=== Vorbereitungen in HSAdmin ===&lt;br /&gt;
&lt;br /&gt;
Mit Hilfe von HSAdmin werden im ersten Schritt ein Service-User, eine Domain und ein PostgreSQL-User mit PostgreSQL-Datenbank angelegt. Der Service-User heißt im folgenden &amp;quot;&#039;&#039;xyz00-lldap&#039;&#039;&amp;quot;, die Domain &amp;quot;&#039;&#039;account.hs-example.de&#039;&#039;&amp;quot;, PostgreSQL-User und -Datenbank heißen beide &amp;quot;&#039;&#039;xyz00_lldap&#039;&#039;&amp;quot;. Das PostgreSQL-Passwort sei &amp;quot;&#039;&#039;pg_password_99&#039;&#039;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Download und entpacken ===&lt;br /&gt;
&lt;br /&gt;
Die aktuelle Version von LLDAP ist v0.5.0.&lt;br /&gt;
&lt;br /&gt;
Ich melde mich als User &amp;quot;&#039;&#039;xyz00-lldap&#039;&#039;&amp;quot; und lade das Binärpaket mit wget:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 wget https://github.com/lldap/lldap/releases/download/v0.5.0/amd64-lldap.tar.gz&lt;br /&gt;
 tar xzf amd64-lldap.tar.gz&lt;br /&gt;
 mv amd64-lldap lldap &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration ===&lt;br /&gt;
&lt;br /&gt;
Die Konfiguration erfolgt über eine Datei &amp;quot;lldap_config.toml&amp;quot;. die Datei erstelle ich wie folgt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 cd ~/lldap&lt;br /&gt;
 touch lldap_config.toml&lt;br /&gt;
 vim lldap_config.toml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
der Inhalt nach dem Bearbeiten ist zum Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;toml&amp;quot;&amp;gt;&lt;br /&gt;
 verbose=true&lt;br /&gt;
 ldap_host = &amp;quot;127.0.0.1&amp;quot;&lt;br /&gt;
 ldap_port = 33891&lt;br /&gt;
 http_host = &amp;quot;127.0.0.1&amp;quot;&lt;br /&gt;
 http_port= 33881&lt;br /&gt;
 http_url = &amp;quot;https://account.hs-example.de&amp;quot;&lt;br /&gt;
 jwt_secret = &amp;quot;generierte-zufallszeichenkett-als-secret&amp;quot;&lt;br /&gt;
 ldap_base_dn = &amp;quot;dc=hs-example,dc=de&amp;quot;&lt;br /&gt;
 ldap_user_dn = &amp;quot;admin&amp;quot;&lt;br /&gt;
 ldap_user_email = &amp;quot;webmaster@hs-example.de&amp;quot;&lt;br /&gt;
 ldap_user_pass = &amp;quot;ldap-admin-password-generieren&amp;quot;&lt;br /&gt;
 force_ldap_user_pass_reset = false&lt;br /&gt;
 database_url = &amp;quot;postgres://xyz00_lldap:pg_password_99@localhost/xyz00_lldap&amp;quot;&lt;br /&gt;
 key_seed = &amp;quot;generierte-zufallszeichenkette&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 [smtp_options]&lt;br /&gt;
 enable_password_reset = true&lt;br /&gt;
 server = &amp;quot;localhost&amp;quot;&lt;br /&gt;
 port = 4025&lt;br /&gt;
 smtp_encryption = &amp;quot;NONE&amp;quot;&lt;br /&gt;
 from=&amp;quot;LLDAP Admin &amp;lt;webmaster@hs-example.de&amp;gt;&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 [ldaps_options]&lt;br /&gt;
 enabled = false&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Links ===&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/lldap/lldap Github Projekt LLDAP]&lt;/div&gt;</summary>
		<author><name>Peh</name></author>
	</entry>
</feed>