<?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=Dib00-discourse</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=Dib00-discourse"/>
	<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Spezial:Beitr%C3%A4ge/Dib00-discourse"/>
	<updated>2026-04-25T21:35:15Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Wordpress&amp;diff=4974</id>
		<title>Wordpress</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Wordpress&amp;diff=4974"/>
		<updated>2019-09-04T06:27:16Z</updated>

		<summary type="html">&lt;p&gt;Dib00-discourse: shell-befehl korrigiert (Verzeichniswechsel war bereits vollzogen)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Wordpress in 5 Minuten =&lt;br /&gt;
&lt;br /&gt;
Installiert wird Wordpress hier unter der Domain https://blog.example.org.&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;
  hsscript -u xyz00 -i&lt;br /&gt;
  Password: ********&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;blog.example.org&#039;&#039;&lt;br /&gt;
* MySQL-User &lt;br /&gt;
* MySQL Datenbank&lt;br /&gt;
&lt;br /&gt;
  xyz00@hsadmin&amp;gt; user.add({set:{name:&#039;xyz00-blog&#039;,password:&#039;geheim&#039;,shell:&#039;/bin/bash&#039;,comment:&#039;Wordpress Blog&#039;}})&lt;br /&gt;
  xyz00@hsadmin&amp;gt; domain.add({set:{name:&#039;blog.example.org&#039;,user:&#039;xyz00-blog&#039;}})&lt;br /&gt;
  xyz00@hsadmin&amp;gt; mysqluser.add({set:{name:&#039;xyz00_wpuser&#039;,password:&#039;geheim&#039;}})&lt;br /&gt;
  xyz00@hsadmin&amp;gt; mysqldb.add({set:{name:&#039;xyz00_wpdb&#039;,owner:&#039;xyz00_wpuser&#039;}})&lt;br /&gt;
&lt;br /&gt;
== Wordpress installieren ==&lt;br /&gt;
&lt;br /&gt;
Anmelden als Linux-User &#039;&#039;xyz00-blog&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
  ssh -l xyz00-blog xyz00.hostsharing.net&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;htdocs-ssl&#039;&#039; Verzeichnis vorbereiten&lt;br /&gt;
&lt;br /&gt;
  cd doms/blog.example.org&lt;br /&gt;
  rm -rf subs/www subs-ssl/www&lt;br /&gt;
  cd htdocs-ssl&lt;br /&gt;
  rm .htaccess&lt;br /&gt;
&lt;br /&gt;
Wordpress downloaden &amp;amp; entpacken z.b. im htdocs-ssl Verzeichnis&lt;br /&gt;
&lt;br /&gt;
   wget -O - http://wordpress.org/latest.tar.gz |tar -xz --strip 1&lt;br /&gt;
&lt;br /&gt;
== Wordpress konfigurieren ==&lt;br /&gt;
&lt;br /&gt;
Im Browser auf die Seite &lt;br /&gt;
http://blog.example.org gehen und den Anweisungen folgen.&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:Blog]]&lt;br /&gt;
[[Kategorie:CMS]]&lt;/div&gt;</summary>
		<author><name>Dib00-discourse</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Shell&amp;diff=4973</id>
		<title>Shell</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Shell&amp;diff=4973"/>
		<updated>2019-09-04T05:34:32Z</updated>

		<summary type="html">&lt;p&gt;Dib00-discourse: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Die &#039;&#039;&#039;Unix-Shell&#039;&#039;&#039; oder kurz &#039;&#039;&#039;Shell&#039;&#039;&#039; (en. Hülle, Schale) bezeichnet die traditionelle Benutzerschnittstelle unter Unix oder unixoiden Betriebssystemen. Der Benutzer kann sich auf einem Computer per [[Login mit SSH | SSH einloggen]] und befindet sich dann auf der Shell. Hier kann er in einer Eingabezeile Kommandos eintippen, die der Computer dann sogleich ausführt. Man spricht darum auch von einem Kommandozeileninterpreter.&lt;br /&gt;
&lt;br /&gt;
In der Regel hat der Benutzer unter Unix die Wahl zwischen verschiedenen Shells. Vom Sprachumfang her sind alle üblichen Unix-Shells als vollwertige Skriptsprachen zur Programmierung und zur Automatisierung von Aufgaben verwendbar; die Abgrenzung zu reinen Skriptsprachen (z. B. Perl, awk) besteht darin, dass Shells besondere Mittel für den interaktiven Dialog mit dem Anwender bereitstellen, die vom Ausgeben eines Prompts im einfachsten Fall bis hin zur Möglichkeit des Editierens der eingegebenen Befehle oder zur Jobsteuerung reichen.&lt;br /&gt;
&lt;br /&gt;
Bei Hostsharing hast Du neben dem [[hsadmin]]-Webclient die Möglichkeit, alle notwendigen Konfigurationen von hier aus zu erledigen. Dazu kannst Du Skripte schreiben, die zusammen mit [[cron | Cronjobs]] diverse Dinge (zum Beispiel tägliche Statistiken, Reaktionen auf Vorfälle) für dich automatisiert erledigen.&lt;br /&gt;
&lt;br /&gt;
== Aliasse in der Standardinstallation ==&lt;br /&gt;
&lt;br /&gt;
Ein &#039;&#039;&#039;alias&#039;&#039;&#039; ist im einfachsten Fall eine selbst-definierte Abkürzung für einen Befehl. Sie erlaubt es der Nutzerin statt eines langen Befehles (z.B. &#039;&#039;&#039;ls --all --human-readable -l&#039;&#039;&#039; bzw. &#039;&#039;&#039;ls -lha&#039;&#039;&#039;) nur eine Kurzform zu tippen (z.B. &#039;&#039;&#039;ll&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
In der Standard-Installation sind noch keine Aliase definiert.&lt;br /&gt;
&lt;br /&gt;
Die (bash-) Shell liest aber beim login automatisch die Datei &#039;&#039;&#039;~/.bash_profile&#039;&#039;&#039;. Dort lassen sich entsprechend aliasse angeben. Die Datei muss ggfs. erst angelegt werden.&lt;br /&gt;
&lt;br /&gt;
Das obige Beispiel sähe so aus (Datei-Inhalt von ~/.bash_profile):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;alias ll=&#039;ls -lha&#039;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HSDoku]]&lt;br /&gt;
[[Kategorie:Glossar]]&lt;/div&gt;</summary>
		<author><name>Dib00-discourse</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Domainverwaltung&amp;diff=4972</id>
		<title>Domainverwaltung</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Domainverwaltung&amp;diff=4972"/>
		<updated>2019-09-04T05:20:11Z</updated>

		<summary type="html">&lt;p&gt;Dib00-discourse: ß =&amp;gt; ss (an den richtigen Stellen, neue Rechtschreibung)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{HSDoku-DomainLinks}}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Lokale Subdomains ==&lt;br /&gt;
&lt;br /&gt;
Subdomains sind Domains unterhalb der Hauptdomain. Also das &#039;&#039;&#039;www&#039;&#039;&#039; in &#039;&#039;www&#039;&#039;.example.com, &#039;&#039;&#039;test&#039;&#039;&#039; in &#039;&#039;test&#039;&#039;.example.com usw. Bei Hostsharing können beliebig viele verschiedene Subdomains angelegt werden.&lt;br /&gt;
&lt;br /&gt;
=== Lokale Subdomains durch Unterverzeichnis in &amp;lt;tt&amp;gt;doms/&#039;&#039;domain&#039;&#039;/subs/&amp;lt;/tt&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Man kann eine Subdomain erstellen, indem man unter &amp;lt;tt&amp;gt;[[~/]]doms/&#039;&#039;example.org&#039;&#039;/subs/&amp;lt;/tt&amp;gt; ein Unterverzeichnis erstellt.&lt;br /&gt;
&lt;br /&gt;
Ein Unterverzeichnis mit dem Namen &amp;lt;tt&amp;gt;[[~/]]doms/&#039;&#039;example.org&#039;&#039;/subs/&#039;&#039;muster&#039;&#039;&amp;lt;/tt&amp;gt; ergibt beispielsweise die Subdomain &amp;lt;tt&amp;gt;muster.example.org&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Dieses Verfahren wirkt sich nur für den standardmäßig konfigurierten Webserver aus und setzt voraus, da22 die Subdomains im DNS eingetragen sind. Das kann durch [[Wildcard Subdomains]] geschehen.&lt;br /&gt;
&lt;br /&gt;
=== Lokale Subdomains durch Aufschalten; Delegieren ===&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Aufschalten&amp;quot; bedeutet in der Hostsharing-Doku, dass eine Subdomain so eingerichtet wird, dass sie neben der Hauptdomain eine eigene Existenz führt, sowohl als Verzeichnis unter &amp;lt;tt&amp;gt;[[~/]]doms/&amp;lt;/tt&amp;gt; als auch im DNS.&lt;br /&gt;
&lt;br /&gt;
Eine Subdomain wie muster.example.org kann dabei im gleichen Paket mit der Hauptdomain example.org oder in einem anderen Paket aufgeschaltet werden.&lt;br /&gt;
&lt;br /&gt;
* Wenn die Subdomain zum gleichen Paket wie die übergeordnete Domain gehören soll, kann sie der Paket-Admin mittels [[HSAdmin]] einrichten.&lt;br /&gt;
&lt;br /&gt;
* Wenn die Subdomain zu einem anderen Paket des gleichen HS-Mitglieds gehören soll, kann sie der Paket-Admin unter seinem Mitgliedsaccount (hsh00-xyz) mittels [[HSAdmin]] einrichten.&lt;br /&gt;
&lt;br /&gt;
* Wenn die Subdomain an ein anderes Mitglied delegiert werden soll, müssen sich beide Mitglieder mit diesem Wunsch an den Hostsharing-Service wenden. Der Hostsharing-Service richtet die Subdomain ein, wenn ihm übereinstimmende Willenserklärungen der beteiligten Mitglieder vorliegen.&lt;br /&gt;
&lt;br /&gt;
== Eine bestehende Domain einem neuen Domain-Admin oder einem anderen Paket zuordnen ==&lt;br /&gt;
&lt;br /&gt;
Um eine Domain zu verschieben, also einem anderen Admin zuzuordnen, wird grundsätzlich über HSAdmin die Domain gelöscht und neu angelegt. Da die eigentliche Registrierung über das [http://www.domain-bestellsystem.de Domainbestellsystem] erfolgt, bleibt der Eigentümer der Domain unverändert.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Achtung:&#039;&#039;&#039; Das Verzeichnis &amp;lt;tt&amp;gt;~/doms/&#039;&#039;example.org&#039;&#039;/&amp;lt;/tt&amp;gt;, also alle Dateien im Webspace, wird bei dieser Aktion komplett gelöscht! Der Bestand muss vorher manuell gesichert werden (zum Beispiel als &amp;lt;tt&amp;gt;tar&amp;lt;/tt&amp;gt;-Archiv)! Auch die Mailadressen der betreffenden Domain gehen verloren und müssen ggf. neu eingetragen werden!&lt;br /&gt;
&lt;br /&gt;
Der Hostsharing-Service (service@hostsharing.net) kann auch Verschiebungen mit minimalen Ausfallzeiten bei aufwandsabhängiger Abrechnung gemäß des Hostmaster-Stundensatzes durchführen.&lt;br /&gt;
&lt;br /&gt;
== Status der Domaineinrichtung ==&lt;br /&gt;
Der Status eines Domaineinrichtungsvorgangs kann mit dem hsadmin-[[WebFrontend]] oder mit [[hsadmin]] in der [[Shell]]  eingesehen werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
hsadmin -c domain.search&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Adresse von Owner / Admin-C ändern ==&lt;br /&gt;
Um die Adressdaten des Domain-Inhabers zu ändern, aktualisiere den zugehörigen [[Handle]] im [https://www.domain-bestellsystem.de Domain-Bestellsystem].&lt;br /&gt;
&lt;br /&gt;
== Eigene Verwaltung der Zonefiles ==&lt;br /&gt;
Siehe [[Verwalten der Zonendaten]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HSDoku]]&lt;br /&gt;
[[Kategorie:Domains]]&lt;br /&gt;
[[Kategorie:Hsadmin]]&lt;/div&gt;</summary>
		<author><name>Dib00-discourse</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Domainverwaltung&amp;diff=4971</id>
		<title>Domainverwaltung</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Domainverwaltung&amp;diff=4971"/>
		<updated>2019-09-03T06:57:57Z</updated>

		<summary type="html">&lt;p&gt;Dib00-discourse: fett und kursiver text für einfachere Identifizierung der Subdomain&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{HSDoku-DomainLinks}}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Lokale Subdomains ==&lt;br /&gt;
&lt;br /&gt;
Subdomains sind Domains unterhalb der Hauptdomain. Also das &#039;&#039;&#039;www&#039;&#039;&#039; in &#039;&#039;www&#039;&#039;.example.com, &#039;&#039;&#039;test&#039;&#039;&#039; in &#039;&#039;test&#039;&#039;.example.com usw. Bei Hostsharing können beliebig viele verschiedene Subdomains angelegt werden.&lt;br /&gt;
&lt;br /&gt;
=== Lokale Subdomains durch Unterverzeichnis in &amp;lt;tt&amp;gt;doms/&#039;&#039;domain&#039;&#039;/subs/&amp;lt;/tt&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Man kann eine Subdomain erstellen, indem man unter &amp;lt;tt&amp;gt;[[~/]]doms/&#039;&#039;example.org&#039;&#039;/subs/&amp;lt;/tt&amp;gt; ein Unterverzeichnis erstellt.&lt;br /&gt;
&lt;br /&gt;
Ein Unterverzeichnis mit dem Namen &amp;lt;tt&amp;gt;[[~/]]doms/&#039;&#039;example.org&#039;&#039;/subs/&#039;&#039;muster&#039;&#039;&amp;lt;/tt&amp;gt; ergibt beispielsweise die Subdomain &amp;lt;tt&amp;gt;muster.example.org&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Dieses Verfahren wirkt sich nur für den standardmäßig konfigurierten Webserver aus und setzt voraus, daß die Subdomains im DNS eingetragen sind. Das kann durch [[Wildcard Subdomains]] geschehen.&lt;br /&gt;
&lt;br /&gt;
=== Lokale Subdomains durch Aufschalten; Delegieren ===&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Aufschalten&amp;quot; bedeutet in der Hostsharing-Doku, daß eine Subdomain so eingerichtet wird, daß sie neben der Hauptdomain eine eigene Existenz führt, sowohl als Verzeichnis unter &amp;lt;tt&amp;gt;[[~/]]doms/&amp;lt;/tt&amp;gt; als auch im DNS.&lt;br /&gt;
&lt;br /&gt;
Eine Subdomain wie muster.example.org kann dabei im gleichen Paket mit der Hauptdomain example.org oder in einem anderen Paket aufgeschaltet werden.&lt;br /&gt;
&lt;br /&gt;
* Wenn die Subdomain zum gleichen Paket wie die übergeordnete Domain gehören soll, kann sie der Paket-Admin mittels [[HSAdmin]] einrichten.&lt;br /&gt;
&lt;br /&gt;
* Wenn die Subdomain zu einem anderen Paket des gleichen HS-Mitglieds gehören soll, kann sie der Paket-Admin unter seinem Mitgliedsaccount (hsh00-xyz) mittels [[HSAdmin]] einrichten.&lt;br /&gt;
&lt;br /&gt;
* Wenn die Subdomain an ein anderes Mitglied delegiert werden soll, müssen sich beide Mitglieder mit diesem Wunsch an den Hostsharing-Service wenden. Der Hostsharing-Service richtet die Subdomain ein, wenn ihm übereinstimmende Willenserklärungen der beteiligten Mitglieder vorliegen.&lt;br /&gt;
&lt;br /&gt;
== Eine bestehende Domain einem neuen Domain-Admin oder einem anderen Paket zuordnen ==&lt;br /&gt;
&lt;br /&gt;
Um eine Domain zu verschieben, also einem anderen Admin zuzuordnen, wird grundsätzlich über HSAdmin die Domain gelöscht und neu angelegt. Da die eigentliche Registrierung über das [http://www.domain-bestellsystem.de Domainbestellsystem] erfolgt, bleibt der Eigentümer der Domain unverändert.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Achtung:&#039;&#039;&#039; Das Verzeichnis &amp;lt;tt&amp;gt;~/doms/&#039;&#039;example.org&#039;&#039;/&amp;lt;/tt&amp;gt;, also alle Dateien im Webspace, wird bei dieser Aktion komplett gelöscht! Der Bestand muß vorher manuell gesichert werden (zum Beispiel als &amp;lt;tt&amp;gt;tar&amp;lt;/tt&amp;gt;-Archiv)! Auch die Mailadressen der betreffenden Domain gehen verloren und müssen ggf. neu eingetragen werden!&lt;br /&gt;
&lt;br /&gt;
Der Hostsharing-Service (service@hostsharing.net) kann auch Verschiebungen mit minimalen Ausfallzeiten bei aufwandsabhängiger Abrechnung gemäß des Hostmaster-Stundensatzes durchführen.&lt;br /&gt;
&lt;br /&gt;
== Status der Domaineinrichtung ==&lt;br /&gt;
Der Status eines Domaineinrichtungsvorgangs kann mit dem hsadmin-[[WebFrontend]] oder mit [[hsadmin]] in der [[Shell]]  eingesehen werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
hsadmin -c domain.search&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Adresse von Owner / Admin-C ändern ==&lt;br /&gt;
Um die Adressdaten des Domain-Inhabers zu ändern, aktualisiere den zugehörigen [[Handle]] im [https://www.domain-bestellsystem.de Domain-Bestellsystem].&lt;br /&gt;
&lt;br /&gt;
== Eigene Verwaltung der Zonefiles ==&lt;br /&gt;
Siehe [[Verwalten der Zonendaten]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HSDoku]]&lt;br /&gt;
[[Kategorie:Domains]]&lt;br /&gt;
[[Kategorie:Hsadmin]]&lt;/div&gt;</summary>
		<author><name>Dib00-discourse</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Webanwendungen_vorab_testen&amp;diff=4970</id>
		<title>Webanwendungen vorab testen</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Webanwendungen_vorab_testen&amp;diff=4970"/>
		<updated>2019-09-03T06:52:35Z</updated>

		<summary type="html">&lt;p&gt;Dib00-discourse: grammar fix&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Angenommen, ich möchte eine Webanwendung zu Hostsharing umziehen und habe die Domain bereits geschaltet, aber noch nicht umgezogen.&lt;br /&gt;
Nun möchte ich die Webanwendung testen und ggf. einem Kunden vorstellen, bevor ich den Umzug scharf durchführe.&lt;br /&gt;
&lt;br /&gt;
Zwei alternative Vorschläge hierzu:&lt;br /&gt;
&lt;br /&gt;
a) Man kann in die Hosts-Datei des lokalen Computers für den Domainname die IP-Adresse des Webpakets bei Hostsharing eintragen und den Umzug damit &amp;quot;faken&amp;quot;. Die Wirkung greift sofort, erstreckt sich nur auf den lokalen Computer und sollte wieder aufgehoben werden.&lt;br /&gt;
&lt;br /&gt;
b) Man richtet in der Paket- und Testdomain, die Bestandteil eines jeden Pakets ist, einen Proxy ein, der die Inhalte aus der Paket-Domain &amp;quot;zieht&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
Beispiel für Paket xyz00 und Domain www.example.org:&lt;br /&gt;
&lt;br /&gt;
User: xyz00&lt;br /&gt;
Datei: doms/xyz00.hostsharing.net/htdocs(-ssl)/.htaccess&lt;br /&gt;
&lt;br /&gt;
RequestHeader set Host &amp;quot;www.exmaple.org&amp;quot;&lt;br /&gt;
RewriteEngine On&lt;br /&gt;
RewriteRule ^(.*) http://xyz00.hostsharing.net/$1 [proxy,last]&lt;br /&gt;
&lt;br /&gt;
Dieser Zugriff kann sogar über das HS-Zertifikat verschlüsselt erfolgen.&lt;br /&gt;
Leider ist die Variante b) nicht mit allen Webanwendungen umsetzbar, denn manche Anwendungen erzeugen Umleitungen (Redirects) oder absolute Links, die den Browser auf die Original Domain lenken.&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
[[Kategorie:HSDoku]]&lt;br /&gt;
[[Kategorie:Installationsanleitungen]]&lt;/div&gt;</summary>
		<author><name>Dib00-discourse</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Discourse_installieren&amp;diff=4797</id>
		<title>Discourse installieren</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Discourse_installieren&amp;diff=4797"/>
		<updated>2019-02-11T21:34:25Z</updated>

		<summary type="html">&lt;p&gt;Dib00-discourse: /* Historie */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Textkasten|gelb|Für Managed Server|Ein funktionierender Discourse-Server erfordert mehrere laufende Server-Dienste. Für den Betrieb ist ein Managed Server sinnvoll.}}&lt;br /&gt;
&lt;br /&gt;
{{Textkasten|rot|Support von der Discourse-Community|Die Discourse-Entwickler haben sich entschieden, nur eine mehr oder weniger genormte Installationsmethode (via docker) zu unterstützen. Dies ist so auf der hostsharing-Architektur aufgrund mehrerer Bedenken und Überlegungen nicht möglich. Die Community ist durchaus hilfreich, geht aber davon aus, dass quasi alle Nutzer* eine &amp;quot;supported&amp;quot;e Installation durchgeführt haben. Wenn man in entsprechenden Kanälen nach Hilfe fragt, sollte man unbedingt erwähnen, dass man discourse selber anhand dieser hier lesbaren Anleitung installiert hat, um bereits entsprechenden Kommentaren und Nachfragen vorzugreifen.}}&lt;br /&gt;
&lt;br /&gt;
== Über ==&lt;br /&gt;
&lt;br /&gt;
In diesem Artikel wird die Installation von discourse, Version 2.1.0 (September 2018) beschrieben.&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-discourse&#039;&#039;&lt;br /&gt;
# Eine Domain mit &#039;&#039;xyz00-discourse&#039; als Domain-Administrator, zum Beispiel &#039;&#039;beispiel.discussion&#039;&#039;&lt;br /&gt;
# Einen Postgresql-User &#039;&#039;xyz00_discourseuser&#039;&#039; mit Passwort &#039;&#039;meinPasswort&#039;&#039;&lt;br /&gt;
# Eine Postgresql-Datenbank &#039;&#039;xyz00_discoursedb&#039;&#039; mit Datenbank-Owner &#039;&#039;xyz00_discourseuser&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Verwendete IP-Ports der Server-Dienste:&lt;br /&gt;
# Redis: localhost:32002&lt;br /&gt;
# Discourse-Web: localhost:13000&lt;br /&gt;
&lt;br /&gt;
== Konfiguration der PostgreSQL Datenbank ==&lt;br /&gt;
&lt;br /&gt;
{{Textkasten|gelb|PostgreSQL Extensions|Die PostgreSQL-Datenbank braucht die extensions ``hstore`` und ``pg_trm``. Diese müssen vom hostsharing-support installiert werden.}}&lt;br /&gt;
&lt;br /&gt;
Ansonsten liefe die Erstellung der Datenbank so:&lt;br /&gt;
&lt;br /&gt;
  su - postgres -c psql&lt;br /&gt;
  CREATE DATABASE discourse;&lt;br /&gt;
  CREATE USER discourse;&lt;br /&gt;
  ALTER USER discourse WITH ENCRYPTED PASSWORD &#039;password&#039;;&lt;br /&gt;
  ALTER DATABASE discourse OWNER TO discourse;&lt;br /&gt;
  \connect discourse&lt;br /&gt;
  CREATE EXTENSION hstore;&lt;br /&gt;
  CREATE EXTENSION pg_trgm;&lt;br /&gt;
&lt;br /&gt;
Entsprechende Funktionalität (von den extensions abgesehen) ist auch über den HSAdmin verfügbar.&lt;br /&gt;
&lt;br /&gt;
== Konfiguration des Redis Server ==&lt;br /&gt;
&lt;br /&gt;
{{Textkasten|gelb|Firewall/Redis Port|Leider unterstützt discourse nicht die Kommunikation mit Redis über Unix-Sockets. Dementsprechend muss der für Redis konfigurierte Port von dem hostsharing-Support in der Firewall freigegeben werden.}}&lt;br /&gt;
&lt;br /&gt;
    cd&lt;br /&gt;
    mkdir redis/etc redis/lib redis/log redis/run&lt;br /&gt;
&lt;br /&gt;
Anlegen einer Datei &#039;&#039;/home/pacs/xyz00/users/discourse/redis/etc/redis.conf&#039;&#039; mit folgendem Inhalt:&lt;br /&gt;
&lt;br /&gt;
    daemonize no&lt;br /&gt;
    pidfile /home/pacs/xyz00/users/discourse/redis/run/redis-server.pid&lt;br /&gt;
    port 32002&lt;br /&gt;
    tcp-backlog 128&lt;br /&gt;
    bind 127.0.0.1&lt;br /&gt;
    timeout 300&lt;br /&gt;
    loglevel notice&lt;br /&gt;
    logfile /home/pacs/xyz00/users/discourse/redis/log/redis.log&lt;br /&gt;
    databases 16&lt;br /&gt;
    save 900 1&lt;br /&gt;
    save 300 10&lt;br /&gt;
    save 60 10000&lt;br /&gt;
    slave-serve-stale-data yes&lt;br /&gt;
    appendonly no&lt;br /&gt;
    dbfilename dump.rdb&lt;br /&gt;
    dir /home/pacs/xyz00/users/discourse/redis/lib&lt;br /&gt;
&lt;br /&gt;
== Installation von Ruby ==&lt;br /&gt;
&lt;br /&gt;
Als User &#039;&#039;xyz00-discourse&#039;&#039;:  Installation von Ruby mit &#039;&#039;rbenv&#039;&#039; mit folgenden Befehlen:&lt;br /&gt;
&lt;br /&gt;
Zunächst &#039;&#039;rbenv&#039;&#039; and &#039;&#039;ruby-build&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
    git clone https://github.com/rbenv/rbenv.git ~/.rbenv&lt;br /&gt;
    cd ~/.rbenv &amp;amp;&amp;amp; src/configure &amp;amp;&amp;amp; make -C src&lt;br /&gt;
    echo &#039;export PATH=&amp;quot;$HOME/.rbenv/bin:$PATH&amp;quot;&#039; &amp;gt;&amp;gt; ~/.profile&lt;br /&gt;
    echo &#039;eval &amp;quot;$(rbenv init -)&amp;quot;&#039; &amp;gt;&amp;gt; ~/.profile&lt;br /&gt;
&lt;br /&gt;
starte neue Shell:&lt;br /&gt;
&lt;br /&gt;
    exec bash&lt;br /&gt;
&lt;br /&gt;
Überprüfe rbenv-Installation&lt;br /&gt;
&lt;br /&gt;
    type rbenv&lt;br /&gt;
&lt;br /&gt;
Installiere ruby-build als rbenv-Plugin&lt;br /&gt;
&lt;br /&gt;
    git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build&lt;br /&gt;
&lt;br /&gt;
Nun kann die benötigte Ruby-Version installiert werden:&lt;br /&gt;
&lt;br /&gt;
    rbenv install 2.4&lt;br /&gt;
&lt;br /&gt;
== Installation von Discourse selber ==&lt;br /&gt;
&lt;br /&gt;
Weiterhin Als User &#039;&#039;xyz00-discourse&#039;&#039;:  &lt;br /&gt;
&lt;br /&gt;
    cd ~&lt;br /&gt;
    git clone https://github.com/discourse/discourse.git discourse&lt;br /&gt;
    cd ~/discourse&lt;br /&gt;
&lt;br /&gt;
Die stabile Version auschecken:&lt;br /&gt;
&lt;br /&gt;
    git checkout stable&lt;br /&gt;
&lt;br /&gt;
Ruby Pakete installieren:&lt;br /&gt;
&lt;br /&gt;
    gem install bundler&lt;br /&gt;
    bundle install -j$(getconf _NPROCESSORS_ONLN) --deployment --without development test&lt;br /&gt;
&lt;br /&gt;
== Konfiguration der Discourse Software ==&lt;br /&gt;
&lt;br /&gt;
Anlegen einer Datei &#039;&#039;/home/pacs/xyz00/users/discourse/discourse/config/discourse.conf&#039;&#039; anhand der Beispiel-Datei:&lt;br /&gt;
&lt;br /&gt;
    cd ~/discourse&lt;br /&gt;
    cp config/discourse_defaults.conf config/discourse.conf&lt;br /&gt;
&lt;br /&gt;
Anpassen folgender Inhalte:&lt;br /&gt;
&lt;br /&gt;
    db_host = 127.0.0.1&lt;br /&gt;
    db_port = 5432&lt;br /&gt;
    #db_backup_port = 5432 #(auskommentieren)&lt;br /&gt;
    db_name = xyz00_discoursedb&lt;br /&gt;
    db_username = xyz00_discourseuser&lt;br /&gt;
    db_password = &amp;quot;&amp;quot; #db password&lt;br /&gt;
    hostname = &amp;quot;discourse.xyz00&amp;quot; # hostname&lt;br /&gt;
    smtp_address = localhost&lt;br /&gt;
    smtp_enable_start_tls = false&lt;br /&gt;
    smtp_openssl_verify_mode = &#039;none&#039;&lt;br /&gt;
    developer_emails = # your email-address&lt;br /&gt;
    redis_host = 127.0.0.1&lt;br /&gt;
    redis_port = 32002&lt;br /&gt;
&lt;br /&gt;
===TODO: Secrets setzen! ===&lt;br /&gt;
Die Zufallswerte für die Variablen SECRET_KEY_BASE und OTP_SECRET erzeugt man durch zwei Aufrufe des Kommandos&lt;br /&gt;
&lt;br /&gt;
    RAILS_ENV=production bundle exec rake secret&lt;br /&gt;
&lt;br /&gt;
=== Sidekiq für Hintergrund-Aufgaben konfigurieren ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;config/sidekiq.conf&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Initialisieren der Datenbank ===&lt;br /&gt;
&lt;br /&gt;
    export SAFETY_ASSURED=1&lt;br /&gt;
    # In Version 2.0.4 funktioniert db:migrate noch, ansonsten schema:load und seed nutzen!&lt;br /&gt;
    #RAILS_ENV=production bundle exec rails db:schema:load&lt;br /&gt;
    #RAILS_ENV=production bundle exec rails db:seed&lt;br /&gt;
    RAILS_ENV=production bundle exec rails db:migrate&lt;br /&gt;
&lt;br /&gt;
=== Kompilieren der Assets ===&lt;br /&gt;
&lt;br /&gt;
    RAILS_ENV=production bundle exec rails assets:precompile&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration des Web-Servers (am Beispiel Puma)  ===&lt;br /&gt;
&lt;br /&gt;
Die Datei &#039;&#039;config/puma.conf&#039;&#039; anpassen (hier nur Änderungen angezeigt):&lt;br /&gt;
&lt;br /&gt;
  APP_ROOT = &#039;/home/pacs/xyz00/users/discourse/discourse&#039;&lt;br /&gt;
  daemonize false&lt;br /&gt;
&lt;br /&gt;
== Starten der Dienste  ==&lt;br /&gt;
&lt;br /&gt;
Zum Start aller notwendigen Dienste wird in dieser Anleitung &#039;&#039;supervisor&#039;&#039; benutzt. Hier ein Beispiel für eine Datei &#039;&#039;~/supervisor/etc/supervisord.conf&#039;&#039; (überlange Zeilen werden hier im Wiki umgebrochen)&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;[supervisord]&lt;br /&gt;
logfile=/home/pacs/xyz00/users/discourse/supervisor/log/supervisord.log&lt;br /&gt;
logfile_maxbytes=50MB&lt;br /&gt;
logfile_backups=10&lt;br /&gt;
loglevel=error&lt;br /&gt;
pidfile=/home/pacs/xyz00/users/discourse/supervisor/run/supervisord.pid&lt;br /&gt;
minfds=1024&lt;br /&gt;
minprocs=200&lt;br /&gt;
childlogdir=/home/pacs/xyz00/users/discourse/supervisor/log/&lt;br /&gt;
&lt;br /&gt;
[unix_http_server]&lt;br /&gt;
file=/home/pacs/xyz00/users/discourse/supervisor/run/supervisord.sock&lt;br /&gt;
&lt;br /&gt;
[rpcinterface:supervisor]&lt;br /&gt;
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface&lt;br /&gt;
&lt;br /&gt;
[supervisorctl]&lt;br /&gt;
serverurl=unix:///home/pacs/xyz00/users/discourse/supervisor/run/supervisord.sock&lt;br /&gt;
&lt;br /&gt;
[program:redis]&lt;br /&gt;
command=/usr/bin/redis-server /home/pacs/xyz00/users/discourse/redis/etc/redis.conf&lt;br /&gt;
stderr_logfile = /home/pacs/xyz00/users/discourse/supervisor/log/redis-stderr.log&lt;br /&gt;
stdout_logfile = /home/pacs/xyz00/users/discourse/supervisor/log/redis-stdout.log&lt;br /&gt;
&lt;br /&gt;
[program:discourse-web]&lt;br /&gt;
directory=/home/pacs/xyz00/users/discourse/discourse&lt;br /&gt;
environment=RAILS_ENV=&amp;quot;production&amp;quot;&lt;br /&gt;
command=/home/pacs/xyz00/users/discourse/.rbenv/shims/bundle exec puma -C config/puma.rb -b tcp://127.0.0.1:13000&lt;br /&gt;
stderr_logfile = /home/pacs/xyz00/users/discourse/supervisor/log/discourse-web-stderr.log&lt;br /&gt;
stdout_logfile = /home/pacs/xyz00/users/discourse/supervisor/log/discourse-web-stdout.log&lt;br /&gt;
&lt;br /&gt;
[program:discourse-sidekiq]&lt;br /&gt;
directory=/home/pacs/xyz00/users/discourse/discourse&lt;br /&gt;
environment=RAILS_ENV=&amp;quot;production&amp;quot;&lt;br /&gt;
command=/home/pacs/xyz00/users/discourse/.rbenv/shims/bundle exec sidekiq -C /home/pacs/xyz00/users/discourse/discourse/config/sidekiq.yml&lt;br /&gt;
stderr_logfile = /home/pacs/xyz00/users/discourse/supervisor/log/discourse-sidekiq-stderr.log&lt;br /&gt;
stdout_logfile = /home/pacs/xyz00/users/discourse/supervisor/log/discourse-sidekiq-stdout.log&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Einrichten des Apache VHost ==&lt;br /&gt;
&lt;br /&gt;
    cd ~/doms/beispiel.discuss&lt;br /&gt;
    rm -rf htdocs-ssl subs/www subs-ssl/www&lt;br /&gt;
    ln -s ~/live/public htdocs-ssl&lt;br /&gt;
    touch htdocs-ssl/.htaccess&lt;br /&gt;
&lt;br /&gt;
Dann die &#039;&#039;htdocs-ssl/.htaccess&#039;&#039; (durch das gelinkte Verzeichnis entspricht das dem Pfad /home/pacs/xyz00/users/discourse/discourse/public/.htaccess ) mit dem Editor der Wahl öffnen und folgende Konfiguration einfügen:&lt;br /&gt;
&lt;br /&gt;
  DirectoryIndex disabled&lt;br /&gt;
  &lt;br /&gt;
  RequestHeader set X-Forwarded-Proto &amp;quot;https&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
  RewriteEngine On&lt;br /&gt;
  RewriteBase /&lt;br /&gt;
  RewriteCond %{REQUEST_FILENAME} !-f&lt;br /&gt;
  RewriteCond %{REQUEST_FILENAME} !-l&lt;br /&gt;
  RewriteRule .* http://127.0.0.1:13000%{REQUEST_URI} [proxy,last]&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Cron&#039;&#039; wird für genutzt, um nach dem Server reboot &#039;&#039;supervisord&#039;&#039; zu starten.&lt;br /&gt;
&lt;br /&gt;
Einrichten der crontab mit &#039;&#039;cronttab -e&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
    HOME=/home/pacs/xyz00/users/discourse&lt;br /&gt;
    MAILTO=discourse@beispiel.discuss&lt;br /&gt;
    RAILS_ENV=production&lt;br /&gt;
    NUM_DAYS=31&lt;br /&gt;
    &lt;br /&gt;
  @reboot         /usr/bin/supervisord -c /home/pacs/xyz00/users/discourse/supervisor/etc/supervisord.conf&lt;br /&gt;
&lt;br /&gt;
== Wartung ==&lt;br /&gt;
=== Backup ===&lt;br /&gt;
&lt;br /&gt;
Discourse macht selbstätig backups und legt diese unter &#039;public/backups&#039; ab. Enthalten ist ein Datenbank-Dump und die hochgeladenen Dateien.&lt;br /&gt;
&lt;br /&gt;
Im Admin-Bereich lassen sich backups auch manuell antreten.&lt;br /&gt;
&lt;br /&gt;
=== Updates ===&lt;br /&gt;
&lt;br /&gt;
Discourse wird über update via mail informieren (dies kann man m.W. abschalten).&lt;br /&gt;
&lt;br /&gt;
==== Am Beispiel von 2.0.4 auf 2.1.0 ====&lt;br /&gt;
&lt;br /&gt;
# Im Web-Backend unter Administration-&amp;gt;Backups-&amp;gt; Read-Only Mouds setzen (oder Web Server so konfigurieren, dass keine Zugriffe mehr stattfinden können)&lt;br /&gt;
# Backup&lt;br /&gt;
# Die lokalen Änderungen sichern (git diff &amp;gt; /tmp/discourse.diff)&lt;br /&gt;
# Schauen, ob discourse (endlich :) ) eine neue Ruby-Version nutzt (z.B. in discourse_docker: image/discourse_fast_switch/Dockerfile , discourse: .rubocop&lt;br /&gt;
# git pull&lt;br /&gt;
# (Zur Sicherheit: git checkout stable)&lt;br /&gt;
# bundle&lt;br /&gt;
# RAILS_ENV=production bundle exec rake db:migrate&lt;br /&gt;
# RAILS_ENV=production bundle exec rake assets:precompile&lt;br /&gt;
# Services neu starten (Holzhammer: sv restart all)&lt;br /&gt;
&lt;br /&gt;
==== Am Beispiel von 2.1.0 auf 2.2.0 ====&lt;br /&gt;
&lt;br /&gt;
# Im Web-Backend unter Administration-&amp;gt;Backups-&amp;gt; Read-Only Mouds setzen (oder Web Server so konfigurieren, dass keine Zugriffe mehr stattfinden können)&lt;br /&gt;
# Backup&lt;br /&gt;
# Die lokalen Änderungen sichern (cd discourse; git diff &amp;gt; /tmp/discourse.diff)&lt;br /&gt;
# git pull (ggfs konflikte beheben)&lt;br /&gt;
# (Zur Sicherheit: git checkout stable)&lt;br /&gt;
# Schauen, ob discourse (endlich :) ) eine neue Ruby-Version nutzt (z.B. in discourse_docker: image/discourse_fast_switch/Dockerfile , discourse: .rubocop&lt;br /&gt;
# Dies ist der Fall, also&lt;br /&gt;
# rbenv install 2.5&lt;br /&gt;
# rbenv rehash&lt;br /&gt;
# echo &amp;quot;2.5.2&amp;quot; &amp;gt; .ruby-version&lt;br /&gt;
# gem update --system&lt;br /&gt;
# bundle&lt;br /&gt;
# RAILS_ENV=production bundle exec rake db:migrate&lt;br /&gt;
# RAILS_ENV=production bundle exec rake assets:precompile&lt;br /&gt;
# Services neu starten (Holzhammer: sv restart all)&lt;br /&gt;
&lt;br /&gt;
== ToDos ==&lt;br /&gt;
&lt;br /&gt;
* Ein Patch, um Discourse auch via Unix-Socket mit Redis sprechen lassen zu können dürfte relativ einfach sein (es wird ein Wrapper um das redis-gem genutzt).&lt;br /&gt;
* Konfiguration von discourse, um mit postgresql via Unix-Socket zu kommunizieren (DISCOURSE_DB_SOCKET environment variable)&lt;br /&gt;
* Performance-tuning an diversen Stellen, anhand der discourse_docker-Vorgaben (https://github.com/discourse/discourse_docker), z.B.&lt;br /&gt;
** thpoff (huge page settings)&lt;br /&gt;
** unicorn (hat eine wesentlich ausgefeiltere Konfigurations-Vorlage, wahrscheinlich bereits ordentlich optimiert)&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* https://help.skysilk.com/support/solutions/articles/9000120927-how-to-install-discourse-without-docker-using-skysilk-vps-&lt;br /&gt;
* https://github.com/discourse/discourse_docker&lt;br /&gt;
* https://github.com/discourse/discourse&lt;br /&gt;
&lt;br /&gt;
== Historie ==&lt;br /&gt;
&lt;br /&gt;
* 2018, 14 . September: Initiale Fassung&lt;br /&gt;
* 2019, Januar: Update-Informationen ergänzt&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[Kategorie:HSDoku]]&lt;br /&gt;
[[Kategorie:Installationsanleitungen]]&lt;br /&gt;
[[Kategorie:Webforen]]&lt;/div&gt;</summary>
		<author><name>Dib00-discourse</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Discourse_installieren&amp;diff=4793</id>
		<title>Discourse installieren</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Discourse_installieren&amp;diff=4793"/>
		<updated>2019-02-04T10:15:40Z</updated>

		<summary type="html">&lt;p&gt;Dib00-discourse: /* Am Beispiel von 2.1.0 auf 2.2.0 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Textkasten|gelb|Für Managed Server|Ein funktionierender Discourse-Server erfordert mehrere laufende Server-Dienste. Für den Betrieb ist ein Managed Server sinnvoll.}}&lt;br /&gt;
&lt;br /&gt;
{{Textkasten|rot|Support von der Discourse-Community|Die Discourse-Entwickler haben sich entschieden, nur eine mehr oder weniger genormte Installationsmethode (via docker) zu unterstützen. Dies ist so auf der hostsharing-Architektur aufgrund mehrerer Bedenken und Überlegungen nicht möglich. Die Community ist durchaus hilfreich, geht aber davon aus, dass quasi alle Nutzer* eine &amp;quot;supported&amp;quot;e Installation durchgeführt haben. Wenn man in entsprechenden Kanälen nach Hilfe fragt, sollte man unbedingt erwähnen, dass man discourse selber anhand dieser hier lesbaren Anleitung installiert hat, um bereits entsprechenden Kommentaren und Nachfragen vorzugreifen.}}&lt;br /&gt;
&lt;br /&gt;
== Über ==&lt;br /&gt;
&lt;br /&gt;
In diesem Artikel wird die Installation von discourse, Version 2.1.0 (September 2018) beschrieben.&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-discourse&#039;&#039;&lt;br /&gt;
# Eine Domain mit &#039;&#039;xyz00-discourse&#039; als Domain-Administrator, zum Beispiel &#039;&#039;beispiel.discussion&#039;&#039;&lt;br /&gt;
# Einen Postgresql-User &#039;&#039;xyz00_discourseuser&#039;&#039; mit Passwort &#039;&#039;meinPasswort&#039;&#039;&lt;br /&gt;
# Eine Postgresql-Datenbank &#039;&#039;xyz00_discoursedb&#039;&#039; mit Datenbank-Owner &#039;&#039;xyz00_discourseuser&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Verwendete IP-Ports der Server-Dienste:&lt;br /&gt;
# Redis: localhost:32002&lt;br /&gt;
# Discourse-Web: localhost:13000&lt;br /&gt;
&lt;br /&gt;
== Konfiguration der PostgreSQL Datenbank ==&lt;br /&gt;
&lt;br /&gt;
{{Textkasten|gelb|PostgreSQL Extensions|Die PostgreSQL-Datenbank braucht die extensions ``hstore`` und ``pg_trm``. Diese müssen vom hostsharing-support installiert werden.}}&lt;br /&gt;
&lt;br /&gt;
Ansonsten liefe die Erstellung der Datenbank so:&lt;br /&gt;
&lt;br /&gt;
  su - postgres -c psql&lt;br /&gt;
  CREATE DATABASE discourse;&lt;br /&gt;
  CREATE USER discourse;&lt;br /&gt;
  ALTER USER discourse WITH ENCRYPTED PASSWORD &#039;password&#039;;&lt;br /&gt;
  ALTER DATABASE discourse OWNER TO discourse;&lt;br /&gt;
  \connect discourse&lt;br /&gt;
  CREATE EXTENSION hstore;&lt;br /&gt;
  CREATE EXTENSION pg_trgm;&lt;br /&gt;
&lt;br /&gt;
Entsprechende Funktionalität (von den extensions abgesehen) ist auch über den HSAdmin verfügbar.&lt;br /&gt;
&lt;br /&gt;
== Konfiguration des Redis Server ==&lt;br /&gt;
&lt;br /&gt;
{{Textkasten|gelb|Firewall/Redis Port|Leider unterstützt discourse nicht die Kommunikation mit Redis über Unix-Sockets. Dementsprechend muss der für Redis konfigurierte Port von dem hostsharing-Support in der Firewall freigegeben werden.}}&lt;br /&gt;
&lt;br /&gt;
    cd&lt;br /&gt;
    mkdir redis/etc redis/lib redis/log redis/run&lt;br /&gt;
&lt;br /&gt;
Anlegen einer Datei &#039;&#039;/home/pacs/xyz00/users/discourse/redis/etc/redis.conf&#039;&#039; mit folgendem Inhalt:&lt;br /&gt;
&lt;br /&gt;
    daemonize no&lt;br /&gt;
    pidfile /home/pacs/xyz00/users/discourse/redis/run/redis-server.pid&lt;br /&gt;
    port 32002&lt;br /&gt;
    tcp-backlog 128&lt;br /&gt;
    bind 127.0.0.1&lt;br /&gt;
    timeout 300&lt;br /&gt;
    loglevel notice&lt;br /&gt;
    logfile /home/pacs/xyz00/users/discourse/redis/log/redis.log&lt;br /&gt;
    databases 16&lt;br /&gt;
    save 900 1&lt;br /&gt;
    save 300 10&lt;br /&gt;
    save 60 10000&lt;br /&gt;
    slave-serve-stale-data yes&lt;br /&gt;
    appendonly no&lt;br /&gt;
    dbfilename dump.rdb&lt;br /&gt;
    dir /home/pacs/xyz00/users/discourse/redis/lib&lt;br /&gt;
&lt;br /&gt;
== Installation von Ruby ==&lt;br /&gt;
&lt;br /&gt;
Als User &#039;&#039;xyz00-discourse&#039;&#039;:  Installation von Ruby mit &#039;&#039;rbenv&#039;&#039; mit folgenden Befehlen:&lt;br /&gt;
&lt;br /&gt;
Zunächst &#039;&#039;rbenv&#039;&#039; and &#039;&#039;ruby-build&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
    git clone https://github.com/rbenv/rbenv.git ~/.rbenv&lt;br /&gt;
    cd ~/.rbenv &amp;amp;&amp;amp; src/configure &amp;amp;&amp;amp; make -C src&lt;br /&gt;
    echo &#039;export PATH=&amp;quot;$HOME/.rbenv/bin:$PATH&amp;quot;&#039; &amp;gt;&amp;gt; ~/.profile&lt;br /&gt;
    echo &#039;eval &amp;quot;$(rbenv init -)&amp;quot;&#039; &amp;gt;&amp;gt; ~/.profile&lt;br /&gt;
&lt;br /&gt;
starte neue Shell:&lt;br /&gt;
&lt;br /&gt;
    exec bash&lt;br /&gt;
&lt;br /&gt;
Überprüfe rbenv-Installation&lt;br /&gt;
&lt;br /&gt;
    type rbenv&lt;br /&gt;
&lt;br /&gt;
Installiere ruby-build als rbenv-Plugin&lt;br /&gt;
&lt;br /&gt;
    git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build&lt;br /&gt;
&lt;br /&gt;
Nun kann die benötigte Ruby-Version installiert werden:&lt;br /&gt;
&lt;br /&gt;
    rbenv install 2.4&lt;br /&gt;
&lt;br /&gt;
== Installation von Discourse selber ==&lt;br /&gt;
&lt;br /&gt;
Weiterhin Als User &#039;&#039;xyz00-discourse&#039;&#039;:  &lt;br /&gt;
&lt;br /&gt;
    cd ~&lt;br /&gt;
    git clone https://github.com/discourse/discourse.git discourse&lt;br /&gt;
    cd ~/discourse&lt;br /&gt;
&lt;br /&gt;
Die stabile Version auschecken:&lt;br /&gt;
&lt;br /&gt;
    git checkout stable&lt;br /&gt;
&lt;br /&gt;
Ruby Pakete installieren:&lt;br /&gt;
&lt;br /&gt;
    gem install bundler&lt;br /&gt;
    bundle install -j$(getconf _NPROCESSORS_ONLN) --deployment --without development test&lt;br /&gt;
&lt;br /&gt;
== Konfiguration der Discourse Software ==&lt;br /&gt;
&lt;br /&gt;
Anlegen einer Datei &#039;&#039;/home/pacs/xyz00/users/discourse/discourse/config/discourse.conf&#039;&#039; anhand der Beispiel-Datei:&lt;br /&gt;
&lt;br /&gt;
    cd ~/discourse&lt;br /&gt;
    cp config/discourse_defaults.conf config/discourse.conf&lt;br /&gt;
&lt;br /&gt;
Anpassen folgender Inhalte:&lt;br /&gt;
&lt;br /&gt;
    db_host = 127.0.0.1&lt;br /&gt;
    db_port = 5432&lt;br /&gt;
    #db_backup_port = 5432 #(auskommentieren)&lt;br /&gt;
    db_name = xyz00_discoursedb&lt;br /&gt;
    db_username = xyz00_discourseuser&lt;br /&gt;
    db_password = &amp;quot;&amp;quot; #db password&lt;br /&gt;
    hostname = &amp;quot;discourse.xyz00&amp;quot; # hostname&lt;br /&gt;
    smtp_address = localhost&lt;br /&gt;
    smtp_enable_start_tls = false&lt;br /&gt;
    smtp_openssl_verify_mode = &#039;none&#039;&lt;br /&gt;
    developer_emails = # your email-address&lt;br /&gt;
    redis_host = 127.0.0.1&lt;br /&gt;
    redis_port = 32002&lt;br /&gt;
&lt;br /&gt;
===TODO: Secrets setzen! ===&lt;br /&gt;
Die Zufallswerte für die Variablen SECRET_KEY_BASE und OTP_SECRET erzeugt man durch zwei Aufrufe des Kommandos&lt;br /&gt;
&lt;br /&gt;
    RAILS_ENV=production bundle exec rake secret&lt;br /&gt;
&lt;br /&gt;
=== Sidekiq für Hintergrund-Aufgaben konfigurieren ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;config/sidekiq.conf&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Initialisieren der Datenbank ===&lt;br /&gt;
&lt;br /&gt;
    export SAFETY_ASSURED=1&lt;br /&gt;
    # In Version 2.0.4 funktioniert db:migrate noch, ansonsten schema:load und seed nutzen!&lt;br /&gt;
    #RAILS_ENV=production bundle exec rails db:schema:load&lt;br /&gt;
    #RAILS_ENV=production bundle exec rails db:seed&lt;br /&gt;
    RAILS_ENV=production bundle exec rails db:migrate&lt;br /&gt;
&lt;br /&gt;
=== Kompilieren der Assets ===&lt;br /&gt;
&lt;br /&gt;
    RAILS_ENV=production bundle exec rails assets:precompile&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration des Web-Servers (am Beispiel Puma)  ===&lt;br /&gt;
&lt;br /&gt;
Die Datei &#039;&#039;config/puma.conf&#039;&#039; anpassen (hier nur Änderungen angezeigt):&lt;br /&gt;
&lt;br /&gt;
  APP_ROOT = &#039;/home/pacs/xyz00/users/discourse/discourse&#039;&lt;br /&gt;
  daemonize false&lt;br /&gt;
&lt;br /&gt;
== Starten der Dienste  ==&lt;br /&gt;
&lt;br /&gt;
Zum Start aller notwendigen Dienste wird in dieser Anleitung &#039;&#039;supervisor&#039;&#039; benutzt. Hier ein Beispiel für eine Datei &#039;&#039;~/supervisor/etc/supervisord.conf&#039;&#039; (überlange Zeilen werden hier im Wiki umgebrochen)&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;[supervisord]&lt;br /&gt;
logfile=/home/pacs/xyz00/users/discourse/supervisor/log/supervisord.log&lt;br /&gt;
logfile_maxbytes=50MB&lt;br /&gt;
logfile_backups=10&lt;br /&gt;
loglevel=error&lt;br /&gt;
pidfile=/home/pacs/xyz00/users/discourse/supervisor/run/supervisord.pid&lt;br /&gt;
minfds=1024&lt;br /&gt;
minprocs=200&lt;br /&gt;
childlogdir=/home/pacs/xyz00/users/discourse/supervisor/log/&lt;br /&gt;
&lt;br /&gt;
[unix_http_server]&lt;br /&gt;
file=/home/pacs/xyz00/users/discourse/supervisor/run/supervisord.sock&lt;br /&gt;
&lt;br /&gt;
[rpcinterface:supervisor]&lt;br /&gt;
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface&lt;br /&gt;
&lt;br /&gt;
[supervisorctl]&lt;br /&gt;
serverurl=unix:///home/pacs/xyz00/users/discourse/supervisor/run/supervisord.sock&lt;br /&gt;
&lt;br /&gt;
[program:redis]&lt;br /&gt;
command=/usr/bin/redis-server /home/pacs/xyz00/users/discourse/redis/etc/redis.conf&lt;br /&gt;
stderr_logfile = /home/pacs/xyz00/users/discourse/supervisor/log/redis-stderr.log&lt;br /&gt;
stdout_logfile = /home/pacs/xyz00/users/discourse/supervisor/log/redis-stdout.log&lt;br /&gt;
&lt;br /&gt;
[program:discourse-web]&lt;br /&gt;
directory=/home/pacs/xyz00/users/discourse/discourse&lt;br /&gt;
environment=RAILS_ENV=&amp;quot;production&amp;quot;&lt;br /&gt;
command=/home/pacs/xyz00/users/discourse/.rbenv/shims/bundle exec puma -C config/puma.rb -b tcp://127.0.0.1:13000&lt;br /&gt;
stderr_logfile = /home/pacs/xyz00/users/discourse/supervisor/log/discourse-web-stderr.log&lt;br /&gt;
stdout_logfile = /home/pacs/xyz00/users/discourse/supervisor/log/discourse-web-stdout.log&lt;br /&gt;
&lt;br /&gt;
[program:discourse-sidekiq]&lt;br /&gt;
directory=/home/pacs/xyz00/users/discourse/discourse&lt;br /&gt;
environment=RAILS_ENV=&amp;quot;production&amp;quot;&lt;br /&gt;
command=/home/pacs/xyz00/users/discourse/.rbenv/shims/bundle exec sidekiq -C /home/pacs/xyz00/users/discourse/discourse/config/sidekiq.yml&lt;br /&gt;
stderr_logfile = /home/pacs/xyz00/users/discourse/supervisor/log/discourse-sidekiq-stderr.log&lt;br /&gt;
stdout_logfile = /home/pacs/xyz00/users/discourse/supervisor/log/discourse-sidekiq-stdout.log&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Einrichten des Apache VHost ==&lt;br /&gt;
&lt;br /&gt;
    cd ~/doms/beispiel.discuss&lt;br /&gt;
    rm -rf htdocs-ssl subs/www subs-ssl/www&lt;br /&gt;
    ln -s ~/live/public htdocs-ssl&lt;br /&gt;
    touch htdocs-ssl/.htaccess&lt;br /&gt;
&lt;br /&gt;
Dann die &#039;&#039;htdocs-ssl/.htaccess&#039;&#039; (durch das gelinkte Verzeichnis entspricht das dem Pfad /home/pacs/xyz00/users/discourse/discourse/public/.htaccess ) mit dem Editor der Wahl öffnen und folgende Konfiguration einfügen:&lt;br /&gt;
&lt;br /&gt;
  DirectoryIndex disabled&lt;br /&gt;
  &lt;br /&gt;
  RequestHeader set X-Forwarded-Proto &amp;quot;https&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
  RewriteEngine On&lt;br /&gt;
  RewriteBase /&lt;br /&gt;
  RewriteCond %{REQUEST_FILENAME} !-f&lt;br /&gt;
  RewriteCond %{REQUEST_FILENAME} !-l&lt;br /&gt;
  RewriteRule .* http://127.0.0.1:13000%{REQUEST_URI} [proxy,last]&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Cron&#039;&#039; wird für genutzt, um nach dem Server reboot &#039;&#039;supervisord&#039;&#039; zu starten.&lt;br /&gt;
&lt;br /&gt;
Einrichten der crontab mit &#039;&#039;cronttab -e&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
    HOME=/home/pacs/xyz00/users/discourse&lt;br /&gt;
    MAILTO=discourse@beispiel.discuss&lt;br /&gt;
    RAILS_ENV=production&lt;br /&gt;
    NUM_DAYS=31&lt;br /&gt;
    &lt;br /&gt;
  @reboot         /usr/bin/supervisord -c /home/pacs/xyz00/users/discourse/supervisor/etc/supervisord.conf&lt;br /&gt;
&lt;br /&gt;
== Wartung ==&lt;br /&gt;
=== Backup ===&lt;br /&gt;
&lt;br /&gt;
Discourse macht selbstätig backups und legt diese unter &#039;public/backups&#039; ab. Enthalten ist ein Datenbank-Dump und die hochgeladenen Dateien.&lt;br /&gt;
&lt;br /&gt;
Im Admin-Bereich lassen sich backups auch manuell antreten.&lt;br /&gt;
&lt;br /&gt;
=== Updates ===&lt;br /&gt;
&lt;br /&gt;
Discourse wird über update via mail informieren (dies kann man m.W. abschalten).&lt;br /&gt;
&lt;br /&gt;
==== Am Beispiel von 2.0.4 auf 2.1.0 ====&lt;br /&gt;
&lt;br /&gt;
# Im Web-Backend unter Administration-&amp;gt;Backups-&amp;gt; Read-Only Mouds setzen (oder Web Server so konfigurieren, dass keine Zugriffe mehr stattfinden können)&lt;br /&gt;
# Backup&lt;br /&gt;
# Die lokalen Änderungen sichern (git diff &amp;gt; /tmp/discourse.diff)&lt;br /&gt;
# Schauen, ob discourse (endlich :) ) eine neue Ruby-Version nutzt (z.B. in discourse_docker: image/discourse_fast_switch/Dockerfile , discourse: .rubocop&lt;br /&gt;
# git pull&lt;br /&gt;
# (Zur Sicherheit: git checkout stable)&lt;br /&gt;
# bundle&lt;br /&gt;
# RAILS_ENV=production bundle exec rake db:migrate&lt;br /&gt;
# RAILS_ENV=production bundle exec rake assets:precompile&lt;br /&gt;
# Services neu starten (Holzhammer: sv restart all)&lt;br /&gt;
&lt;br /&gt;
==== Am Beispiel von 2.1.0 auf 2.2.0 ====&lt;br /&gt;
&lt;br /&gt;
# Im Web-Backend unter Administration-&amp;gt;Backups-&amp;gt; Read-Only Mouds setzen (oder Web Server so konfigurieren, dass keine Zugriffe mehr stattfinden können)&lt;br /&gt;
# Backup&lt;br /&gt;
# Die lokalen Änderungen sichern (cd discourse; git diff &amp;gt; /tmp/discourse.diff)&lt;br /&gt;
# git pull (ggfs konflikte beheben)&lt;br /&gt;
# (Zur Sicherheit: git checkout stable)&lt;br /&gt;
# Schauen, ob discourse (endlich :) ) eine neue Ruby-Version nutzt (z.B. in discourse_docker: image/discourse_fast_switch/Dockerfile , discourse: .rubocop&lt;br /&gt;
# Dies ist der Fall, also&lt;br /&gt;
# rbenv install 2.5&lt;br /&gt;
# rbenv rehash&lt;br /&gt;
# echo &amp;quot;2.5.2&amp;quot; &amp;gt; .ruby-version&lt;br /&gt;
# gem update --system&lt;br /&gt;
# bundle&lt;br /&gt;
# RAILS_ENV=production bundle exec rake db:migrate&lt;br /&gt;
# RAILS_ENV=production bundle exec rake assets:precompile&lt;br /&gt;
# Services neu starten (Holzhammer: sv restart all)&lt;br /&gt;
&lt;br /&gt;
== ToDos ==&lt;br /&gt;
&lt;br /&gt;
* Ein Patch, um Discourse auch via Unix-Socket mit Redis sprechen lassen zu können dürfte relativ einfach sein (es wird ein Wrapper um das redis-gem genutzt).&lt;br /&gt;
* Konfiguration von discourse, um mit postgresql via Unix-Socket zu kommunizieren (DISCOURSE_DB_SOCKET environment variable)&lt;br /&gt;
* Performance-tuning an diversen Stellen, anhand der discourse_docker-Vorgaben (https://github.com/discourse/discourse_docker), z.B.&lt;br /&gt;
** thpoff (huge page settings)&lt;br /&gt;
** unicorn (hat eine wesentlich ausgefeiltere Konfigurations-Vorlage, wahrscheinlich bereits ordentlich optimiert)&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* https://help.skysilk.com/support/solutions/articles/9000120927-how-to-install-discourse-without-docker-using-skysilk-vps-&lt;br /&gt;
* https://github.com/discourse/discourse_docker&lt;br /&gt;
* https://github.com/discourse/discourse&lt;br /&gt;
&lt;br /&gt;
== Historie ==&lt;br /&gt;
&lt;br /&gt;
* 2018, 14 . September: Initiale Fassung&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[Kategorie:HSDoku]]&lt;br /&gt;
[[Kategorie:Installationsanleitungen]]&lt;br /&gt;
[[Kategorie:Webforen]]&lt;/div&gt;</summary>
		<author><name>Dib00-discourse</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Discourse_installieren&amp;diff=4792</id>
		<title>Discourse installieren</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Discourse_installieren&amp;diff=4792"/>
		<updated>2019-02-04T09:47:02Z</updated>

		<summary type="html">&lt;p&gt;Dib00-discourse: /* Am Beispiel von 2.1.0 auf 2.2.0 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Textkasten|gelb|Für Managed Server|Ein funktionierender Discourse-Server erfordert mehrere laufende Server-Dienste. Für den Betrieb ist ein Managed Server sinnvoll.}}&lt;br /&gt;
&lt;br /&gt;
{{Textkasten|rot|Support von der Discourse-Community|Die Discourse-Entwickler haben sich entschieden, nur eine mehr oder weniger genormte Installationsmethode (via docker) zu unterstützen. Dies ist so auf der hostsharing-Architektur aufgrund mehrerer Bedenken und Überlegungen nicht möglich. Die Community ist durchaus hilfreich, geht aber davon aus, dass quasi alle Nutzer* eine &amp;quot;supported&amp;quot;e Installation durchgeführt haben. Wenn man in entsprechenden Kanälen nach Hilfe fragt, sollte man unbedingt erwähnen, dass man discourse selber anhand dieser hier lesbaren Anleitung installiert hat, um bereits entsprechenden Kommentaren und Nachfragen vorzugreifen.}}&lt;br /&gt;
&lt;br /&gt;
== Über ==&lt;br /&gt;
&lt;br /&gt;
In diesem Artikel wird die Installation von discourse, Version 2.1.0 (September 2018) beschrieben.&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-discourse&#039;&#039;&lt;br /&gt;
# Eine Domain mit &#039;&#039;xyz00-discourse&#039; als Domain-Administrator, zum Beispiel &#039;&#039;beispiel.discussion&#039;&#039;&lt;br /&gt;
# Einen Postgresql-User &#039;&#039;xyz00_discourseuser&#039;&#039; mit Passwort &#039;&#039;meinPasswort&#039;&#039;&lt;br /&gt;
# Eine Postgresql-Datenbank &#039;&#039;xyz00_discoursedb&#039;&#039; mit Datenbank-Owner &#039;&#039;xyz00_discourseuser&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Verwendete IP-Ports der Server-Dienste:&lt;br /&gt;
# Redis: localhost:32002&lt;br /&gt;
# Discourse-Web: localhost:13000&lt;br /&gt;
&lt;br /&gt;
== Konfiguration der PostgreSQL Datenbank ==&lt;br /&gt;
&lt;br /&gt;
{{Textkasten|gelb|PostgreSQL Extensions|Die PostgreSQL-Datenbank braucht die extensions ``hstore`` und ``pg_trm``. Diese müssen vom hostsharing-support installiert werden.}}&lt;br /&gt;
&lt;br /&gt;
Ansonsten liefe die Erstellung der Datenbank so:&lt;br /&gt;
&lt;br /&gt;
  su - postgres -c psql&lt;br /&gt;
  CREATE DATABASE discourse;&lt;br /&gt;
  CREATE USER discourse;&lt;br /&gt;
  ALTER USER discourse WITH ENCRYPTED PASSWORD &#039;password&#039;;&lt;br /&gt;
  ALTER DATABASE discourse OWNER TO discourse;&lt;br /&gt;
  \connect discourse&lt;br /&gt;
  CREATE EXTENSION hstore;&lt;br /&gt;
  CREATE EXTENSION pg_trgm;&lt;br /&gt;
&lt;br /&gt;
Entsprechende Funktionalität (von den extensions abgesehen) ist auch über den HSAdmin verfügbar.&lt;br /&gt;
&lt;br /&gt;
== Konfiguration des Redis Server ==&lt;br /&gt;
&lt;br /&gt;
{{Textkasten|gelb|Firewall/Redis Port|Leider unterstützt discourse nicht die Kommunikation mit Redis über Unix-Sockets. Dementsprechend muss der für Redis konfigurierte Port von dem hostsharing-Support in der Firewall freigegeben werden.}}&lt;br /&gt;
&lt;br /&gt;
    cd&lt;br /&gt;
    mkdir redis/etc redis/lib redis/log redis/run&lt;br /&gt;
&lt;br /&gt;
Anlegen einer Datei &#039;&#039;/home/pacs/xyz00/users/discourse/redis/etc/redis.conf&#039;&#039; mit folgendem Inhalt:&lt;br /&gt;
&lt;br /&gt;
    daemonize no&lt;br /&gt;
    pidfile /home/pacs/xyz00/users/discourse/redis/run/redis-server.pid&lt;br /&gt;
    port 32002&lt;br /&gt;
    tcp-backlog 128&lt;br /&gt;
    bind 127.0.0.1&lt;br /&gt;
    timeout 300&lt;br /&gt;
    loglevel notice&lt;br /&gt;
    logfile /home/pacs/xyz00/users/discourse/redis/log/redis.log&lt;br /&gt;
    databases 16&lt;br /&gt;
    save 900 1&lt;br /&gt;
    save 300 10&lt;br /&gt;
    save 60 10000&lt;br /&gt;
    slave-serve-stale-data yes&lt;br /&gt;
    appendonly no&lt;br /&gt;
    dbfilename dump.rdb&lt;br /&gt;
    dir /home/pacs/xyz00/users/discourse/redis/lib&lt;br /&gt;
&lt;br /&gt;
== Installation von Ruby ==&lt;br /&gt;
&lt;br /&gt;
Als User &#039;&#039;xyz00-discourse&#039;&#039;:  Installation von Ruby mit &#039;&#039;rbenv&#039;&#039; mit folgenden Befehlen:&lt;br /&gt;
&lt;br /&gt;
Zunächst &#039;&#039;rbenv&#039;&#039; and &#039;&#039;ruby-build&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
    git clone https://github.com/rbenv/rbenv.git ~/.rbenv&lt;br /&gt;
    cd ~/.rbenv &amp;amp;&amp;amp; src/configure &amp;amp;&amp;amp; make -C src&lt;br /&gt;
    echo &#039;export PATH=&amp;quot;$HOME/.rbenv/bin:$PATH&amp;quot;&#039; &amp;gt;&amp;gt; ~/.profile&lt;br /&gt;
    echo &#039;eval &amp;quot;$(rbenv init -)&amp;quot;&#039; &amp;gt;&amp;gt; ~/.profile&lt;br /&gt;
&lt;br /&gt;
starte neue Shell:&lt;br /&gt;
&lt;br /&gt;
    exec bash&lt;br /&gt;
&lt;br /&gt;
Überprüfe rbenv-Installation&lt;br /&gt;
&lt;br /&gt;
    type rbenv&lt;br /&gt;
&lt;br /&gt;
Installiere ruby-build als rbenv-Plugin&lt;br /&gt;
&lt;br /&gt;
    git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build&lt;br /&gt;
&lt;br /&gt;
Nun kann die benötigte Ruby-Version installiert werden:&lt;br /&gt;
&lt;br /&gt;
    rbenv install 2.4&lt;br /&gt;
&lt;br /&gt;
== Installation von Discourse selber ==&lt;br /&gt;
&lt;br /&gt;
Weiterhin Als User &#039;&#039;xyz00-discourse&#039;&#039;:  &lt;br /&gt;
&lt;br /&gt;
    cd ~&lt;br /&gt;
    git clone https://github.com/discourse/discourse.git discourse&lt;br /&gt;
    cd ~/discourse&lt;br /&gt;
&lt;br /&gt;
Die stabile Version auschecken:&lt;br /&gt;
&lt;br /&gt;
    git checkout stable&lt;br /&gt;
&lt;br /&gt;
Ruby Pakete installieren:&lt;br /&gt;
&lt;br /&gt;
    gem install bundler&lt;br /&gt;
    bundle install -j$(getconf _NPROCESSORS_ONLN) --deployment --without development test&lt;br /&gt;
&lt;br /&gt;
== Konfiguration der Discourse Software ==&lt;br /&gt;
&lt;br /&gt;
Anlegen einer Datei &#039;&#039;/home/pacs/xyz00/users/discourse/discourse/config/discourse.conf&#039;&#039; anhand der Beispiel-Datei:&lt;br /&gt;
&lt;br /&gt;
    cd ~/discourse&lt;br /&gt;
    cp config/discourse_defaults.conf config/discourse.conf&lt;br /&gt;
&lt;br /&gt;
Anpassen folgender Inhalte:&lt;br /&gt;
&lt;br /&gt;
    db_host = 127.0.0.1&lt;br /&gt;
    db_port = 5432&lt;br /&gt;
    #db_backup_port = 5432 #(auskommentieren)&lt;br /&gt;
    db_name = xyz00_discoursedb&lt;br /&gt;
    db_username = xyz00_discourseuser&lt;br /&gt;
    db_password = &amp;quot;&amp;quot; #db password&lt;br /&gt;
    hostname = &amp;quot;discourse.xyz00&amp;quot; # hostname&lt;br /&gt;
    smtp_address = localhost&lt;br /&gt;
    smtp_enable_start_tls = false&lt;br /&gt;
    smtp_openssl_verify_mode = &#039;none&#039;&lt;br /&gt;
    developer_emails = # your email-address&lt;br /&gt;
    redis_host = 127.0.0.1&lt;br /&gt;
    redis_port = 32002&lt;br /&gt;
&lt;br /&gt;
===TODO: Secrets setzen! ===&lt;br /&gt;
Die Zufallswerte für die Variablen SECRET_KEY_BASE und OTP_SECRET erzeugt man durch zwei Aufrufe des Kommandos&lt;br /&gt;
&lt;br /&gt;
    RAILS_ENV=production bundle exec rake secret&lt;br /&gt;
&lt;br /&gt;
=== Sidekiq für Hintergrund-Aufgaben konfigurieren ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;config/sidekiq.conf&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Initialisieren der Datenbank ===&lt;br /&gt;
&lt;br /&gt;
    export SAFETY_ASSURED=1&lt;br /&gt;
    # In Version 2.0.4 funktioniert db:migrate noch, ansonsten schema:load und seed nutzen!&lt;br /&gt;
    #RAILS_ENV=production bundle exec rails db:schema:load&lt;br /&gt;
    #RAILS_ENV=production bundle exec rails db:seed&lt;br /&gt;
    RAILS_ENV=production bundle exec rails db:migrate&lt;br /&gt;
&lt;br /&gt;
=== Kompilieren der Assets ===&lt;br /&gt;
&lt;br /&gt;
    RAILS_ENV=production bundle exec rails assets:precompile&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration des Web-Servers (am Beispiel Puma)  ===&lt;br /&gt;
&lt;br /&gt;
Die Datei &#039;&#039;config/puma.conf&#039;&#039; anpassen (hier nur Änderungen angezeigt):&lt;br /&gt;
&lt;br /&gt;
  APP_ROOT = &#039;/home/pacs/xyz00/users/discourse/discourse&#039;&lt;br /&gt;
  daemonize false&lt;br /&gt;
&lt;br /&gt;
== Starten der Dienste  ==&lt;br /&gt;
&lt;br /&gt;
Zum Start aller notwendigen Dienste wird in dieser Anleitung &#039;&#039;supervisor&#039;&#039; benutzt. Hier ein Beispiel für eine Datei &#039;&#039;~/supervisor/etc/supervisord.conf&#039;&#039; (überlange Zeilen werden hier im Wiki umgebrochen)&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;[supervisord]&lt;br /&gt;
logfile=/home/pacs/xyz00/users/discourse/supervisor/log/supervisord.log&lt;br /&gt;
logfile_maxbytes=50MB&lt;br /&gt;
logfile_backups=10&lt;br /&gt;
loglevel=error&lt;br /&gt;
pidfile=/home/pacs/xyz00/users/discourse/supervisor/run/supervisord.pid&lt;br /&gt;
minfds=1024&lt;br /&gt;
minprocs=200&lt;br /&gt;
childlogdir=/home/pacs/xyz00/users/discourse/supervisor/log/&lt;br /&gt;
&lt;br /&gt;
[unix_http_server]&lt;br /&gt;
file=/home/pacs/xyz00/users/discourse/supervisor/run/supervisord.sock&lt;br /&gt;
&lt;br /&gt;
[rpcinterface:supervisor]&lt;br /&gt;
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface&lt;br /&gt;
&lt;br /&gt;
[supervisorctl]&lt;br /&gt;
serverurl=unix:///home/pacs/xyz00/users/discourse/supervisor/run/supervisord.sock&lt;br /&gt;
&lt;br /&gt;
[program:redis]&lt;br /&gt;
command=/usr/bin/redis-server /home/pacs/xyz00/users/discourse/redis/etc/redis.conf&lt;br /&gt;
stderr_logfile = /home/pacs/xyz00/users/discourse/supervisor/log/redis-stderr.log&lt;br /&gt;
stdout_logfile = /home/pacs/xyz00/users/discourse/supervisor/log/redis-stdout.log&lt;br /&gt;
&lt;br /&gt;
[program:discourse-web]&lt;br /&gt;
directory=/home/pacs/xyz00/users/discourse/discourse&lt;br /&gt;
environment=RAILS_ENV=&amp;quot;production&amp;quot;&lt;br /&gt;
command=/home/pacs/xyz00/users/discourse/.rbenv/shims/bundle exec puma -C config/puma.rb -b tcp://127.0.0.1:13000&lt;br /&gt;
stderr_logfile = /home/pacs/xyz00/users/discourse/supervisor/log/discourse-web-stderr.log&lt;br /&gt;
stdout_logfile = /home/pacs/xyz00/users/discourse/supervisor/log/discourse-web-stdout.log&lt;br /&gt;
&lt;br /&gt;
[program:discourse-sidekiq]&lt;br /&gt;
directory=/home/pacs/xyz00/users/discourse/discourse&lt;br /&gt;
environment=RAILS_ENV=&amp;quot;production&amp;quot;&lt;br /&gt;
command=/home/pacs/xyz00/users/discourse/.rbenv/shims/bundle exec sidekiq -C /home/pacs/xyz00/users/discourse/discourse/config/sidekiq.yml&lt;br /&gt;
stderr_logfile = /home/pacs/xyz00/users/discourse/supervisor/log/discourse-sidekiq-stderr.log&lt;br /&gt;
stdout_logfile = /home/pacs/xyz00/users/discourse/supervisor/log/discourse-sidekiq-stdout.log&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Einrichten des Apache VHost ==&lt;br /&gt;
&lt;br /&gt;
    cd ~/doms/beispiel.discuss&lt;br /&gt;
    rm -rf htdocs-ssl subs/www subs-ssl/www&lt;br /&gt;
    ln -s ~/live/public htdocs-ssl&lt;br /&gt;
    touch htdocs-ssl/.htaccess&lt;br /&gt;
&lt;br /&gt;
Dann die &#039;&#039;htdocs-ssl/.htaccess&#039;&#039; (durch das gelinkte Verzeichnis entspricht das dem Pfad /home/pacs/xyz00/users/discourse/discourse/public/.htaccess ) mit dem Editor der Wahl öffnen und folgende Konfiguration einfügen:&lt;br /&gt;
&lt;br /&gt;
  DirectoryIndex disabled&lt;br /&gt;
  &lt;br /&gt;
  RequestHeader set X-Forwarded-Proto &amp;quot;https&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
  RewriteEngine On&lt;br /&gt;
  RewriteBase /&lt;br /&gt;
  RewriteCond %{REQUEST_FILENAME} !-f&lt;br /&gt;
  RewriteCond %{REQUEST_FILENAME} !-l&lt;br /&gt;
  RewriteRule .* http://127.0.0.1:13000%{REQUEST_URI} [proxy,last]&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Cron&#039;&#039; wird für genutzt, um nach dem Server reboot &#039;&#039;supervisord&#039;&#039; zu starten.&lt;br /&gt;
&lt;br /&gt;
Einrichten der crontab mit &#039;&#039;cronttab -e&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
    HOME=/home/pacs/xyz00/users/discourse&lt;br /&gt;
    MAILTO=discourse@beispiel.discuss&lt;br /&gt;
    RAILS_ENV=production&lt;br /&gt;
    NUM_DAYS=31&lt;br /&gt;
    &lt;br /&gt;
  @reboot         /usr/bin/supervisord -c /home/pacs/xyz00/users/discourse/supervisor/etc/supervisord.conf&lt;br /&gt;
&lt;br /&gt;
== Wartung ==&lt;br /&gt;
=== Backup ===&lt;br /&gt;
&lt;br /&gt;
Discourse macht selbstätig backups und legt diese unter &#039;public/backups&#039; ab. Enthalten ist ein Datenbank-Dump und die hochgeladenen Dateien.&lt;br /&gt;
&lt;br /&gt;
Im Admin-Bereich lassen sich backups auch manuell antreten.&lt;br /&gt;
&lt;br /&gt;
=== Updates ===&lt;br /&gt;
&lt;br /&gt;
Discourse wird über update via mail informieren (dies kann man m.W. abschalten).&lt;br /&gt;
&lt;br /&gt;
==== Am Beispiel von 2.0.4 auf 2.1.0 ====&lt;br /&gt;
&lt;br /&gt;
# Im Web-Backend unter Administration-&amp;gt;Backups-&amp;gt; Read-Only Mouds setzen (oder Web Server so konfigurieren, dass keine Zugriffe mehr stattfinden können)&lt;br /&gt;
# Backup&lt;br /&gt;
# Die lokalen Änderungen sichern (git diff &amp;gt; /tmp/discourse.diff)&lt;br /&gt;
# Schauen, ob discourse (endlich :) ) eine neue Ruby-Version nutzt (z.B. in discourse_docker: image/discourse_fast_switch/Dockerfile , discourse: .rubocop&lt;br /&gt;
# git pull&lt;br /&gt;
# (Zur Sicherheit: git checkout stable)&lt;br /&gt;
# bundle&lt;br /&gt;
# RAILS_ENV=production bundle exec rake db:migrate&lt;br /&gt;
# RAILS_ENV=production bundle exec rake assets:precompile&lt;br /&gt;
# Services neu starten (Holzhammer: sv restart all)&lt;br /&gt;
&lt;br /&gt;
==== Am Beispiel von 2.1.0 auf 2.2.0 ====&lt;br /&gt;
&lt;br /&gt;
# Im Web-Backend unter Administration-&amp;gt;Backups-&amp;gt; Read-Only Mouds setzen (oder Web Server so konfigurieren, dass keine Zugriffe mehr stattfinden können)&lt;br /&gt;
# Backup&lt;br /&gt;
# Die lokalen Änderungen sichern (cd discourse; git diff &amp;gt; /tmp/discourse.diff)&lt;br /&gt;
# Schauen, ob discourse (endlich :) ) eine neue Ruby-Version nutzt (z.B. in discourse_docker: image/discourse_fast_switch/Dockerfile , discourse: .rubocop&lt;br /&gt;
# Dies ist der Fall, also&lt;br /&gt;
# rbenv install 2.5&lt;br /&gt;
# rbenv rehash&lt;br /&gt;
# echo &amp;quot;2.5.2&amp;quot; &amp;gt; .ruby-version&lt;br /&gt;
# git pull (ggfs konflikte beheben)&lt;br /&gt;
# (Zur Sicherheit: git checkout stable)&lt;br /&gt;
# bundle&lt;br /&gt;
# RAILS_ENV=production bundle exec rake db:migrate&lt;br /&gt;
# RAILS_ENV=production bundle exec rake assets:precompile&lt;br /&gt;
# Services neu starten (Holzhammer: sv restart all)&lt;br /&gt;
&lt;br /&gt;
== ToDos ==&lt;br /&gt;
&lt;br /&gt;
* Ein Patch, um Discourse auch via Unix-Socket mit Redis sprechen lassen zu können dürfte relativ einfach sein (es wird ein Wrapper um das redis-gem genutzt).&lt;br /&gt;
* Konfiguration von discourse, um mit postgresql via Unix-Socket zu kommunizieren (DISCOURSE_DB_SOCKET environment variable)&lt;br /&gt;
* Performance-tuning an diversen Stellen, anhand der discourse_docker-Vorgaben (https://github.com/discourse/discourse_docker), z.B.&lt;br /&gt;
** thpoff (huge page settings)&lt;br /&gt;
** unicorn (hat eine wesentlich ausgefeiltere Konfigurations-Vorlage, wahrscheinlich bereits ordentlich optimiert)&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* https://help.skysilk.com/support/solutions/articles/9000120927-how-to-install-discourse-without-docker-using-skysilk-vps-&lt;br /&gt;
* https://github.com/discourse/discourse_docker&lt;br /&gt;
* https://github.com/discourse/discourse&lt;br /&gt;
&lt;br /&gt;
== Historie ==&lt;br /&gt;
&lt;br /&gt;
* 2018, 14 . September: Initiale Fassung&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[Kategorie:HSDoku]]&lt;br /&gt;
[[Kategorie:Installationsanleitungen]]&lt;br /&gt;
[[Kategorie:Webforen]]&lt;/div&gt;</summary>
		<author><name>Dib00-discourse</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Discourse_installieren&amp;diff=4791</id>
		<title>Discourse installieren</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Discourse_installieren&amp;diff=4791"/>
		<updated>2019-02-04T09:35:48Z</updated>

		<summary type="html">&lt;p&gt;Dib00-discourse: /* Am Beispiel von 2.1.0 auf 2.2.0 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Textkasten|gelb|Für Managed Server|Ein funktionierender Discourse-Server erfordert mehrere laufende Server-Dienste. Für den Betrieb ist ein Managed Server sinnvoll.}}&lt;br /&gt;
&lt;br /&gt;
{{Textkasten|rot|Support von der Discourse-Community|Die Discourse-Entwickler haben sich entschieden, nur eine mehr oder weniger genormte Installationsmethode (via docker) zu unterstützen. Dies ist so auf der hostsharing-Architektur aufgrund mehrerer Bedenken und Überlegungen nicht möglich. Die Community ist durchaus hilfreich, geht aber davon aus, dass quasi alle Nutzer* eine &amp;quot;supported&amp;quot;e Installation durchgeführt haben. Wenn man in entsprechenden Kanälen nach Hilfe fragt, sollte man unbedingt erwähnen, dass man discourse selber anhand dieser hier lesbaren Anleitung installiert hat, um bereits entsprechenden Kommentaren und Nachfragen vorzugreifen.}}&lt;br /&gt;
&lt;br /&gt;
== Über ==&lt;br /&gt;
&lt;br /&gt;
In diesem Artikel wird die Installation von discourse, Version 2.1.0 (September 2018) beschrieben.&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-discourse&#039;&#039;&lt;br /&gt;
# Eine Domain mit &#039;&#039;xyz00-discourse&#039; als Domain-Administrator, zum Beispiel &#039;&#039;beispiel.discussion&#039;&#039;&lt;br /&gt;
# Einen Postgresql-User &#039;&#039;xyz00_discourseuser&#039;&#039; mit Passwort &#039;&#039;meinPasswort&#039;&#039;&lt;br /&gt;
# Eine Postgresql-Datenbank &#039;&#039;xyz00_discoursedb&#039;&#039; mit Datenbank-Owner &#039;&#039;xyz00_discourseuser&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Verwendete IP-Ports der Server-Dienste:&lt;br /&gt;
# Redis: localhost:32002&lt;br /&gt;
# Discourse-Web: localhost:13000&lt;br /&gt;
&lt;br /&gt;
== Konfiguration der PostgreSQL Datenbank ==&lt;br /&gt;
&lt;br /&gt;
{{Textkasten|gelb|PostgreSQL Extensions|Die PostgreSQL-Datenbank braucht die extensions ``hstore`` und ``pg_trm``. Diese müssen vom hostsharing-support installiert werden.}}&lt;br /&gt;
&lt;br /&gt;
Ansonsten liefe die Erstellung der Datenbank so:&lt;br /&gt;
&lt;br /&gt;
  su - postgres -c psql&lt;br /&gt;
  CREATE DATABASE discourse;&lt;br /&gt;
  CREATE USER discourse;&lt;br /&gt;
  ALTER USER discourse WITH ENCRYPTED PASSWORD &#039;password&#039;;&lt;br /&gt;
  ALTER DATABASE discourse OWNER TO discourse;&lt;br /&gt;
  \connect discourse&lt;br /&gt;
  CREATE EXTENSION hstore;&lt;br /&gt;
  CREATE EXTENSION pg_trgm;&lt;br /&gt;
&lt;br /&gt;
Entsprechende Funktionalität (von den extensions abgesehen) ist auch über den HSAdmin verfügbar.&lt;br /&gt;
&lt;br /&gt;
== Konfiguration des Redis Server ==&lt;br /&gt;
&lt;br /&gt;
{{Textkasten|gelb|Firewall/Redis Port|Leider unterstützt discourse nicht die Kommunikation mit Redis über Unix-Sockets. Dementsprechend muss der für Redis konfigurierte Port von dem hostsharing-Support in der Firewall freigegeben werden.}}&lt;br /&gt;
&lt;br /&gt;
    cd&lt;br /&gt;
    mkdir redis/etc redis/lib redis/log redis/run&lt;br /&gt;
&lt;br /&gt;
Anlegen einer Datei &#039;&#039;/home/pacs/xyz00/users/discourse/redis/etc/redis.conf&#039;&#039; mit folgendem Inhalt:&lt;br /&gt;
&lt;br /&gt;
    daemonize no&lt;br /&gt;
    pidfile /home/pacs/xyz00/users/discourse/redis/run/redis-server.pid&lt;br /&gt;
    port 32002&lt;br /&gt;
    tcp-backlog 128&lt;br /&gt;
    bind 127.0.0.1&lt;br /&gt;
    timeout 300&lt;br /&gt;
    loglevel notice&lt;br /&gt;
    logfile /home/pacs/xyz00/users/discourse/redis/log/redis.log&lt;br /&gt;
    databases 16&lt;br /&gt;
    save 900 1&lt;br /&gt;
    save 300 10&lt;br /&gt;
    save 60 10000&lt;br /&gt;
    slave-serve-stale-data yes&lt;br /&gt;
    appendonly no&lt;br /&gt;
    dbfilename dump.rdb&lt;br /&gt;
    dir /home/pacs/xyz00/users/discourse/redis/lib&lt;br /&gt;
&lt;br /&gt;
== Installation von Ruby ==&lt;br /&gt;
&lt;br /&gt;
Als User &#039;&#039;xyz00-discourse&#039;&#039;:  Installation von Ruby mit &#039;&#039;rbenv&#039;&#039; mit folgenden Befehlen:&lt;br /&gt;
&lt;br /&gt;
Zunächst &#039;&#039;rbenv&#039;&#039; and &#039;&#039;ruby-build&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
    git clone https://github.com/rbenv/rbenv.git ~/.rbenv&lt;br /&gt;
    cd ~/.rbenv &amp;amp;&amp;amp; src/configure &amp;amp;&amp;amp; make -C src&lt;br /&gt;
    echo &#039;export PATH=&amp;quot;$HOME/.rbenv/bin:$PATH&amp;quot;&#039; &amp;gt;&amp;gt; ~/.profile&lt;br /&gt;
    echo &#039;eval &amp;quot;$(rbenv init -)&amp;quot;&#039; &amp;gt;&amp;gt; ~/.profile&lt;br /&gt;
&lt;br /&gt;
starte neue Shell:&lt;br /&gt;
&lt;br /&gt;
    exec bash&lt;br /&gt;
&lt;br /&gt;
Überprüfe rbenv-Installation&lt;br /&gt;
&lt;br /&gt;
    type rbenv&lt;br /&gt;
&lt;br /&gt;
Installiere ruby-build als rbenv-Plugin&lt;br /&gt;
&lt;br /&gt;
    git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build&lt;br /&gt;
&lt;br /&gt;
Nun kann die benötigte Ruby-Version installiert werden:&lt;br /&gt;
&lt;br /&gt;
    rbenv install 2.4&lt;br /&gt;
&lt;br /&gt;
== Installation von Discourse selber ==&lt;br /&gt;
&lt;br /&gt;
Weiterhin Als User &#039;&#039;xyz00-discourse&#039;&#039;:  &lt;br /&gt;
&lt;br /&gt;
    cd ~&lt;br /&gt;
    git clone https://github.com/discourse/discourse.git discourse&lt;br /&gt;
    cd ~/discourse&lt;br /&gt;
&lt;br /&gt;
Die stabile Version auschecken:&lt;br /&gt;
&lt;br /&gt;
    git checkout stable&lt;br /&gt;
&lt;br /&gt;
Ruby Pakete installieren:&lt;br /&gt;
&lt;br /&gt;
    gem install bundler&lt;br /&gt;
    bundle install -j$(getconf _NPROCESSORS_ONLN) --deployment --without development test&lt;br /&gt;
&lt;br /&gt;
== Konfiguration der Discourse Software ==&lt;br /&gt;
&lt;br /&gt;
Anlegen einer Datei &#039;&#039;/home/pacs/xyz00/users/discourse/discourse/config/discourse.conf&#039;&#039; anhand der Beispiel-Datei:&lt;br /&gt;
&lt;br /&gt;
    cd ~/discourse&lt;br /&gt;
    cp config/discourse_defaults.conf config/discourse.conf&lt;br /&gt;
&lt;br /&gt;
Anpassen folgender Inhalte:&lt;br /&gt;
&lt;br /&gt;
    db_host = 127.0.0.1&lt;br /&gt;
    db_port = 5432&lt;br /&gt;
    #db_backup_port = 5432 #(auskommentieren)&lt;br /&gt;
    db_name = xyz00_discoursedb&lt;br /&gt;
    db_username = xyz00_discourseuser&lt;br /&gt;
    db_password = &amp;quot;&amp;quot; #db password&lt;br /&gt;
    hostname = &amp;quot;discourse.xyz00&amp;quot; # hostname&lt;br /&gt;
    smtp_address = localhost&lt;br /&gt;
    smtp_enable_start_tls = false&lt;br /&gt;
    smtp_openssl_verify_mode = &#039;none&#039;&lt;br /&gt;
    developer_emails = # your email-address&lt;br /&gt;
    redis_host = 127.0.0.1&lt;br /&gt;
    redis_port = 32002&lt;br /&gt;
&lt;br /&gt;
===TODO: Secrets setzen! ===&lt;br /&gt;
Die Zufallswerte für die Variablen SECRET_KEY_BASE und OTP_SECRET erzeugt man durch zwei Aufrufe des Kommandos&lt;br /&gt;
&lt;br /&gt;
    RAILS_ENV=production bundle exec rake secret&lt;br /&gt;
&lt;br /&gt;
=== Sidekiq für Hintergrund-Aufgaben konfigurieren ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;config/sidekiq.conf&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Initialisieren der Datenbank ===&lt;br /&gt;
&lt;br /&gt;
    export SAFETY_ASSURED=1&lt;br /&gt;
    # In Version 2.0.4 funktioniert db:migrate noch, ansonsten schema:load und seed nutzen!&lt;br /&gt;
    #RAILS_ENV=production bundle exec rails db:schema:load&lt;br /&gt;
    #RAILS_ENV=production bundle exec rails db:seed&lt;br /&gt;
    RAILS_ENV=production bundle exec rails db:migrate&lt;br /&gt;
&lt;br /&gt;
=== Kompilieren der Assets ===&lt;br /&gt;
&lt;br /&gt;
    RAILS_ENV=production bundle exec rails assets:precompile&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration des Web-Servers (am Beispiel Puma)  ===&lt;br /&gt;
&lt;br /&gt;
Die Datei &#039;&#039;config/puma.conf&#039;&#039; anpassen (hier nur Änderungen angezeigt):&lt;br /&gt;
&lt;br /&gt;
  APP_ROOT = &#039;/home/pacs/xyz00/users/discourse/discourse&#039;&lt;br /&gt;
  daemonize false&lt;br /&gt;
&lt;br /&gt;
== Starten der Dienste  ==&lt;br /&gt;
&lt;br /&gt;
Zum Start aller notwendigen Dienste wird in dieser Anleitung &#039;&#039;supervisor&#039;&#039; benutzt. Hier ein Beispiel für eine Datei &#039;&#039;~/supervisor/etc/supervisord.conf&#039;&#039; (überlange Zeilen werden hier im Wiki umgebrochen)&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;[supervisord]&lt;br /&gt;
logfile=/home/pacs/xyz00/users/discourse/supervisor/log/supervisord.log&lt;br /&gt;
logfile_maxbytes=50MB&lt;br /&gt;
logfile_backups=10&lt;br /&gt;
loglevel=error&lt;br /&gt;
pidfile=/home/pacs/xyz00/users/discourse/supervisor/run/supervisord.pid&lt;br /&gt;
minfds=1024&lt;br /&gt;
minprocs=200&lt;br /&gt;
childlogdir=/home/pacs/xyz00/users/discourse/supervisor/log/&lt;br /&gt;
&lt;br /&gt;
[unix_http_server]&lt;br /&gt;
file=/home/pacs/xyz00/users/discourse/supervisor/run/supervisord.sock&lt;br /&gt;
&lt;br /&gt;
[rpcinterface:supervisor]&lt;br /&gt;
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface&lt;br /&gt;
&lt;br /&gt;
[supervisorctl]&lt;br /&gt;
serverurl=unix:///home/pacs/xyz00/users/discourse/supervisor/run/supervisord.sock&lt;br /&gt;
&lt;br /&gt;
[program:redis]&lt;br /&gt;
command=/usr/bin/redis-server /home/pacs/xyz00/users/discourse/redis/etc/redis.conf&lt;br /&gt;
stderr_logfile = /home/pacs/xyz00/users/discourse/supervisor/log/redis-stderr.log&lt;br /&gt;
stdout_logfile = /home/pacs/xyz00/users/discourse/supervisor/log/redis-stdout.log&lt;br /&gt;
&lt;br /&gt;
[program:discourse-web]&lt;br /&gt;
directory=/home/pacs/xyz00/users/discourse/discourse&lt;br /&gt;
environment=RAILS_ENV=&amp;quot;production&amp;quot;&lt;br /&gt;
command=/home/pacs/xyz00/users/discourse/.rbenv/shims/bundle exec puma -C config/puma.rb -b tcp://127.0.0.1:13000&lt;br /&gt;
stderr_logfile = /home/pacs/xyz00/users/discourse/supervisor/log/discourse-web-stderr.log&lt;br /&gt;
stdout_logfile = /home/pacs/xyz00/users/discourse/supervisor/log/discourse-web-stdout.log&lt;br /&gt;
&lt;br /&gt;
[program:discourse-sidekiq]&lt;br /&gt;
directory=/home/pacs/xyz00/users/discourse/discourse&lt;br /&gt;
environment=RAILS_ENV=&amp;quot;production&amp;quot;&lt;br /&gt;
command=/home/pacs/xyz00/users/discourse/.rbenv/shims/bundle exec sidekiq -C /home/pacs/xyz00/users/discourse/discourse/config/sidekiq.yml&lt;br /&gt;
stderr_logfile = /home/pacs/xyz00/users/discourse/supervisor/log/discourse-sidekiq-stderr.log&lt;br /&gt;
stdout_logfile = /home/pacs/xyz00/users/discourse/supervisor/log/discourse-sidekiq-stdout.log&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Einrichten des Apache VHost ==&lt;br /&gt;
&lt;br /&gt;
    cd ~/doms/beispiel.discuss&lt;br /&gt;
    rm -rf htdocs-ssl subs/www subs-ssl/www&lt;br /&gt;
    ln -s ~/live/public htdocs-ssl&lt;br /&gt;
    touch htdocs-ssl/.htaccess&lt;br /&gt;
&lt;br /&gt;
Dann die &#039;&#039;htdocs-ssl/.htaccess&#039;&#039; (durch das gelinkte Verzeichnis entspricht das dem Pfad /home/pacs/xyz00/users/discourse/discourse/public/.htaccess ) mit dem Editor der Wahl öffnen und folgende Konfiguration einfügen:&lt;br /&gt;
&lt;br /&gt;
  DirectoryIndex disabled&lt;br /&gt;
  &lt;br /&gt;
  RequestHeader set X-Forwarded-Proto &amp;quot;https&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
  RewriteEngine On&lt;br /&gt;
  RewriteBase /&lt;br /&gt;
  RewriteCond %{REQUEST_FILENAME} !-f&lt;br /&gt;
  RewriteCond %{REQUEST_FILENAME} !-l&lt;br /&gt;
  RewriteRule .* http://127.0.0.1:13000%{REQUEST_URI} [proxy,last]&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Cron&#039;&#039; wird für genutzt, um nach dem Server reboot &#039;&#039;supervisord&#039;&#039; zu starten.&lt;br /&gt;
&lt;br /&gt;
Einrichten der crontab mit &#039;&#039;cronttab -e&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
    HOME=/home/pacs/xyz00/users/discourse&lt;br /&gt;
    MAILTO=discourse@beispiel.discuss&lt;br /&gt;
    RAILS_ENV=production&lt;br /&gt;
    NUM_DAYS=31&lt;br /&gt;
    &lt;br /&gt;
  @reboot         /usr/bin/supervisord -c /home/pacs/xyz00/users/discourse/supervisor/etc/supervisord.conf&lt;br /&gt;
&lt;br /&gt;
== Wartung ==&lt;br /&gt;
=== Backup ===&lt;br /&gt;
&lt;br /&gt;
Discourse macht selbstätig backups und legt diese unter &#039;public/backups&#039; ab. Enthalten ist ein Datenbank-Dump und die hochgeladenen Dateien.&lt;br /&gt;
&lt;br /&gt;
Im Admin-Bereich lassen sich backups auch manuell antreten.&lt;br /&gt;
&lt;br /&gt;
=== Updates ===&lt;br /&gt;
&lt;br /&gt;
Discourse wird über update via mail informieren (dies kann man m.W. abschalten).&lt;br /&gt;
&lt;br /&gt;
==== Am Beispiel von 2.0.4 auf 2.1.0 ====&lt;br /&gt;
&lt;br /&gt;
# Im Web-Backend unter Administration-&amp;gt;Backups-&amp;gt; Read-Only Mouds setzen (oder Web Server so konfigurieren, dass keine Zugriffe mehr stattfinden können)&lt;br /&gt;
# Backup&lt;br /&gt;
# Die lokalen Änderungen sichern (git diff &amp;gt; /tmp/discourse.diff)&lt;br /&gt;
# Schauen, ob discourse (endlich :) ) eine neue Ruby-Version nutzt (z.B. in discourse_docker: image/discourse_fast_switch/Dockerfile , discourse: .rubocop&lt;br /&gt;
# git pull&lt;br /&gt;
# (Zur Sicherheit: git checkout stable)&lt;br /&gt;
# bundle&lt;br /&gt;
# RAILS_ENV=production bundle exec rake db:migrate&lt;br /&gt;
# RAILS_ENV=production bundle exec rake assets:precompile&lt;br /&gt;
# Services neu starten (Holzhammer: sv restart all)&lt;br /&gt;
&lt;br /&gt;
==== Am Beispiel von 2.1.0 auf 2.2.0 ====&lt;br /&gt;
&lt;br /&gt;
# Im Web-Backend unter Administration-&amp;gt;Backups-&amp;gt; Read-Only Mouds setzen (oder Web Server so konfigurieren, dass keine Zugriffe mehr stattfinden können)&lt;br /&gt;
# Backup&lt;br /&gt;
# Die lokalen Änderungen sichern (cd discourse; git diff &amp;gt; /tmp/discourse.diff)&lt;br /&gt;
# Schauen, ob discourse (endlich :) ) eine neue Ruby-Version nutzt (z.B. in discourse_docker: image/discourse_fast_switch/Dockerfile , discourse: .rubocop&lt;br /&gt;
# Dies ist der Fall, also&lt;br /&gt;
# rbenv install 2.5&lt;br /&gt;
# echo &amp;quot;2.5.2&amp;quot; &amp;gt; .ruby-version&lt;br /&gt;
# git pull (ggfs konflikte beheben)&lt;br /&gt;
# (Zur Sicherheit: git checkout stable)&lt;br /&gt;
# bundle&lt;br /&gt;
# RAILS_ENV=production bundle exec rake db:migrate&lt;br /&gt;
# RAILS_ENV=production bundle exec rake assets:precompile&lt;br /&gt;
# Services neu starten (Holzhammer: sv restart all)&lt;br /&gt;
&lt;br /&gt;
== ToDos ==&lt;br /&gt;
&lt;br /&gt;
* Ein Patch, um Discourse auch via Unix-Socket mit Redis sprechen lassen zu können dürfte relativ einfach sein (es wird ein Wrapper um das redis-gem genutzt).&lt;br /&gt;
* Konfiguration von discourse, um mit postgresql via Unix-Socket zu kommunizieren (DISCOURSE_DB_SOCKET environment variable)&lt;br /&gt;
* Performance-tuning an diversen Stellen, anhand der discourse_docker-Vorgaben (https://github.com/discourse/discourse_docker), z.B.&lt;br /&gt;
** thpoff (huge page settings)&lt;br /&gt;
** unicorn (hat eine wesentlich ausgefeiltere Konfigurations-Vorlage, wahrscheinlich bereits ordentlich optimiert)&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* https://help.skysilk.com/support/solutions/articles/9000120927-how-to-install-discourse-without-docker-using-skysilk-vps-&lt;br /&gt;
* https://github.com/discourse/discourse_docker&lt;br /&gt;
* https://github.com/discourse/discourse&lt;br /&gt;
&lt;br /&gt;
== Historie ==&lt;br /&gt;
&lt;br /&gt;
* 2018, 14 . September: Initiale Fassung&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[Kategorie:HSDoku]]&lt;br /&gt;
[[Kategorie:Installationsanleitungen]]&lt;br /&gt;
[[Kategorie:Webforen]]&lt;/div&gt;</summary>
		<author><name>Dib00-discourse</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Discourse_installieren&amp;diff=4790</id>
		<title>Discourse installieren</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Discourse_installieren&amp;diff=4790"/>
		<updated>2019-02-04T09:29:37Z</updated>

		<summary type="html">&lt;p&gt;Dib00-discourse: /* Updates */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Textkasten|gelb|Für Managed Server|Ein funktionierender Discourse-Server erfordert mehrere laufende Server-Dienste. Für den Betrieb ist ein Managed Server sinnvoll.}}&lt;br /&gt;
&lt;br /&gt;
{{Textkasten|rot|Support von der Discourse-Community|Die Discourse-Entwickler haben sich entschieden, nur eine mehr oder weniger genormte Installationsmethode (via docker) zu unterstützen. Dies ist so auf der hostsharing-Architektur aufgrund mehrerer Bedenken und Überlegungen nicht möglich. Die Community ist durchaus hilfreich, geht aber davon aus, dass quasi alle Nutzer* eine &amp;quot;supported&amp;quot;e Installation durchgeführt haben. Wenn man in entsprechenden Kanälen nach Hilfe fragt, sollte man unbedingt erwähnen, dass man discourse selber anhand dieser hier lesbaren Anleitung installiert hat, um bereits entsprechenden Kommentaren und Nachfragen vorzugreifen.}}&lt;br /&gt;
&lt;br /&gt;
== Über ==&lt;br /&gt;
&lt;br /&gt;
In diesem Artikel wird die Installation von discourse, Version 2.1.0 (September 2018) beschrieben.&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-discourse&#039;&#039;&lt;br /&gt;
# Eine Domain mit &#039;&#039;xyz00-discourse&#039; als Domain-Administrator, zum Beispiel &#039;&#039;beispiel.discussion&#039;&#039;&lt;br /&gt;
# Einen Postgresql-User &#039;&#039;xyz00_discourseuser&#039;&#039; mit Passwort &#039;&#039;meinPasswort&#039;&#039;&lt;br /&gt;
# Eine Postgresql-Datenbank &#039;&#039;xyz00_discoursedb&#039;&#039; mit Datenbank-Owner &#039;&#039;xyz00_discourseuser&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Verwendete IP-Ports der Server-Dienste:&lt;br /&gt;
# Redis: localhost:32002&lt;br /&gt;
# Discourse-Web: localhost:13000&lt;br /&gt;
&lt;br /&gt;
== Konfiguration der PostgreSQL Datenbank ==&lt;br /&gt;
&lt;br /&gt;
{{Textkasten|gelb|PostgreSQL Extensions|Die PostgreSQL-Datenbank braucht die extensions ``hstore`` und ``pg_trm``. Diese müssen vom hostsharing-support installiert werden.}}&lt;br /&gt;
&lt;br /&gt;
Ansonsten liefe die Erstellung der Datenbank so:&lt;br /&gt;
&lt;br /&gt;
  su - postgres -c psql&lt;br /&gt;
  CREATE DATABASE discourse;&lt;br /&gt;
  CREATE USER discourse;&lt;br /&gt;
  ALTER USER discourse WITH ENCRYPTED PASSWORD &#039;password&#039;;&lt;br /&gt;
  ALTER DATABASE discourse OWNER TO discourse;&lt;br /&gt;
  \connect discourse&lt;br /&gt;
  CREATE EXTENSION hstore;&lt;br /&gt;
  CREATE EXTENSION pg_trgm;&lt;br /&gt;
&lt;br /&gt;
Entsprechende Funktionalität (von den extensions abgesehen) ist auch über den HSAdmin verfügbar.&lt;br /&gt;
&lt;br /&gt;
== Konfiguration des Redis Server ==&lt;br /&gt;
&lt;br /&gt;
{{Textkasten|gelb|Firewall/Redis Port|Leider unterstützt discourse nicht die Kommunikation mit Redis über Unix-Sockets. Dementsprechend muss der für Redis konfigurierte Port von dem hostsharing-Support in der Firewall freigegeben werden.}}&lt;br /&gt;
&lt;br /&gt;
    cd&lt;br /&gt;
    mkdir redis/etc redis/lib redis/log redis/run&lt;br /&gt;
&lt;br /&gt;
Anlegen einer Datei &#039;&#039;/home/pacs/xyz00/users/discourse/redis/etc/redis.conf&#039;&#039; mit folgendem Inhalt:&lt;br /&gt;
&lt;br /&gt;
    daemonize no&lt;br /&gt;
    pidfile /home/pacs/xyz00/users/discourse/redis/run/redis-server.pid&lt;br /&gt;
    port 32002&lt;br /&gt;
    tcp-backlog 128&lt;br /&gt;
    bind 127.0.0.1&lt;br /&gt;
    timeout 300&lt;br /&gt;
    loglevel notice&lt;br /&gt;
    logfile /home/pacs/xyz00/users/discourse/redis/log/redis.log&lt;br /&gt;
    databases 16&lt;br /&gt;
    save 900 1&lt;br /&gt;
    save 300 10&lt;br /&gt;
    save 60 10000&lt;br /&gt;
    slave-serve-stale-data yes&lt;br /&gt;
    appendonly no&lt;br /&gt;
    dbfilename dump.rdb&lt;br /&gt;
    dir /home/pacs/xyz00/users/discourse/redis/lib&lt;br /&gt;
&lt;br /&gt;
== Installation von Ruby ==&lt;br /&gt;
&lt;br /&gt;
Als User &#039;&#039;xyz00-discourse&#039;&#039;:  Installation von Ruby mit &#039;&#039;rbenv&#039;&#039; mit folgenden Befehlen:&lt;br /&gt;
&lt;br /&gt;
Zunächst &#039;&#039;rbenv&#039;&#039; and &#039;&#039;ruby-build&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
    git clone https://github.com/rbenv/rbenv.git ~/.rbenv&lt;br /&gt;
    cd ~/.rbenv &amp;amp;&amp;amp; src/configure &amp;amp;&amp;amp; make -C src&lt;br /&gt;
    echo &#039;export PATH=&amp;quot;$HOME/.rbenv/bin:$PATH&amp;quot;&#039; &amp;gt;&amp;gt; ~/.profile&lt;br /&gt;
    echo &#039;eval &amp;quot;$(rbenv init -)&amp;quot;&#039; &amp;gt;&amp;gt; ~/.profile&lt;br /&gt;
&lt;br /&gt;
starte neue Shell:&lt;br /&gt;
&lt;br /&gt;
    exec bash&lt;br /&gt;
&lt;br /&gt;
Überprüfe rbenv-Installation&lt;br /&gt;
&lt;br /&gt;
    type rbenv&lt;br /&gt;
&lt;br /&gt;
Installiere ruby-build als rbenv-Plugin&lt;br /&gt;
&lt;br /&gt;
    git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build&lt;br /&gt;
&lt;br /&gt;
Nun kann die benötigte Ruby-Version installiert werden:&lt;br /&gt;
&lt;br /&gt;
    rbenv install 2.4&lt;br /&gt;
&lt;br /&gt;
== Installation von Discourse selber ==&lt;br /&gt;
&lt;br /&gt;
Weiterhin Als User &#039;&#039;xyz00-discourse&#039;&#039;:  &lt;br /&gt;
&lt;br /&gt;
    cd ~&lt;br /&gt;
    git clone https://github.com/discourse/discourse.git discourse&lt;br /&gt;
    cd ~/discourse&lt;br /&gt;
&lt;br /&gt;
Die stabile Version auschecken:&lt;br /&gt;
&lt;br /&gt;
    git checkout stable&lt;br /&gt;
&lt;br /&gt;
Ruby Pakete installieren:&lt;br /&gt;
&lt;br /&gt;
    gem install bundler&lt;br /&gt;
    bundle install -j$(getconf _NPROCESSORS_ONLN) --deployment --without development test&lt;br /&gt;
&lt;br /&gt;
== Konfiguration der Discourse Software ==&lt;br /&gt;
&lt;br /&gt;
Anlegen einer Datei &#039;&#039;/home/pacs/xyz00/users/discourse/discourse/config/discourse.conf&#039;&#039; anhand der Beispiel-Datei:&lt;br /&gt;
&lt;br /&gt;
    cd ~/discourse&lt;br /&gt;
    cp config/discourse_defaults.conf config/discourse.conf&lt;br /&gt;
&lt;br /&gt;
Anpassen folgender Inhalte:&lt;br /&gt;
&lt;br /&gt;
    db_host = 127.0.0.1&lt;br /&gt;
    db_port = 5432&lt;br /&gt;
    #db_backup_port = 5432 #(auskommentieren)&lt;br /&gt;
    db_name = xyz00_discoursedb&lt;br /&gt;
    db_username = xyz00_discourseuser&lt;br /&gt;
    db_password = &amp;quot;&amp;quot; #db password&lt;br /&gt;
    hostname = &amp;quot;discourse.xyz00&amp;quot; # hostname&lt;br /&gt;
    smtp_address = localhost&lt;br /&gt;
    smtp_enable_start_tls = false&lt;br /&gt;
    smtp_openssl_verify_mode = &#039;none&#039;&lt;br /&gt;
    developer_emails = # your email-address&lt;br /&gt;
    redis_host = 127.0.0.1&lt;br /&gt;
    redis_port = 32002&lt;br /&gt;
&lt;br /&gt;
===TODO: Secrets setzen! ===&lt;br /&gt;
Die Zufallswerte für die Variablen SECRET_KEY_BASE und OTP_SECRET erzeugt man durch zwei Aufrufe des Kommandos&lt;br /&gt;
&lt;br /&gt;
    RAILS_ENV=production bundle exec rake secret&lt;br /&gt;
&lt;br /&gt;
=== Sidekiq für Hintergrund-Aufgaben konfigurieren ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;config/sidekiq.conf&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Initialisieren der Datenbank ===&lt;br /&gt;
&lt;br /&gt;
    export SAFETY_ASSURED=1&lt;br /&gt;
    # In Version 2.0.4 funktioniert db:migrate noch, ansonsten schema:load und seed nutzen!&lt;br /&gt;
    #RAILS_ENV=production bundle exec rails db:schema:load&lt;br /&gt;
    #RAILS_ENV=production bundle exec rails db:seed&lt;br /&gt;
    RAILS_ENV=production bundle exec rails db:migrate&lt;br /&gt;
&lt;br /&gt;
=== Kompilieren der Assets ===&lt;br /&gt;
&lt;br /&gt;
    RAILS_ENV=production bundle exec rails assets:precompile&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration des Web-Servers (am Beispiel Puma)  ===&lt;br /&gt;
&lt;br /&gt;
Die Datei &#039;&#039;config/puma.conf&#039;&#039; anpassen (hier nur Änderungen angezeigt):&lt;br /&gt;
&lt;br /&gt;
  APP_ROOT = &#039;/home/pacs/xyz00/users/discourse/discourse&#039;&lt;br /&gt;
  daemonize false&lt;br /&gt;
&lt;br /&gt;
== Starten der Dienste  ==&lt;br /&gt;
&lt;br /&gt;
Zum Start aller notwendigen Dienste wird in dieser Anleitung &#039;&#039;supervisor&#039;&#039; benutzt. Hier ein Beispiel für eine Datei &#039;&#039;~/supervisor/etc/supervisord.conf&#039;&#039; (überlange Zeilen werden hier im Wiki umgebrochen)&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;[supervisord]&lt;br /&gt;
logfile=/home/pacs/xyz00/users/discourse/supervisor/log/supervisord.log&lt;br /&gt;
logfile_maxbytes=50MB&lt;br /&gt;
logfile_backups=10&lt;br /&gt;
loglevel=error&lt;br /&gt;
pidfile=/home/pacs/xyz00/users/discourse/supervisor/run/supervisord.pid&lt;br /&gt;
minfds=1024&lt;br /&gt;
minprocs=200&lt;br /&gt;
childlogdir=/home/pacs/xyz00/users/discourse/supervisor/log/&lt;br /&gt;
&lt;br /&gt;
[unix_http_server]&lt;br /&gt;
file=/home/pacs/xyz00/users/discourse/supervisor/run/supervisord.sock&lt;br /&gt;
&lt;br /&gt;
[rpcinterface:supervisor]&lt;br /&gt;
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface&lt;br /&gt;
&lt;br /&gt;
[supervisorctl]&lt;br /&gt;
serverurl=unix:///home/pacs/xyz00/users/discourse/supervisor/run/supervisord.sock&lt;br /&gt;
&lt;br /&gt;
[program:redis]&lt;br /&gt;
command=/usr/bin/redis-server /home/pacs/xyz00/users/discourse/redis/etc/redis.conf&lt;br /&gt;
stderr_logfile = /home/pacs/xyz00/users/discourse/supervisor/log/redis-stderr.log&lt;br /&gt;
stdout_logfile = /home/pacs/xyz00/users/discourse/supervisor/log/redis-stdout.log&lt;br /&gt;
&lt;br /&gt;
[program:discourse-web]&lt;br /&gt;
directory=/home/pacs/xyz00/users/discourse/discourse&lt;br /&gt;
environment=RAILS_ENV=&amp;quot;production&amp;quot;&lt;br /&gt;
command=/home/pacs/xyz00/users/discourse/.rbenv/shims/bundle exec puma -C config/puma.rb -b tcp://127.0.0.1:13000&lt;br /&gt;
stderr_logfile = /home/pacs/xyz00/users/discourse/supervisor/log/discourse-web-stderr.log&lt;br /&gt;
stdout_logfile = /home/pacs/xyz00/users/discourse/supervisor/log/discourse-web-stdout.log&lt;br /&gt;
&lt;br /&gt;
[program:discourse-sidekiq]&lt;br /&gt;
directory=/home/pacs/xyz00/users/discourse/discourse&lt;br /&gt;
environment=RAILS_ENV=&amp;quot;production&amp;quot;&lt;br /&gt;
command=/home/pacs/xyz00/users/discourse/.rbenv/shims/bundle exec sidekiq -C /home/pacs/xyz00/users/discourse/discourse/config/sidekiq.yml&lt;br /&gt;
stderr_logfile = /home/pacs/xyz00/users/discourse/supervisor/log/discourse-sidekiq-stderr.log&lt;br /&gt;
stdout_logfile = /home/pacs/xyz00/users/discourse/supervisor/log/discourse-sidekiq-stdout.log&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Einrichten des Apache VHost ==&lt;br /&gt;
&lt;br /&gt;
    cd ~/doms/beispiel.discuss&lt;br /&gt;
    rm -rf htdocs-ssl subs/www subs-ssl/www&lt;br /&gt;
    ln -s ~/live/public htdocs-ssl&lt;br /&gt;
    touch htdocs-ssl/.htaccess&lt;br /&gt;
&lt;br /&gt;
Dann die &#039;&#039;htdocs-ssl/.htaccess&#039;&#039; (durch das gelinkte Verzeichnis entspricht das dem Pfad /home/pacs/xyz00/users/discourse/discourse/public/.htaccess ) mit dem Editor der Wahl öffnen und folgende Konfiguration einfügen:&lt;br /&gt;
&lt;br /&gt;
  DirectoryIndex disabled&lt;br /&gt;
  &lt;br /&gt;
  RequestHeader set X-Forwarded-Proto &amp;quot;https&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
  RewriteEngine On&lt;br /&gt;
  RewriteBase /&lt;br /&gt;
  RewriteCond %{REQUEST_FILENAME} !-f&lt;br /&gt;
  RewriteCond %{REQUEST_FILENAME} !-l&lt;br /&gt;
  RewriteRule .* http://127.0.0.1:13000%{REQUEST_URI} [proxy,last]&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Cron&#039;&#039; wird für genutzt, um nach dem Server reboot &#039;&#039;supervisord&#039;&#039; zu starten.&lt;br /&gt;
&lt;br /&gt;
Einrichten der crontab mit &#039;&#039;cronttab -e&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
    HOME=/home/pacs/xyz00/users/discourse&lt;br /&gt;
    MAILTO=discourse@beispiel.discuss&lt;br /&gt;
    RAILS_ENV=production&lt;br /&gt;
    NUM_DAYS=31&lt;br /&gt;
    &lt;br /&gt;
  @reboot         /usr/bin/supervisord -c /home/pacs/xyz00/users/discourse/supervisor/etc/supervisord.conf&lt;br /&gt;
&lt;br /&gt;
== Wartung ==&lt;br /&gt;
=== Backup ===&lt;br /&gt;
&lt;br /&gt;
Discourse macht selbstätig backups und legt diese unter &#039;public/backups&#039; ab. Enthalten ist ein Datenbank-Dump und die hochgeladenen Dateien.&lt;br /&gt;
&lt;br /&gt;
Im Admin-Bereich lassen sich backups auch manuell antreten.&lt;br /&gt;
&lt;br /&gt;
=== Updates ===&lt;br /&gt;
&lt;br /&gt;
Discourse wird über update via mail informieren (dies kann man m.W. abschalten).&lt;br /&gt;
&lt;br /&gt;
==== Am Beispiel von 2.0.4 auf 2.1.0 ====&lt;br /&gt;
&lt;br /&gt;
# Im Web-Backend unter Administration-&amp;gt;Backups-&amp;gt; Read-Only Mouds setzen (oder Web Server so konfigurieren, dass keine Zugriffe mehr stattfinden können)&lt;br /&gt;
# Backup&lt;br /&gt;
# Die lokalen Änderungen sichern (git diff &amp;gt; /tmp/discourse.diff)&lt;br /&gt;
# Schauen, ob discourse (endlich :) ) eine neue Ruby-Version nutzt (z.B. in discourse_docker: image/discourse_fast_switch/Dockerfile , discourse: .rubocop&lt;br /&gt;
# git pull&lt;br /&gt;
# (Zur Sicherheit: git checkout stable)&lt;br /&gt;
# bundle&lt;br /&gt;
# RAILS_ENV=production bundle exec rake db:migrate&lt;br /&gt;
# RAILS_ENV=production bundle exec rake assets:precompile&lt;br /&gt;
# Services neu starten (Holzhammer: sv restart all)&lt;br /&gt;
&lt;br /&gt;
==== Am Beispiel von 2.1.0 auf 2.2.0 ====&lt;br /&gt;
&lt;br /&gt;
# Im Web-Backend unter Administration-&amp;gt;Backups-&amp;gt; Read-Only Mouds setzen (oder Web Server so konfigurieren, dass keine Zugriffe mehr stattfinden können)&lt;br /&gt;
# Backup&lt;br /&gt;
# Die lokalen Änderungen sichern (cd discourse; git diff &amp;gt; /tmp/discourse.diff)&lt;br /&gt;
# Schauen, ob discourse (endlich :) ) eine neue Ruby-Version nutzt (z.B. in discourse_docker: image/discourse_fast_switch/Dockerfile , discourse: .rubocop&lt;br /&gt;
# Dies ist der Fall, also&lt;br /&gt;
# rbenv install 2.5&lt;br /&gt;
# git pull (ggfs konflikte beheben)&lt;br /&gt;
# (Zur Sicherheit: git checkout stable)&lt;br /&gt;
# bundle&lt;br /&gt;
# RAILS_ENV=production bundle exec rake db:migrate&lt;br /&gt;
# RAILS_ENV=production bundle exec rake assets:precompile&lt;br /&gt;
# Services neu starten (Holzhammer: sv restart all)&lt;br /&gt;
&lt;br /&gt;
== ToDos ==&lt;br /&gt;
&lt;br /&gt;
* Ein Patch, um Discourse auch via Unix-Socket mit Redis sprechen lassen zu können dürfte relativ einfach sein (es wird ein Wrapper um das redis-gem genutzt).&lt;br /&gt;
* Konfiguration von discourse, um mit postgresql via Unix-Socket zu kommunizieren (DISCOURSE_DB_SOCKET environment variable)&lt;br /&gt;
* Performance-tuning an diversen Stellen, anhand der discourse_docker-Vorgaben (https://github.com/discourse/discourse_docker), z.B.&lt;br /&gt;
** thpoff (huge page settings)&lt;br /&gt;
** unicorn (hat eine wesentlich ausgefeiltere Konfigurations-Vorlage, wahrscheinlich bereits ordentlich optimiert)&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* https://help.skysilk.com/support/solutions/articles/9000120927-how-to-install-discourse-without-docker-using-skysilk-vps-&lt;br /&gt;
* https://github.com/discourse/discourse_docker&lt;br /&gt;
* https://github.com/discourse/discourse&lt;br /&gt;
&lt;br /&gt;
== Historie ==&lt;br /&gt;
&lt;br /&gt;
* 2018, 14 . September: Initiale Fassung&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[Kategorie:HSDoku]]&lt;br /&gt;
[[Kategorie:Installationsanleitungen]]&lt;br /&gt;
[[Kategorie:Webforen]]&lt;/div&gt;</summary>
		<author><name>Dib00-discourse</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Discourse_installieren&amp;diff=4667</id>
		<title>Discourse installieren</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Discourse_installieren&amp;diff=4667"/>
		<updated>2018-08-27T10:42:50Z</updated>

		<summary type="html">&lt;p&gt;Dib00-discourse: /* Cronjobs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Textkasten|gelb|Für Managed Server|Ein funktionierender Discourse-Server erfordert mehrere laufende Server-Dienste. Für den Betrieb ist ein Managed Server sinnvoll.}}&lt;br /&gt;
&lt;br /&gt;
{{Textkasten|rot|Work in Progress|Dieser Artikel soll erklären, wie man discourse installiert, ist allerdings **noch nicht fertig**}}&lt;br /&gt;
&lt;br /&gt;
{{Textkasten|rot|Support von der Discourse-Community|Die Discourse-Entwickler haben sich entschieden, nur eine mehr oder weniger genormte Installationsmethode (via docker) zu unterstützen. Dies ist so auf der hostsharing-Architektur aufgrund mehrerer Bedenken und Überlegungen nicht möglich. Die Community ist durchaus hilfreich, geht aber davon aus, dass quasi alle Nutzer* eine &amp;quot;supported&amp;quot;e Installation durchgeführt haben. Wenn man in entsprechenden Kanälen nach Hilfe fragt, sollte man unbedingt erwähnen, dass man discourse selber anhand dieser hier lesbaren Anleitung installiert hat, um bereits entsprechenden Kommentaren und Nachfragen vorzugreifen.}}&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-discourse&#039;&#039;&lt;br /&gt;
# Eine Domain mit &#039;&#039;xyz00-discourse&#039; als Domain-Administrator, zum Beispiel &#039;&#039;beispiel.discussion&#039;&#039;&lt;br /&gt;
# Einen Postgresql-User &#039;&#039;xyz00_discourseuser&#039;&#039; mit Passwort &#039;&#039;meinPasswort&#039;&#039;&lt;br /&gt;
# Eine Postgresql-Datenbank &#039;&#039;xyz00_discoursedb&#039;&#039; mit Datenbank-Owner &#039;&#039;xyz00_discourseuser&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Verwendete IP-Ports der Server-Dienste:&lt;br /&gt;
# Monit: localhost:32001&lt;br /&gt;
# Redis: localhost:32002&lt;br /&gt;
# Discourse-Web: localhost:32003&lt;br /&gt;
&lt;br /&gt;
== Konfiguration des Redis Server ==&lt;br /&gt;
&lt;br /&gt;
    cd&lt;br /&gt;
    mkdir redis/etc redis/lib redis/log redis/run&lt;br /&gt;
&lt;br /&gt;
Anlegen einer Datei &#039;&#039;/home/pacs/xyz00/users/discourse/redis/etc/redis.conf&#039;&#039; mit folgendem Inhalt:&lt;br /&gt;
&lt;br /&gt;
    daemonize no&lt;br /&gt;
    pidfile /home/pacs/xyz00/users/discourse/redis/run/redis-server.pid&lt;br /&gt;
    port 32002&lt;br /&gt;
    tcp-backlog 128&lt;br /&gt;
    bind 127.0.0.1&lt;br /&gt;
    timeout 300&lt;br /&gt;
    loglevel notice&lt;br /&gt;
    logfile /home/pacs/xyz00/users/discourse/redis/log/redis.log&lt;br /&gt;
    databases 16&lt;br /&gt;
    save 900 1&lt;br /&gt;
    save 300 10&lt;br /&gt;
    save 60 10000&lt;br /&gt;
    slave-serve-stale-data yes&lt;br /&gt;
    appendonly no&lt;br /&gt;
    dbfilename dump.rdb&lt;br /&gt;
    dir /home/pacs/xyz00/users/discourse/redis/lib&lt;br /&gt;
&lt;br /&gt;
== Installation von Ruby ==&lt;br /&gt;
&lt;br /&gt;
Als User &#039;&#039;xyz00-discourse&#039;&#039;:  Installation von Ruby mit &#039;&#039;rbenv&#039;&#039; mit folgenden Befehlen:&lt;br /&gt;
&lt;br /&gt;
Zunächst &#039;&#039;rbenv&#039;&#039; and &#039;&#039;ruby-build&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
    git clone https://github.com/rbenv/rbenv.git ~/.rbenv&lt;br /&gt;
    cd ~/.rbenv &amp;amp;&amp;amp; src/configure &amp;amp;&amp;amp; make -C src&lt;br /&gt;
    echo &#039;export PATH=&amp;quot;$HOME/.rbenv/bin:$PATH&amp;quot;&#039; &amp;gt;&amp;gt; ~/.profile&lt;br /&gt;
    echo &#039;eval &amp;quot;$(rbenv init -)&amp;quot;&#039; &amp;gt;&amp;gt; ~/.profile&lt;br /&gt;
&lt;br /&gt;
starte neue Shell:&lt;br /&gt;
&lt;br /&gt;
    exec bash&lt;br /&gt;
&lt;br /&gt;
Überprüfe rbenv-Installation&lt;br /&gt;
&lt;br /&gt;
    type rbenv&lt;br /&gt;
&lt;br /&gt;
Installiere ruby-build als rbenv-Plugin&lt;br /&gt;
&lt;br /&gt;
    git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build&lt;br /&gt;
&lt;br /&gt;
Nun kann die benötigte Ruby-Version installiert werden:&lt;br /&gt;
&lt;br /&gt;
    rbenv install 2.4&lt;br /&gt;
&lt;br /&gt;
== Installation von Discourse selber ==&lt;br /&gt;
&lt;br /&gt;
Weiterhin Als User &#039;&#039;xyz00-discourse&#039;&#039;:  &lt;br /&gt;
&lt;br /&gt;
    cd ~&lt;br /&gt;
    git clone https://github.com/discourse/discourse.git discourse&lt;br /&gt;
    cd ~/discourse&lt;br /&gt;
&lt;br /&gt;
Die stabile Version auschecken:&lt;br /&gt;
&lt;br /&gt;
    git checkout stable&lt;br /&gt;
&lt;br /&gt;
Ruby Pakete installieren:&lt;br /&gt;
&lt;br /&gt;
    gem install bundler&lt;br /&gt;
    bundle install -j$(getconf _NPROCESSORS_ONLN) --deployment --without development test&lt;br /&gt;
&lt;br /&gt;
== Konfiguration der Discourse Software ==&lt;br /&gt;
&lt;br /&gt;
Anlegen einer Datei &#039;&#039;/home/pacs/xyz00/users/discourse/discourse/config/discourse.conf&#039;&#039; anhand der Beispiel-Datei:&lt;br /&gt;
&lt;br /&gt;
    cd ~/discourse&lt;br /&gt;
    cp config/discourse_defaults.conf config/discourse.conf&lt;br /&gt;
&lt;br /&gt;
Anpassen folgender Inhalte:&lt;br /&gt;
&lt;br /&gt;
    db_host = 127.0.0.1&lt;br /&gt;
    db_port = 5432&lt;br /&gt;
    #db_backup_port = 5432 #(auskommentieren)&lt;br /&gt;
    db_name = xyz00_discoursedb&lt;br /&gt;
    db_username = xyz00_discourseuser&lt;br /&gt;
    db_password = &amp;quot;&amp;quot; #db password&lt;br /&gt;
    hostname = &amp;quot;discourse.xyz00&amp;quot; # hostname&lt;br /&gt;
    smtp_address = localhost&lt;br /&gt;
    smtp_enable_start_tls = false&lt;br /&gt;
    smtp_openssl_verify_mode = &#039;none&#039;&lt;br /&gt;
    developer_emails = # your email-address&lt;br /&gt;
    redis_host = 127.0.0.1&lt;br /&gt;
    redis_port = 16379&lt;br /&gt;
&lt;br /&gt;
## ToDo ...&lt;br /&gt;
&lt;br /&gt;
Die Zufallswerte für die Variablen SECRET_KEY_BASE und OTP_SECRET erzeugt man durch zwei Aufrufe des Kommandos&lt;br /&gt;
&lt;br /&gt;
    RAILS_ENV=production bundle exec rake secret&lt;br /&gt;
&lt;br /&gt;
=== Sidekiq für Hintergrund-Aufgaben konfigurieren ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;config/sidekiq.conf&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Initialisieren der Datenbank ===&lt;br /&gt;
&lt;br /&gt;
    export SAFETY_ASSURED=1&lt;br /&gt;
    # In Version 2.0.4 funktioniert db:migrate noch, ansonsten schema:load und seed nutzen!&lt;br /&gt;
    #RAILS_ENV=production bundle exec rails db:schema:load&lt;br /&gt;
    #RAILS_ENV=production bundle exec rails db:seed&lt;br /&gt;
    RAILS_ENV=production bundle exec rails db:migrate&lt;br /&gt;
&lt;br /&gt;
== Starten der Dienste  ==&lt;br /&gt;
&lt;br /&gt;
Zum Start aller notwendigen Dienste wird in dieser Anleitung &#039;&#039;supervisor&#039;&#039; benutzt. Hier ein Beispiel für eine Datei &#039;&#039;.monitrc&#039;&#039; (überlange Zeilen werden hier im Wiki umgebrochen)&lt;br /&gt;
&lt;br /&gt;
== Einrichten des Apache VHost ==&lt;br /&gt;
&lt;br /&gt;
    cd ~/doms/beispiel.social&lt;br /&gt;
    rm -rf htdocs-ssl subs/www subs-ssl/www&lt;br /&gt;
    ln -s ~/live/public htdocs-ssl&lt;br /&gt;
    touch htdocs-ssl/.htaccess&lt;br /&gt;
&lt;br /&gt;
Dann die &#039;&#039;htdocs-ssl/.htaccess&#039;&#039; mit dem Editor der Wahl öffnen und &lt;br /&gt;
folgende Konfiguration einfügen:&lt;br /&gt;
&lt;br /&gt;
    DirectoryIndex disabled&lt;br /&gt;
    RewriteEngine On&lt;br /&gt;
    RewriteBase /&lt;br /&gt;
    RewriteCond %{REQUEST_URI}  ^/api/v1/streaming    [NC]&lt;br /&gt;
    RewriteRule .* ws://localhost:32004%{REQUEST_URI}  [proxy]&lt;br /&gt;
    RequestHeader set X-Forwarded-Proto &amp;quot;https&amp;quot;&lt;br /&gt;
    RewriteCond %{REQUEST_FILENAME} !-f&lt;br /&gt;
    RewriteCond %{REQUEST_FILENAME} !-l&lt;br /&gt;
    RewriteRule .* http://localhost:32003%{REQUEST_URI} [proxy]&lt;br /&gt;
    RequestHeader set X-Forwarded-Proto &amp;quot;https&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Cron&#039;&#039; wird für genutzt, um nach dem Server reboot &#039;&#039;supervisord&#039;&#039; zu starten.&lt;br /&gt;
&lt;br /&gt;
Einrichten der crontab mit &#039;&#039;cronttab -e&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
    HOME=/home/pacs/xyz00/users/mastodon&lt;br /&gt;
    MAILTO=mastodon@beispiel.social&lt;br /&gt;
    RAILS_ENV=production&lt;br /&gt;
    NUM_DAYS=31&lt;br /&gt;
    &lt;br /&gt;
    @reboot /usr/bin/monit -c $HOME/.monitrc&lt;br /&gt;
    18 4 * * * cd $HOME/mastodon/live &amp;amp;&amp;amp; $HOME/.rbenv/shims/bundle exec rake mastodon:media:remove_remote&lt;br /&gt;
&lt;br /&gt;
== Volltextsuche ==&lt;br /&gt;
&lt;br /&gt;
In der installierten Version gibt es noch keine Volltextsuche. Es kann lediglich nach Nutzerkennungen und Hastags gesucht werden. Für die Volltextsuche kann optional Elasticsearch installiert werden.&lt;br /&gt;
* https://github.com/tootsuite/documentation/blob/master/Running-Mastodon/Elasticsearch-guide.md&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* https://github.com/tootsuite/documentation/blob/master/Running-Mastodon/Production-guide.md&lt;br /&gt;
* https://krinetzki.de/2017/04/installation-von-mastodon-auf-debian-8-jessie/&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Installationsanleitungen]]&lt;/div&gt;</summary>
		<author><name>Dib00-discourse</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Discourse_installieren&amp;diff=4666</id>
		<title>Discourse installieren</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Discourse_installieren&amp;diff=4666"/>
		<updated>2018-08-27T10:41:53Z</updated>

		<summary type="html">&lt;p&gt;Dib00-discourse: /* Konfiguration der Discourse Software */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Textkasten|gelb|Für Managed Server|Ein funktionierender Discourse-Server erfordert mehrere laufende Server-Dienste. Für den Betrieb ist ein Managed Server sinnvoll.}}&lt;br /&gt;
&lt;br /&gt;
{{Textkasten|rot|Work in Progress|Dieser Artikel soll erklären, wie man discourse installiert, ist allerdings **noch nicht fertig**}}&lt;br /&gt;
&lt;br /&gt;
{{Textkasten|rot|Support von der Discourse-Community|Die Discourse-Entwickler haben sich entschieden, nur eine mehr oder weniger genormte Installationsmethode (via docker) zu unterstützen. Dies ist so auf der hostsharing-Architektur aufgrund mehrerer Bedenken und Überlegungen nicht möglich. Die Community ist durchaus hilfreich, geht aber davon aus, dass quasi alle Nutzer* eine &amp;quot;supported&amp;quot;e Installation durchgeführt haben. Wenn man in entsprechenden Kanälen nach Hilfe fragt, sollte man unbedingt erwähnen, dass man discourse selber anhand dieser hier lesbaren Anleitung installiert hat, um bereits entsprechenden Kommentaren und Nachfragen vorzugreifen.}}&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-discourse&#039;&#039;&lt;br /&gt;
# Eine Domain mit &#039;&#039;xyz00-discourse&#039; als Domain-Administrator, zum Beispiel &#039;&#039;beispiel.discussion&#039;&#039;&lt;br /&gt;
# Einen Postgresql-User &#039;&#039;xyz00_discourseuser&#039;&#039; mit Passwort &#039;&#039;meinPasswort&#039;&#039;&lt;br /&gt;
# Eine Postgresql-Datenbank &#039;&#039;xyz00_discoursedb&#039;&#039; mit Datenbank-Owner &#039;&#039;xyz00_discourseuser&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Verwendete IP-Ports der Server-Dienste:&lt;br /&gt;
# Monit: localhost:32001&lt;br /&gt;
# Redis: localhost:32002&lt;br /&gt;
# Discourse-Web: localhost:32003&lt;br /&gt;
&lt;br /&gt;
== Konfiguration des Redis Server ==&lt;br /&gt;
&lt;br /&gt;
    cd&lt;br /&gt;
    mkdir redis/etc redis/lib redis/log redis/run&lt;br /&gt;
&lt;br /&gt;
Anlegen einer Datei &#039;&#039;/home/pacs/xyz00/users/discourse/redis/etc/redis.conf&#039;&#039; mit folgendem Inhalt:&lt;br /&gt;
&lt;br /&gt;
    daemonize no&lt;br /&gt;
    pidfile /home/pacs/xyz00/users/discourse/redis/run/redis-server.pid&lt;br /&gt;
    port 32002&lt;br /&gt;
    tcp-backlog 128&lt;br /&gt;
    bind 127.0.0.1&lt;br /&gt;
    timeout 300&lt;br /&gt;
    loglevel notice&lt;br /&gt;
    logfile /home/pacs/xyz00/users/discourse/redis/log/redis.log&lt;br /&gt;
    databases 16&lt;br /&gt;
    save 900 1&lt;br /&gt;
    save 300 10&lt;br /&gt;
    save 60 10000&lt;br /&gt;
    slave-serve-stale-data yes&lt;br /&gt;
    appendonly no&lt;br /&gt;
    dbfilename dump.rdb&lt;br /&gt;
    dir /home/pacs/xyz00/users/discourse/redis/lib&lt;br /&gt;
&lt;br /&gt;
== Installation von Ruby ==&lt;br /&gt;
&lt;br /&gt;
Als User &#039;&#039;xyz00-discourse&#039;&#039;:  Installation von Ruby mit &#039;&#039;rbenv&#039;&#039; mit folgenden Befehlen:&lt;br /&gt;
&lt;br /&gt;
Zunächst &#039;&#039;rbenv&#039;&#039; and &#039;&#039;ruby-build&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
    git clone https://github.com/rbenv/rbenv.git ~/.rbenv&lt;br /&gt;
    cd ~/.rbenv &amp;amp;&amp;amp; src/configure &amp;amp;&amp;amp; make -C src&lt;br /&gt;
    echo &#039;export PATH=&amp;quot;$HOME/.rbenv/bin:$PATH&amp;quot;&#039; &amp;gt;&amp;gt; ~/.profile&lt;br /&gt;
    echo &#039;eval &amp;quot;$(rbenv init -)&amp;quot;&#039; &amp;gt;&amp;gt; ~/.profile&lt;br /&gt;
&lt;br /&gt;
starte neue Shell:&lt;br /&gt;
&lt;br /&gt;
    exec bash&lt;br /&gt;
&lt;br /&gt;
Überprüfe rbenv-Installation&lt;br /&gt;
&lt;br /&gt;
    type rbenv&lt;br /&gt;
&lt;br /&gt;
Installiere ruby-build als rbenv-Plugin&lt;br /&gt;
&lt;br /&gt;
    git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build&lt;br /&gt;
&lt;br /&gt;
Nun kann die benötigte Ruby-Version installiert werden:&lt;br /&gt;
&lt;br /&gt;
    rbenv install 2.4&lt;br /&gt;
&lt;br /&gt;
== Installation von Discourse selber ==&lt;br /&gt;
&lt;br /&gt;
Weiterhin Als User &#039;&#039;xyz00-discourse&#039;&#039;:  &lt;br /&gt;
&lt;br /&gt;
    cd ~&lt;br /&gt;
    git clone https://github.com/discourse/discourse.git discourse&lt;br /&gt;
    cd ~/discourse&lt;br /&gt;
&lt;br /&gt;
Die stabile Version auschecken:&lt;br /&gt;
&lt;br /&gt;
    git checkout stable&lt;br /&gt;
&lt;br /&gt;
Ruby Pakete installieren:&lt;br /&gt;
&lt;br /&gt;
    gem install bundler&lt;br /&gt;
    bundle install -j$(getconf _NPROCESSORS_ONLN) --deployment --without development test&lt;br /&gt;
&lt;br /&gt;
== Konfiguration der Discourse Software ==&lt;br /&gt;
&lt;br /&gt;
Anlegen einer Datei &#039;&#039;/home/pacs/xyz00/users/discourse/discourse/config/discourse.conf&#039;&#039; anhand der Beispiel-Datei:&lt;br /&gt;
&lt;br /&gt;
    cd ~/discourse&lt;br /&gt;
    cp config/discourse_defaults.conf config/discourse.conf&lt;br /&gt;
&lt;br /&gt;
Anpassen folgender Inhalte:&lt;br /&gt;
&lt;br /&gt;
    db_host = 127.0.0.1&lt;br /&gt;
    db_port = 5432&lt;br /&gt;
    #db_backup_port = 5432 #(auskommentieren)&lt;br /&gt;
    db_name = xyz00_discoursedb&lt;br /&gt;
    db_username = xyz00_discourseuser&lt;br /&gt;
    db_password = &amp;quot;&amp;quot; #db password&lt;br /&gt;
    hostname = &amp;quot;discourse.xyz00&amp;quot; # hostname&lt;br /&gt;
    smtp_address = localhost&lt;br /&gt;
    smtp_enable_start_tls = false&lt;br /&gt;
    smtp_openssl_verify_mode = &#039;none&#039;&lt;br /&gt;
    developer_emails = # your email-address&lt;br /&gt;
    redis_host = 127.0.0.1&lt;br /&gt;
    redis_port = 16379&lt;br /&gt;
&lt;br /&gt;
## ToDo ...&lt;br /&gt;
&lt;br /&gt;
Die Zufallswerte für die Variablen SECRET_KEY_BASE und OTP_SECRET erzeugt man durch zwei Aufrufe des Kommandos&lt;br /&gt;
&lt;br /&gt;
    RAILS_ENV=production bundle exec rake secret&lt;br /&gt;
&lt;br /&gt;
=== Sidekiq für Hintergrund-Aufgaben konfigurieren ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;config/sidekiq.conf&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Initialisieren der Datenbank ===&lt;br /&gt;
&lt;br /&gt;
    export SAFETY_ASSURED=1&lt;br /&gt;
    # In Version 2.0.4 funktioniert db:migrate noch, ansonsten schema:load und seed nutzen!&lt;br /&gt;
    #RAILS_ENV=production bundle exec rails db:schema:load&lt;br /&gt;
    #RAILS_ENV=production bundle exec rails db:seed&lt;br /&gt;
    RAILS_ENV=production bundle exec rails db:migrate&lt;br /&gt;
&lt;br /&gt;
== Starten der Dienste  ==&lt;br /&gt;
&lt;br /&gt;
Zum Start aller notwendigen Dienste wird in dieser Anleitung &#039;&#039;supervisor&#039;&#039; benutzt. Hier ein Beispiel für eine Datei &#039;&#039;.monitrc&#039;&#039; (überlange Zeilen werden hier im Wiki umgebrochen)&lt;br /&gt;
&lt;br /&gt;
== Einrichten des Apache VHost ==&lt;br /&gt;
&lt;br /&gt;
    cd ~/doms/beispiel.social&lt;br /&gt;
    rm -rf htdocs-ssl subs/www subs-ssl/www&lt;br /&gt;
    ln -s ~/live/public htdocs-ssl&lt;br /&gt;
    touch htdocs-ssl/.htaccess&lt;br /&gt;
&lt;br /&gt;
Dann die &#039;&#039;htdocs-ssl/.htaccess&#039;&#039; mit dem Editor der Wahl öffnen und &lt;br /&gt;
folgende Konfiguration einfügen:&lt;br /&gt;
&lt;br /&gt;
    DirectoryIndex disabled&lt;br /&gt;
    RewriteEngine On&lt;br /&gt;
    RewriteBase /&lt;br /&gt;
    RewriteCond %{REQUEST_URI}  ^/api/v1/streaming    [NC]&lt;br /&gt;
    RewriteRule .* ws://localhost:32004%{REQUEST_URI}  [proxy]&lt;br /&gt;
    RequestHeader set X-Forwarded-Proto &amp;quot;https&amp;quot;&lt;br /&gt;
    RewriteCond %{REQUEST_FILENAME} !-f&lt;br /&gt;
    RewriteCond %{REQUEST_FILENAME} !-l&lt;br /&gt;
    RewriteRule .* http://localhost:32003%{REQUEST_URI} [proxy]&lt;br /&gt;
    RequestHeader set X-Forwarded-Proto &amp;quot;https&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Cron&#039;&#039; wird für zwei Aufgaben genutzt:&lt;br /&gt;
* Start von monit nach einem Server Reboot&lt;br /&gt;
* Aufräumen von alten Resourcen&lt;br /&gt;
&lt;br /&gt;
Einrichten der crontab mit &#039;&#039;cronttab -e&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
    HOME=/home/pacs/xyz00/users/mastodon&lt;br /&gt;
    MAILTO=mastodon@beispiel.social&lt;br /&gt;
    RAILS_ENV=production&lt;br /&gt;
    NUM_DAYS=31&lt;br /&gt;
    &lt;br /&gt;
    @reboot /usr/bin/monit -c $HOME/.monitrc&lt;br /&gt;
    18 4 * * * cd $HOME/mastodon/live &amp;amp;&amp;amp; $HOME/.rbenv/shims/bundle exec rake mastodon:media:remove_remote&lt;br /&gt;
&lt;br /&gt;
== Volltextsuche ==&lt;br /&gt;
&lt;br /&gt;
In der installierten Version gibt es noch keine Volltextsuche. Es kann lediglich nach Nutzerkennungen und Hastags gesucht werden. Für die Volltextsuche kann optional Elasticsearch installiert werden.&lt;br /&gt;
* https://github.com/tootsuite/documentation/blob/master/Running-Mastodon/Elasticsearch-guide.md&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* https://github.com/tootsuite/documentation/blob/master/Running-Mastodon/Production-guide.md&lt;br /&gt;
* https://krinetzki.de/2017/04/installation-von-mastodon-auf-debian-8-jessie/&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Installationsanleitungen]]&lt;/div&gt;</summary>
		<author><name>Dib00-discourse</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Discourse_installieren&amp;diff=4665</id>
		<title>Discourse installieren</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Discourse_installieren&amp;diff=4665"/>
		<updated>2018-08-27T10:40:38Z</updated>

		<summary type="html">&lt;p&gt;Dib00-discourse: /* Starten der Dienste */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Textkasten|gelb|Für Managed Server|Ein funktionierender Discourse-Server erfordert mehrere laufende Server-Dienste. Für den Betrieb ist ein Managed Server sinnvoll.}}&lt;br /&gt;
&lt;br /&gt;
{{Textkasten|rot|Work in Progress|Dieser Artikel soll erklären, wie man discourse installiert, ist allerdings **noch nicht fertig**}}&lt;br /&gt;
&lt;br /&gt;
{{Textkasten|rot|Support von der Discourse-Community|Die Discourse-Entwickler haben sich entschieden, nur eine mehr oder weniger genormte Installationsmethode (via docker) zu unterstützen. Dies ist so auf der hostsharing-Architektur aufgrund mehrerer Bedenken und Überlegungen nicht möglich. Die Community ist durchaus hilfreich, geht aber davon aus, dass quasi alle Nutzer* eine &amp;quot;supported&amp;quot;e Installation durchgeführt haben. Wenn man in entsprechenden Kanälen nach Hilfe fragt, sollte man unbedingt erwähnen, dass man discourse selber anhand dieser hier lesbaren Anleitung installiert hat, um bereits entsprechenden Kommentaren und Nachfragen vorzugreifen.}}&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-discourse&#039;&#039;&lt;br /&gt;
# Eine Domain mit &#039;&#039;xyz00-discourse&#039; als Domain-Administrator, zum Beispiel &#039;&#039;beispiel.discussion&#039;&#039;&lt;br /&gt;
# Einen Postgresql-User &#039;&#039;xyz00_discourseuser&#039;&#039; mit Passwort &#039;&#039;meinPasswort&#039;&#039;&lt;br /&gt;
# Eine Postgresql-Datenbank &#039;&#039;xyz00_discoursedb&#039;&#039; mit Datenbank-Owner &#039;&#039;xyz00_discourseuser&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Verwendete IP-Ports der Server-Dienste:&lt;br /&gt;
# Monit: localhost:32001&lt;br /&gt;
# Redis: localhost:32002&lt;br /&gt;
# Discourse-Web: localhost:32003&lt;br /&gt;
&lt;br /&gt;
== Konfiguration des Redis Server ==&lt;br /&gt;
&lt;br /&gt;
    cd&lt;br /&gt;
    mkdir redis/etc redis/lib redis/log redis/run&lt;br /&gt;
&lt;br /&gt;
Anlegen einer Datei &#039;&#039;/home/pacs/xyz00/users/discourse/redis/etc/redis.conf&#039;&#039; mit folgendem Inhalt:&lt;br /&gt;
&lt;br /&gt;
    daemonize no&lt;br /&gt;
    pidfile /home/pacs/xyz00/users/discourse/redis/run/redis-server.pid&lt;br /&gt;
    port 32002&lt;br /&gt;
    tcp-backlog 128&lt;br /&gt;
    bind 127.0.0.1&lt;br /&gt;
    timeout 300&lt;br /&gt;
    loglevel notice&lt;br /&gt;
    logfile /home/pacs/xyz00/users/discourse/redis/log/redis.log&lt;br /&gt;
    databases 16&lt;br /&gt;
    save 900 1&lt;br /&gt;
    save 300 10&lt;br /&gt;
    save 60 10000&lt;br /&gt;
    slave-serve-stale-data yes&lt;br /&gt;
    appendonly no&lt;br /&gt;
    dbfilename dump.rdb&lt;br /&gt;
    dir /home/pacs/xyz00/users/discourse/redis/lib&lt;br /&gt;
&lt;br /&gt;
== Installation von Ruby ==&lt;br /&gt;
&lt;br /&gt;
Als User &#039;&#039;xyz00-discourse&#039;&#039;:  Installation von Ruby mit &#039;&#039;rbenv&#039;&#039; mit folgenden Befehlen:&lt;br /&gt;
&lt;br /&gt;
Zunächst &#039;&#039;rbenv&#039;&#039; and &#039;&#039;ruby-build&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
    git clone https://github.com/rbenv/rbenv.git ~/.rbenv&lt;br /&gt;
    cd ~/.rbenv &amp;amp;&amp;amp; src/configure &amp;amp;&amp;amp; make -C src&lt;br /&gt;
    echo &#039;export PATH=&amp;quot;$HOME/.rbenv/bin:$PATH&amp;quot;&#039; &amp;gt;&amp;gt; ~/.profile&lt;br /&gt;
    echo &#039;eval &amp;quot;$(rbenv init -)&amp;quot;&#039; &amp;gt;&amp;gt; ~/.profile&lt;br /&gt;
&lt;br /&gt;
starte neue Shell:&lt;br /&gt;
&lt;br /&gt;
    exec bash&lt;br /&gt;
&lt;br /&gt;
Überprüfe rbenv-Installation&lt;br /&gt;
&lt;br /&gt;
    type rbenv&lt;br /&gt;
&lt;br /&gt;
Installiere ruby-build als rbenv-Plugin&lt;br /&gt;
&lt;br /&gt;
    git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build&lt;br /&gt;
&lt;br /&gt;
Nun kann die benötigte Ruby-Version installiert werden:&lt;br /&gt;
&lt;br /&gt;
    rbenv install 2.4&lt;br /&gt;
&lt;br /&gt;
== Installation von Discourse selber ==&lt;br /&gt;
&lt;br /&gt;
Weiterhin Als User &#039;&#039;xyz00-discourse&#039;&#039;:  &lt;br /&gt;
&lt;br /&gt;
    cd ~&lt;br /&gt;
    git clone https://github.com/discourse/discourse.git discourse&lt;br /&gt;
    cd ~/discourse&lt;br /&gt;
&lt;br /&gt;
Die stabile Version auschecken:&lt;br /&gt;
&lt;br /&gt;
    git checkout stable&lt;br /&gt;
&lt;br /&gt;
Ruby Pakete installieren:&lt;br /&gt;
&lt;br /&gt;
    gem install bundler&lt;br /&gt;
    bundle install -j$(getconf _NPROCESSORS_ONLN) --deployment --without development test&lt;br /&gt;
&lt;br /&gt;
== Konfiguration der Discourse Software ==&lt;br /&gt;
&lt;br /&gt;
Anlegen einer Datei &#039;&#039;/home/pacs/xyz00/users/discourse/discourse/config/discourse.conf&#039;&#039; anhand der Beispiel-Datei:&lt;br /&gt;
&lt;br /&gt;
    cd ~/discourse&lt;br /&gt;
    cp config/discourse_defaults.conf config/discourse.conf&lt;br /&gt;
&lt;br /&gt;
Anpassen folgender Inhalte:&lt;br /&gt;
&lt;br /&gt;
    db_host = 127.0.0.1&lt;br /&gt;
    db_port = 5432&lt;br /&gt;
    #db_backup_port = 5432 #(auskommentieren)&lt;br /&gt;
    db_name = xyz00_discoursedb&lt;br /&gt;
    db_username = xyz00_discourseuser&lt;br /&gt;
    db_password = &amp;quot;&amp;quot; #db password&lt;br /&gt;
    hostname = &amp;quot;discourse.xyz00&amp;quot; # hostname&lt;br /&gt;
    smtp_address = localhost&lt;br /&gt;
    smtp_enable_start_tls = false&lt;br /&gt;
    smtp_openssl_verify_mode = &#039;none&#039;&lt;br /&gt;
    developer_emails = # your email-address&lt;br /&gt;
    redis_host = 127.0.0.1&lt;br /&gt;
    redis_port = 16379&lt;br /&gt;
&lt;br /&gt;
## ToDo ...&lt;br /&gt;
&lt;br /&gt;
Die Zufallswerte für die Variablen SECRET_KEY_BASE und OTP_SECRET erzeugt man durch zwei Aufrufe des Kommandos&lt;br /&gt;
&lt;br /&gt;
    RAILS_ENV=production bundle exec rake secret&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Initialisieren der Datenbank:&lt;br /&gt;
&lt;br /&gt;
    export SAFETY_ASSURED=1&lt;br /&gt;
    # In Version 2.0.4 funktioniert db:migrate noch, ansonsten schema:load und seed nutzen!&lt;br /&gt;
    #RAILS_ENV=production bundle exec rails db:schema:load&lt;br /&gt;
    #RAILS_ENV=production bundle exec rails db:seed&lt;br /&gt;
    RAILS_ENV=production bundle exec rails db:migrate&lt;br /&gt;
&lt;br /&gt;
== Starten der Dienste  ==&lt;br /&gt;
&lt;br /&gt;
Zum Start aller notwendigen Dienste wird in dieser Anleitung &#039;&#039;supervisor&#039;&#039; benutzt. Hier ein Beispiel für eine Datei &#039;&#039;.monitrc&#039;&#039; (überlange Zeilen werden hier im Wiki umgebrochen)&lt;br /&gt;
&lt;br /&gt;
== Einrichten des Apache VHost ==&lt;br /&gt;
&lt;br /&gt;
    cd ~/doms/beispiel.social&lt;br /&gt;
    rm -rf htdocs-ssl subs/www subs-ssl/www&lt;br /&gt;
    ln -s ~/live/public htdocs-ssl&lt;br /&gt;
    touch htdocs-ssl/.htaccess&lt;br /&gt;
&lt;br /&gt;
Dann die &#039;&#039;htdocs-ssl/.htaccess&#039;&#039; mit dem Editor der Wahl öffnen und &lt;br /&gt;
folgende Konfiguration einfügen:&lt;br /&gt;
&lt;br /&gt;
    DirectoryIndex disabled&lt;br /&gt;
    RewriteEngine On&lt;br /&gt;
    RewriteBase /&lt;br /&gt;
    RewriteCond %{REQUEST_URI}  ^/api/v1/streaming    [NC]&lt;br /&gt;
    RewriteRule .* ws://localhost:32004%{REQUEST_URI}  [proxy]&lt;br /&gt;
    RequestHeader set X-Forwarded-Proto &amp;quot;https&amp;quot;&lt;br /&gt;
    RewriteCond %{REQUEST_FILENAME} !-f&lt;br /&gt;
    RewriteCond %{REQUEST_FILENAME} !-l&lt;br /&gt;
    RewriteRule .* http://localhost:32003%{REQUEST_URI} [proxy]&lt;br /&gt;
    RequestHeader set X-Forwarded-Proto &amp;quot;https&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Cron&#039;&#039; wird für zwei Aufgaben genutzt:&lt;br /&gt;
* Start von monit nach einem Server Reboot&lt;br /&gt;
* Aufräumen von alten Resourcen&lt;br /&gt;
&lt;br /&gt;
Einrichten der crontab mit &#039;&#039;cronttab -e&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
    HOME=/home/pacs/xyz00/users/mastodon&lt;br /&gt;
    MAILTO=mastodon@beispiel.social&lt;br /&gt;
    RAILS_ENV=production&lt;br /&gt;
    NUM_DAYS=31&lt;br /&gt;
    &lt;br /&gt;
    @reboot /usr/bin/monit -c $HOME/.monitrc&lt;br /&gt;
    18 4 * * * cd $HOME/mastodon/live &amp;amp;&amp;amp; $HOME/.rbenv/shims/bundle exec rake mastodon:media:remove_remote&lt;br /&gt;
&lt;br /&gt;
== Volltextsuche ==&lt;br /&gt;
&lt;br /&gt;
In der installierten Version gibt es noch keine Volltextsuche. Es kann lediglich nach Nutzerkennungen und Hastags gesucht werden. Für die Volltextsuche kann optional Elasticsearch installiert werden.&lt;br /&gt;
* https://github.com/tootsuite/documentation/blob/master/Running-Mastodon/Elasticsearch-guide.md&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* https://github.com/tootsuite/documentation/blob/master/Running-Mastodon/Production-guide.md&lt;br /&gt;
* https://krinetzki.de/2017/04/installation-von-mastodon-auf-debian-8-jessie/&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Installationsanleitungen]]&lt;/div&gt;</summary>
		<author><name>Dib00-discourse</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Discourse_installieren&amp;diff=4664</id>
		<title>Discourse installieren</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Discourse_installieren&amp;diff=4664"/>
		<updated>2018-08-27T10:39:57Z</updated>

		<summary type="html">&lt;p&gt;Dib00-discourse: /* Konfiguration der Discourse Software */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Textkasten|gelb|Für Managed Server|Ein funktionierender Discourse-Server erfordert mehrere laufende Server-Dienste. Für den Betrieb ist ein Managed Server sinnvoll.}}&lt;br /&gt;
