Grouprise: Unterschied zwischen den Versionen
Peh (Diskussion | Beiträge) |
|||
(17 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt) | |||
Zeile 13: | Zeile 13: | ||
* eine Catch-All E-Mail Adresse | * eine Catch-All E-Mail Adresse | ||
< | <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 22: | Zeile 23: | ||
xyz00@hsadmin> bye | xyz00@hsadmin> bye | ||
xyz00@h00:~$ | xyz00@h00:~$ | ||
</ | </syntaxhighlight> | ||
==== Notizen zur Installation ==== | ==== Notizen zur Installation ==== | ||
< | <syntaxhighlight lang="bash"> | ||
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 v5.5.1 | ||
xyz00-groups@h00:~/ | xyz00-groups@h00:~/grouprise$ make virtualenv-update | ||
</ | </syntaxhighlight> | ||
Den Secret_Key kann man wie folgt erzeugen: | Den Secret_Key kann man wie folgt erzeugen: | ||
< | <syntaxhighlight lang="bash"> | ||
python3 -c "import secrets; print(secrets.token_urlsafe(32))" | python3 -c "import secrets; print(secrets.token_urlsafe(32))" | ||
</ | </syntaxhighlight> | ||
Anlegen einer Datei ''$HOME/ | Anlegen einer Datei ''$HOME/.config/grouprise/conf.d/grouprise.yaml'' mit folgendem Inhalt: | ||
< | <syntaxhighlight lang="yaml"> | ||
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 | |||
</syntaxhighlight> | |||
Datenbankmigration und statische Assets erzeugen: | |||
<syntaxhighlight lang="bash"> | |||
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$ | |||
</syntaxhighlight> | |||
==== Integration in den Apache ==== | |||
<syntaxhighlight lang="bash"> | |||
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:~$ | |||
</syntaxhighlight> | |||
<syntaxhighlight lang="bash"> | |||
xyz00-groups@h00:~/grouprise$ cd $HOME/doms/groups.hs-example.de/ | |||
xyz00-groups@h00:~ | |||
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$ 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$ vi .htaccess | ||
xyz00-groups@h00:~/doms/groups.hs-example.de$ cat .htaccess | 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@h00:~/doms/groups.hs-example.de$ cd htdocs-ssl/ | 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$ mkdir stadt | ||
xyz00-groups@h00:~/doms/groups.hs-example.de/htdocs-ssl$ cd 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/ | 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/ | 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/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$ vi passenger_wsgi.py | ||
xyz00-groups@h00:~/doms/groups.hs-example.de/app-ssl$ cat 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/ | 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", "grouprise.settings") | os.environ.setdefault("DJANGO_SETTINGS_MODULE", "grouprise.settings") | ||
application = get_wsgi_application() | application = get_wsgi_application() | ||
</ | </syntaxhighlight> | ||
Die Datei ''$HOME/doms/groups.hs-example.de/.htaccess'': | Die Datei ''$HOME/doms/groups.hs-example.de/.htaccess'': | ||
< | <syntaxhighlight lang="bash"> | ||
PassengerPython /home/pacs/xyz00/users/groups/ | PassengerPython /home/pacs/xyz00/users/groups/grouprise/build/venv/bin/python | ||
</ | </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'': | ||
< | <syntaxhighlight lang="bash"> | ||
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", "grouprise.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. | Ankommmende E-Mail an ein Grouprise-Forum werden über die Datei ".forward" im $HOME des Service-Users in ein Skript "~/bin/mailin" geleitet. | ||
Zeile 198: | Zeile 191: | ||
* https://grouprise.org | * https://grouprise.org | ||
* https://git.hack-hro.de/ | * https://git.hack-hro.de/grouprise/grouprise/ (Git Repository) | ||
=== Grouprise Installationen === | === Grouprise Installationen === |
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
- 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