Loomio installieren
Für Managed Server
Ein funktionierender Loomio-Server erfordert mehrere laufende Server-Dienste. Für den Betrieb ist ein Managed Server sinnvoll.
Über
Loomio (https://www.loomio.org/) ist laut Wikipedia eine freie Software, geeignet um Gruppen im kollaborativen Entscheidungsfindungsprozess zu unterstützen.
Ein kurzes 2 Minuten Video auf Englisch beschreibt es ganz gut: What is Loomio? https://www.youtube.com/embed/Zlzuqsunpxc
Es ist in Ruby on Rails geschrieben.
Die von den Entwicklern empfohlene Installation von Loomio funktioniert mit Docker. Die Konzepte von Docker passen aber nicht zu Hostsharing. Daher wird hier mit supervisor gearbeitet.
Weitere Links und Hinweise zur Entstehung dieser Anleitung siehe auf der Diskussionsseite.
Vorbereitungen
Service-User, Domain und Datenbank
Mit Hilfe von HSAdmin werden angelegt:
- Ein User als Service-User mit /bin/bash als Shell, zum Beispiel Beispiel: xyz00-loomio"
- Eine Domain mit xyz00-loomio als Domain-Administrator, zum Beispiel "loomio.example.org"
- Einen Postgresql-User xyz00_loomio mit Passwort meinPasswort
- Eine Postgresql-Datenbank xyz00_loomio mit Datenbank-Owner xyz00_loomio
PostgreSQL Extensions
Die PostgreSQL-Datenbank braucht die folgenden Extensions: citext, hstore, pg_stat_statements, pgcrypto und plpgsql. Diese müssen vom Hostsharing-Support installiert werden. Dazu einfach eine E-Mail an die service@ Adresse schreiben.
Installation von Ruby
Loomio benötigt eine geeignete Version der Programmiersprache Ruby:
Die Version ist in https://github.com/loomio/loomio/blob/master/.ruby-version zu finden.
xyz00-loomio@h20:~$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv xyz00-loomio@h20:~$ touch ~/.profile xyz00-loomio@h20:~$ chmod u+x ~/.profile xyz00-loomio@h20:~$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.profile xyz00-loomio@h20:~$ echo 'eval "$(rbenv init -)"' >> ~/.profile xyz00-loomio@h20:~$ source ~/.profile xyz00-loomio@h20:~$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build xyz00-loomio@h20:~$ rbenv install 2.7.3 xyz00-loomio@h20:~$ rbenv rehash xyz00-loomio@h20:~$ rbenv global 2.7.3
Als Test bitte aufrufen: ruby -v
Die Anzeige sollte etwa das Folgende enthalten: ruby 2.7.3pXYZ (....) [x86_64-linux]
Installation von Node
Loomio benötigt eine geeignete Version von Node:
Die Version ist in https://github.com/loomio/loomio/blob/master/Dockerfile#L28 zu finden.
xyz00-loomio@h20:~$ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh | bash xyz00-loomio@h20:~$ export NVM_DIR="$HOME/.nvm" xyz00-loomio@h20:~$ source $NVM_DIR/nvm.sh xyz00-loomio@h20:~$ nvm install 14.0.0 xyz00-loomio@h20:~$ nvm alias default 14.0.0
Installation
Installation der Anwendung
Wir benutzen nicht die neueste Version von Loomio, sondern die aktuelle Version aus dem stable Branch, genau wie die Docker Container. Momentan ist das Version Loomio 2.7.5, siehe auf Github.
xyz00-loomio@h20:~$ source ~/.profile xyz00-loomio@h20:~$ export NVM_DIR="$HOME/.nvm" xyz00-loomio@h20:~$ source $NVM_DIR/nvm.sh xyz00-loomio@h20:~$ git clone https://github.com/loomio/loomio.git xyz00-loomio@h20:~$ cd loomio xyz00-loomio@h20:~/loomio$ git checkout --track remotes/origin/stable xyz00-loomio@h20:~/loomio$ gem update --system xyz00-loomio@h20:~/loomio$ bundle install xyz00-loomio@h20:~/loomio$ cd vue && npm install && npm run build && cd ..
Konfiguration von Loomio
Erstelle eine Konfiguration für den Datenbank-Zugriff in der Datei config/database.yml
xyz00-loomio@h20:~$ cd ~/loomio xyz00-loomio@h20:~/loomio$ cp config/database.example.yml config/database.yml
In der neuen Datei database.yml wird die mit HSAdmin angelegte PostgreSQL-Datenbank eingetragen:
production: adapter: postgresql encoding: unicode host: localhost database: xyz00_loomio (wie oben angegeben) pool: 10 username: xyz00_dbuser (wie oben angegeben) password: meinPasswort (wie oben angegeben)
Bearbeite die Datei config/environments/production.rb und ergänze am Ende, vor dem end:
config.force_ssl = false config.action_mailer.default_url_options = { :host => 'loomio.example.org' } config.action_mailer.raise_delivery_errors = true config.action_mailer.perform_deliveries = true config.action_mailer.delivery_method = :smtp config.action_mailer.logger = ActiveSupport::Logger.new("/home/pacs/xyz00/users/loomio/supervisor/log/mailer.log") config.action_mailer.logger.level = ActiveSupport::Logger::Severity::INFO config.action_mailer.smtp_settings = { :domain => 'example.org', :authentication => nil, :address => 'localhost', :port => 25, :openssl_verify_mode => :none, :enable_starttls_auto => false }
Einen geheimen Schlüssel erzeugen
xyz00-loomio@h20:~$ cd ~/loomio xyz00-loomio@h20:~/loomio$ EDITOR=vim ./script/rails credentials:edit
Den Editor vim mit Speichern verlassen: Esc
Taste drücken, dann eingeben: :wq
und Enter drücken
xyz00-loomio@h20:~/loomio$ export RAILS_ENV="production" xyz00-loomio@h20:~/loomio$ echo "export SECRET_KEY_BASE=$(rake secret)" >> ~/.profile
Initialisieren der Datenbank
xyz00-loomio@h20:~$ cd ~/loomio xyz00-loomio@h20:~/loomio$ export RAILS_ENV="production" xyz00-loomio@h20:~/loomio$ source ~/.profile xyz00-loomio@h20:~/loomio$ rake db:schema:load xyz00-loomio@h20:~/loomio$ rake db:migrate
Redis Service konfigurieren
xyz00-loomio@h20:~$ cd xyz00-loomio@h20:~$ mkdir -p redis/etc redis/lib redis/log redis/run
Anlegen einer Datei /home/pacs/xyz00/users/loomio/redis/etc/redis.conf mit folgendem Inhalt:
daemonize no pidfile /home/pacs/xyz00/users/loomio/redis/run/redis-server.pid port 6379 tcp-backlog 128 bind 127.0.0.1 timeout 300 loglevel notice logfile /home/pacs/xyz00/users/loomio/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/loomio/redis/lib
Supervisor konfigurieren
Zum Start aller notwendigen Dienste wird in dieser Anleitung supervisor benutzt.
xyz00-loomio@h20:~$ mkdir -p ~/supervisor/log ~/supervisor/run ~/supervisor/etc
Hier ein Beispiel für die Datei ~/supervisor/etc/supervisord.conf
[supervisord] logfile=/home/pacs/xyz00/users/loomio/supervisor/log/supervisord.log logfile_maxbytes=50MB logfile_backups=10 loglevel=error pidfile=/home/pacs/xyz00/users/loomio/supervisor/run/supervisord.pid minfds=1024 minprocs=200 childlogdir=/home/pacs/xyz00/users/loomio/supervisor/log/ [unix_http_server] file=/home/pacs/xyz00/users/loomio/supervisor/run/supervisord.sock [rpcinterface:supervisor] supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface [supervisorctl] serverurl=unix:///home/pacs/xyz00/users/loomio/supervisor/run/supervisord.sock [program:redis] command=/usr/bin/redis-server /home/pacs/xyz00/users/loomio/redis/etc/redis.conf stderr_logfile = /home/pacs/xyz00/users/loomio/supervisor/log/redis-stderr.log stdout_logfile = /home/pacs/xyz00/users/loomio/supervisor/log/redis-stdout.log [program:loomio-web] directory=/home/pacs/xyz00/users/loomio/loomio environment=RAILS_ENV="production",NOTIFICATIONS_EMAIL_ADDRESS="no-reply@example.org" command=/home/pacs/xyz00/users/loomio/.rbenv/shims/bundle exec puma -C config/puma.rb -b tcp://127.0.0.1:3000 stderr_logfile = /home/pacs/xyz00/users/loomio/supervisor/log/loomio-web-stderr.log stdout_logfile = /home/pacs/xyz00/users/loomio/supervisor/log/loomio-web-stdout.log [program:loomio-sidekiq] directory=/home/pacs/xyz00/users/loomio/loomio environment=RAILS_ENV="production",NOTIFICATIONS_EMAIL_ADDRESS="no-reply@example.org" command=/home/pacs/xyz00/users/loomio/.rbenv/shims/bundle exec sidekiq stderr_logfile = /home/pacs/xyz00/users/loomio/supervisor/log/loomio-sidekiq-stderr.log stdout_logfile = /home/pacs/xyz00/users/loomio/supervisor/log/loomio-sidekiq-stdout.log
Die folgenden Skripte können zum Starten und zum Neustarten der Dienste verwendet werden:
~/start.sh
#!/bin/bash export RAILS_ENV="production" source ~/.profile cd ~/loomio /usr/bin/supervisord -c $HOME/supervisor/etc/supervisord.conf
~/restart.sh
#!/bin/bash if [ -f $HOME/supervisor/run/supervisord.pid ] then /bin/kill $( cat $HOME/supervisor/run/supervisord.pid ) fi sleep 3 ~/start.sh
Cronjobs
Cron wird genutzt, um nach dem Server reboot supervisord zu starten, und um regelmäßige Aufgaben von Loomio auszuführen.
Einrichten der crontab mit crontab -e
HOME=/home/pacs/xyz00/users/loomio MAILTO=admin@example.org RAILS_ENV=production NOTIFICATIONS_EMAIL_ADDRESS="no-reply@example.org" NUM_DAYS=31 @reboot /usr/bin/supervisord -c /home/pacs/xyz00/users/loomio/supervisor/etc/supervisord.conf 55 * * * * cd /home/pacs/xyz00/users/loomio/loomio && /home/pacs/xyz00/users/loomio/.rbenv/shims/bundle exec rake loomio:hourly_tasks
Log Dateien
Zum Debuggen können folgende Log Dateien hilfreich sein:
- ~/supervisor/log/loomio-web-stdout.log
- ~/supervisor/log/loomio-web-stderr.log
- ~/supervisor/log/loomio-sidekiq-stdout.log
- ~/supervisor/log/loomio-sidekiq-stderr.log
- ~/supervisor/log/mailer.log
- ~/supervisor/log/redis-stdout.log
- ~/supervisor/log/redis-stderr.log
Einrichten des Apache
Die originale .htaccess Datei zuerst löschen:
xyz00-loomio@h20:~$ rm ~/doms/loomio.example.org/htdocs-ssl/.htaccess
Neue Datei ~/doms/loomio.example.org/htdocs-ssl/.htaccess
DirectoryIndex disabled RewriteEngine on RewriteBase / RewriteRule ^(.*) http://localhost:3000/$1 [proxy,last]