&lt;br /&gt;
{{Textkasten|rot|Work in Progress|Dieser Artikel soll erklären, wie man discourse installiert, ist allerdings **noch nicht fertig**}}&lt;br /&gt;
&lt;br /&gt;
{{Textkasten|rot|Support von der Discourse-Community|Die Discourse-Entwickler haben sich entschieden, nur eine mehr oder weniger genormte Installationsmethode (via docker) zu unterstützen. Dies ist so auf der hostsharing-Architektur aufgrund mehrerer Bedenken und Überlegungen nicht möglich. Die Community ist durchaus hilfreich, geht aber davon aus, dass quasi alle Nutzer* eine &amp;quot;supported&amp;quot;e Installation durchgeführt haben. Wenn man in entsprechenden Kanälen nach Hilfe fragt, sollte man unbedingt erwähnen, dass man discourse selber anhand dieser hier lesbaren Anleitung installiert hat, um bereits entsprechenden Kommentaren und Nachfragen vorzugreifen.}}&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-discourse&#039;&#039;&lt;br /&gt;
# Eine Domain mit &#039;&#039;xyz00-discourse&#039; als Domain-Administrator, zum Beispiel &#039;&#039;beispiel.discussion&#039;&#039;&lt;br /&gt;
# Einen Postgresql-User &#039;&#039;xyz00_discourseuser&#039;&#039; mit Passwort &#039;&#039;meinPasswort&#039;&#039;&lt;br /&gt;
# Eine Postgresql-Datenbank &#039;&#039;xyz00_discoursedb&#039;&#039; mit Datenbank-Owner &#039;&#039;xyz00_discourseuser&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Verwendete IP-Ports der Server-Dienste:&lt;br /&gt;
# Monit: localhost:32001&lt;br /&gt;
# Redis: localhost:32002&lt;br /&gt;
# Discourse-Web: localhost:32003&lt;br /&gt;
&lt;br /&gt;
== Konfiguration des Redis Server ==&lt;br /&gt;
&lt;br /&gt;
    cd&lt;br /&gt;
    mkdir redis/etc redis/lib redis/log redis/run&lt;br /&gt;
