<?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</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"/>
	<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Spezial:Beitr%C3%A4ge/Dib00"/>
	<updated>2026-04-25T21:34:46Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Discourse_installieren&amp;diff=4695</id>
		<title>Discourse installieren</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Discourse_installieren&amp;diff=4695"/>
		<updated>2018-09-14T07:58:13Z</updated>

		<summary type="html">&lt;p&gt;Dib00: &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;
== 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;
[[Kategorie:Installationsanleitungen]]&lt;/div&gt;</summary>
		<author><name>Dib00</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Discourse_installieren&amp;diff=4694</id>
		<title>Discourse installieren</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Discourse_installieren&amp;diff=4694"/>
		<updated>2018-09-12T06:38:47Z</updated>

		<summary type="html">&lt;p&gt;Dib00: /* Initialisieren der Datenbank */&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**. Er bezieht sich auf discourse Version 2.0.4 (Aktuell September 2018: 2.1.0)}}&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;
# 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;
== 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;
== 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;
[[Kategorie:Installationsanleitungen]]&lt;/div&gt;</summary>
		<author><name>Dib00</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Discourse_installieren&amp;diff=4693</id>
		<title>Discourse installieren</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Discourse_installieren&amp;diff=4693"/>
		<updated>2018-09-12T06:37:46Z</updated>

		<summary type="html">&lt;p&gt;Dib00: /* 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|Work in Progress|Dieser Artikel soll erklären, wie man discourse installiert, ist allerdings **noch nicht fertig**. Er bezieht sich auf discourse Version 2.0.4 (Aktuell September 2018: 2.1.0)}}&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;
# 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;
=== 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;
== 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;
== 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;
[[Kategorie:Installationsanleitungen]]&lt;/div&gt;</summary>
		<author><name>Dib00</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Discourse_installieren&amp;diff=4692</id>
		<title>Discourse installieren</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Discourse_installieren&amp;diff=4692"/>
		<updated>2018-09-12T06:16:46Z</updated>

		<summary type="html">&lt;p&gt;Dib00: /* 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|Work in Progress|Dieser Artikel soll erklären, wie man discourse installiert, ist allerdings **noch nicht fertig**. Er bezieht sich auf discourse Version 2.0.4 (Aktuell September 2018: 2.1.0)}}&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;
# 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;
=== 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;
== 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;
# Services neu starten (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;
[[Kategorie:Installationsanleitungen]]&lt;/div&gt;</summary>
		<author><name>Dib00</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Discourse_installieren&amp;diff=4691</id>
		<title>Discourse installieren</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Discourse_installieren&amp;diff=4691"/>
		<updated>2018-09-12T06:15:59Z</updated>

		<summary type="html">&lt;p&gt;Dib00: /* 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|Work in Progress|Dieser Artikel soll erklären, wie man discourse installiert, ist allerdings **noch nicht fertig**. Er bezieht sich auf discourse Version 2.0.4 (Aktuell September 2018: 2.1.0)}}&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;
# 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;
=== 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;
== 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;
(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;
# Services neu starten (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;
[[Kategorie:Installationsanleitungen]]&lt;/div&gt;</summary>
		<author><name>Dib00</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Discourse_installieren&amp;diff=4690</id>
		<title>Discourse installieren</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Discourse_installieren&amp;diff=4690"/>
		<updated>2018-09-12T06:04:54Z</updated>

		<summary type="html">&lt;p&gt;Dib00: /* Backup */&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**. Er bezieht sich auf discourse Version 2.0.4 (Aktuell September 2018: 2.1.0)}}&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;
# 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;
=== 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;
== 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;
TODO: Beispielhaftes Update 2.0.4 -&amp;gt; 2.1&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;
[[Kategorie:Installationsanleitungen]]&lt;/div&gt;</summary>
		<author><name>Dib00</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Discourse_installieren&amp;diff=4689</id>
		<title>Discourse installieren</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Discourse_installieren&amp;diff=4689"/>
		<updated>2018-09-11T07:10:03Z</updated>

		<summary type="html">&lt;p&gt;Dib00: /* Vorbereitungen */&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**. Er bezieht sich auf discourse Version 2.0.4 (Aktuell September 2018: 2.1.0)}}&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;
