Discourse installieren

Aus Hostsharing Wiki
Zur Navigation springen Zur Suche springen

Für Managed Server

Ein funktionierender Discourse-Server erfordert mehrere laufende Server-Dienste. Für den Betrieb ist ein Managed Server sinnvoll.


Work in Progress

Dieser Artikel soll erklären, wie man discourse installiert, ist allerdings **noch nicht fertig**


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 "supported"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.


Vorbereitungen

Mit Hilfe von HSAdmin wird angelegt:

  1. Ein User als Service-User mit /bin/bash als Shell, zum Beispiel Beispiel: xyz00-discourse
  2. Eine Domain mit xyz00-discourse' als Domain-Administrator, zum Beispiel beispiel.discussion
  3. Einen Postgresql-User xyz00_discourseuser mit Passwort meinPasswort
  4. Eine Postgresql-Datenbank xyz00_discoursedb mit Datenbank-Owner xyz00_discourseuser

Verwendete IP-Ports der Server-Dienste:

  1. Monit: localhost:32001
  2. Redis: localhost:32002
  3. Discourse-Web: localhost:32003

Konfiguration des Redis Server

   cd
   mkdir redis/etc redis/lib redis/log redis/run

Anlegen einer Datei /home/pacs/xyz00/users/discourse/redis/etc/redis.conf mit folgendem Inhalt:

   daemonize no
   pidfile /home/pacs/xyz00/users/discourse/redis/run/redis-server.pid
   port 32002
   tcp-backlog 128
   bind 127.0.0.1
   timeout 300
   loglevel notice
   logfile /home/pacs/xyz00/users/discourse/redis/log/redis.log
   databases 16
   save 900 1
   save 300 10
   save 60 10000
   slave-serve-stale-data yes
   appendonly no
   dbfilename dump.rdb
   dir /home/pacs/xyz00/users/discourse/redis/lib

Installation von Ruby

Als User xyz00-discourse: Installation von Ruby mit rbenv mit folgenden Befehlen:

Zunächst rbenv and ruby-build:

   git clone https://github.com/rbenv/rbenv.git ~/.rbenv
   cd ~/.rbenv && src/configure && make -C src
   echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.profile
   echo 'eval "$(rbenv init -)"' >> ~/.profile

starte neue Shell:

   exec bash

Überprüfe rbenv-Installation

   type rbenv

Installiere ruby-build als rbenv-Plugin

   git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build

Nun kann die benötigte Ruby-Version installiert werden:

   rbenv install 2.4

Installation von Discourse selber

Weiterhin Als User xyz00-discourse:

   cd ~
   git clone https://github.com/discourse/discourse.git discourse
   cd ~/discourse

Die stabile Version auschecken:

   git checkout stable

Ruby Pakete installieren:

   gem install bundler
   bundle install -j$(getconf _NPROCESSORS_ONLN) --deployment --without development test

Konfiguration der Discourse Software

Anlegen einer Datei /home/pacs/xyz00/users/discourse/discourse/config/discourse.conf anhand der Beispiel-Datei:

   cd ~/discourse
   cp config/discourse_defaults.conf config/discourse.conf

Anpassen folgender Inhalte:

   db_host = 127.0.0.1
   db_port = 5432
   #db_backup_port = 5432 #(auskommentieren)
   db_name = xyz00_discoursedb
   db_username = xyz00_discourseuser
   db_password = "" #db password
   hostname = "discourse.xyz00" # hostname
   smtp_address = localhost
   smtp_enable_start_tls = false
   smtp_openssl_verify_mode = 'none'
   developer_emails = # your email-address
   redis_host = 127.0.0.1
   redis_port = 16379
    1. ToDo ...

Die Zufallswerte für die Variablen SECRET_KEY_BASE und OTP_SECRET erzeugt man durch zwei Aufrufe des Kommandos

   RAILS_ENV=production bundle exec rake secret


Initialisieren der Datenbank:

   export SAFETY_ASSURED=1
   # In Version 2.0.4 funktioniert db:migrate noch, ansonsten schema:load und seed nutzen!
   #RAILS_ENV=production bundle exec rails db:schema:load
   #RAILS_ENV=production bundle exec rails db:seed
   RAILS_ENV=production bundle exec rails db:migrate

Starten der Dienste