&lt;br /&gt;
Anlegen einer Datei &#039;&#039;/home/pacs/xyz00/users/discourse/redis/etc/redis.conf&#039;&#039; mit folgendem Inhalt:&lt;br /&gt;
&lt;br /&gt;
    daemonize no&lt;br /&gt;
    pidfile /home/pacs/xyz00/users/discourse/redis/run/redis-server.pid&lt;br /&gt;
    port 32002&lt;br /&gt;
    tcp-backlog 128&lt;br /&gt;
    bind 127.0.0.1&lt;br /&gt;
    timeout 300&lt;br /&gt;
    loglevel notice&lt;br /&gt;
    logfile /home/pacs/xyz00/users/discourse/redis/log/redis.log&lt;br /&gt;
    databases 16&lt;br /&gt;
    save 900 1&lt;br /&gt;
    save 300 10&lt;br /&gt;
    save 60 10000&lt;br /&gt;
    slave-serve-stale-data yes&lt;br /&gt;
    appendonly no&lt;br /&gt;
    dbfilename dump.rdb&lt;br /&gt;
    dir /home/pacs/xyz00/users/discourse/redis/lib&lt;br /&gt;
&lt;br /&gt;
== Installation von Ruby ==&lt;br /&gt;
&lt;br /&gt;
Als User &#039;&#039;xyz00-discourse&#039;&#039;:  Installation von Ruby mit &#039;&#039;rbenv&#039;&#039; mit folgenden Befehlen:&lt;br /&gt;
&lt;br /&gt;
Zunächst &#039;&#039;rbenv&#039;&#039; and &#039;&#039;ruby-build&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
    git clone https://github.com/rbenv/rbenv.git ~/.rbenv&lt;br /&gt;
    cd ~/.rbenv &amp;amp;&amp;amp; src/configure &amp;amp;&amp;amp; make -C src&lt;br /&gt;
    echo &#039;export PATH=&amp;quot;$HOME/.rbenv/bin:$PATH&amp;quot;&#039; &amp;gt;&amp;gt; ~/.profile&lt;br /&gt;
    echo &#039;eval &amp;quot;$(rbenv init -)&amp;quot;&#039; &amp;gt;&amp;gt; ~/.profile&lt;br /&gt;
