Discourse installieren: Unterschied zwischen den Versionen
Dib00 (Diskussion | Beiträge) |
Dib00 (Diskussion | Beiträge) KKeine Bearbeitungszusammenfassung |
||
Zeile 1: | Zeile 1: | ||
{{Textkasten|gelb|Für Managed Server|Ein funktionierender Discourse-Server erfordert mehrere laufende Server-Dienste. Für den Betrieb ist ein Managed Server sinnvoll.}} | {{Textkasten|gelb|Für Managed Server|Ein funktionierender Discourse-Server erfordert mehrere laufende Server-Dienste. Für den Betrieb ist ein Managed Server sinnvoll.}} | ||
{{Textkasten|rot| | {{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 "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.}} | ||
== Über == | |||
In diesem Artikel wird die Installation von discourse, Version 2.1.0 (September 2018) beschrieben. | |||
== Vorbereitungen == | == Vorbereitungen == | ||
Zeile 230: | Zeile 232: | ||
@reboot /usr/bin/supervisord -c /home/pacs/xyz00/users/discourse/supervisor/etc/supervisord.conf | @reboot /usr/bin/supervisord -c /home/pacs/xyz00/users/discourse/supervisor/etc/supervisord.conf | ||
== Backup == | == Wartung == | ||
=== Backup === | |||
Discourse macht selbstätig backups und legt diese unter 'public/backups' ab. Enthalten ist ein Datenbank-Dump und die hochgeladenen Dateien. | Discourse macht selbstätig backups und legt diese unter 'public/backups' ab. Enthalten ist ein Datenbank-Dump und die hochgeladenen Dateien. | ||
Zeile 236: | Zeile 239: | ||
Im Admin-Bereich lassen sich backups auch manuell antreten. | Im Admin-Bereich lassen sich backups auch manuell antreten. | ||
== Updates == | === Updates === | ||
Discourse wird über update via mail informieren (dies kann man m.W. abschalten). | Discourse wird über update via mail informieren (dies kann man m.W. abschalten). | ||
Zeile 266: | Zeile 269: | ||
* https://github.com/discourse/discourse_docker | * https://github.com/discourse/discourse_docker | ||
* https://github.com/discourse/discourse | * https://github.com/discourse/discourse | ||
== Historie == | |||
* 2018, 14 . September: Initiale Fassung | |||
[[Kategorie:Installationsanleitungen]] | [[Kategorie:Installationsanleitungen]] |
Version vom 14. September 2018, 07:58 Uhr
Für Managed Server
Ein funktionierender Discourse-Server erfordert mehrere laufende Server-Dienste. Für den Betrieb ist ein Managed Server sinnvoll.
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.
Über
In diesem Artikel wird die Installation von discourse, Version 2.1.0 (September 2018) beschrieben.
Vorbereitungen
Mit Hilfe von HSAdmin wird angelegt:
- Ein User als Service-User mit /bin/bash als Shell, zum Beispiel Beispiel: xyz00-discourse
- Eine Domain mit xyz00-discourse' als Domain-Administrator, zum Beispiel beispiel.discussion
- Einen Postgresql-User xyz00_discourseuser mit Passwort meinPasswort
- Eine Postgresql-Datenbank xyz00_discoursedb mit Datenbank-Owner xyz00_discourseuser
Verwendete IP-Ports der Server-Dienste:
- Redis: localhost:32002
- Discourse-Web: localhost:13000
Konfiguration der PostgreSQL Datenbank
PostgreSQL Extensions
Die PostgreSQL-Datenbank braucht die extensions ``hstore`` und ``pg_trm``. Diese müssen vom hostsharing-support installiert werden.
Ansonsten liefe die Erstellung der Datenbank so:
su - postgres -c psql CREATE DATABASE discourse; CREATE USER discourse; ALTER USER discourse WITH ENCRYPTED PASSWORD 'password'; ALTER DATABASE discourse OWNER TO discourse; \connect discourse CREATE EXTENSION hstore; CREATE EXTENSION pg_trgm;
Entsprechende Funktionalität (von den extensions abgesehen) ist auch über den HSAdmin verfügbar.
Konfiguration des Redis Server
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.
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 = 32002
TODO: Secrets setzen!
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
Sidekiq für Hintergrund-Aufgaben konfigurieren
config/sidekiq.conf
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
Kompilieren der Assets
RAILS_ENV=production bundle exec rails assets:precompile
Konfiguration des Web-Servers (am Beispiel Puma)
Die Datei config/puma.conf anpassen (hier nur Änderungen angezeigt):
APP_ROOT = '/home/pacs/xyz00/users/discourse/discourse' daemonize false
Starten der Dienste
Zum Start aller notwendigen Dienste wird in dieser Anleitung supervisor benutzt. Hier ein Beispiel für eine Datei ~/supervisor/etc/supervisord.conf (überlange Zeilen werden hier im Wiki umgebrochen)
[supervisord] logfile=/home/pacs/xyz00/users/discourse/supervisor/log/supervisord.log logfile_maxbytes=50MB logfile_backups=10 loglevel=error pidfile=/home/pacs/xyz00/users/discourse/supervisor/run/supervisord.pid minfds=1024 minprocs=200 childlogdir=/home/pacs/xyz00/users/discourse/supervisor/log/ [unix_http_server] file=/home/pacs/xyz00/users/discourse/supervisor/run/supervisord.sock [rpcinterface:supervisor] supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface [supervisorctl] serverurl=unix:///home/pacs/xyz00/users/discourse/supervisor/run/supervisord.sock [program:redis] command=/usr/bin/redis-server /home/pacs/xyz00/users/discourse/redis/etc/redis.conf stderr_logfile = /home/pacs/xyz00/users/discourse/supervisor/log/redis-stderr.log stdout_logfile = /home/pacs/xyz00/users/discourse/supervisor/log/redis-stdout.log [program:discourse-web] directory=/home/pacs/xyz00/users/discourse/discourse environment=RAILS_ENV="production" command=/home/pacs/xyz00/users/discourse/.rbenv/shims/bundle exec puma -C config/puma.rb -b tcp://127.0.0.1:13000 stderr_logfile = /home/pacs/xyz00/users/discourse/supervisor/log/discourse-web-stderr.log stdout_logfile = /home/pacs/xyz00/users/discourse/supervisor/log/discourse-web-stdout.log [program:discourse-sidekiq] directory=/home/pacs/xyz00/users/discourse/discourse environment=RAILS_ENV="production" command=/home/pacs/xyz00/users/discourse/.rbenv/shims/bundle exec sidekiq -C /home/pacs/xyz00/users/discourse/discourse/config/sidekiq.yml stderr_logfile = /home/pacs/xyz00/users/discourse/supervisor/log/discourse-sidekiq-stderr.log stdout_logfile = /home/pacs/xyz00/users/discourse/supervisor/log/discourse-sidekiq-stdout.log
Einrichten des Apache VHost
cd ~/doms/beispiel.discuss rm -rf htdocs-ssl subs/www subs-ssl/www ln -s ~/live/public htdocs-ssl touch htdocs-ssl/.htaccess
Dann die htdocs-ssl/.htaccess (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:
DirectoryIndex disabled RequestHeader set X-Forwarded-Proto "https" RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-l RewriteRule .* http://127.0.0.1:13000%{REQUEST_URI} [proxy,last]
Cronjobs
Cron wird für genutzt, um nach dem Server reboot supervisord zu starten.
Einrichten der crontab mit cronttab -e
HOME=/home/pacs/xyz00/users/discourse MAILTO=discourse@beispiel.discuss RAILS_ENV=production NUM_DAYS=31 @reboot /usr/bin/supervisord -c /home/pacs/xyz00/users/discourse/supervisor/etc/supervisord.conf
Wartung
Backup
Discourse macht selbstätig backups und legt diese unter 'public/backups' ab. Enthalten ist ein Datenbank-Dump und die hochgeladenen Dateien.
Im Admin-Bereich lassen sich backups auch manuell antreten.
Updates
Discourse wird über update via mail informieren (dies kann man m.W. abschalten).
(Am Beispiel von 2.0.4 auf 2.1.0)
- Im Web-Backend unter Administration->Backups-> Read-Only Mouds setzen (oder Web Server so konfigurieren, dass keine Zugriffe mehr stattfinden können)
- Backup
- Die lokalen Änderungen sichern (git diff > /tmp/discourse.diff)
- Schauen, ob discourse (endlich :) ) eine neue Ruby-Version nutzt (z.B. in discourse_docker: image/discourse_fast_switch/Dockerfile , discourse: .rubocop
- git pull
- (Zur Sicherheit: git checkout stable)
- bundle
- RAILS_ENV=production bundle exec rake db:migrate
- RAILS_ENV=production bundle exec rake assets:precompile
- Services neu starten (Holzhammer: sv restart all)
ToDos
- 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).
- Konfiguration von discourse, um mit postgresql via Unix-Socket zu kommunizieren (DISCOURSE_DB_SOCKET environment variable)
- Performance-tuning an diversen Stellen, anhand der discourse_docker-Vorgaben (https://github.com/discourse/discourse_docker), z.B.
- thpoff (huge page settings)
- unicorn (hat eine wesentlich ausgefeiltere Konfigurations-Vorlage, wahrscheinlich bereits ordentlich optimiert)
Links
- https://help.skysilk.com/support/solutions/articles/9000120927-how-to-install-discourse-without-docker-using-skysilk-vps-
- https://github.com/discourse/discourse_docker
- https://github.com/discourse/discourse
Historie
- 2018, 14 . September: Initiale Fassung