# 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;
=== 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;
== Backup ==&lt;br /&gt;
&lt;br /&gt;
TODO: Beispielhaftes Backup&lt;br /&gt;
&lt;br /&gt;
== Updates ==&lt;br /&gt;
&lt;br /&gt;
TODO: Beispielhaftes Update 2.0.4 -&amp;gt; 2.1&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;
[[Kategorie:Installationsanleitungen]]&lt;/div&gt;</summary>
		<author><name>Dib00</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Discourse_installieren&amp;diff=4688</id>
		<title>Discourse installieren</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Discourse_installieren&amp;diff=4688"/>
		<updated>2018-09-11T06:57:00Z</updated>

		<summary type="html">&lt;p&gt;Dib00: /* 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**. Er bezieht sich auf discourse Version 2.0.4 (Aktuell September 2018: 2.1.0)}}&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 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;
=== 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;
== Backup ==&lt;br /&gt;
&lt;br /&gt;
TODO: Beispielhaftes Backup&lt;br /&gt;
&lt;br /&gt;
== Updates ==&lt;br /&gt;
&lt;br /&gt;
TODO: Beispielhaftes Update 2.0.4 -&amp;gt; 2.1&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;
[[Kategorie:Installationsanleitungen]]&lt;/div&gt;</summary>
		<author><name>Dib00</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Discourse_installieren&amp;diff=4687</id>
		<title>Discourse installieren</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Discourse_installieren&amp;diff=4687"/>
		<updated>2018-09-11T06:54:10Z</updated>

		<summary type="html">&lt;p&gt;Dib00: /* Konfiguration des Web-Servers (am Beispiel Puma) */&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**. Er bezieht sich auf discourse Version 2.0.4 (Aktuell September 2018: 2.1.0)}}&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 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;
=== 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;
[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;
== Backup ==&lt;br /&gt;
&lt;br /&gt;
TODO: Beispielhaftes Backup&lt;br /&gt;
&lt;br /&gt;
== Updates ==&lt;br /&gt;
&lt;br /&gt;
TODO: Beispielhaftes Update 2.0.4 -&amp;gt; 2.1&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;
[[Kategorie:Installationsanleitungen]]&lt;/div&gt;</summary>
		<author><name>Dib00</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Discourse_installieren&amp;diff=4686</id>
		<title>Discourse installieren</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Discourse_installieren&amp;diff=4686"/>
		<updated>2018-09-11T06:52:56Z</updated>

		<summary type="html">&lt;p&gt;Dib00: /* ToDos */&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**. Er bezieht sich auf discourse Version 2.0.4 (Aktuell September 2018: 2.1.0)}}&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 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;
== 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;
[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;
== Backup ==&lt;br /&gt;
&lt;br /&gt;
TODO: Beispielhaftes Backup&lt;br /&gt;
&lt;br /&gt;
== Updates ==&lt;br /&gt;
&lt;br /&gt;
TODO: Beispielhaftes Update 2.0.4 -&amp;gt; 2.1&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;
[[Kategorie:Installationsanleitungen]]&lt;/div&gt;</summary>
		<author><name>Dib00</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Discourse_installieren&amp;diff=4685</id>
		<title>Discourse installieren</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Discourse_installieren&amp;diff=4685"/>
		<updated>2018-09-11T06:49:44Z</updated>

		<summary type="html">&lt;p&gt;Dib00: /* Einrichten des Apache VHost */&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**. Er bezieht sich auf discourse Version 2.0.4 (Aktuell September 2018: 2.1.0)}}&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 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;