&lt;br /&gt;
starte neue Shell:&lt;br /&gt;
&lt;br /&gt;
    exec bash&lt;br /&gt;
&lt;br /&gt;
Überprüfe rbenv-Installation&lt;br /&gt;
&lt;br /&gt;
    type rbenv&lt;br /&gt;
&lt;br /&gt;
Installiere ruby-build als rbenv-Plugin&lt;br /&gt;
&lt;br /&gt;
    git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build&lt;br /&gt;
&lt;br /&gt;
Nun kann die benötigte Ruby-Version installiert werden:&lt;br /&gt;
&lt;br /&gt;
    rbenv install 2.4&lt;br /&gt;
&lt;br /&gt;
== Installation von Discourse selber ==&lt;br /&gt;
&lt;br /&gt;
Weiterhin Als User &#039;&#039;xyz00-discourse&#039;&#039;:  &lt;br /&gt;
&lt;br /&gt;
    cd ~&lt;br /&gt;
    git clone https://github.com/discourse/discourse.git discourse&lt;br /&gt;
    cd ~/discourse&lt;br /&gt;
&lt;br /&gt;
Die stabile Version auschecken:&lt;br /&gt;
&lt;br /&gt;
    git checkout stable&lt;br /&gt;
&lt;br /&gt;
Ruby Pakete installieren:&lt;br /&gt;
&lt;br /&gt;
    gem install bundler&lt;br /&gt;
    bundle install -j$(getconf _NPROCESSORS_ONLN) --deployment --without development test&lt;br /&gt;
