Grouprise: Unterschied zwischen den Versionen

Aus Hostsharing Wiki
Zur Navigation springen Zur Suche springen
 
(34 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
== Installation von Grouprise ==
== Installation von Grouprise ==


Grouprise ist eine Software für die Menschen in einer Stadt oder Region. Sie ermöglicht es, dass einzelne Personen sich in Gruppen engagieren und austauschen. Grouprise ist freie Software (FOSS), die Lizenz ist die AGPL.
Grouprise / Stadtgestalten ist eine Software für die Menschen in einer Stadt oder Region. Sie ermöglicht es, dass einzelne Personen sich in Gruppen engagieren und austauschen. Grouprise ist freie Software (FOSS), die Lizenz ist die AGPL.
 
Die Software beinhaltet eine Mailinglisten-ähnliche Funktionalität in Kombination mit der Diskussion über die HTML-Oberfläche. Für Die Mailfunktionalität nutzen wir hier die Subdomain, unter der auch die Anwendung läuft. Im Beispiel ist das "groups.hs-example.de". Für diese Domain wird hier eine Catch-All-Mailadresse eingerichtet.


==== Vorbereitungen in HSAdmin ====
==== Vorbereitungen in HSAdmin ====
Zeile 11: Zeile 13:
* eine Catch-All E-Mail Adresse
* eine Catch-All E-Mail Adresse


<pre>
<syntaxhighlight lang="bash">
xyz00@h00:~$ hsscript -i
xyz00@h00:~$ hsscript -i
Password: *********************
Password: *********************
xyz00@hsadmin> user.add({ set: { name:'xyz00-groups', password:'******', shell:'/bin/bash' xyz00@hsadmin> domain.add({ set: { name:'groups.hs-example.de', user:'xyz00-groups' } })
xyz00@hsadmin> user.add({ set: { name:'xyz00-groups', password:'******', shell:'/bin/bash' } })
xyz00@hsadmin> domain.add({ set: { name:'groups.hs-example.de', user:'xyz00-groups' } })
xyz00@hsadmin> postgresqluser.add({ set: { name:'xyz00_groups', password:'******' } })
xyz00@hsadmin> postgresqluser.add({ set: { name:'xyz00_groups', password:'******' } })
xyz00@hsadmin> postgresqldb.add({ set: { name:'xyz00_groups', owner:'xyz00_groups' } })
xyz00@hsadmin> postgresqldb.add({ set: { name:'xyz00_groups', owner:'xyz00_groups' } })
Zeile 20: Zeile 23:
xyz00@hsadmin> bye
xyz00@hsadmin> bye
xyz00@h00:~$  
xyz00@h00:~$  
</pre>
</syntaxhighlight>
 
==== Notizen zur Installation ====
 
<syntaxhighlight lang="bash">
xyz00-groups@h00:~$ git clone https://git.hack-hro.de/grouprise/grouprise.git
xyz00-groups@h00:~$ cd grouprise/
xyz00-groups@h00:~/grouprise$ git tag
xyz00-groups@h00:~/grouprise$ git checkout v5.5.1
xyz00-groups@h00:~/grouprise$ make virtualenv-update
</syntaxhighlight>
 
Den Secret_Key kann man wie folgt erzeugen:


==== Installation von NodeJS ====
<syntaxhighlight lang="bash">
python3 -c "import secrets; print(secrets.token_urlsafe(32))"
</syntaxhighlight>


Installation von NodeJS (hier Version 10.x) für den User nach der Anleitung
Anlegen einer Datei ''$HOME/.config/grouprise/conf.d/grouprise.yaml'' mit folgendem Inhalt:
[[NodeJS]]


<pre>
<syntaxhighlight lang="yaml">
xyz00@h00:~$ sudo -u xyz00-groups -i
domain: groups.hs-example.de
xyz00-groups@h00:~$ touch ~/.profile
log_recipient_emails:
xyz00-groups@h00:~$ chmod u+x ~/.profile
        - webmaster@groups.hs-example.de
xyz00-groups@h00:~$ wget https://raw.githubusercontent.com/creationix/nvm/v0.35.3/install.sh
database:
xyz00-groups@h00:~$ chmod u+x install.sh
        engine: postgresql
xyz00-groups@h00:~$ ./install.sh
        host: localhost
xyz00-groups@h00:~$ rm install.sh
        name: xyz00_groups
xyz00-groups@h00:~$ export NVM_DIR="$HOME/.nvm"
        user: xyz00_groups
xyz00-groups@h00:~$ . "$NVM_DIR/nvm.sh"
        password: "*****"
xyz00-groups@h00:~$ nvm install 10
secret_key: "XXXXXXXXXXXXXXXXXXXXXXXXXXX"
xyz00-groups@h00:~$ node -v
feed_importer_gestalt_id: 1
v10.21.0
operator_group_id: 1
</pre>
unknown_gestalt_id: 32


==== Notizen zur Installation ====
mailinglist_enabled: True


<pre>
branding:
xyz00-groups@h00:~$ git clone https://git.hack-hro.de/stadtgestalten/stadtgestalten.git
        logo_backdrop: /-/site/logo_backdrop.svg
xyz00-groups@h00:~$ cd stadtgestalten/
        logo_favicon: /-/site/favicon.ico
xyz00-groups@h97:~/stadtgestalten$ git tag
        logo_square: /-/site/logo_large.svg
xyz00-groups@h97:~/stadtgestalten$ git checkout v2.4.3
        logo_text: /-/site/logo_text.svg
xyz00-groups@h97:~/stadtgestalten$ make app_setup
</pre>


Anlegen einer Datei ''$HOME/etc/settings.py'' mit folgendem Inhalt:
backup_path: /home/storage/xyz00/users/groups/backup


<pre>
extra_django_settings_filenames:
# grouprise settings file
        - /home/pacs/xyz00/users/groups/etc/settings.py
# see https://docs.djangoproject.com/en/2.1/ref/settings/
</syntaxhighlight>
import os
import subprocess
from stadt.settings.default import *
from core.assets import add_javascript_reference, add_javascript_inline, add_csp_directive, add_meta
# see https://www.miniwebtool.com/django-secret-key-generator/
SECRET_KEY = 'XXXXXXXXXXXXXXXXXXXXXXXX'
ALLOWED_HOSTS = ['groups.hs-example.de', 'localhost']
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'HOST': 'localhost',
        'NAME': 'xyz00_groups',
        'USER': 'xyz00_groups',
        'PASSWORD': '******',
    }
}
ADMINS = [
    ('Admins', 'hallo@groups.hs-example.de'),
]
DEFAULT_FROM_EMAIL = 'noreply@groups.hs-example.de'
FROM_EMAIL_WITH_SLUG = 'noreply+{slug}@groups.hs-example.de'
ANSWERABLE_FROM_EMAIL = 'noreply@groups.hs-example.de'
DEFAULT_REPLY_TO_EMAIL = 'reply+{reply_key}@groups.hs-example.de'
STADTGESTALTEN_BOT_EMAIL = 'grouprise-bot@groups.hs-example.de'
SERVER_EMAIL = 'grouprise <noreply@groups.hs-example.de>'
GROUPRISE_POSTMASTER_EMAIL = 'postmaster@groups.hs-example.de'
ABOUT_GROUP_ID = 1
STADTGESTALTEN_FEEDS_IMPORTER_USER_ID = 1
GROUPRISE_FEEDS_IMPORTER_GESTALT_ID = 1
GROUPRISE_UNKNOWN_GESTALT_ID = 1
ACCOUNT_DEFAULT_HTTP_PROTOCOL = 'https'
ENTITY_SLUG_BLACKLIST = [ 'all', 'alle', 'antwort', 'crew', 'facebook', 'gbr', 'info', 'kontakt', 'mail', 'noreply', 'postmaster', 'presse', 'reply', 'stadt', 'unknown', 'webmaster', 'www']
# set debug mode to false
DEBUG = False
# increase session cookie time to 1 year
SESSION_COOKIE_AGE = 60 * 60 * 24 * 365
STADTGESTALTEN_CLAIMS = [
    'grouprise forever',
    'Mailingslisten leichtgemacht',
]
STATIC_URL = '/static/'
</pre>


Verlinken nach ''$HOME/stadtgestalten/stadt/settings/local.py'':
Datenbankmigration und statische Assets erzeugen:
<pre>
<syntaxhighlight lang="bash">
xyz00-groups@h00:~/stadtgestalten$ mkdir -p $HOME/etc
xyz00-groups@h00:~/grouprise$ mkdir -p $HOME/var
xyz00-groups@h00:~/stadtgestalten$ vi $HOME/etc/settings.py
xyz00-groups@h00:~/grouprise$ mkdir -p $HOME/etc
xyz00-groups@h00:~/stadtgestalten$ ln -sf $HOME/etc/settings.py stadt/settings/local.py
xyz00-groups@h00:~/grouprise$ . build/venv/bin/activate
xyz00-groups@h00:~/stadtgestalten$ ls -l stadt/settings/local.py
xyz00-groups@h00:~/grouprise$ python manage.py migrate
lrwxrwxrwx 1 xyz00-groups xyz00 45 Jun 13 20:32 stadt/settings/local.py -> /home/pacs/xyz00/users/groups/etc/settings.py
xyz00-groups@h00:~/grouprise$ make
xyz00-groups@h00:~/stadtgestalten$ . build/venv/bin/activate
xyz00-groups@h00:~/grouprise$
xyz00-groups@h00:~/stadtgestalten$ python manage.py migrate
</syntaxhighlight>
xyz00-groups@h00:~/stadtgestalten$
</pre>


==== Integration in den Apache ====
==== Integration in den Apache ====


<pre>
<syntaxhighlight lang="bash">
xyz00-groups@h00:~/stadtgestalten$ cd $HOME/doms/groups.hs-example.de/
xyz00@h00:~$ hsscript -i
xyz00-groups@h97:~/doms/groups.hs-example.de$ rm -rf subs/www/ subs-ssl/www/ htdocs-ssl/.htaccess  
Password: *********************
xyz00-groups@h97:~/doms/groups.hs-example.de$ vi .htaccess
xyz00@hsadmin> domain.update({where:{name:'groups.hs-example.de'},set:{passengerpython:'/home/pacs/xyz00/users/groups/grouprise/build/venv/bin/python',domainoptions:['htdocsfallback','indexes','dkim','passenger','autoconfig','greylisting','letsencrypt']}})
xyz00-groups@h97:~/doms/groups.hs-example.de$ cat .htaccess
xyz00@hsadmin> bye
PassengerPython /home/pacs/xyz00/users/groups/stadtgestalten/build/venv/bin/python
xyz00@h00:~$
xyz00-groups@h97:~/doms/groups.hs-example.de$ cd htdocs-ssl/
</syntaxhighlight>
xyz00-groups@h97:~/doms/groups.hs-example.de/htdocs-ssl$ ln -s $HOME/stadtgestalten/static .
 
xyz00-groups@h97:~/doms/groups.hs-example.de/htdocs-ssl$ mkdir stadt
 
xyz00-groups@h97:~/doms/groups.hs-example.de/htdocs-ssl$ cd stadt/
<syntaxhighlight lang="bash">
xyz00-groups@h97:~/doms/groups.hs-example.de/htdocs-ssl/stadt$ ln -s $HOME/stadtgestalten/static .
xyz00-groups@h00:~/grouprise$ cd $HOME/doms/groups.hs-example.de/
xyz00-groups@h97:~/doms/groups.hs-example.de/htdocs-ssl/stadt$ cd $HOME/doms/groups.hs-example.de/app-ssl
xyz00-groups@h00:~/doms/groups.hs-example.de$ rm -rf subs/www/ subs-ssl/www/ htdocs-ssl/.htaccess  
xyz00-groups@h97:~/doms/groups.hs-example.de/app-ssl$ vi passenger_wsgi.py
xyz00-groups@h00:~/doms/groups.hs-example.de$ vi .htaccess
xyz00-groups@h97:~/doms/groups.hs-example.de/app-ssl$ cat passenger_wsgi.py
xyz00-groups@h00:~/doms/groups.hs-example.de$ cat .htaccess
PassengerPython /home/pacs/xyz00/users/groups/grouprise/build/venv/bin/python
xyz00-groups@h00:~/doms/groups.hs-example.de$ cd htdocs-ssl/
xyz00-groups@h00:~/doms/groups.hs-example.de/htdocs-ssl$ mkdir stadt
xyz00-groups@h00:~/doms/groups.hs-example.de/htdocs-ssl$ cd stadt/
xyz00-groups@h00:~/doms/groups.hs-example.de/htdocs-ssl/stadt$ ln -s $HOME/grouprise/static .
xyz00-groups@h00:~/doms/groups.hs-example.de/htdocs-ssl/stadt$ ln -s $HOME/grouprise/media .
xyz00-groups@h00:~/doms/groups.hs-example.de/htdocs-ssl/stadt$ cd $HOME/doms/groups.hs-example.de/app-ssl
xyz00-groups@h00:~/doms/groups.hs-example.de/app-ssl$ vi passenger_wsgi.py
xyz00-groups@h00:~/doms/groups.hs-example.de/app-ssl$ cat passenger_wsgi.py
import sys, os
import sys, os
sys.path.append("/home/pacs/xyz00/users/groups/stadtgestalten")
sys.path.append("/home/pacs/xyz00/users/groups/grouprise")
from django.conf import settings
from django.core.wsgi import get_wsgi_application
from django.core.wsgi import get_wsgi_application
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "stadt.settings")
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "grouprise.settings")
application = get_wsgi_application()
application = get_wsgi_application()
</pre>
</syntaxhighlight>