Zum Start aller notwendigen Dienste wird in dieser Anleitung monit benutzt. Hier ein Beispiel für eine Datei .monitrc (überlange Zeilen werden hier im Wiki umgebrochen)

   set daemon 60
       with start delay 120
   set logfile /home/pacs/xyz00/users/mastodon/monit/var/monit.log
   set idfile /home/pacs/xyz00/users/mastodon/monit/var/monit.id
   set statefile /home/pacs/xyz00/users/mastodon/monit/var/monit.state
   set mailserver localhost
   set mail-format { from: monit@beispiel.social }
   set alert mastodon@beispiel.social
   set httpd port 32001 address xyz00.hostsharing.net 
       allow mostodon:monitpassword
   check process redis with pidfile /home/pacs/xyz00/users/mastodon/redis/var/redis-server.pid
       start program "/usr/bin/redis-server /home/pacs/xyz00/users/mastodon/redis/etc/redis.conf"
       stop program "/bin/bash -c '/bin/kill $( cat /home/pacs/xyz00/users/mastodon/redis/var/redis-server.pid )'"
   check process mstdn_web with pidfile /home/pacs/xyz00/users/mastodon/mastodon/var/puma.pid
       depends redis
       start program "/bin/bash -c 'export HOME=/home/pacs/xyz00/users/mastodon && cd $HOME/mastodon/live && ( $HOME/.rbenv/shims/bundle exec puma -C config/puma.rb -e production -b tcp://127.0.0.1:32003 >$HOME/mastodon/var/puma.log 2>&1 &  echo $! > $HOME/mastodon/var/puma.pid  )'"
       stop program "/bin/bash -c '/bin/kill $( cat /home/pacs/xyz00/users/mastodon/mastodon/var/puma.pid )'"
   check process mstdn_sidekiq with pidfile /home/pacs/xyz00/users/mastodon/mastodon/var/sidekiq.pid
       depends redis
       start program "/bin/bash -c 'export RAILS_ENV=production && export DB_POOL=5 && export HOME=/home/pacs/xyz00/users/mastodon && cd $HOME/mastodon/live && ( $HOME/.rbenv/shims/bundle exec sidekiq -c 5 -q default -q mailers -q pull -q push >$HOME/mastodon/var/sidekiq.log 2>&1 &  echo $! > $HOME/mastodon/var/sidekiq.pid  )'"
       stop program "/bin/bash -c '/bin/kill $( cat /home/pacs/xyz00/users/mastodon/mastodon/var/sidekiq.pid )'"
   check process mstdn_streaming with pidfile /home/pacs/xyz00/users/mastodon/mastodon/var/streaming.pid
       depends redis
       start program "/bin/bash -c 'export HOME=/home/pacs/xyz00/users/mastodon && export NVM_DIR="$HOME/.nvm" && export NVM_BIN=/home/pacs/xyz00/users/mastodon/.nvm/versions/node/v6.14.3/bin && export NODE_ENV=production && export PORT=32004 && BIND=127.0.0.1 && cd $HOME/mastodon/live && ( $HOME/.nvm/versions/node/v6.14.3/bin/node streaming/index.js >$HOME/mastodon/var/streaming.log 2>&1 &  echo $! > $HOME/mastodon/var/streaming.pid  )'"
       stop program "/bin/bash -c '/bin/kill $( cat /home/pacs/xyz00/users/mastodon/mastodon/var/streaming.pid )'"

Einrichten des Apache VHost

   cd ~/doms/beispiel.social
   rm -rf htdocs-ssl subs/www subs-ssl/www
   ln -s ~/live/public htdocs-ssl
   touch htdocs-ssl/.htaccess

Dann die htdocs-ssl/.htaccess mit dem Editor der Wahl öffnen und folgende Konfiguration einfügen:

   DirectoryIndex disabled
   RewriteEngine On
   RewriteBase /
   RewriteCond %{REQUEST_URI}  ^/api/v1/streaming    [NC]
   RewriteRule .* ws://localhost:32004%{REQUEST_URI}  [proxy]
   RequestHeader set X-Forwarded-Proto "https"
   RewriteCond %{REQUEST_FILENAME} !-f
   RewriteCond %{REQUEST_FILENAME} !-l
   RewriteRule .* http://localhost:32003%{REQUEST_URI} [proxy]
   RequestHeader set X-Forwarded-Proto "https"

Cronjobs

Cron wird für zwei Aufgaben genutzt:

  • Start von monit nach einem Server Reboot
  • Aufräumen von alten Resourcen

Einrichten der crontab mit cronttab -e

   HOME=/home/pacs/xyz00/users/mastodon
   MAILTO=mastodon@beispiel.social
   RAILS_ENV=production
   NUM_DAYS=31
   
   @reboot /usr/bin/monit -c $HOME/.monitrc
   18 4 * * * cd $HOME/mastodon/live && $HOME/.rbenv/shims/bundle exec rake mastodon:media:remove_remote

Volltextsuche

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.

Links