&lt;br /&gt;
== Konfiguration der Discourse Software ==&lt;br /&gt;
&lt;br /&gt;
Anlegen einer Datei &#039;&#039;/home/pacs/xyz00/users/discourse/discourse/config/discourse.conf&#039;&#039; anhand der Beispiel-Datei:&lt;br /&gt;
&lt;br /&gt;
    cd ~/discourse&lt;br /&gt;
    cp config/discourse_defaults.conf config/discourse.conf&lt;br /&gt;
&lt;br /&gt;
Anpassen folgender Inhalte:&lt;br /&gt;
&lt;br /&gt;
    db_host = 127.0.0.1&lt;br /&gt;
    db_port = 5432&lt;br /&gt;
    #db_backup_port = 5432 #(auskommentieren)&lt;br /&gt;
    db_name = xyz00_discoursedb&lt;br /&gt;
    db_username = xyz00_discourseuser&lt;br /&gt;
    db_password = &amp;quot;&amp;quot; #db password&lt;br /&gt;
    hostname = &amp;quot;discourse.xyz00&amp;quot; # hostname&lt;br /&gt;
    smtp_address = localhost&lt;br /&gt;
    smtp_enable_start_tls = false&lt;br /&gt;
    smtp_openssl_verify_mode = &#039;none&#039;&lt;br /&gt;
    developer_emails = # your email-address&lt;br /&gt;
    redis_host = 127.0.0.1&lt;br /&gt;
    redis_port = 16379&lt;br /&gt;