Die Datei ''$HOME/doms/groups.hs-example.de/.htaccess'':
Die Datei ''$HOME/doms/groups.hs-example.de/.htaccess'':
<pre>
<syntaxhighlight lang="bash">
PassengerPython /home/pacs/xyz00/users/groups/stadtgestalten/build/venv/bin/python
PassengerPython /home/pacs/xyz00/users/groups/grouprise/build/venv/bin/python
</pre>
</syntaxhighlight>


Die Datei ''$HOME/doms/groups.hs-example.de/app-ssl/passenger_wsgi.py'':
Die Datei ''$HOME/doms/groups.hs-example.de/app-ssl/passenger_wsgi.py'':
<pre>
<syntaxhighlight lang="bash">
import sys, os
import sys, os
sys.path.append("/home/pacs/xyz00/users/groups/stadtgestalten")
sys.path.append("/home/pacs/xyz00/users/groups/grouprise")
from django.conf import settings
from django.core.wsgi import get_wsgi_application
from django.core.wsgi import get_wsgi_application
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "stadt.settings")
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "grouprise.settings")
application = get_wsgi_application()
application = get_wsgi_application()
</syntaxhighlight>
==== Senden von E-Mail ====
Der Versand auf E-Mail erfolgt asynchron durch einen eigenen Prozess. Das Starten des Prozess erfolgt von Hand wie folgt:
<syntaxhighlight lang="bash">
cd $HOME/grouprise
. build/venv/bin/activate
python manage.py run_huey --logfile $HOME/var/huey_consumer.log
</syntaxhighlight>
Es ist sinnvoll ein kleines Start- und Stopskript zu schreiben und den Prozess zum Beispiel mit "monit" zu kontrollieren.
==== Empfang von E-Mail ====
Ankommmende E-Mail an ein Grouprise-Forum werden über die Datei ".forward" im $HOME des Service-Users in ein Skript "~/bin/mailin" geleitet.
Inhalt des Skriptes
<pre>
xyz00-groups@h00:~$ cat bin/mailin
#!/bin/bash
umask 0022
export LANG=de_DE.ISO-8859-1
(cd /home/pacs/xyz00/users/groups/stadtgestalten && /home/pacs/xyz00/users/groups/stadtgestalten/build/venv/bin/python manage.py processincomingmessage)
</pre>
Die Datei ".forward"
<pre>
xyz00-groups@h00:~$ cat .forward
|/home/pacs/xyz00/users/groups/bin/mailin
</pre>
==== Suchfunktion ====
Aufbau des Suchindex für Artikel in Grouprise
<pre>
cd ~/stadtgestalten
. build/venv/bin/activate
python manage.py clear_index
python manage.py rebuild_index
</pre>
Regelmäßige Updates des Suchindex per Cron:
<pre>
xyz00-groups@h00:~$ crontab -l
# m h  dom mon dow  command
HOME=/home/pacs/xyz00/users/groups
VIRTUAL_ENV=/home/pacs/xyz00/users/stadt/stadtgestalten/build/venv
PATH=/home/pacs/xyz00/users/groups/stadtgestalten/build/venv/bin:/home/pacs/xyz00/users/groups/.nvm/versions/node/v10.21.0/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
MAILTO=webmaster@groups.hs-example.com
0 */5 * * * cd $HOME/stadtgestalten && $VIRTUAL_ENV/bin/python manage.py update_index >/dev/null 2>&1
</pre>
</pre>