== 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;
[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;
== Backup ==&lt;br /&gt;
&lt;br /&gt;
TODO: Beispielhaftes Backup&lt;br /&gt;
&lt;br /&gt;
== Updates ==&lt;br /&gt;
&lt;br /&gt;
TODO: Beispielhaftes Update 2.0.4 -&amp;gt; 2.1&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;
&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;
[[Kategorie:Installationsanleitungen]]&lt;/div&gt;</summary>
		<author><name>Dib00</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Discourse_installieren&amp;diff=4684</id>
		<title>Discourse installieren</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Discourse_installieren&amp;diff=4684"/>
		<updated>2018-09-11T06:48:12Z</updated>

		<summary type="html">&lt;p&gt;Dib00: /* 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**. Er bezieht sich auf discourse Version 2.0.4 (Aktuell September 2018: 2.1.0)}}&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 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;
== 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;
[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; 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;
  &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;
== Backup ==&lt;br /&gt;
&lt;br /&gt;
TODO: Beispielhaftes Backup&lt;br /&gt;
&lt;br /&gt;
== Updates ==&lt;br /&gt;
&lt;br /&gt;
TODO: Beispielhaftes Update 2.0.4 -&amp;gt; 2.1&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;
&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;
[[Kategorie:Installationsanleitungen]]&lt;/div&gt;</summary>
		<author><name>Dib00</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Discourse_installieren&amp;diff=4683</id>
		<title>Discourse installieren</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Discourse_installieren&amp;diff=4683"/>
		<updated>2018-09-11T06:45:11Z</updated>

		<summary type="html">&lt;p&gt;Dib00: /* ToDos */&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**. Er bezieht sich auf discourse Version 2.0.4 (Aktuell September 2018: 2.1.0)}}&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 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;
== 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;
[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; 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;
  &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;
== Backup ==&lt;br /&gt;
&lt;br /&gt;
TODO: Beispielhaftes Backup&lt;br /&gt;
&lt;br /&gt;
== Updates ==&lt;br /&gt;
&lt;br /&gt;
TODO: Beispielhaftes Update 2.0.4 -&amp;gt; 2.1&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;
&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;
[[Kategorie:Installationsanleitungen]]&lt;/div&gt;</summary>
		<author><name>Dib00</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Discourse_installieren&amp;diff=4682</id>
		<title>Discourse installieren</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Discourse_installieren&amp;diff=4682"/>
		<updated>2018-09-11T06:44:53Z</updated>

		<summary type="html">&lt;p&gt;Dib00: /* 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**. Er bezieht sich auf discourse Version 2.0.4 (Aktuell September 2018: 2.1.0)}}&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 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;
== 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;
[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; 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;
  &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;
== Backup ==&lt;br /&gt;
&lt;br /&gt;
TODO: Beispielhaftes Backup&lt;br /&gt;
&lt;br /&gt;
== Updates ==&lt;br /&gt;
&lt;br /&gt;
TODO: Beispielhaftes Update 2.0.4 -&amp;gt; 2.1&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;
&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;
[[Kategorie:Installationsanleitungen]]&lt;/div&gt;</summary>
		<author><name>Dib00</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Discourse_installieren&amp;diff=4681</id>
		<title>Discourse installieren</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Discourse_installieren&amp;diff=4681"/>
		<updated>2018-09-11T06:42:22Z</updated>

		<summary type="html">&lt;p&gt;Dib00: /* Einrichten des Apache VHost */&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**. Er bezieht sich auf discourse Version 2.0.4 (Aktuell September 2018: 2.1.0)}}&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 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;