&lt;br /&gt;
## ToDo ...&lt;br /&gt;
&lt;br /&gt;
Die Zufallswerte für die Variablen SECRET_KEY_BASE und OTP_SECRET erzeugt man durch zwei Aufrufe des Kommandos&lt;br /&gt;
&lt;br /&gt;
    RAILS_ENV=production bundle exec rake secret&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Initialisieren der Datenbank:&lt;br /&gt;
&lt;br /&gt;
    export SAFETY_ASSURED=1&lt;br /&gt;
    # In Version 2.0.4 funktioniert db:migrate noch, ansonsten schema:load und seed nutzen!&lt;br /&gt;
    #RAILS_ENV=production bundle exec rails db:schema:load&lt;br /&gt;
    #RAILS_ENV=production bundle exec rails db:seed&lt;br /&gt;
    RAILS_ENV=production bundle exec rails db:migrate&lt;br /&gt;
&lt;br /&gt;
== Starten der Dienste  ==&lt;br /&gt;
&lt;br /&gt;
Zum Start aller notwendigen Dienste wird in dieser Anleitung &#039;&#039;monit&#039;&#039; benutzt. Hier ein Beispiel für eine Datei &#039;&#039;.monitrc&#039;&#039; (überlange Zeilen werden hier im Wiki umgebrochen)&lt;br /&gt;
&lt;br /&gt;
    set daemon 60&lt;br /&gt;
        with start delay 120&lt;br /&gt;
    set logfile /home/pacs/xyz00/users/mastodon/monit/var/monit.log&lt;br /&gt;
    set idfile /home/pacs/xyz00/users/mastodon/monit/var/monit.id&lt;br /&gt;
    set statefile /home/pacs/xyz00/users/mastodon/monit/var/monit.state&lt;br /&gt;
    set mailserver localhost&lt;br /&gt;
    set mail-format { from: monit@beispiel.social }&lt;br /&gt;
    set alert mastodon@beispiel.social&lt;br /&gt;
    set httpd port 32001 address xyz00.hostsharing.net &lt;br /&gt;
        allow mostodon:monitpassword&lt;br /&gt;
    check process redis with pidfile /home/pacs/xyz00/users/mastodon/redis/var/redis-server.pid&lt;br /&gt;
        start program &amp;quot;/usr/bin/redis-server /home/pacs/xyz00/users/mastodon/redis/etc/redis.conf&amp;quot;&lt;br /&gt;
        stop program &amp;quot;/bin/bash -c &#039;/bin/kill $( cat /home/pacs/xyz00/users/mastodon/redis/var/redis-server.pid )&#039;&amp;quot;&lt;br /&gt;
    check process mstdn_web with pidfile /home/pacs/xyz00/users/mastodon/mastodon/var/puma.pid&lt;br /&gt;
        depends redis&lt;br /&gt;
        start program &amp;quot;/bin/bash -c &#039;export HOME=/home/pacs/xyz00/users/mastodon &amp;amp;&amp;amp; cd $HOME/mastodon/live &amp;amp;&amp;amp; ( $HOME/.rbenv/shims/bundle exec puma -C config/puma.rb -e production -b tcp://127.0.0.1:32003 &amp;gt;$HOME/mastodon/var/puma.log 2&amp;gt;&amp;amp;1 &amp;amp;  echo $! &amp;gt; $HOME/mastodon/var/puma.pid  )&#039;&amp;quot;&lt;br /&gt;
        stop program &amp;quot;/bin/bash -c &#039;/bin/kill $( cat /home/pacs/xyz00/users/mastodon/mastodon/var/puma.pid )&#039;&amp;quot;&lt;br /&gt;
    check process mstdn_sidekiq with pidfile /home/pacs/xyz00/users/mastodon/mastodon/var/sidekiq.pid&lt;br /&gt;
        depends redis&lt;br /&gt;
        start program &amp;quot;/bin/bash -c &#039;export RAILS_ENV=production &amp;amp;&amp;amp; export DB_POOL=5 &amp;amp;&amp;amp; export HOME=/home/pacs/xyz00/users/mastodon &amp;amp;&amp;amp; cd $HOME/mastodon/live &amp;amp;&amp;amp; ( $HOME/.rbenv/shims/bundle exec sidekiq -c 5 -q default -q mailers -q pull -q push &amp;gt;$HOME/mastodon/var/sidekiq.log 2&amp;gt;&amp;amp;1 &amp;amp;  echo $! &amp;gt; $HOME/mastodon/var/sidekiq.pid  )&#039;&amp;quot;&lt;br /&gt;
        stop program &amp;quot;/bin/bash -c &#039;/bin/kill $( cat /home/pacs/xyz00/users/mastodon/mastodon/var/sidekiq.pid )&#039;&amp;quot;&lt;br /&gt;
    check process mstdn_streaming with pidfile /home/pacs/xyz00/users/mastodon/mastodon/var/streaming.pid&lt;br /&gt;
        depends redis&lt;br /&gt;
        start program &amp;quot;/bin/bash -c &#039;export HOME=/home/pacs/xyz00/users/mastodon &amp;amp;&amp;amp; export NVM_DIR=&amp;quot;$HOME/.nvm&amp;quot; &amp;amp;&amp;amp; export NVM_BIN=/home/pacs/xyz00/users/mastodon/.nvm/versions/node/v6.14.3/bin &amp;amp;&amp;amp; export NODE_ENV=production &amp;amp;&amp;amp; export PORT=32004 &amp;amp;&amp;amp; BIND=127.0.0.1 &amp;amp;&amp;amp; cd $HOME/mastodon/live &amp;amp;&amp;amp; ( $HOME/.nvm/versions/node/v6.14.3/bin/node streaming/index.js &amp;gt;$HOME/mastodon/var/streaming.log 2&amp;gt;&amp;amp;1 &amp;amp;  echo $! &amp;gt; $HOME/mastodon/var/streaming.pid  )&#039;&amp;quot;&lt;br /&gt;
        stop program &amp;quot;/bin/bash -c &#039;/bin/kill $( cat /home/pacs/xyz00/users/mastodon/mastodon/var/streaming.pid )&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Einrichten des Apache VHost ==&lt;br /&gt;
&lt;br /&gt;
    cd ~/doms/beispiel.social&lt;br /&gt;
    rm -rf htdocs-ssl subs/www subs-ssl/www&lt;br /&gt;
    ln -s ~/live/public htdocs-ssl&lt;br /&gt;
    touch htdocs-ssl/.htaccess&lt;br /&gt;
&lt;br /&gt;
Dann die &#039;&#039;htdocs-ssl/.htaccess&#039;&#039; mit dem Editor der Wahl öffnen und &lt;br /&gt;
folgende Konfiguration einfügen:&lt;br /&gt;
&lt;br /&gt;
    DirectoryIndex disabled&lt;br /&gt;
    RewriteEngine On&lt;br /&gt;
    RewriteBase /&lt;br /&gt;
    RewriteCond %{REQUEST_URI}  ^/api/v1/streaming    [NC]&lt;br /&gt;
    RewriteRule .* ws://localhost:32004%{REQUEST_URI}  [proxy]&lt;br /&gt;
    RequestHeader set X-Forwarded-Proto &amp;quot;https&amp;quot;&lt;br /&gt;
    RewriteCond %{REQUEST_FILENAME} !-f&lt;br /&gt;
    RewriteCond %{REQUEST_FILENAME} !-l&lt;br /&gt;
    RewriteRule .* http://localhost:32003%{REQUEST_URI} [proxy]&lt;br /&gt;
    RequestHeader set X-Forwarded-Proto &amp;quot;https&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Cron&#039;&#039; wird für zwei Aufgaben genutzt:&lt;br /&gt;
* Start von monit nach einem Server Reboot&lt;br /&gt;
* Aufräumen von alten Resourcen&lt;br /&gt;
&lt;br /&gt;
Einrichten der crontab mit &#039;&#039;cronttab -e&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
    HOME=/home/pacs/xyz00/users/mastodon&lt;br /&gt;
    MAILTO=mastodon@beispiel.social&lt;br /&gt;
    RAILS_ENV=production&lt;br /&gt;
    NUM_DAYS=31&lt;br /&gt;
    &lt;br /&gt;
    @reboot /usr/bin/monit -c $HOME/.monitrc&lt;br /&gt;
    18 4 * * * cd $HOME/mastodon/live &amp;amp;&amp;amp; $HOME/.rbenv/shims/bundle exec rake mastodon:media:remove_remote&lt;br /&gt;
&lt;br /&gt;
== Volltextsuche ==&lt;br /&gt;
&lt;br /&gt;
In der installierten Version gibt es noch keine Volltextsuche. Es kann lediglich nach Nutzerkennungen und Hastags gesucht werden. Für die Volltextsuche kann optional Elasticsearch installiert werden.&lt;br /&gt;
* https://github.com/tootsuite/documentation/blob/master/Running-Mastodon/Elasticsearch-guide.md&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* https://github.com/tootsuite/documentation/blob/master/Running-Mastodon/Production-guide.md&lt;br /&gt;
* https://krinetzki.de/2017/04/installation-von-mastodon-auf-debian-8-jessie/&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Installationsanleitungen]]&lt;/div&gt;</summary>
		<author><name>Dib00-discourse</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Discourse_installieren&amp;diff=4663</id>
		<title>Discourse installieren</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Discourse_installieren&amp;diff=4663"/>
		<updated>2018-08-27T10:32:01Z</updated>

		<summary type="html">&lt;p&gt;Dib00-discourse: /* Installation von Discourse selber */ git-Pfade angepasst&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Textkasten|gelb|Für Managed Server|Ein funktionierender Discourse-Server erfordert mehrere laufende Server-Dienste. Für den Betrieb ist ein Managed Server sinnvoll.}}&lt;br /&gt;
&lt;br /&gt;
{{Textkasten|rot|Work in Progress|Dieser Artikel soll erklären, wie man discourse installiert, ist allerdings **noch nicht fertig**}}&lt;br /&gt;
&lt;br /&gt;
{{Textkasten|rot|Support von der Discourse-Community|Die Discourse-Entwickler haben sich entschieden, nur eine mehr oder weniger genormte Installationsmethode (via docker) zu unterstützen. Dies ist so auf der hostsharing-Architektur aufgrund mehrerer Bedenken und Überlegungen nicht möglich. Die Community ist durchaus hilfreich, geht aber davon aus, dass quasi alle Nutzer* eine &amp;quot;supported&amp;quot;e Installation durchgeführt haben. Wenn man in entsprechenden Kanälen nach Hilfe fragt, sollte man unbedingt erwähnen, dass man discourse selber anhand dieser hier lesbaren Anleitung installiert hat, um bereits entsprechenden Kommentaren und Nachfragen vorzugreifen.}}&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-discourse&#039;&#039;&lt;br /&gt;
# Eine Domain mit &#039;&#039;xyz00-discourse&#039; als Domain-Administrator, zum Beispiel &#039;&#039;beispiel.discussion&#039;&#039;&lt;br /&gt;
# Einen Postgresql-User &#039;&#039;xyz00_discourseuser&#039;&#039; mit Passwort &#039;&#039;meinPasswort&#039;&#039;&lt;br /&gt;
# Eine Postgresql-Datenbank &#039;&#039;xyz00_discoursedb&#039;&#039; mit Datenbank-Owner &#039;&#039;xyz00_discourseuser&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Verwendete IP-Ports der Server-Dienste:&lt;br /&gt;
# Monit: localhost:32001&lt;br /&gt;
# Redis: localhost:32002&lt;br /&gt;
# Discourse-Web: localhost:32003&lt;br /&gt;
&lt;br /&gt;
== Konfiguration des Redis Server ==&lt;br /&gt;
&lt;br /&gt;
    cd&lt;br /&gt;
    mkdir redis/etc redis/lib redis/log redis/run&lt;br /&gt;
&lt;br /&gt;
Anlegen einer Datei &#039;&#039;/home/pacs/xyz00/users/discourse/redis/etc/redis.conf&#039;&#039; mit folgendem Inhalt:&lt;br /&gt;
&lt;br /&gt;
    daemonize no&lt;br /&gt;
    pidfile /home/pacs/xyz00/users/discourse/redis/run/redis-server.pid&lt;br /&gt;
    port 32002&lt;br /&gt;
    tcp-backlog 128&lt;br /&gt;
    bind 127.0.0.1&lt;br /&gt;
    timeout 300&lt;br /&gt;
    loglevel notice&lt;br /&gt;
    logfile /home/pacs/xyz00/users/discourse/redis/log/redis.log&lt;br /&gt;
    databases 16&lt;br /&gt;
    save 900 1&lt;br /&gt;
    save 300 10&lt;br /&gt;
    save 60 10000&lt;br /&gt;
    slave-serve-stale-data yes&lt;br /&gt;
    appendonly no&lt;br /&gt;
    dbfilename dump.rdb&lt;br /&gt;
    dir /home/pacs/xyz00/users/discourse/redis/lib&lt;br /&gt;
&lt;br /&gt;
== Installation von Ruby ==&lt;br /&gt;
&lt;br /&gt;
Als User &#039;&#039;xyz00-discourse&#039;&#039;:  Installation von Ruby mit &#039;&#039;rbenv&#039;&#039; mit folgenden Befehlen:&lt;br /&gt;
&lt;br /&gt;
Zunächst &#039;&#039;rbenv&#039;&#039; and &#039;&#039;ruby-build&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
    git clone https://github.com/rbenv/rbenv.git ~/.rbenv&lt;br /&gt;
    cd ~/.rbenv &amp;amp;&amp;amp; src/configure &amp;amp;&amp;amp; make -C src&lt;br /&gt;
    echo &#039;export PATH=&amp;quot;$HOME/.rbenv/bin:$PATH&amp;quot;&#039; &amp;gt;&amp;gt; ~/.profile&lt;br /&gt;
    echo &#039;eval &amp;quot;$(rbenv init -)&amp;quot;&#039; &amp;gt;&amp;gt; ~/.profile&lt;br /&gt;
&lt;br /&gt;
starte neue Shell:&lt;br /&gt;
&lt;br /&gt;
    exec bash&lt;br /&gt;
&lt;br /&gt;
Überprüfe rbenv-Installation&lt;br /&gt;
&lt;br /&gt;
    type rbenv&lt;br /&gt;
&lt;br /&gt;
Installiere ruby-build als rbenv-Plugin&lt;br /&gt;
&lt;br /&gt;
    git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build&lt;br /&gt;
&lt;br /&gt;
Nun kann die benötigte Ruby-Version installiert werden:&lt;br /&gt;
&lt;br /&gt;
    rbenv install 2.4&lt;br /&gt;
&lt;br /&gt;
== Installation von Discourse selber ==&lt;br /&gt;
&lt;br /&gt;
Weiterhin Als User &#039;&#039;xyz00-discourse&#039;&#039;:  &lt;br /&gt;
&lt;br /&gt;
    cd ~&lt;br /&gt;
    git clone https://github.com/discourse/discourse.git discourse&lt;br /&gt;
    cd ~/discourse&lt;br /&gt;
&lt;br /&gt;
Die stabile Version auschecken:&lt;br /&gt;
&lt;br /&gt;
    git checkout stable&lt;br /&gt;
&lt;br /&gt;
Ruby Pakete installieren:&lt;br /&gt;
&lt;br /&gt;
    gem install bundler&lt;br /&gt;
    bundle install -j$(getconf _NPROCESSORS_ONLN) --deployment --without development test&lt;br /&gt;
&lt;br /&gt;
== Konfiguration der Discourse Software ==&lt;br /&gt;
&lt;br /&gt;
Anlegen einer Datei &#039;&#039;/home/pacs/xyz00/users/discourse/discourse/live/.env.production&#039;&#039; mit dem folgenden Inhalt:&lt;br /&gt;
&lt;br /&gt;
    REDIS_HOST=localhost&lt;br /&gt;
    REDIS_PORT=32002&lt;br /&gt;
    DB_HOST=localhost&lt;br /&gt;
    DB_USER=xyz00_mastuser&lt;br /&gt;
    DB_NAME=xyz00_mastdb&lt;br /&gt;
    DB_PASS=meinPasswort&lt;br /&gt;
    DB_PORT=5432&lt;br /&gt;
    LOCAL_DOMAIN=beispiel.social&lt;br /&gt;
    SECRET_KEY_BASE=12ab..&lt;br /&gt;
    OTP_SECRET=34ef..&lt;br /&gt;
    VAPID_PRIVATE_KEY=ABCD..&lt;br /&gt;
    VAPID_PUBLIC_KEY=EFGH..&lt;br /&gt;
    DEFAULT_LOCALE=de&lt;br /&gt;
    SMTP_SERVER=localhost&lt;br /&gt;
    SMTP_PORT=25&lt;br /&gt;
    SMTP_FROM_ADDRESS=notifications@beispiel.social&lt;br /&gt;
    SMTP_AUTH_METHOD=none&lt;br /&gt;
    SMTP_OPENSSL_VERIFY_MODE=none&lt;br /&gt;
    STREAMING_CLUSTER_NUM=1&lt;br /&gt;
&lt;br /&gt;
Die Zufallswerte für die Variablen SECRET_KEY_BASE und OTP_SECRET erzeugt man durch zwei Aufrufe des Kommandos&lt;br /&gt;
&lt;br /&gt;
    RAILS_ENV=production bundle exec rake secret&lt;br /&gt;
&lt;br /&gt;
Die Werte für VAPID_PRIVATE_KEY und VAPID_PUBLIC_KEY erzeugt das Kommando&lt;br /&gt;
&lt;br /&gt;
    RAILS_ENV=production bundle exec rake mastodon:webpush:generate_vapid_key&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Initialisieren der Datenbank:&lt;br /&gt;
&lt;br /&gt;
    export SAFETY_ASSURED=1&lt;br /&gt;
    RAILS_ENV=production bundle exec rails db:schema:load&lt;br /&gt;
    RAILS_ENV=production bundle exec rails db:seed&lt;br /&gt;
&lt;br /&gt;
== Starten der Dienste  ==&lt;br /&gt;
&lt;br /&gt;
Zum Start aller notwendigen Dienste wird in dieser Anleitung &#039;&#039;monit&#039;&#039; benutzt. Hier ein Beispiel für eine Datei &#039;&#039;.monitrc&#039;&#039; (überlange Zeilen werden hier im Wiki umgebrochen)&lt;br /&gt;
&lt;br /&gt;
    set daemon 60&lt;br /&gt;
        with start delay 120&lt;br /&gt;
    set logfile /home/pacs/xyz00/users/mastodon/monit/var/monit.log&lt;br /&gt;
    set idfile /home/pacs/xyz00/users/mastodon/monit/var/monit.id&lt;br /&gt;
    set statefile /home/pacs/xyz00/users/mastodon/monit/var/monit.state&lt;br /&gt;
    set mailserver localhost&lt;br /&gt;
    set mail-format { from: monit@beispiel.social }&lt;br /&gt;
    set alert mastodon@beispiel.social&lt;br /&gt;
    set httpd port 32001 address xyz00.hostsharing.net &lt;br /&gt;
        allow mostodon:monitpassword&lt;br /&gt;
    check process redis with pidfile /home/pacs/xyz00/users/mastodon/redis/var/redis-server.pid&lt;br /&gt;
        start program &amp;quot;/usr/bin/redis-server /home/pacs/xyz00/users/mastodon/redis/etc/redis.conf&amp;quot;&lt;br /&gt;
        stop program &amp;quot;/bin/bash -c &#039;/bin/kill $( cat /home/pacs/xyz00/users/mastodon/redis/var/redis-server.pid )&#039;&amp;quot;&lt;br /&gt;
    check process mstdn_web with pidfile /home/pacs/xyz00/users/mastodon/mastodon/var/puma.pid&lt;br /&gt;
        depends redis&lt;br /&gt;
        start program &amp;quot;/bin/bash -c &#039;export HOME=/home/pacs/xyz00/users/mastodon &amp;amp;&amp;amp; cd $HOME/mastodon/live &amp;amp;&amp;amp; ( $HOME/.rbenv/shims/bundle exec puma -C config/puma.rb -e production -b tcp://127.0.0.1:32003 &amp;gt;$HOME/mastodon/var/puma.log 2&amp;gt;&amp;amp;1 &amp;amp;  echo $! &amp;gt; $HOME/mastodon/var/puma.pid  )&#039;&amp;quot;&lt;br /&gt;
        stop program &amp;quot;/bin/bash -c &#039;/bin/kill $( cat /home/pacs/xyz00/users/mastodon/mastodon/var/puma.pid )&#039;&amp;quot;&lt;br /&gt;
    check process mstdn_sidekiq with pidfile /home/pacs/xyz00/users/mastodon/mastodon/var/sidekiq.pid&lt;br /&gt;
        depends redis&lt;br /&gt;
        start program &amp;quot;/bin/bash -c &#039;export RAILS_ENV=production &amp;amp;&amp;amp; export DB_POOL=5 &amp;amp;&amp;amp; export HOME=/home/pacs/xyz00/users/mastodon &amp;amp;&amp;amp; cd $HOME/mastodon/live &amp;amp;&amp;amp; ( $HOME/.rbenv/shims/bundle exec sidekiq -c 5 -q default -q mailers -q pull -q push &amp;gt;$HOME/mastodon/var/sidekiq.log 2&amp;gt;&amp;amp;1 &amp;amp;  echo $! &amp;gt; $HOME/mastodon/var/sidekiq.pid  )&#039;&amp;quot;&lt;br /&gt;
        stop program &amp;quot;/bin/bash -c &#039;/bin/kill $( cat /home/pacs/xyz00/users/mastodon/mastodon/var/sidekiq.pid )&#039;&amp;quot;&lt;br /&gt;
    check process mstdn_streaming with pidfile /home/pacs/xyz00/users/mastodon/mastodon/var/streaming.pid&lt;br /&gt;
        depends redis&lt;br /&gt;
        start program &amp;quot;/bin/bash -c &#039;export HOME=/home/pacs/xyz00/users/mastodon &amp;amp;&amp;amp; export NVM_DIR=&amp;quot;$HOME/.nvm&amp;quot; &amp;amp;&amp;amp; export NVM_BIN=/home/pacs/xyz00/users/mastodon/.nvm/versions/node/v6.14.3/bin &amp;amp;&amp;amp; export NODE_ENV=production &amp;amp;&amp;amp; export PORT=32004 &amp;amp;&amp;amp; BIND=127.0.0.1 &amp;amp;&amp;amp; cd $HOME/mastodon/live &amp;amp;&amp;amp; ( $HOME/.nvm/versions/node/v6.14.3/bin/node streaming/index.js &amp;gt;$HOME/mastodon/var/streaming.log 2&amp;gt;&amp;amp;1 &amp;amp;  echo $! &amp;gt; $HOME/mastodon/var/streaming.pid  )&#039;&amp;quot;&lt;br /&gt;
        stop program &amp;quot;/bin/bash -c &#039;/bin/kill $( cat /home/pacs/xyz00/users/mastodon/mastodon/var/streaming.pid )&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Einrichten des Apache VHost ==&lt;br /&gt;
&lt;br /&gt;
    cd ~/doms/beispiel.social&lt;br /&gt;
    rm -rf htdocs-ssl subs/www subs-ssl/www&lt;br /&gt;
    ln -s ~/live/public htdocs-ssl&lt;br /&gt;
    touch htdocs-ssl/.htaccess&lt;br /&gt;
&lt;br /&gt;
Dann die &#039;&#039;htdocs-ssl/.htaccess&#039;&#039; mit dem Editor der Wahl öffnen und &lt;br /&gt;
folgende Konfiguration einfügen:&lt;br /&gt;
&lt;br /&gt;
    DirectoryIndex disabled&lt;br /&gt;
    RewriteEngine On&lt;br /&gt;
    RewriteBase /&lt;br /&gt;
    RewriteCond %{REQUEST_URI}  ^/api/v1/streaming    [NC]&lt;br /&gt;
    RewriteRule .* ws://localhost:32004%{REQUEST_URI}  [proxy]&lt;br /&gt;
    RequestHeader set X-Forwarded-Proto &amp;quot;https&amp;quot;&lt;br /&gt;
    RewriteCond %{REQUEST_FILENAME} !-f&lt;br /&gt;
    RewriteCond %{REQUEST_FILENAME} !-l&lt;br /&gt;
    RewriteRule .* http://localhost:32003%{REQUEST_URI} [proxy]&lt;br /&gt;
    RequestHeader set X-Forwarded-Proto &amp;quot;https&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Cron&#039;&#039; wird für zwei Aufgaben genutzt:&lt;br /&gt;
* Start von monit nach einem Server Reboot&lt;br /&gt;
* Aufräumen von alten Resourcen&lt;br /&gt;
&lt;br /&gt;
Einrichten der crontab mit &#039;&#039;cronttab -e&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
    HOME=/home/pacs/xyz00/users/mastodon&lt;br /&gt;
    MAILTO=mastodon@beispiel.social&lt;br /&gt;
    RAILS_ENV=production&lt;br /&gt;
    NUM_DAYS=31&lt;br /&gt;
    &lt;br /&gt;
    @reboot /usr/bin/monit -c $HOME/.monitrc&lt;br /&gt;
    18 4 * * * cd $HOME/mastodon/live &amp;amp;&amp;amp; $HOME/.rbenv/shims/bundle exec rake mastodon:media:remove_remote&lt;br /&gt;
&lt;br /&gt;
== Volltextsuche ==&lt;br /&gt;
&lt;br /&gt;
In der installierten Version gibt es noch keine Volltextsuche. Es kann lediglich nach Nutzerkennungen und Hastags gesucht werden. Für die Volltextsuche kann optional Elasticsearch installiert werden.&lt;br /&gt;
* https://github.com/tootsuite/documentation/blob/master/Running-Mastodon/Elasticsearch-guide.md&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* https://github.com/tootsuite/documentation/blob/master/Running-Mastodon/Production-guide.md&lt;br /&gt;
* https://krinetzki.de/2017/04/installation-von-mastodon-auf-debian-8-jessie/&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Installationsanleitungen]]&lt;/div&gt;</summary>
		<author><name>Dib00-discourse</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Mastodon_bei_Hostsharing&amp;diff=4662</id>
		<title>Mastodon bei Hostsharing</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Mastodon_bei_Hostsharing&amp;diff=4662"/>
		<updated>2018-08-27T10:30:36Z</updated>

		<summary type="html">&lt;p&gt;Dib00-discourse: /* Installation von Ruby */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Textkasten|gelb|Für Managed Server|Ein funktionierender Mastodon-Server erfordert mehrere laufende Server-Dienste. Für den Betrieb ist ein Managed Server sinnvoll.}}&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-mastodon&#039;&#039;&lt;br /&gt;
# Eine Domain mit &#039;&#039;xyz00-mastodon&#039;&#039; als Domain-Administrator, zum Beispiel &#039;&#039;beispiel.social&#039;&#039;&lt;br /&gt;
# Einen Postgresql-User &#039;&#039;xyz00_mastuser&#039;&#039; mit Passwort &#039;&#039;meinPasswort&#039;&#039;&lt;br /&gt;
# Eine Postgresql-Datenbank &#039;&#039;xyz00_mastdb&#039;&#039; mit Datenbank-Owner &#039;&#039;xyz00_mastuser&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Verwendete IP-Ports der Server-Dienste:&lt;br /&gt;
# Monit: localhost:32001&lt;br /&gt;
# Redis: localhost:32002&lt;br /&gt;
# Mastodon-Web: localhost:32003&lt;br /&gt;
# Mastodon-Streming: localhost:32004&lt;br /&gt;
&lt;br /&gt;
== Konfiguration des Redis Server ==&lt;br /&gt;
&lt;br /&gt;
Anlegen einer Datei &#039;&#039;/home/pacs/xyz00/users/mastodon/redis/etc/redis.conf&#039;&#039; mit folgendem Inhalt:&lt;br /&gt;
&lt;br /&gt;
    daemonize yes&lt;br /&gt;
    pidfile /home/pacs/xyz00/users/mastodon/redis/var/redis-server.pid&lt;br /&gt;
    port 32002&lt;br /&gt;
    tcp-backlog 128&lt;br /&gt;
    bind 127.0.0.1&lt;br /&gt;
    timeout 300&lt;br /&gt;
    loglevel notice&lt;br /&gt;
    logfile /home/pacs/xyz00/users/mastodon/redis/var/redis.log&lt;br /&gt;
    databases 16&lt;br /&gt;
    save 900 1&lt;br /&gt;
    save 300 10&lt;br /&gt;
    save 60 10000&lt;br /&gt;
    slave-serve-stale-data yes&lt;br /&gt;
    appendonly no&lt;br /&gt;
    dbfilename dump.rdb&lt;br /&gt;
    dir /home/pacs/xyz00/users/mastodon/redis/var&lt;br /&gt;