Zeile 154: Zeile 191:


* https://grouprise.org
* https://grouprise.org
* https://git.hack-hro.de/stadtgestalten/stadtgestalten/ (Git Repository)
* https://git.hack-hro.de/grouprise/grouprise/ (Git Repository)
* [https://git.hack-hro.de/stadtgestalten/stadtgestalten/-/blob/master/docs/deployment/DEPLOYMENT.md Installationsanleitung(unvollständig)]


=== Grouprise Installationen ===
=== Grouprise Installationen ===
Zeile 161: Zeile 197:
* https://stadtgestalten.org/ Rostock
* https://stadtgestalten.org/ Rostock
* https://stadtimpuls.org/ Greifswald
* https://stadtimpuls.org/ Greifswald
* https://schwerin-aktiv.org/ Schwerin


=== Handbuch für Nutzer:innen ===
=== Handbuch für Nutzer:innen ===

Aktuelle Version vom 13. November 2024, 18:26 Uhr

Installation von Grouprise

Grouprise / Stadtgestalten ist eine Software für die Menschen in einer Stadt oder Region. Sie ermöglicht es, dass einzelne Personen sich in Gruppen engagieren und austauschen. Grouprise ist freie Software (FOSS), die Lizenz ist die AGPL.

Die Software beinhaltet eine Mailinglisten-ähnliche Funktionalität in Kombination mit der Diskussion über die HTML-Oberfläche. Für Die Mailfunktionalität nutzen wir hier die Subdomain, unter der auch die Anwendung läuft. Im Beispiel ist das "groups.hs-example.de". Für diese Domain wird hier eine Catch-All-Mailadresse eingerichtet.

Vorbereitungen in HSAdmin

In HSAdmin werden angelegt:

  • ein Service-User,
  • eine Domain,
  • ein Postgres-User und eine Datenbank,
  • eine Catch-All E-Mail Adresse
xyz00@h00:~$ hsscript -i
Password: *********************
xyz00@hsadmin> user.add({ set: { name:'xyz00-groups', password:'******', shell:'/bin/bash' } })
xyz00@hsadmin> domain.add({ set: { name:'groups.hs-example.de', user:'xyz00-groups' } })
xyz00@hsadmin> postgresqluser.add({ set: { name:'xyz00_groups', password:'******' } })
xyz00@hsadmin> postgresqldb.add({ set: { name:'xyz00_groups', owner:'xyz00_groups' } })
xyz00@hsadmin> emailaddress.add({ set: { localpart:'', domain:'groups.hs-example.de', target:'xyz00-groups' } })
xyz00@hsadmin> bye
xyz00@h00:~$

Notizen zur Installation

xyz00-groups@h00:~$ git clone https://git.hack-hro.de/grouprise/grouprise.git
xyz00-groups@h00:~$ cd grouprise/
xyz00-groups@h00:~/grouprise$ git tag
xyz00-groups@h00:~/grouprise$ git checkout v5.5.1
xyz00-groups@h00:~/grouprise$ make virtualenv-update

Den Secret_Key kann man wie folgt erzeugen:

python3 -c "import secrets; print(secrets.token_urlsafe(32))"

Anlegen einer Datei $HOME/.config/grouprise/conf.d/grouprise.yaml mit folgendem Inhalt:

domain: groups.hs-example.de
log_recipient_emails:
        - webmaster@groups.hs-example.de
database:
        engine: postgresql
        host: localhost
        name: xyz00_groups
        user: xyz00_groups
        password: "*****"
secret_key: "XXXXXXXXXXXXXXXXXXXXXXXXXXX"
feed_importer_gestalt_id: 1
operator_group_id: 1
unknown_gestalt_id: 32

mailinglist_enabled: True

branding:
        logo_backdrop: /-/site/logo_backdrop.svg
        logo_favicon: /-/site/favicon.ico
        logo_square: /-/site/logo_large.svg
        logo_text: /-/site/logo_text.svg

backup_path: /home/storage/xyz00/users/groups/backup

extra_django_settings_filenames:
        - /home/pacs/xyz00/users/groups/etc/settings.py

Datenbankmigration und statische Assets erzeugen:

xyz00-groups@h00:~/grouprise$ mkdir -p $HOME/var
xyz00-groups@h00:~/grouprise$ mkdir -p $HOME/etc
xyz00-groups@h00:~/grouprise$ . build/venv/bin/activate
xyz00-groups@h00:~/grouprise$ python manage.py migrate
xyz00-groups@h00:~/grouprise$ make
xyz00-groups@h00:~/grouprise$

Integration in den Apache

xyz00@h00:~$ hsscript -i
Password: *********************
xyz00@hsadmin> domain.update({where:{name:'groups.hs-example.de'},set:{passengerpython:'/home/pacs/xyz00/users/groups/grouprise/build/venv/bin/python',domainoptions:['htdocsfallback','indexes','dkim','passenger','autoconfig','greylisting','letsencrypt']}})
xyz00@hsadmin> bye
xyz00@h00:~$


xyz00-groups@h00:~/grouprise$ cd $HOME/doms/groups.hs-example.de/
xyz00-groups@h00:~/doms/groups.hs-example.de$ rm -rf subs/www/ subs-ssl/www/ htdocs-ssl/.htaccess 
xyz00-groups@h00:~/doms/groups.hs-example.de$ vi .htaccess
xyz00-groups@h00:~/doms/groups.hs-example.de$ cat .htaccess
PassengerPython /home/pacs/xyz00/users/groups/grouprise/build/venv/bin/python
xyz00-groups@h00:~/doms/groups.hs-example.de$ cd htdocs-ssl/
xyz00-groups@h00:~/doms/groups.hs-example.de/htdocs-ssl$ mkdir stadt
xyz00-groups@h00:~/doms/groups.hs-example.de/htdocs-ssl$ cd stadt/
xyz00-groups@h00:~/doms/groups.hs-example.de/htdocs-ssl/stadt$ ln -s $HOME/grouprise/static .
xyz00-groups@h00:~/doms/groups.hs-example.de/htdocs-ssl/stadt$ ln -s $HOME/grouprise/media .
xyz00-groups@h00:~/doms/groups.hs-example.de/htdocs-ssl/stadt$ cd $HOME/doms/groups.hs-example.de/app-ssl
xyz00-groups@h00:~/doms/groups.hs-example.de/app-ssl$ vi passenger_wsgi.py
xyz00-groups@h00:~/doms/groups.hs-example.de/app-ssl$ cat passenger_wsgi.py
import sys, os
sys.path.append("/home/pacs/xyz00/users/groups/grouprise")
from django.conf import settings
from django.core.wsgi import get_wsgi_application
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "grouprise.settings")
application = get_wsgi_application()

