Grouprise: Unterschied zwischen den Versionen
(renamed repo standtgestalten -> grouprise) |
|||
(22 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 27: | Zeile 27: | ||
<pre> | <pre> | ||
xyz00-groups@h00:~$ git clone https://git.hack-hro.de/ | xyz00-groups@h00:~$ git clone https://git.hack-hro.de/grouprise/grouprise.git | ||
xyz00-groups@h00:~$ cd | xyz00-groups@h00:~$ cd grouprise/ | ||
xyz00-groups@h00:~/ | xyz00-groups@h00:~/grouprise$ git tag | ||
xyz00-groups@h00:~/ | xyz00-groups@h00:~/grouprise$ git checkout v3.1.1 | ||
xyz00-groups@h00:~/ | xyz00-groups@h00:~/grouprise$ make virtualenv-update | ||
</pre> | |||
Den Secret_Key kann man wie folgt erzeugen: | |||
<pre> | |||
python3 -c "import secrets; print(secrets.token_urlsafe(32))" | |||
</pre> | </pre> | ||
Zeile 37: | Zeile 43: | ||
<pre> | <pre> | ||
from grouprise.common_settings import * | |||
SECRET_KEY = 'XXXXXX' | |||
ALLOWED_HOSTS = [ 'groups.hs-example.de' ] | |||
DEBUG = True | |||
SECRET_KEY = ' | |||
ALLOWED_HOSTS = ['groups.hs-example.de | |||
DATABASES = { | DATABASES = { | ||
'default': { | 'default': { | ||
Zeile 55: | Zeile 60: | ||
} | } | ||
} | } | ||
HUEY= { | HUEY= { | ||
'huey_class': 'huey.SqliteHuey', | 'huey_class': 'huey.SqliteHuey', | ||
'filename': '/home/pacs/xyz00/users/groups/var/huey.sqlite', | 'filename': '/home/pacs/xyz00/users/groups/var/huey.sqlite', | ||
} | } | ||
ADMINS = [ | |||
SESSION_COOKIE_AGE = 60 * 60 * 24 * 365 | |||
ADMINS = [ ('Admins', 'webmaster@groups.hs-example.de') ] | |||
DEFAULT_FROM_EMAIL = 'noreply@groups.hs-example.de' | |||
SERVER_EMAIL = 'noreply@groups.hs-example.de' | |||
ACCOUNT_DEFAULT_HTTP_PROTOCOL = 'https' | |||
GROUPRISE = { | GROUPRISE = { | ||
'CLAIMS': [ 'Meine Stadt', 'Zuhause in', 'Stadt gestalten' ], | 'CLAIMS': [ 'Meine Stadt', 'Zuhause in', 'Stadt gestalten' ], | ||
Zeile 75: | Zeile 89: | ||
'DEFAULT_DISTINCT_FROM_EMAIL': 'noreply+{slug}@groups.hs-example.de', | 'DEFAULT_DISTINCT_FROM_EMAIL': 'noreply+{slug}@groups.hs-example.de', | ||
'DEFAULT_REPLY_TO_EMAIL': 'reply+{reply_key}@groups.hs-example.de', | 'DEFAULT_REPLY_TO_EMAIL': 'reply+{reply_key}@groups.hs-example.de', | ||
'MAILBOX_DELIVERED_TO_EMAIL': ' | 'MAILBOX_DELIVERED_TO_EMAIL': 'xyz00-groups@h00.hostsharing.net', | ||
'POSTMASTER_EMAIL': 'postmaster@groups.hs-example.de', | 'POSTMASTER_EMAIL': 'postmaster@groups.hs-example.de', | ||
'MAILINGLIST_ENABLED': True, | 'MAILINGLIST_ENABLED': True, | ||
Zeile 84: | Zeile 98: | ||
] | ] | ||
} | } | ||
</pre> | </pre> | ||
Verlinken nach ''$HOME/ | Verlinken nach ''$HOME/grouprise/stadt/settings/local.py'': | ||
<pre> | <pre> | ||
xyz00-groups@h00:~/ | xyz00-groups@h00:~/grouprise$ mkdir -p $HOME/var | ||
xyz00-groups@h00:~/ | xyz00-groups@h00:~/grouprise$ mkdir -p $HOME/etc | ||
xyz00-groups@h00:~/ | xyz00-groups@h00:~/grouprise$ vi $HOME/etc/settings.py | ||
xyz00-groups@h00:~/ | xyz00-groups@h00:~/grouprise$ ln -s $HOME/etc/settings.py ./grouprise/ | ||
xyz00-groups@h00:~/ | xyz00-groups@h00:~/grouprise$ . build/venv/bin/activate | ||
xyz00-groups@h00:~/ | xyz00-groups@h00:~/grouprise$ python manage.py migrate | ||
xyz00-groups@h00:~/ | xyz00-groups@h00:~/grouprise$ make | ||
xyz00-groups@h00:~/grouprise$ | |||
</pre> | </pre> | ||
Zeile 109: | Zeile 115: | ||
<pre> | <pre> | ||
xyz00-groups@h00:~/ | xyz00-groups@h00:~/grouprise$ cd $HOME/doms/groups.hs-example.de/ | ||
xyz00-groups@ | xyz00-groups@h00:~/doms/groups.hs-example.de$ rm -rf subs/www/ subs-ssl/www/ htdocs-ssl/.htaccess | ||
xyz00-groups@ | xyz00-groups@h00:~/doms/groups.hs-example.de$ vi .htaccess | ||
xyz00-groups@ | xyz00-groups@h00:~/doms/groups.hs-example.de$ cat .htaccess | ||
PassengerPython /home/pacs/xyz00/users/groups/ | PassengerPython /home/pacs/xyz00/users/groups/grouprise/build/venv/bin/python | ||
xyz00-groups@ | xyz00-groups@h00:~/doms/groups.hs-example.de$ cd htdocs-ssl/ | ||
xyz00-groups@ | xyz00-groups@h00:~/doms/groups.hs-example.de/htdocs-ssl$ mkdir stadt | ||
xyz00-groups@ | xyz00-groups@h00:~/doms/groups.hs-example.de/htdocs-ssl$ cd stadt/ | ||
xyz00-groups@ | xyz00-groups@h00:~/doms/groups.hs-example.de/htdocs-ssl/stadt$ ln -s $HOME/grouprise/static . | ||
xyz00-groups@ | xyz00-groups@h00:~/doms/groups.hs-example.de/htdocs-ssl/stadt$ ln -s $HOME/grouprise/media . | ||
xyz00-groups@ | xyz00-groups@h00:~/doms/groups.hs-example.de/htdocs-ssl/stadt$ cd $HOME/doms/groups.hs-example.de/app-ssl | ||
xyz00-groups@ | xyz00-groups@h00:~/doms/groups.hs-example.de/app-ssl$ vi passenger_wsgi.py | ||
xyz00-groups@ | 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/ | 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", " | os.environ.setdefault("DJANGO_SETTINGS_MODULE", "grouprise.settings") | ||
application = get_wsgi_application() | application = get_wsgi_application() | ||
</pre> | </pre> | ||
Zeile 131: | Zeile 138: | ||
Die Datei ''$HOME/doms/groups.hs-example.de/.htaccess'': | Die Datei ''$HOME/doms/groups.hs-example.de/.htaccess'': | ||
<pre> | <pre> | ||
PassengerPython /home/pacs/xyz00/users/groups/ | PassengerPython /home/pacs/xyz00/users/groups/grouprise/build/venv/bin/python | ||
</pre> | </pre> | ||
Zeile 137: | Zeile 144: | ||
<pre> | <pre> | ||
import sys, os | import sys, os | ||
sys.path.append("/home/pacs/xyz00/users/groups/ | 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", " | os.environ.setdefault("DJANGO_SETTINGS_MODULE", "grouprise.settings") | ||
application = get_wsgi_application() | application = get_wsgi_application() | ||
</pre> | </pre> | ||
==== Senden und Empfang von E-Mail ==== | ==== Senden von E-Mail ==== | ||
Der Versand auf E-Mail erfolgt asynchron durch einen eigenen Prozess. Das Starten des Prozess erfolgt von Hand wie folgt: | |||
<pre> | |||
cd $HOME/grouprise | |||
. build/venv/bin/activate | |||
python manage.py run_huey --logfile $HOME/var/huey_consumer.log | |||
</pre> | |||
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> | <pre> | ||
xyz00-groups@h00:~$ cat bin/mailin | xyz00-groups@h00:~$ cat bin/mailin | ||
#!/bin/bash | #!/bin/bash | ||
umask 0022 | 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 | xyz00-groups@h00:~$ cat .forward | ||
|/home/pacs/xyz00/users/groups/bin/mailin | |/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 | xyz00-groups@h00:~$ crontab -l | ||
# m h dom mon dow command | # m h dom mon dow command | ||
Zeile 159: | Zeile 203: | ||
VIRTUAL_ENV=/home/pacs/xyz00/users/stadt/stadtgestalten/build/venv | 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 | 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= | MAILTO=webmaster@groups.hs-example.com | ||
0 */5 * * * cd $HOME/stadtgestalten && $VIRTUAL_ENV/bin/python manage.py update_index >/dev/null 2>&1 | 0 */5 * * * cd $HOME/stadtgestalten && $VIRTUAL_ENV/bin/python manage.py update_index >/dev/null 2>&1 | ||
</pre> | </pre> | ||
Zeile 170: | Zeile 212: | ||
* https://grouprise.org | * https://grouprise.org | ||
* https://git.hack-hro.de/ | * https://git.hack-hro.de/grouprise/grouprise/ (Git Repository) | ||
=== Grouprise Installationen === | === Grouprise Installationen === | ||
Zeile 177: | Zeile 218: | ||
* 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 25. Januar 2021, 13:27 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 v3.1.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/etc/settings.py mit folgendem Inhalt:
from grouprise.common_settings import * SECRET_KEY = 'XXXXXX' ALLOWED_HOSTS = [ 'groups.hs-example.de' ] DEBUG = True DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql', 'HOST': 'localhost', 'NAME': 'xyz00_groups', 'USER': 'xyz00_groups', 'PASSWORD': '******', } } HUEY= { 'huey_class': 'huey.SqliteHuey', 'filename': '/home/pacs/xyz00/users/groups/var/huey.sqlite', } SESSION_COOKIE_AGE = 60 * 60 * 24 * 365 ADMINS = [ ('Admins', 'webmaster@groups.hs-example.de') ] DEFAULT_FROM_EMAIL = 'noreply@groups.hs-example.de' SERVER_EMAIL = 'noreply@groups.hs-example.de' ACCOUNT_DEFAULT_HTTP_PROTOCOL = 'https' GROUPRISE = { 'CLAIMS': [ 'Meine Stadt', 'Zuhause in', 'Stadt gestalten' ], 'SCORE_CONTENT_AGE': 100, 'UPLOAD_MAX_FILE_SIZE': 0, # special users and groups 'FEED_IMPORTER_GESTALT_ID': 1, 'OPERATOR_GROUP_ID': 1, 'UNKNOWN_GESTALT_ID': 1, # email settings 'DEFAULT_DISTINCT_FROM_EMAIL': 'noreply+{slug}@groups.hs-example.de', 'DEFAULT_REPLY_TO_EMAIL': 'reply+{reply_key}@groups.hs-example.de', 'MAILBOX_DELIVERED_TO_EMAIL': 'xyz00-groups@h00.hostsharing.net', 'POSTMASTER_EMAIL': 'postmaster@groups.hs-example.de', 'MAILINGLIST_ENABLED': True, 'ENTITY_SLUG_BLACKLIST': [ 'all', 'grouprise', 'info', 'mail', 'noreply', 'postmaster', 'reply', 'stadt', 'webmaster', 'www' ] }
Verlinken nach $HOME/grouprise/stadt/settings/local.py:
xyz00-groups@h00:~/grouprise$ mkdir -p $HOME/var xyz00-groups@h00:~/grouprise$ mkdir -p $HOME/etc xyz00-groups@h00:~/grouprise$ vi $HOME/etc/settings.py xyz00-groups@h00:~/grouprise$ ln -s $HOME/etc/settings.py ./grouprise/ 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-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
- https://grouprise.org
- https://git.hack-hro.de/grouprise/grouprise/ (Git Repository)
Grouprise Installationen
- https://stadtgestalten.org/ Rostock
- https://stadtimpuls.org/ Greifswald
- https://schwerin-aktiv.org/ Schwerin