&lt;br /&gt;
== Installation von NodeJS ==&lt;br /&gt;
&lt;br /&gt;
Als User &#039;xyz00-mastodon&#039;&#039;: Installation von &#039;&#039;nvm&#039;&#039; und &#039;&#039;nodejs&#039;&#039; (Version 6) nach der Anleitung [[NodeJS]]&lt;br /&gt;
&lt;br /&gt;
Installation von &#039;&#039;yarn&#039;&#039; mit:&lt;br /&gt;
&lt;br /&gt;
    npm install -g yarn&lt;br /&gt;
&lt;br /&gt;
== Installation von Ruby ==&lt;br /&gt;
&lt;br /&gt;
Als User &#039;&#039;xyz00-mastodon&#039;&#039;:  Installation von Ruby mit &#039;&#039;rbenv&#039;&#039; mit folgenden Befehlen:&lt;br /&gt;
&lt;br /&gt;
Zunächst &#039;&#039;rbenv&#039;&#039; and &#039;&#039;ruby-build&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
    git clone https://github.com/rbenv/rbenv.git ~/.rbenv&lt;br /&gt;
    cd ~/.rbenv &amp;amp;&amp;amp; src/configure &amp;amp;&amp;amp; make -C src&lt;br /&gt;
    echo &#039;export PATH=&amp;quot;$HOME/.rbenv/bin:$PATH&amp;quot;&#039; &amp;gt;&amp;gt; ~/.profile&lt;br /&gt;
    echo &#039;eval &amp;quot;$(rbenv init -)&amp;quot;&#039; &amp;gt;&amp;gt; ~/.profile&lt;br /&gt;
&lt;br /&gt;
starte neue Shell:&lt;br /&gt;
&lt;br /&gt;
    exec bash&lt;br /&gt;
&lt;br /&gt;
Überprüfe rbenv-Installation&lt;br /&gt;
&lt;br /&gt;
    type rbenv&lt;br /&gt;
&lt;br /&gt;
Installiere ruby-build als rbenv-Plugin&lt;br /&gt;
&lt;br /&gt;
    git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build&lt;br /&gt;
&lt;br /&gt;
Nun kann die benötigte Ruby-Version installiert werden:&lt;br /&gt;
&lt;br /&gt;
    rbenv install 2.5.1&lt;br /&gt;
&lt;br /&gt;
== Installation der Mastodon Software ==&lt;br /&gt;
&lt;br /&gt;
Weiterhin Als User &#039;&#039;xyz00-mastodon&#039;&#039;:  &lt;br /&gt;
&lt;br /&gt;
    cd ~&lt;br /&gt;
    git clone https://github.com/tootsuite/mastodon.git live&lt;br /&gt;
    cd ~/live&lt;br /&gt;
&lt;br /&gt;
Die stabile Version auschecken:&lt;br /&gt;
&lt;br /&gt;
    git checkout $(git tag -l | grep -v &#039;rc[0-9]*$&#039; | sort -V | tail -n 1)&lt;br /&gt;
&lt;br /&gt;
Ruby Pakete installieren:&lt;br /&gt;
&lt;br /&gt;
    gem install bundler&lt;br /&gt;
    bundle install -j$(getconf _NPROCESSORS_ONLN) --deployment --without development test&lt;br /&gt;
&lt;br /&gt;
Node.js Pakete installieren:&lt;br /&gt;
&lt;br /&gt;
    yarn install --pure-lockfile&lt;br /&gt;
&lt;br /&gt;
== Konfiguration der Mastodon Software ==&lt;br /&gt;
&lt;br /&gt;
Anlegen einer Datei &#039;&#039;/home/pacs/xyz00/users/mastodon/mystodon/live/.env.production&#039;&#039; mit dem folgenden Inhalt:&lt;br /&gt;
&lt;br /&gt;
    REDIS_HOST=localhost&lt;br /&gt;
    REDIS_PORT=32002&lt;br /&gt;
    DB_HOST=localhost&lt;br /&gt;
    DB_USER=xyz00_mastuser&lt;br /&gt;
    DB_NAME=xyz00_mastdb&lt;br /&gt;
    DB_PASS=meinPasswort&lt;br /&gt;
    DB_PORT=5432&lt;br /&gt;
    LOCAL_DOMAIN=beispiel.social&lt;br /&gt;
    SECRET_KEY_BASE=12ab..&lt;br /&gt;
    OTP_SECRET=34ef..&lt;br /&gt;
    VAPID_PRIVATE_KEY=ABCD..&lt;br /&gt;
    VAPID_PUBLIC_KEY=EFGH..&lt;br /&gt;
    DEFAULT_LOCALE=de&lt;br /&gt;
    SMTP_SERVER=localhost&lt;br /&gt;
    SMTP_PORT=25&lt;br /&gt;
    SMTP_FROM_ADDRESS=notifications@beispiel.social&lt;br /&gt;
    SMTP_AUTH_METHOD=none&lt;br /&gt;
    SMTP_OPENSSL_VERIFY_MODE=none&lt;br /&gt;
    STREAMING_CLUSTER_NUM=1&lt;br /&gt;
&lt;br /&gt;
Die Zufallswerte für die Variablen SECRET_KEY_BASE und OTP_SECRET erzeugt man durch zwei Aufrufe des Kommandos&lt;br /&gt;
&lt;br /&gt;
    RAILS_ENV=production bundle exec rake secret&lt;br /&gt;
&lt;br /&gt;
Die Werte für VAPID_PRIVATE_KEY und VAPID_PUBLIC_KEY erzeugt das Kommando&lt;br /&gt;
&lt;br /&gt;
    RAILS_ENV=production bundle exec rake mastodon:webpush:generate_vapid_key&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Initialisieren der Datenbank:&lt;br /&gt;
&lt;br /&gt;
    export SAFETY_ASSURED=1&lt;br /&gt;
    RAILS_ENV=production bundle exec rails db:schema:load&lt;br /&gt;
    RAILS_ENV=production bundle exec rails db:seed&lt;br /&gt;
&lt;br /&gt;
== Starten der Dienste  ==&lt;br /&gt;
&lt;br /&gt;
Zum Start aller notwendigen Dienste wird in dieser Anleitung &#039;&#039;monit&#039;&#039; benutzt. Hier ein Beispiel für eine Datei &#039;&#039;.monitrc&#039;&#039; (überlange Zeilen werden hier im Wiki umgebrochen)&lt;br /&gt;
&lt;br /&gt;
    set daemon 60&lt;br /&gt;
        with start delay 120&lt;br /&gt;
    set logfile /home/pacs/xyz00/users/mastodon/monit/var/monit.log&lt;br /&gt;
    set idfile /home/pacs/xyz00/users/mastodon/monit/var/monit.id&lt;br /&gt;
    set statefile /home/pacs/xyz00/users/mastodon/monit/var/monit.state&lt;br /&gt;
    set mailserver localhost&lt;br /&gt;
    set mail-format { from: monit@beispiel.social }&lt;br /&gt;
    set alert mastodon@beispiel.social&lt;br /&gt;
    set httpd port 32001 address xyz00.hostsharing.net &lt;br /&gt;
        allow mostodon:monitpassword&lt;br /&gt;
    check process redis with pidfile /home/pacs/xyz00/users/mastodon/redis/var/redis-server.pid&lt;br /&gt;
        start program &amp;quot;/usr/bin/redis-server /home/pacs/xyz00/users/mastodon/redis/etc/redis.conf&amp;quot;&lt;br /&gt;
        stop program &amp;quot;/bin/bash -c &#039;/bin/kill $( cat /home/pacs/xyz00/users/mastodon/redis/var/redis-server.pid )&#039;&amp;quot;&lt;br /&gt;
    check process mstdn_web with pidfile /home/pacs/xyz00/users/mastodon/mastodon/var/puma.pid&lt;br /&gt;
        depends redis&lt;br /&gt;
        start program &amp;quot;/bin/bash -c &#039;export HOME=/home/pacs/xyz00/users/mastodon &amp;amp;&amp;amp; cd $HOME/mastodon/live &amp;amp;&amp;amp; ( $HOME/.rbenv/shims/bundle exec puma -C config/puma.rb -e production -b tcp://127.0.0.1:32003 &amp;gt;$HOME/mastodon/var/puma.log 2&amp;gt;&amp;amp;1 &amp;amp;  echo $! &amp;gt; $HOME/mastodon/var/puma.pid  )&#039;&amp;quot;&lt;br /&gt;
        stop program &amp;quot;/bin/bash -c &#039;/bin/kill $( cat /home/pacs/xyz00/users/mastodon/mastodon/var/puma.pid )&#039;&amp;quot;&lt;br /&gt;
    check process mstdn_sidekiq with pidfile /home/pacs/xyz00/users/mastodon/mastodon/var/sidekiq.pid&lt;br /&gt;
        depends redis&lt;br /&gt;
        start program &amp;quot;/bin/bash -c &#039;export RAILS_ENV=production &amp;amp;&amp;amp; export DB_POOL=5 &amp;amp;&amp;amp; export HOME=/home/pacs/xyz00/users/mastodon &amp;amp;&amp;amp; cd $HOME/mastodon/live &amp;amp;&amp;amp; ( $HOME/.rbenv/shims/bundle exec sidekiq -c 5 -q default -q mailers -q pull -q push &amp;gt;$HOME/mastodon/var/sidekiq.log 2&amp;gt;&amp;amp;1 &amp;amp;  echo $! &amp;gt; $HOME/mastodon/var/sidekiq.pid  )&#039;&amp;quot;&lt;br /&gt;
        stop program &amp;quot;/bin/bash -c &#039;/bin/kill $( cat /home/pacs/xyz00/users/mastodon/mastodon/var/sidekiq.pid )&#039;&amp;quot;&lt;br /&gt;
    check process mstdn_streaming with pidfile /home/pacs/xyz00/users/mastodon/mastodon/var/streaming.pid&lt;br /&gt;
        depends redis&lt;br /&gt;
        start program &amp;quot;/bin/bash -c &#039;export HOME=/home/pacs/xyz00/users/mastodon &amp;amp;&amp;amp; export NVM_DIR=&amp;quot;$HOME/.nvm&amp;quot; &amp;amp;&amp;amp; export NVM_BIN=/home/pacs/xyz00/users/mastodon/.nvm/versions/node/v6.14.3/bin &amp;amp;&amp;amp; export NODE_ENV=production &amp;amp;&amp;amp; export PORT=32004 &amp;amp;&amp;amp; BIND=127.0.0.1 &amp;amp;&amp;amp; cd $HOME/mastodon/live &amp;amp;&amp;amp; ( $HOME/.nvm/versions/node/v6.14.3/bin/node streaming/index.js &amp;gt;$HOME/mastodon/var/streaming.log 2&amp;gt;&amp;amp;1 &amp;amp;  echo $! &amp;gt; $HOME/mastodon/var/streaming.pid  )&#039;&amp;quot;&lt;br /&gt;
        stop program &amp;quot;/bin/bash -c &#039;/bin/kill $( cat /home/pacs/xyz00/users/mastodon/mastodon/var/streaming.pid )&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Einrichten des Apache VHost ==&lt;br /&gt;
&lt;br /&gt;
    cd ~/doms/beispiel.social&lt;br /&gt;
    rm -rf htdocs-ssl subs/www subs-ssl/www&lt;br /&gt;
    ln -s ~/live/public htdocs-ssl&lt;br /&gt;
    touch htdocs-ssl/.htaccess&lt;br /&gt;
&lt;br /&gt;
Dann die &#039;&#039;htdocs-ssl/.htaccess&#039;&#039; mit dem Editor der Wahl öffnen und &lt;br /&gt;
folgende Konfiguration einfügen:&lt;br /&gt;
&lt;br /&gt;
    DirectoryIndex disabled&lt;br /&gt;
    RewriteEngine On&lt;br /&gt;
    RewriteBase /&lt;br /&gt;
    RewriteCond %{REQUEST_URI}  ^/api/v1/streaming    [NC]&lt;br /&gt;
    RewriteRule .* ws://localhost:32004%{REQUEST_URI}  [proxy]&lt;br /&gt;
    RequestHeader set X-Forwarded-Proto &amp;quot;https&amp;quot;&lt;br /&gt;
    RewriteCond %{REQUEST_FILENAME} !-f&lt;br /&gt;
    RewriteCond %{REQUEST_FILENAME} !-l&lt;br /&gt;
    RewriteRule .* http://localhost:32003%{REQUEST_URI} [proxy]&lt;br /&gt;
    RequestHeader set X-Forwarded-Proto &amp;quot;https&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Cron&#039;&#039; wird für zwei Aufgaben genutzt:&lt;br /&gt;
* Start von monit nach einem Server Reboot&lt;br /&gt;
* Aufräumen von alten Resourcen&lt;br /&gt;
&lt;br /&gt;
Einrichten der crontab mit &#039;&#039;cronttab -e&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
    HOME=/home/pacs/xyz00/users/mastodon&lt;br /&gt;
    MAILTO=mastodon@beispiel.social&lt;br /&gt;
    RAILS_ENV=production&lt;br /&gt;
    NUM_DAYS=31&lt;br /&gt;
    &lt;br /&gt;
    @reboot /usr/bin/monit -c $HOME/.monitrc&lt;br /&gt;
    18 4 * * * cd $HOME/mastodon/live &amp;amp;&amp;amp; $HOME/.rbenv/shims/bundle exec rake mastodon:media:remove_remote&lt;br /&gt;
&lt;br /&gt;
== Volltextsuche ==&lt;br /&gt;
&lt;br /&gt;
In der installierten Version gibt es noch keine Volltextsuche. Es kann lediglich nach Nutzerkennungen und Hastags gesucht werden. Für die Volltextsuche kann optional Elasticsearch installiert werden.&lt;br /&gt;
* https://github.com/tootsuite/documentation/blob/master/Running-Mastodon/Elasticsearch-guide.md&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* https://github.com/tootsuite/documentation/blob/master/Running-Mastodon/Production-guide.md&lt;br /&gt;
* https://krinetzki.de/2017/04/installation-von-mastodon-auf-debian-8-jessie/&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Installationsanleitungen]]&lt;/div&gt;</summary>
		<author><name>Dib00-discourse</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Discourse_installieren&amp;diff=4661</id>
		<title>Discourse installieren</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Discourse_installieren&amp;diff=4661"/>
		<updated>2018-08-27T10:30:17Z</updated>

		<summary type="html">&lt;p&gt;Dib00-discourse: /* Installation von Ruby */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Textkasten|gelb|Für Managed Server|Ein funktionierender Discourse-Server erfordert mehrere laufende Server-Dienste. Für den Betrieb ist ein Managed Server sinnvoll.}}&lt;br /&gt;
&lt;br /&gt;
{{Textkasten|rot|Work in Progress|Dieser Artikel soll erklären, wie man discourse installiert, ist allerdings **noch nicht fertig**}}&lt;br /&gt;
&lt;br /&gt;
{{Textkasten|rot|Support von der Discourse-Community|Die Discourse-Entwickler haben sich entschieden, nur eine mehr oder weniger genormte Installationsmethode (via docker) zu unterstützen. Dies ist so auf der hostsharing-Architektur aufgrund mehrerer Bedenken und Überlegungen nicht möglich. Die Community ist durchaus hilfreich, geht aber davon aus, dass quasi alle Nutzer* eine &amp;quot;supported&amp;quot;e Installation durchgeführt haben. Wenn man in entsprechenden Kanälen nach Hilfe fragt, sollte man unbedingt erwähnen, dass man discourse selber anhand dieser hier lesbaren Anleitung installiert hat, um bereits entsprechenden Kommentaren und Nachfragen vorzugreifen.}}&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-discourse&#039;&#039;&lt;br /&gt;
# Eine Domain mit &#039;&#039;xyz00-discourse&#039; als Domain-Administrator, zum Beispiel &#039;&#039;beispiel.discussion&#039;&#039;&lt;br /&gt;
# Einen Postgresql-User &#039;&#039;xyz00_discourseuser&#039;&#039; mit Passwort &#039;&#039;meinPasswort&#039;&#039;&lt;br /&gt;
# Eine Postgresql-Datenbank &#039;&#039;xyz00_discoursedb&#039;&#039; mit Datenbank-Owner &#039;&#039;xyz00_discourseuser&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Verwendete IP-Ports der Server-Dienste:&lt;br /&gt;
# Monit: localhost:32001&lt;br /&gt;
# Redis: localhost:32002&lt;br /&gt;
# Discourse-Web: localhost:32003&lt;br /&gt;
&lt;br /&gt;
== Konfiguration des Redis Server ==&lt;br /&gt;
&lt;br /&gt;
    cd&lt;br /&gt;
    mkdir redis/etc redis/lib redis/log redis/run&lt;br /&gt;
&lt;br /&gt;
Anlegen einer Datei &#039;&#039;/home/pacs/xyz00/users/discourse/redis/etc/redis.conf&#039;&#039; mit folgendem Inhalt:&lt;br /&gt;
&lt;br /&gt;
    daemonize no&lt;br /&gt;
    pidfile /home/pacs/xyz00/users/discourse/redis/run/redis-server.pid&lt;br /&gt;
    port 32002&lt;br /&gt;
    tcp-backlog 128&lt;br /&gt;
    bind 127.0.0.1&lt;br /&gt;
    timeout 300&lt;br /&gt;
    loglevel notice&lt;br /&gt;
    logfile /home/pacs/xyz00/users/discourse/redis/log/redis.log&lt;br /&gt;
    databases 16&lt;br /&gt;
    save 900 1&lt;br /&gt;
    save 300 10&lt;br /&gt;
    save 60 10000&lt;br /&gt;
    slave-serve-stale-data yes&lt;br /&gt;
    appendonly no&lt;br /&gt;
    dbfilename dump.rdb&lt;br /&gt;
    dir /home/pacs/xyz00/users/discourse/redis/lib&lt;br /&gt;
&lt;br /&gt;
== Installation von Ruby ==&lt;br /&gt;
&lt;br /&gt;
Als User &#039;&#039;xyz00-discourse&#039;&#039;:  Installation von Ruby mit &#039;&#039;rbenv&#039;&#039; mit folgenden Befehlen:&lt;br /&gt;
&lt;br /&gt;
Zunächst &#039;&#039;rbenv&#039;&#039; and &#039;&#039;ruby-build&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
    git clone https://github.com/rbenv/rbenv.git ~/.rbenv&lt;br /&gt;
    cd ~/.rbenv &amp;amp;&amp;amp; src/configure &amp;amp;&amp;amp; make -C src&lt;br /&gt;
    echo &#039;export PATH=&amp;quot;$HOME/.rbenv/bin:$PATH&amp;quot;&#039; &amp;gt;&amp;gt; ~/.profile&lt;br /&gt;
    echo &#039;eval &amp;quot;$(rbenv init -)&amp;quot;&#039; &amp;gt;&amp;gt; ~/.profile&lt;br /&gt;
&lt;br /&gt;
starte neue Shell:&lt;br /&gt;
&lt;br /&gt;
    exec bash&lt;br /&gt;
&lt;br /&gt;
Überprüfe rbenv-Installation&lt;br /&gt;
&lt;br /&gt;
    type rbenv&lt;br /&gt;
&lt;br /&gt;
Installiere ruby-build als rbenv-Plugin&lt;br /&gt;
&lt;br /&gt;
    git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build&lt;br /&gt;
&lt;br /&gt;
Nun kann die benötigte Ruby-Version installiert werden:&lt;br /&gt;
&lt;br /&gt;
    rbenv install 2.4&lt;br /&gt;
&lt;br /&gt;
== Installation von Discourse selber ==&lt;br /&gt;
&lt;br /&gt;
Weiterhin Als User &#039;&#039;xyz00-discourse&#039;&#039;:  &lt;br /&gt;
&lt;br /&gt;
    cd ~&lt;br /&gt;
    git clone https://github.com/tootsuite/mastodon.git live&lt;br /&gt;
    cd ~/live&lt;br /&gt;
&lt;br /&gt;
Die stabile Version auschecken:&lt;br /&gt;
&lt;br /&gt;
    git checkout $(git tag -l | grep -v &#039;rc[0-9]*$&#039; | sort -V | tail -n 1)&lt;br /&gt;
&lt;br /&gt;
Ruby Pakete installieren:&lt;br /&gt;
&lt;br /&gt;
    gem install bundler&lt;br /&gt;
    bundle install -j$(getconf _NPROCESSORS_ONLN) --deployment --without development test&lt;br /&gt;
&lt;br /&gt;
== Konfiguration der Discourse Software ==&lt;br /&gt;
&lt;br /&gt;
Anlegen einer Datei &#039;&#039;/home/pacs/xyz00/users/discourse/discourse/live/.env.production&#039;&#039; mit dem folgenden Inhalt:&lt;br /&gt;
&lt;br /&gt;
    REDIS_HOST=localhost&lt;br /&gt;
    REDIS_PORT=32002&lt;br /&gt;
    DB_HOST=localhost&lt;br /&gt;
    DB_USER=xyz00_mastuser&lt;br /&gt;
    DB_NAME=xyz00_mastdb&lt;br /&gt;
    DB_PASS=meinPasswort&lt;br /&gt;
    DB_PORT=5432&lt;br /&gt;
    LOCAL_DOMAIN=beispiel.social&lt;br /&gt;
    SECRET_KEY_BASE=12ab..&lt;br /&gt;
    OTP_SECRET=34ef..&lt;br /&gt;
    VAPID_PRIVATE_KEY=ABCD..&lt;br /&gt;
    VAPID_PUBLIC_KEY=EFGH..&lt;br /&gt;
    DEFAULT_LOCALE=de&lt;br /&gt;
    SMTP_SERVER=localhost&lt;br /&gt;
    SMTP_PORT=25&lt;br /&gt;
    SMTP_FROM_ADDRESS=notifications@beispiel.social&lt;br /&gt;
    SMTP_AUTH_METHOD=none&lt;br /&gt;
    SMTP_OPENSSL_VERIFY_MODE=none&lt;br /&gt;
    STREAMING_CLUSTER_NUM=1&lt;br /&gt;
&lt;br /&gt;
Die Zufallswerte für die Variablen SECRET_KEY_BASE und OTP_SECRET erzeugt man durch zwei Aufrufe des Kommandos&lt;br /&gt;
&lt;br /&gt;
    RAILS_ENV=production bundle exec rake secret&lt;br /&gt;
&lt;br /&gt;
Die Werte für VAPID_PRIVATE_KEY und VAPID_PUBLIC_KEY erzeugt das Kommando&lt;br /&gt;
&lt;br /&gt;
    RAILS_ENV=production bundle exec rake mastodon:webpush:generate_vapid_key&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Initialisieren der Datenbank:&lt;br /&gt;
&lt;br /&gt;
    export SAFETY_ASSURED=1&lt;br /&gt;
    RAILS_ENV=production bundle exec rails db:schema:load&lt;br /&gt;
    RAILS_ENV=production bundle exec rails db:seed&lt;br /&gt;
&lt;br /&gt;
== Starten der Dienste  ==&lt;br /&gt;
&lt;br /&gt;
Zum Start aller notwendigen Dienste wird in dieser Anleitung &#039;&#039;monit&#039;&#039; benutzt. Hier ein Beispiel für eine Datei &#039;&#039;.monitrc&#039;&#039; (überlange Zeilen werden hier im Wiki umgebrochen)&lt;br /&gt;
&lt;br /&gt;
    set daemon 60&lt;br /&gt;
        with start delay 120&lt;br /&gt;
    set logfile /home/pacs/xyz00/users/mastodon/monit/var/monit.log&lt;br /&gt;
    set idfile /home/pacs/xyz00/users/mastodon/monit/var/monit.id&lt;br /&gt;
    set statefile /home/pacs/xyz00/users/mastodon/monit/var/monit.state&lt;br /&gt;
    set mailserver localhost&lt;br /&gt;
    set mail-format { from: monit@beispiel.social }&lt;br /&gt;
    set alert mastodon@beispiel.social&lt;br /&gt;
    set httpd port 32001 address xyz00.hostsharing.net &lt;br /&gt;
        allow mostodon:monitpassword&lt;br /&gt;
    check process redis with pidfile /home/pacs/xyz00/users/mastodon/redis/var/redis-server.pid&lt;br /&gt;
        start program &amp;quot;/usr/bin/redis-server /home/pacs/xyz00/users/mastodon/redis/etc/redis.conf&amp;quot;&lt;br /&gt;
        stop program &amp;quot;/bin/bash -c &#039;/bin/kill $( cat /home/pacs/xyz00/users/mastodon/redis/var/redis-server.pid )&#039;&amp;quot;&lt;br /&gt;
    check process mstdn_web with pidfile /home/pacs/xyz00/users/mastodon/mastodon/var/puma.pid&lt;br /&gt;
        depends redis&lt;br /&gt;
        start program &amp;quot;/bin/bash -c &#039;export HOME=/home/pacs/xyz00/users/mastodon &amp;amp;&amp;amp; cd $HOME/mastodon/live &amp;amp;&amp;amp; ( $HOME/.rbenv/shims/bundle exec puma -C config/puma.rb -e production -b tcp://127.0.0.1:32003 &amp;gt;$HOME/mastodon/var/puma.log 2&amp;gt;&amp;amp;1 &amp;amp;  echo $! &amp;gt; $HOME/mastodon/var/puma.pid  )&#039;&amp;quot;&lt;br /&gt;
        stop program &amp;quot;/bin/bash -c &#039;/bin/kill $( cat /home/pacs/xyz00/users/mastodon/mastodon/var/puma.pid )&#039;&amp;quot;&lt;br /&gt;
    check process mstdn_sidekiq with pidfile /home/pacs/xyz00/users/mastodon/mastodon/var/sidekiq.pid&lt;br /&gt;
        depends redis&lt;br /&gt;
        start program &amp;quot;/bin/bash -c &#039;export RAILS_ENV=production &amp;amp;&amp;amp; export DB_POOL=5 &amp;amp;&amp;amp; export HOME=/home/pacs/xyz00/users/mastodon &amp;amp;&amp;amp; cd $HOME/mastodon/live &amp;amp;&amp;amp; ( $HOME/.rbenv/shims/bundle exec sidekiq -c 5 -q default -q mailers -q pull -q push &amp;gt;$HOME/mastodon/var/sidekiq.log 2&amp;gt;&amp;amp;1 &amp;amp;  echo $! &amp;gt; $HOME/mastodon/var/sidekiq.pid  )&#039;&amp;quot;&lt;br /&gt;
        stop program &amp;quot;/bin/bash -c &#039;/bin/kill $( cat /home/pacs/xyz00/users/mastodon/mastodon/var/sidekiq.pid )&#039;&amp;quot;&lt;br /&gt;
    check process mstdn_streaming with pidfile /home/pacs/xyz00/users/mastodon/mastodon/var/streaming.pid&lt;br /&gt;
        depends redis&lt;br /&gt;
        start program &amp;quot;/bin/bash -c &#039;export HOME=/home/pacs/xyz00/users/mastodon &amp;amp;&amp;amp; export NVM_DIR=&amp;quot;$HOME/.nvm&amp;quot; &amp;amp;&amp;amp; export NVM_BIN=/home/pacs/xyz00/users/mastodon/.nvm/versions/node/v6.14.3/bin &amp;amp;&amp;amp; export NODE_ENV=production &amp;amp;&amp;amp; export PORT=32004 &amp;amp;&amp;amp; BIND=127.0.0.1 &amp;amp;&amp;amp; cd $HOME/mastodon/live &amp;amp;&amp;amp; ( $HOME/.nvm/versions/node/v6.14.3/bin/node streaming/index.js &amp;gt;$HOME/mastodon/var/streaming.log 2&amp;gt;&amp;amp;1 &amp;amp;  echo $! &amp;gt; $HOME/mastodon/var/streaming.pid  )&#039;&amp;quot;&lt;br /&gt;
        stop program &amp;quot;/bin/bash -c &#039;/bin/kill $( cat /home/pacs/xyz00/users/mastodon/mastodon/var/streaming.pid )&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Einrichten des Apache VHost ==&lt;br /&gt;
&lt;br /&gt;
    cd ~/doms/beispiel.social&lt;br /&gt;
    rm -rf htdocs-ssl subs/www subs-ssl/www&lt;br /&gt;
    ln -s ~/live/public htdocs-ssl&lt;br /&gt;
    touch htdocs-ssl/.htaccess&lt;br /&gt;
&lt;br /&gt;
Dann die &#039;&#039;htdocs-ssl/.htaccess&#039;&#039; mit dem Editor der Wahl öffnen und &lt;br /&gt;
folgende Konfiguration einfügen:&lt;br /&gt;
&lt;br /&gt;
    DirectoryIndex disabled&lt;br /&gt;
    RewriteEngine On&lt;br /&gt;
    RewriteBase /&lt;br /&gt;
    RewriteCond %{REQUEST_URI}  ^/api/v1/streaming    [NC]&lt;br /&gt;
    RewriteRule .* ws://localhost:32004%{REQUEST_URI}  [proxy]&lt;br /&gt;
    RequestHeader set X-Forwarded-Proto &amp;quot;https&amp;quot;&lt;br /&gt;
    RewriteCond %{REQUEST_FILENAME} !-f&lt;br /&gt;
    RewriteCond %{REQUEST_FILENAME} !-l&lt;br /&gt;
    RewriteRule .* http://localhost:32003%{REQUEST_URI} [proxy]&lt;br /&gt;
    RequestHeader set X-Forwarded-Proto &amp;quot;https&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Cron&#039;&#039; wird für zwei Aufgaben genutzt:&lt;br /&gt;
* Start von monit nach einem Server Reboot&lt;br /&gt;
* Aufräumen von alten Resourcen&lt;br /&gt;
&lt;br /&gt;
Einrichten der crontab mit &#039;&#039;cronttab -e&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
    HOME=/home/pacs/xyz00/users/mastodon&lt;br /&gt;
    MAILTO=mastodon@beispiel.social&lt;br /&gt;
    RAILS_ENV=production&lt;br /&gt;
    NUM_DAYS=31&lt;br /&gt;
    &lt;br /&gt;
    @reboot /usr/bin/monit -c $HOME/.monitrc&lt;br /&gt;
    18 4 * * * cd $HOME/mastodon/live &amp;amp;&amp;amp; $HOME/.rbenv/shims/bundle exec rake mastodon:media:remove_remote&lt;br /&gt;
&lt;br /&gt;
== Volltextsuche ==&lt;br /&gt;
&lt;br /&gt;
In der installierten Version gibt es noch keine Volltextsuche. Es kann lediglich nach Nutzerkennungen und Hastags gesucht werden. Für die Volltextsuche kann optional Elasticsearch installiert werden.&lt;br /&gt;
* https://github.com/tootsuite/documentation/blob/master/Running-Mastodon/Elasticsearch-guide.md&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* https://github.com/tootsuite/documentation/blob/master/Running-Mastodon/Production-guide.md&lt;br /&gt;
* https://krinetzki.de/2017/04/installation-von-mastodon-auf-debian-8-jessie/&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Installationsanleitungen]]&lt;/div&gt;</summary>
		<author><name>Dib00-discourse</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Discourse_installieren&amp;diff=4660</id>
		<title>Discourse installieren</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Discourse_installieren&amp;diff=4660"/>
		<updated>2018-08-27T10:29:50Z</updated>

		<summary type="html">&lt;p&gt;Dib00-discourse: /* Konfiguration des Redis Server */ Verzeichnisse aktualisiert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Textkasten|gelb|Für Managed Server|Ein funktionierender Discourse-Server erfordert mehrere laufende Server-Dienste. Für den Betrieb ist ein Managed Server sinnvoll.}}&lt;br /&gt;