== 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;
[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; 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;
  &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/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;
== Backup ==&lt;br /&gt;
&lt;br /&gt;
TODO: Beispielhaftes Backup&lt;br /&gt;
&lt;br /&gt;
== Updates ==&lt;br /&gt;
&lt;br /&gt;
TODO: Beispielhaftes Update 2.0.4 -&amp;gt; 2.1&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;
&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;
[[Kategorie:Installationsanleitungen]]&lt;/div&gt;</summary>
		<author><name>Dib00</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Discourse_installieren&amp;diff=4680</id>
		<title>Discourse installieren</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Discourse_installieren&amp;diff=4680"/>
		<updated>2018-09-11T06:39:51Z</updated>

		<summary type="html">&lt;p&gt;Dib00: /* 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**. Er bezieht sich auf discourse Version 2.0.4 (Aktuell September 2018: 2.1.0)}}&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 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;
== 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;
[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.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;
== Backup ==&lt;br /&gt;
&lt;br /&gt;
TODO: Beispielhaftes Backup&lt;br /&gt;
&lt;br /&gt;
== Updates ==&lt;br /&gt;
&lt;br /&gt;
TODO: Beispielhaftes Update 2.0.4 -&amp;gt; 2.1&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;
&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;
[[Kategorie:Installationsanleitungen]]&lt;/div&gt;</summary>
		<author><name>Dib00</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Discourse_installieren&amp;diff=4679</id>
		<title>Discourse installieren</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Discourse_installieren&amp;diff=4679"/>
		<updated>2018-09-11T06:38:25Z</updated>

		<summary type="html">&lt;p&gt;Dib00: /* 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**. Er bezieht sich auf discourse Version 2.0.4 (Aktuell September 2018: 2.1.0)}}&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 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 = 16379&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;
== 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;
[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.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;
== Backup ==&lt;br /&gt;
&lt;br /&gt;
TODO: Beispielhaftes Backup&lt;br /&gt;
&lt;br /&gt;
== Updates ==&lt;br /&gt;
&lt;br /&gt;
TODO: Beispielhaftes Update 2.0.4 -&amp;gt; 2.1&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;
&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;
[[Kategorie:Installationsanleitungen]]&lt;/div&gt;</summary>
		<author><name>Dib00</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Discourse_installieren&amp;diff=4678</id>
		<title>Discourse installieren</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Discourse_installieren&amp;diff=4678"/>
		<updated>2018-09-11T06:35:50Z</updated>

		<summary type="html">&lt;p&gt;Dib00: /* Starten der Dienste, supervisor */&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**. Er bezieht sich auf discourse Version 2.0.4 (Aktuell September 2018: 2.1.0)}}&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 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 = 16379&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;
== 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;
[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;
[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;
&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;
== Backup ==&lt;br /&gt;
&lt;br /&gt;
TODO: Beispielhaftes Backup&lt;br /&gt;
&lt;br /&gt;
== Updates ==&lt;br /&gt;
&lt;br /&gt;
TODO: Beispielhaftes Update 2.0.4 -&amp;gt; 2.1&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;
&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;
[[Kategorie:Installationsanleitungen]]&lt;/div&gt;</summary>
		<author><name>Dib00</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Discourse_installieren&amp;diff=4677</id>
		<title>Discourse installieren</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Discourse_installieren&amp;diff=4677"/>
		<updated>2018-09-11T06:32:02Z</updated>

		<summary type="html">&lt;p&gt;Dib00: /* 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**. Er bezieht sich auf discourse Version 2.0.4 (Aktuell September 2018: 2.1.0)}}&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 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 = 16379&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;
== 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;
== Backup ==&lt;br /&gt;
&lt;br /&gt;
TODO: Beispielhaftes Backup&lt;br /&gt;
&lt;br /&gt;
== Updates ==&lt;br /&gt;
&lt;br /&gt;
TODO: Beispielhaftes Update 2.0.4 -&amp;gt; 2.1&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;
&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;
[[Kategorie:Installationsanleitungen]]&lt;/div&gt;</summary>
		<author><name>Dib00</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Discourse_installieren&amp;diff=4676</id>
		<title>Discourse installieren</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Discourse_installieren&amp;diff=4676"/>
		<updated>2018-09-11T06:29:36Z</updated>

		<summary type="html">&lt;p&gt;Dib00: /* ToDos */&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**. Er bezieht sich auf discourse Version 2.0.4 (Aktuell September 2018: 2.1.0)}}&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 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 = 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;