Die Datei $HOME/doms/groups.hs-example.de/.htaccess:

PassengerPython /home/pacs/xyz00/users/groups/grouprise/build/venv/bin/python

Die Datei $HOME/doms/groups.hs-example.de/app-ssl/passenger_wsgi.py:

import sys, os
sys.path.append("/home/pacs/xyz00/users/groups/grouprise")
from django.conf import settings
from django.core.wsgi import get_wsgi_application
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "grouprise.settings")
application = get_wsgi_application()

Senden von E-Mail

Der Versand auf E-Mail erfolgt asynchron durch einen eigenen Prozess. Das Starten des Prozess erfolgt von Hand wie folgt:

cd $HOME/grouprise
. build/venv/bin/activate
python manage.py run_huey --logfile $HOME/var/huey_consumer.log

Es ist sinnvoll ein kleines Start- und Stopskript zu schreiben und den Prozess zum Beispiel mit "monit" zu kontrollieren.

Empfang von E-Mail

Ankommmende E-Mail an ein Grouprise-Forum werden über die Datei ".forward" im $HOME des Service-Users in ein Skript "~/bin/mailin" geleitet.

Inhalt des Skriptes

xyz00-groups@h00:~$ cat bin/mailin
#!/bin/bash
umask 0022
export LANG=de_DE.ISO-8859-1
(cd /home/pacs/xyz00/users/groups/stadtgestalten && /home/pacs/xyz00/users/groups/stadtgestalten/build/venv/bin/python manage.py processincomingmessage)

Die Datei ".forward"

xyz00-groups@h00:~$ cat .forward 
|/home/pacs/xyz00/users/groups/bin/mailin

Suchfunktion

Aufbau des Suchindex für Artikel in Grouprise

cd ~/stadtgestalten
. build/venv/bin/activate
python manage.py clear_index 
python manage.py rebuild_index

Regelmäßige Updates des Suchindex per Cron:

xyz00-groups@h00:~$ crontab -l
# m h  dom mon dow   command
HOME=/home/pacs/xyz00/users/groups
VIRTUAL_ENV=/home/pacs/xyz00/users/stadt/stadtgestalten/build/venv
PATH=/home/pacs/xyz00/users/groups/stadtgestalten/build/venv/bin:/home/pacs/xyz00/users/groups/.nvm/versions/node/v10.21.0/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
MAILTO=webmaster@groups.hs-example.com
0 */5 * * * cd $HOME/stadtgestalten && $VIRTUAL_ENV/bin/python manage.py update_index >/dev/null 2>&1

Links

Webseite

Grouprise Installationen

Handbuch für Nutzer:innen