&lt;br /&gt;
{{Textkasten|rot|Work in Progress|Dieser Artikel soll erklären, wie man discourse installiert, ist allerdings **noch nicht fertig**}}&lt;br /&gt;
&lt;br /&gt;
{{Textkasten|rot|Support von der Discourse-Community|Die Discourse-Entwickler haben sich entschieden, nur eine mehr oder weniger genormte Installationsmethode (via docker) zu unterstützen. Dies ist so auf der hostsharing-Architektur aufgrund mehrerer Bedenken und Überlegungen nicht möglich. Die Community ist durchaus hilfreich, geht aber davon aus, dass quasi alle Nutzer* eine &amp;quot;supported&amp;quot;e Installation durchgeführt haben. Wenn man in entsprechenden Kanälen nach Hilfe fragt, sollte man unbedingt erwähnen, dass man discourse selber anhand dieser hier lesbaren Anleitung installiert hat, um bereits entsprechenden Kommentaren und Nachfragen vorzugreifen.}}&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-discourse&#039;&#039;&lt;br /&gt;
# Eine Domain mit &#039;&#039;xyz00-discourse&#039; als Domain-Administrator, zum Beispiel &#039;&#039;beispiel.discussion&#039;&#039;&lt;br /&gt;
# Einen Postgresql-User &#039;&#039;xyz00_discourseuser&#039;&#039; mit Passwort &#039;&#039;meinPasswort&#039;&#039;&lt;br /&gt;
# Eine Postgresql-Datenbank &#039;&#039;xyz00_discoursedb&#039;&#039; mit Datenbank-Owner &#039;&#039;xyz00_discourseuser&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Verwendete IP-Ports der Server-Dienste:&lt;br /&gt;
# Monit: localhost:32001&lt;br /&gt;
# Redis: localhost:32002&lt;br /&gt;
# Discourse-Web: localhost:32003&lt;br /&gt;
&lt;br /&gt;
== Konfiguration des Redis Server ==&lt;br /&gt;
&lt;br /&gt;
    cd&lt;br /&gt;
    mkdir redis/etc redis/lib redis/log redis/run&lt;br /&gt;
&lt;br /&gt;
Anlegen einer Datei &#039;&#039;/home/pacs/xyz00/users/discourse/redis/etc/redis.conf&#039;&#039; mit folgendem Inhalt:&lt;br /&gt;
&lt;br /&gt;
    daemonize no&lt;br /&gt;
    pidfile /home/pacs/xyz00/users/discourse/redis/run/redis-server.pid&lt;br /&gt;
    port 32002&lt;br /&gt;
    tcp-backlog 128&lt;br /&gt;
    bind 127.0.0.1&lt;br /&gt;
    timeout 300&lt;br /&gt;
    loglevel notice&lt;br /&gt;
    logfile /home/pacs/xyz00/users/discourse/redis/log/redis.log&lt;br /&gt;
    databases 16&lt;br /&gt;
    save 900 1&lt;br /&gt;
    save 300 10&lt;br /&gt;
    save 60 10000&lt;br /&gt;
    slave-serve-stale-data yes&lt;br /&gt;
    appendonly no&lt;br /&gt;
    dbfilename dump.rdb&lt;br /&gt;
    dir /home/pacs/xyz00/users/discourse/redis/lib&lt;br /&gt;
&lt;br /&gt;
== Installation von Ruby ==&lt;br /&gt;
&lt;br /&gt;
Als User &#039;&#039;xyz00-discourse&#039;&#039;:  Installation von Ruby mit &#039;&#039;rbenv&#039;&#039; mit folgenden Befehlen:&lt;br /&gt;
&lt;br /&gt;
Zunächst &#039;&#039;rbenv&#039;&#039; and &#039;&#039;ruby-build&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
    git clone https://github.com/rbenv/rbenv.git ~/.rbenv&lt;br /&gt;
    cd ~/.rbenv &amp;amp;&amp;amp; src/configure &amp;amp;&amp;amp; make -C src&lt;br /&gt;
    echo &#039;export PATH=&amp;quot;$HOME/.rbenv/bin:$PATH&amp;quot;&#039; &amp;gt;&amp;gt; ~/.profile&lt;br /&gt;
    echo &#039;eval &amp;quot;$(rbenv init -)&amp;quot;&#039; &amp;gt;&amp;gt; ~/.profile&lt;br /&gt;
&lt;br /&gt;
starte neue Shell:&lt;br /&gt;
&lt;br /&gt;
    exec bash&lt;br /&gt;
&lt;br /&gt;
Überprüfe rbenv-Installation&lt;br /&gt;
&lt;br /&gt;
    type rbenv&lt;br /&gt;
&lt;br /&gt;
Installiere ruby-build als rbenv-Plugin&lt;br /&gt;
&lt;br /&gt;
    git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build&lt;br /&gt;
&lt;br /&gt;
Nun kann die benötigte Ruby-Bersion installiert werden:&lt;br /&gt;
&lt;br /&gt;
    rbenv install 2.4&lt;br /&gt;
&lt;br /&gt;
== Installation von Discourse selber ==&lt;br /&gt;
&lt;br /&gt;
Weiterhin Als User &#039;&#039;xyz00-discourse&#039;&#039;:  &lt;br /&gt;
&lt;br /&gt;
    cd ~&lt;br /&gt;
    git clone https://github.com/tootsuite/mastodon.git live&lt;br /&gt;
    cd ~/live&lt;br /&gt;
&lt;br /&gt;
Die stabile Version auschecken:&lt;br /&gt;
&lt;br /&gt;
    git checkout $(git tag -l | grep -v &#039;rc[0-9]*$&#039; | sort -V | tail -n 1)&lt;br /&gt;
&lt;br /&gt;
Ruby Pakete installieren:&lt;br /&gt;
&lt;br /&gt;
    gem install bundler&lt;br /&gt;
    bundle install -j$(getconf _NPROCESSORS_ONLN) --deployment --without development test&lt;br /&gt;
&lt;br /&gt;
== Konfiguration der Discourse Software ==&lt;br /&gt;
&lt;br /&gt;
Anlegen einer Datei &#039;&#039;/home/pacs/xyz00/users/discourse/discourse/live/.env.production&#039;&#039; mit dem folgenden Inhalt:&lt;br /&gt;
&lt;br /&gt;
    REDIS_HOST=localhost&lt;br /&gt;
    REDIS_PORT=32002&lt;br /&gt;
    DB_HOST=localhost&lt;br /&gt;
    DB_USER=xyz00_mastuser&lt;br /&gt;
    DB_NAME=xyz00_mastdb&lt;br /&gt;
    DB_PASS=meinPasswort&lt;br /&gt;
    DB_PORT=5432&lt;br /&gt;
    LOCAL_DOMAIN=beispiel.social&lt;br /&gt;
    SECRET_KEY_BASE=12ab..&lt;br /&gt;
    OTP_SECRET=34ef..&lt;br /&gt;
    VAPID_PRIVATE_KEY=ABCD..&lt;br /&gt;
    VAPID_PUBLIC_KEY=EFGH..&lt;br /&gt;
    DEFAULT_LOCALE=de&lt;br /&gt;
    SMTP_SERVER=localhost&lt;br /&gt;
    SMTP_PORT=25&lt;br /&gt;
    SMTP_FROM_ADDRESS=notifications@beispiel.social&lt;br /&gt;
    SMTP_AUTH_METHOD=none&lt;br /&gt;
    SMTP_OPENSSL_VERIFY_MODE=none&lt;br /&gt;
    STREAMING_CLUSTER_NUM=1&lt;br /&gt;
&lt;br /&gt;
Die Zufallswerte für die Variablen SECRET_KEY_BASE und OTP_SECRET erzeugt man durch zwei Aufrufe des Kommandos&lt;br /&gt;
&lt;br /&gt;
    RAILS_ENV=production bundle exec rake secret&lt;br /&gt;
&lt;br /&gt;
Die Werte für VAPID_PRIVATE_KEY und VAPID_PUBLIC_KEY erzeugt das Kommando&lt;br /&gt;
&lt;br /&gt;
    RAILS_ENV=production bundle exec rake mastodon:webpush:generate_vapid_key&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Initialisieren der Datenbank:&lt;br /&gt;
&lt;br /&gt;
    export SAFETY_ASSURED=1&lt;br /&gt;
    RAILS_ENV=production bundle exec rails db:schema:load&lt;br /&gt;
    RAILS_ENV=production bundle exec rails db:seed&lt;br /&gt;
&lt;br /&gt;
== Starten der Dienste  ==&lt;br /&gt;
&lt;br /&gt;
Zum Start aller notwendigen Dienste wird in dieser Anleitung &#039;&#039;monit&#039;&#039; benutzt. Hier ein Beispiel für eine Datei &#039;&#039;.monitrc&#039;&#039; (überlange Zeilen werden hier im Wiki umgebrochen)&lt;br /&gt;
&lt;br /&gt;
    set daemon 60&lt;br /&gt;
        with start delay 120&lt;br /&gt;
    set logfile /home/pacs/xyz00/users/mastodon/monit/var/monit.log&lt;br /&gt;
    set idfile /home/pacs/xyz00/users/mastodon/monit/var/monit.id&lt;br /&gt;
    set statefile /home/pacs/xyz00/users/mastodon/monit/var/monit.state&lt;br /&gt;
    set mailserver localhost&lt;br /&gt;
    set mail-format { from: monit@beispiel.social }&lt;br /&gt;
    set alert mastodon@beispiel.social&lt;br /&gt;
    set httpd port 32001 address xyz00.hostsharing.net &lt;br /&gt;
        allow mostodon:monitpassword&lt;br /&gt;
    check process redis with pidfile /home/pacs/xyz00/users/mastodon/redis/var/redis-server.pid&lt;br /&gt;
        start program &amp;quot;/usr/bin/redis-server /home/pacs/xyz00/users/mastodon/redis/etc/redis.conf&amp;quot;&lt;br /&gt;
        stop program &amp;quot;/bin/bash -c &#039;/bin/kill $( cat /home/pacs/xyz00/users/mastodon/redis/var/redis-server.pid )&#039;&amp;quot;&lt;br /&gt;
    check process mstdn_web with pidfile /home/pacs/xyz00/users/mastodon/mastodon/var/puma.pid&lt;br /&gt;
        depends redis&lt;br /&gt;
        start program &amp;quot;/bin/bash -c &#039;export HOME=/home/pacs/xyz00/users/mastodon &amp;amp;&amp;amp; cd $HOME/mastodon/live &amp;amp;&amp;amp; ( $HOME/.rbenv/shims/bundle exec puma -C config/puma.rb -e production -b tcp://127.0.0.1:32003 &amp;gt;$HOME/mastodon/var/puma.log 2&amp;gt;&amp;amp;1 &amp;amp;  echo $! &amp;gt; $HOME/mastodon/var/puma.pid  )&#039;&amp;quot;&lt;br /&gt;
        stop program &amp;quot;/bin/bash -c &#039;/bin/kill $( cat /home/pacs/xyz00/users/mastodon/mastodon/var/puma.pid )&#039;&amp;quot;&lt;br /&gt;
    check process mstdn_sidekiq with pidfile /home/pacs/xyz00/users/mastodon/mastodon/var/sidekiq.pid&lt;br /&gt;
        depends redis&lt;br /&gt;
        start program &amp;quot;/bin/bash -c &#039;export RAILS_ENV=production &amp;amp;&amp;amp; export DB_POOL=5 &amp;amp;&amp;amp; export HOME=/home/pacs/xyz00/users/mastodon &amp;amp;&amp;amp; cd $HOME/mastodon/live &amp;amp;&amp;amp; ( $HOME/.rbenv/shims/bundle exec sidekiq -c 5 -q default -q mailers -q pull -q push &amp;gt;$HOME/mastodon/var/sidekiq.log 2&amp;gt;&amp;amp;1 &amp;amp;  echo $! &amp;gt; $HOME/mastodon/var/sidekiq.pid  )&#039;&amp;quot;&lt;br /&gt;
        stop program &amp;quot;/bin/bash -c &#039;/bin/kill $( cat /home/pacs/xyz00/users/mastodon/mastodon/var/sidekiq.pid )&#039;&amp;quot;&lt;br /&gt;
    check process mstdn_streaming with pidfile /home/pacs/xyz00/users/mastodon/mastodon/var/streaming.pid&lt;br /&gt;
        depends redis&lt;br /&gt;
        start program &amp;quot;/bin/bash -c &#039;export HOME=/home/pacs/xyz00/users/mastodon &amp;amp;&amp;amp; export NVM_DIR=&amp;quot;$HOME/.nvm&amp;quot; &amp;amp;&amp;amp; export NVM_BIN=/home/pacs/xyz00/users/mastodon/.nvm/versions/node/v6.14.3/bin &amp;amp;&amp;amp; export NODE_ENV=production &amp;amp;&amp;amp; export PORT=32004 &amp;amp;&amp;amp; BIND=127.0.0.1 &amp;amp;&amp;amp; cd $HOME/mastodon/live &amp;amp;&amp;amp; ( $HOME/.nvm/versions/node/v6.14.3/bin/node streaming/index.js &amp;gt;$HOME/mastodon/var/streaming.log 2&amp;gt;&amp;amp;1 &amp;amp;  echo $! &amp;gt; $HOME/mastodon/var/streaming.pid  )&#039;&amp;quot;&lt;br /&gt;
        stop program &amp;quot;/bin/bash -c &#039;/bin/kill $( cat /home/pacs/xyz00/users/mastodon/mastodon/var/streaming.pid )&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Einrichten des Apache VHost ==&lt;br /&gt;
&lt;br /&gt;
    cd ~/doms/beispiel.social&lt;br /&gt;
    rm -rf htdocs-ssl subs/www subs-ssl/www&lt;br /&gt;
    ln -s ~/live/public htdocs-ssl&lt;br /&gt;
    touch htdocs-ssl/.htaccess&lt;br /&gt;
&lt;br /&gt;
Dann die &#039;&#039;htdocs-ssl/.htaccess&#039;&#039; mit dem Editor der Wahl öffnen und &lt;br /&gt;
folgende Konfiguration einfügen:&lt;br /&gt;
&lt;br /&gt;
    DirectoryIndex disabled&lt;br /&gt;
    RewriteEngine On&lt;br /&gt;
    RewriteBase /&lt;br /&gt;
    RewriteCond %{REQUEST_URI}  ^/api/v1/streaming    [NC]&lt;br /&gt;
    RewriteRule .* ws://localhost:32004%{REQUEST_URI}  [proxy]&lt;br /&gt;
    RequestHeader set X-Forwarded-Proto &amp;quot;https&amp;quot;&lt;br /&gt;
    RewriteCond %{REQUEST_FILENAME} !-f&lt;br /&gt;
    RewriteCond %{REQUEST_FILENAME} !-l&lt;br /&gt;
    RewriteRule .* http://localhost:32003%{REQUEST_URI} [proxy]&lt;br /&gt;
    RequestHeader set X-Forwarded-Proto &amp;quot;https&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Cron&#039;&#039; wird für zwei Aufgaben genutzt:&lt;br /&gt;
* Start von monit nach einem Server Reboot&lt;br /&gt;
* Aufräumen von alten Resourcen&lt;br /&gt;
&lt;br /&gt;
Einrichten der crontab mit &#039;&#039;cronttab -e&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
    HOME=/home/pacs/xyz00/users/mastodon&lt;br /&gt;
    MAILTO=mastodon@beispiel.social&lt;br /&gt;
    RAILS_ENV=production&lt;br /&gt;
    NUM_DAYS=31&lt;br /&gt;
    &lt;br /&gt;
    @reboot /usr/bin/monit -c $HOME/.monitrc&lt;br /&gt;
    18 4 * * * cd $HOME/mastodon/live &amp;amp;&amp;amp; $HOME/.rbenv/shims/bundle exec rake mastodon:media:remove_remote&lt;br /&gt;
&lt;br /&gt;
== Volltextsuche ==&lt;br /&gt;
&lt;br /&gt;
In der installierten Version gibt es noch keine Volltextsuche. Es kann lediglich nach Nutzerkennungen und Hastags gesucht werden. Für die Volltextsuche kann optional Elasticsearch installiert werden.&lt;br /&gt;
* https://github.com/tootsuite/documentation/blob/master/Running-Mastodon/Elasticsearch-guide.md&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* https://github.com/tootsuite/documentation/blob/master/Running-Mastodon/Production-guide.md&lt;br /&gt;
* https://krinetzki.de/2017/04/installation-von-mastodon-auf-debian-8-jessie/&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Installationsanleitungen]]&lt;/div&gt;</summary>
		<author><name>Dib00-discourse</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Discourse_installieren&amp;diff=4659</id>
		<title>Discourse installieren</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Discourse_installieren&amp;diff=4659"/>
		<updated>2018-08-27T09:55:12Z</updated>

		<summary type="html">&lt;p&gt;Dib00-discourse: Erster Draft, größtenteils noch Kopie von Mastodon (WIP!)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Textkasten|gelb|Für Managed Server|Ein funktionierender Discourse-Server erfordert mehrere laufende Server-Dienste. Für den Betrieb ist ein Managed Server sinnvoll.}}&lt;br /&gt;
&lt;br /&gt;
{{Textkasten|rot|Work in Progress|Dieser Artikel soll erklären, wie man discourse installiert, ist allerdings **noch nicht fertig**}}&lt;br /&gt;
&lt;br /&gt;
{{Textkasten|rot|Support von der Discourse-Community|Die Discourse-Entwickler haben sich entschieden, nur eine mehr oder weniger genormte Installationsmethode (via docker) zu unterstützen. Dies ist so auf der hostsharing-Architektur aufgrund mehrerer Bedenken und Überlegungen nicht möglich. Die Community ist durchaus hilfreich, geht aber davon aus, dass quasi alle Nutzer* eine &amp;quot;supported&amp;quot;e Installation durchgeführt haben. Wenn man in entsprechenden Kanälen nach Hilfe fragt, sollte man unbedingt erwähnen, dass man discourse selber anhand dieser hier lesbaren Anleitung installiert hat, um bereits entsprechenden Kommentaren und Nachfragen vorzugreifen.}}&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-discourse&#039;&#039;&lt;br /&gt;
# Eine Domain mit &#039;&#039;xyz00-discourse&#039; als Domain-Administrator, zum Beispiel &#039;&#039;beispiel.discussion&#039;&#039;&lt;br /&gt;
# Einen Postgresql-User &#039;&#039;xyz00_discourseuser&#039;&#039; mit Passwort &#039;&#039;meinPasswort&#039;&#039;&lt;br /&gt;
# Eine Postgresql-Datenbank &#039;&#039;xyz00_discoursedb&#039;&#039; mit Datenbank-Owner &#039;&#039;xyz00_discourseuser&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Verwendete IP-Ports der Server-Dienste:&lt;br /&gt;
# Monit: localhost:32001&lt;br /&gt;
# Redis: localhost:32002&lt;br /&gt;
# Discourse-Web: localhost:32003&lt;br /&gt;
&lt;br /&gt;
== Konfiguration des Redis Server ==&lt;br /&gt;
&lt;br /&gt;
Anlegen einer Datei &#039;&#039;/home/pacs/xyz00/users/discourse/redis/etc/redis.conf&#039;&#039; mit folgendem Inhalt:&lt;br /&gt;
&lt;br /&gt;
    daemonize yes&lt;br /&gt;
    pidfile /home/pacs/xyz00/users/discourse/redis/var/redis-server.pid&lt;br /&gt;
    port 32002&lt;br /&gt;
    tcp-backlog 128&lt;br /&gt;
    bind 127.0.0.1&lt;br /&gt;
    timeout 300&lt;br /&gt;
    loglevel notice&lt;br /&gt;
    logfile /home/pacs/xyz00/users/discourse/redis/var/redis.log&lt;br /&gt;
    databases 16&lt;br /&gt;
    save 900 1&lt;br /&gt;
    save 300 10&lt;br /&gt;
    save 60 10000&lt;br /&gt;
    slave-serve-stale-data yes&lt;br /&gt;
    appendonly no&lt;br /&gt;
    dbfilename dump.rdb&lt;br /&gt;
    dir /home/pacs/xyz00/users/discourse/redis/var&lt;br /&gt;
&lt;br /&gt;
== Installation von Ruby ==&lt;br /&gt;
&lt;br /&gt;
Als User &#039;&#039;xyz00-discourse&#039;&#039;:  Installation von Ruby mit &#039;&#039;rbenv&#039;&#039; mit folgenden Befehlen:&lt;br /&gt;
&lt;br /&gt;
Zunächst &#039;&#039;rbenv&#039;&#039; and &#039;&#039;ruby-build&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
    git clone https://github.com/rbenv/rbenv.git ~/.rbenv&lt;br /&gt;
    cd ~/.rbenv &amp;amp;&amp;amp; src/configure &amp;amp;&amp;amp; make -C src&lt;br /&gt;
    echo &#039;export PATH=&amp;quot;$HOME/.rbenv/bin:$PATH&amp;quot;&#039; &amp;gt;&amp;gt; ~/.profile&lt;br /&gt;
    echo &#039;eval &amp;quot;$(rbenv init -)&amp;quot;&#039; &amp;gt;&amp;gt; ~/.profile&lt;br /&gt;
&lt;br /&gt;
starte neue Shell:&lt;br /&gt;
&lt;br /&gt;
    exec bash&lt;br /&gt;
&lt;br /&gt;
Überprüfe rbenv-Installation&lt;br /&gt;
&lt;br /&gt;
    type rbenv&lt;br /&gt;
&lt;br /&gt;
Installiere ruby-build als rbenv-Plugin&lt;br /&gt;
&lt;br /&gt;
    git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build&lt;br /&gt;
&lt;br /&gt;
Nun kann die benötigte Ruby-Bersion installiert werden:&lt;br /&gt;
&lt;br /&gt;
    rbenv install 2.4&lt;br /&gt;
&lt;br /&gt;
== Installation von Discourse selber ==&lt;br /&gt;
&lt;br /&gt;
Weiterhin Als User &#039;&#039;xyz00-discourse&#039;&#039;:  &lt;br /&gt;
&lt;br /&gt;
    cd ~&lt;br /&gt;
    git clone https://github.com/tootsuite/mastodon.git live&lt;br /&gt;
    cd ~/live&lt;br /&gt;
&lt;br /&gt;
Die stabile Version auschecken:&lt;br /&gt;
&lt;br /&gt;
    git checkout $(git tag -l | grep -v &#039;rc[0-9]*$&#039; | sort -V | tail -n 1)&lt;br /&gt;
&lt;br /&gt;
Ruby Pakete installieren:&lt;br /&gt;
&lt;br /&gt;
    gem install bundler&lt;br /&gt;
    bundle install -j$(getconf _NPROCESSORS_ONLN) --deployment --without development test&lt;br /&gt;
&lt;br /&gt;
== Konfiguration der Discourse Software ==&lt;br /&gt;
&lt;br /&gt;
Anlegen einer Datei &#039;&#039;/home/pacs/xyz00/users/discourse/discourse/live/.env.production&#039;&#039; mit dem folgenden Inhalt:&lt;br /&gt;
&lt;br /&gt;
    REDIS_HOST=localhost&lt;br /&gt;
    REDIS_PORT=32002&lt;br /&gt;
    DB_HOST=localhost&lt;br /&gt;
    DB_USER=xyz00_mastuser&lt;br /&gt;
    DB_NAME=xyz00_mastdb&lt;br /&gt;
    DB_PASS=meinPasswort&lt;br /&gt;
    DB_PORT=5432&lt;br /&gt;
    LOCAL_DOMAIN=beispiel.social&lt;br /&gt;
    SECRET_KEY_BASE=12ab..&lt;br /&gt;
    OTP_SECRET=34ef..&lt;br /&gt;
    VAPID_PRIVATE_KEY=ABCD..&lt;br /&gt;
    VAPID_PUBLIC_KEY=EFGH..&lt;br /&gt;
    DEFAULT_LOCALE=de&lt;br /&gt;
    SMTP_SERVER=localhost&lt;br /&gt;
    SMTP_PORT=25&lt;br /&gt;
    SMTP_FROM_ADDRESS=notifications@beispiel.social&lt;br /&gt;
    SMTP_AUTH_METHOD=none&lt;br /&gt;
    SMTP_OPENSSL_VERIFY_MODE=none&lt;br /&gt;
    STREAMING_CLUSTER_NUM=1&lt;br /&gt;
&lt;br /&gt;
Die Zufallswerte für die Variablen SECRET_KEY_BASE und OTP_SECRET erzeugt man durch zwei Aufrufe des Kommandos&lt;br /&gt;
&lt;br /&gt;
    RAILS_ENV=production bundle exec rake secret&lt;br /&gt;
&lt;br /&gt;
Die Werte für VAPID_PRIVATE_KEY und VAPID_PUBLIC_KEY erzeugt das Kommando&lt;br /&gt;
&lt;br /&gt;
    RAILS_ENV=production bundle exec rake mastodon:webpush:generate_vapid_key&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Initialisieren der Datenbank:&lt;br /&gt;
&lt;br /&gt;
    export SAFETY_ASSURED=1&lt;br /&gt;
    RAILS_ENV=production bundle exec rails db:schema:load&lt;br /&gt;
    RAILS_ENV=production bundle exec rails db:seed&lt;br /&gt;
&lt;br /&gt;
== Starten der Dienste  ==&lt;br /&gt;
&lt;br /&gt;
Zum Start aller notwendigen Dienste wird in dieser Anleitung &#039;&#039;monit&#039;&#039; benutzt. Hier ein Beispiel für eine Datei &#039;&#039;.monitrc&#039;&#039; (überlange Zeilen werden hier im Wiki umgebrochen)&lt;br /&gt;
&lt;br /&gt;
    set daemon 60&lt;br /&gt;
        with start delay 120&lt;br /&gt;
    set logfile /home/pacs/xyz00/users/mastodon/monit/var/monit.log&lt;br /&gt;
    set idfile /home/pacs/xyz00/users/mastodon/monit/var/monit.id&lt;br /&gt;
    set statefile /home/pacs/xyz00/users/mastodon/monit/var/monit.state&lt;br /&gt;
    set mailserver localhost&lt;br /&gt;
    set mail-format { from: monit@beispiel.social }&lt;br /&gt;
    set alert mastodon@beispiel.social&lt;br /&gt;
    set httpd port 32001 address xyz00.hostsharing.net &lt;br /&gt;
        allow mostodon:monitpassword&lt;br /&gt;
    check process redis with pidfile /home/pacs/xyz00/users/mastodon/redis/var/redis-server.pid&lt;br /&gt;
        start program &amp;quot;/usr/bin/redis-server /home/pacs/xyz00/users/mastodon/redis/etc/redis.conf&amp;quot;&lt;br /&gt;
        stop program &amp;quot;/bin/bash -c &#039;/bin/kill $( cat /home/pacs/xyz00/users/mastodon/redis/var/redis-server.pid )&#039;&amp;quot;&lt;br /&gt;
    check process mstdn_web with pidfile /home/pacs/xyz00/users/mastodon/mastodon/var/puma.pid&lt;br /&gt;
        depends redis&lt;br /&gt;
        start program &amp;quot;/bin/bash -c &#039;export HOME=/home/pacs/xyz00/users/mastodon &amp;amp;&amp;amp; cd $HOME/mastodon/live &amp;amp;&amp;amp; ( $HOME/.rbenv/shims/bundle exec puma -C config/puma.rb -e production -b tcp://127.0.0.1:32003 &amp;gt;$HOME/mastodon/var/puma.log 2&amp;gt;&amp;amp;1 &amp;amp;  echo $! &amp;gt; $HOME/mastodon/var/puma.pid  )&#039;&amp;quot;&lt;br /&gt;
        stop program &amp;quot;/bin/bash -c &#039;/bin/kill $( cat /home/pacs/xyz00/users/mastodon/mastodon/var/puma.pid )&#039;&amp;quot;&lt;br /&gt;
    check process mstdn_sidekiq with pidfile /home/pacs/xyz00/users/mastodon/mastodon/var/sidekiq.pid&lt;br /&gt;
        depends redis&lt;br /&gt;
        start program &amp;quot;/bin/bash -c &#039;export RAILS_ENV=production &amp;amp;&amp;amp; export DB_POOL=5 &amp;amp;&amp;amp; export HOME=/home/pacs/xyz00/users/mastodon &amp;amp;&amp;amp; cd $HOME/mastodon/live &amp;amp;&amp;amp; ( $HOME/.rbenv/shims/bundle exec sidekiq -c 5 -q default -q mailers -q pull -q push &amp;gt;$HOME/mastodon/var/sidekiq.log 2&amp;gt;&amp;amp;1 &amp;amp;  echo $! &amp;gt; $HOME/mastodon/var/sidekiq.pid  )&#039;&amp;quot;&lt;br /&gt;
        stop program &amp;quot;/bin/bash -c &#039;/bin/kill $( cat /home/pacs/xyz00/users/mastodon/mastodon/var/sidekiq.pid )&#039;&amp;quot;&lt;br /&gt;
    check process mstdn_streaming with pidfile /home/pacs/xyz00/users/mastodon/mastodon/var/streaming.pid&lt;br /&gt;
        depends redis&lt;br /&gt;
        start program &amp;quot;/bin/bash -c &#039;export HOME=/home/pacs/xyz00/users/mastodon &amp;amp;&amp;amp; export NVM_DIR=&amp;quot;$HOME/.nvm&amp;quot; &amp;amp;&amp;amp; export NVM_BIN=/home/pacs/xyz00/users/mastodon/.nvm/versions/node/v6.14.3/bin &amp;amp;&amp;amp; export NODE_ENV=production &amp;amp;&amp;amp; export PORT=32004 &amp;amp;&amp;amp; BIND=127.0.0.1 &amp;amp;&amp;amp; cd $HOME/mastodon/live &amp;amp;&amp;amp; ( $HOME/.nvm/versions/node/v6.14.3/bin/node streaming/index.js &amp;gt;$HOME/mastodon/var/streaming.log 2&amp;gt;&amp;amp;1 &amp;amp;  echo $! &amp;gt; $HOME/mastodon/var/streaming.pid  )&#039;&amp;quot;&lt;br /&gt;
        stop program &amp;quot;/bin/bash -c &#039;/bin/kill $( cat /home/pacs/xyz00/users/mastodon/mastodon/var/streaming.pid )&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Einrichten des Apache VHost ==&lt;br /&gt;
&lt;br /&gt;
    cd ~/doms/beispiel.social&lt;br /&gt;
    rm -rf htdocs-ssl subs/www subs-ssl/www&lt;br /&gt;
    ln -s ~/live/public htdocs-ssl&lt;br /&gt;
    touch htdocs-ssl/.htaccess&lt;br /&gt;
&lt;br /&gt;
Dann die &#039;&#039;htdocs-ssl/.htaccess&#039;&#039; mit dem Editor der Wahl öffnen und &lt;br /&gt;
folgende Konfiguration einfügen:&lt;br /&gt;
&lt;br /&gt;
    DirectoryIndex disabled&lt;br /&gt;
    RewriteEngine On&lt;br /&gt;
    RewriteBase /&lt;br /&gt;
    RewriteCond %{REQUEST_URI}  ^/api/v1/streaming    [NC]&lt;br /&gt;
    RewriteRule .* ws://localhost:32004%{REQUEST_URI}  [proxy]&lt;br /&gt;
    RequestHeader set X-Forwarded-Proto &amp;quot;https&amp;quot;&lt;br /&gt;
    RewriteCond %{REQUEST_FILENAME} !-f&lt;br /&gt;
    RewriteCond %{REQUEST_FILENAME} !-l&lt;br /&gt;
    RewriteRule .* http://localhost:32003%{REQUEST_URI} [proxy]&lt;br /&gt;
    RequestHeader set X-Forwarded-Proto &amp;quot;https&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Cron&#039;&#039; wird für zwei Aufgaben genutzt:&lt;br /&gt;
* Start von monit nach einem Server Reboot&lt;br /&gt;
* Aufräumen von alten Resourcen&lt;br /&gt;
&lt;br /&gt;
Einrichten der crontab mit &#039;&#039;cronttab -e&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
    HOME=/home/pacs/xyz00/users/mastodon&lt;br /&gt;
    MAILTO=mastodon@beispiel.social&lt;br /&gt;
    RAILS_ENV=production&lt;br /&gt;
    NUM_DAYS=31&lt;br /&gt;
    &lt;br /&gt;
    @reboot /usr/bin/monit -c $HOME/.monitrc&lt;br /&gt;
    18 4 * * * cd $HOME/mastodon/live &amp;amp;&amp;amp; $HOME/.rbenv/shims/bundle exec rake mastodon:media:remove_remote&lt;br /&gt;
&lt;br /&gt;
== Volltextsuche ==&lt;br /&gt;
&lt;br /&gt;
In der installierten Version gibt es noch keine Volltextsuche. Es kann lediglich nach Nutzerkennungen und Hastags gesucht werden. Für die Volltextsuche kann optional Elasticsearch installiert werden.&lt;br /&gt;
* https://github.com/tootsuite/documentation/blob/master/Running-Mastodon/Elasticsearch-guide.md&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* https://github.com/tootsuite/documentation/blob/master/Running-Mastodon/Production-guide.md&lt;br /&gt;
* https://krinetzki.de/2017/04/installation-von-mastodon-auf-debian-8-jessie/&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Installationsanleitungen]]&lt;/div&gt;</summary>
		<author><name>Dib00-discourse</name></author>
	</entry>
</feed>