== Backup ==&lt;br /&gt;
&lt;br /&gt;
TODO: Beispielhaftes Backup&lt;br /&gt;
&lt;br /&gt;
== Updates ==&lt;br /&gt;
&lt;br /&gt;
TODO: Beispielhaftes Update 2.0.4 -&amp;gt; 2.1&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;
&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;
[[Kategorie:Installationsanleitungen]]&lt;/div&gt;</summary>
		<author><name>Dib00</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Discourse_installieren&amp;diff=4675</id>
		<title>Discourse installieren</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Discourse_installieren&amp;diff=4675"/>
		<updated>2018-09-11T06:27:49Z</updated>

		<summary type="html">&lt;p&gt;Dib00: /* Placeholder für Backup und Update eingefügt */&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**. Er bezieht sich auf discourse Version 2.0.4 (Aktuell September 2018: 2.1.0)}}&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 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 = 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;
== Backup ==&lt;br /&gt;
&lt;br /&gt;
TODO: Beispielhaftes Backup&lt;br /&gt;
&lt;br /&gt;
== Updates ==&lt;br /&gt;
&lt;br /&gt;
TODO: Beispielhaftes Update 2.0.4 -&amp;gt; 2.1&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)&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;
[[Kategorie:Installationsanleitungen]]&lt;/div&gt;</summary>
		<author><name>Dib00</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Discourse_installieren&amp;diff=4674</id>
		<title>Discourse installieren</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Discourse_installieren&amp;diff=4674"/>
		<updated>2018-09-11T06:23:13Z</updated>

		<summary type="html">&lt;p&gt;Dib00: /* Links */&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**. Er bezieht sich auf discourse Version 2.0.4 (Aktuell September 2018: 2.1.0)}}&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 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 = 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;
== 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)&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;
[[Kategorie:Installationsanleitungen]]&lt;/div&gt;</summary>
		<author><name>Dib00</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Discourse_installieren&amp;diff=4673</id>
		<title>Discourse installieren</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Discourse_installieren&amp;diff=4673"/>
		<updated>2018-09-11T06:22:30Z</updated>

		<summary type="html">&lt;p&gt;Dib00: /* s/Volltextsuche/ToDos/ */&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**. Er bezieht sich auf discourse Version 2.0.4 (Aktuell September 2018: 2.1.0)}}&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 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 = 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;
== 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)&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</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Discourse_installieren&amp;diff=4672</id>
		<title>Discourse installieren</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Discourse_installieren&amp;diff=4672"/>
		<updated>2018-09-11T06:18:36Z</updated>

		<summary type="html">&lt;p&gt;Dib00: /* Konfiguration des Redis Server */&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**. Er bezieht sich auf discourse Version 2.0.4 (Aktuell September 2018: 2.1.0)}}&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 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 = 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</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Discourse_installieren&amp;diff=4671</id>
		<title>Discourse installieren</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Discourse_installieren&amp;diff=4671"/>
		<updated>2018-09-11T06:17:08Z</updated>

		<summary type="html">&lt;p&gt;Dib00: /* Konfiguration der PostgreSQL Datenbank */&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**. Er bezieht sich auf discourse Version 2.0.4 (Aktuell September 2018: 2.1.0)}}&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 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;
    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</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Discourse_installieren&amp;diff=4670</id>
		<title>Discourse installieren</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Discourse_installieren&amp;diff=4670"/>
		<updated>2018-09-11T06:10:57Z</updated>

		<summary type="html">&lt;p&gt;Dib00: /* Konfiguration des PostgreSQL Server */&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**. Er bezieht sich auf discourse Version 2.0.4 (Aktuell September 2018: 2.1.0)}}&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 der PostgreSQL Datenbank ==&lt;br /&gt;
&lt;br /&gt;
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;
    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</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Discourse_installieren&amp;diff=4669</id>
		<title>Discourse installieren</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Discourse_installieren&amp;diff=4669"/>
		<updated>2018-09-11T06:05:34Z</updated>

		<summary type="html">&lt;p&gt;Dib00: &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**. Er bezieht sich auf discourse Version 2.0.4 (Aktuell September 2018: 2.1.0)}}&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</name></author>
	</entry>
</feed>