{"type":"rich","html":"<div style=\"width: 640; height: 426; font-family: sans-serif,arial,freesans;\" ><div id=\"shared_container_957543793\" class=\"shared_container\"><div id=\"shared_header_957543793\" class=\"shared_header\"><a href=\"https:\/\/hub.hubzilla.hu\/channel\/hz-workshop\"><img src=\"https:\/\/hub.hubzilla.hu\/photo\/profile\/s\/35\" alt=\"Hubzilla Workshop\" height=\"32\" width=\"32\" loading=\"lazy\" \/><\/a><span><a href=\"https:\/\/hub.hubzilla.hu\/channel\/hz-workshop\">Hubzilla Workshop<\/a>  wrote the following  <a href=\"https:\/\/hub.hubzilla.hu\/item\/616bcf40-9696-4198-ba16-6fcfabf2692e\">post <\/a><span class=\"autotime\" title=\"2025-09-14T19:51:58+02:00\">Sun, 14 Sep 2025 19:51:58 +0200<\/span><\/span><\/div><div id=\"reshared-content-957543793\" class=\"reshared-content\"><strong>Hubzilla mit einem YunoHost-Server betreiben<\/strong><br \/>Wer einen Server (egal ob zu Hause, oder auf einem gemieteten VPS- oder Rootserver) mit <a href=\"https:\/\/yunohost.org\/#\/\" target=\"_blank\" rel=\"nofollow noopener\">YunoHost<\/a> betreibt, hat es einfach. Die Software nimmt einem sehr viel Verwaltungsarbeit im Detail ab und bietet unz\u00e4hlige Applikationen, die man mit wenig Aufwand installieren, in Betrieb nehmen und pflegen kann.<br \/><br \/>Auch <a href=\"https:\/\/apps.yunohost.org\/app\/hubzilla\" target=\"_blank\" rel=\"nofollow noopener\">Hubzilla<\/a> geh\u00f6rt zu den <a href=\"https:\/\/apps.yunohost.org\/catalog\" target=\"_blank\" rel=\"nofollow noopener\">Apps<\/a>, die bei YunoHost angeboten werden. Hubzilla ist mit wenigen Eingaben und Voraussetzungen installiert.<br \/><br \/>Man ben\u00f6tigt eine eigene Domain oder Subdomain. Dabei ist darauf zu achten, dass unter dieser Domain noch keine andere Fediverse-Software installiert war. Das ist eine &quot;Besonderheit&quot; des Fediverse. Einmal verwendete Domains sind f\u00fcr das Fediverse &quot;verbrannt&quot;, wenn man unter ihnen eine neue oder andere Fedi-Software installieren m\u00f6chte. Aber egal... wir nehmen einmal an, wir haben eine frische, &quot;jungfr\u00e4uliche&quot; Domain. Dann ist die Installation mit wenigen Klicks und Eingaben erledigt.<br \/><br \/>Leider ist es zeitweise aber so, dass Updates f\u00fcr die App &quot;Hubzilla&quot; bei YunoHost (auch wichtige, sicherheitsrelevante, die zeitnah durchgef\u00fchrt werden m\u00fcssten) nur verz\u00f6gert Einzug halten.<br \/><br \/>Aus genau diesem Grund, habe ich nun Hubzilla unter YunoHost auf eine andere Art installiert. Die Vorteile, die einem YunoHost bietet, bleiben dabei erhalten (einfache Backups, kein h\u00e4ndisches Einrichten von Reverse Proxy, Aktualit\u00e4t des zugrundeliegenden Systems, Einrichtung einer Datenbank etc.).<br \/><br \/><strong>Und so funktioniert das:<\/strong><br \/><br \/>YunoHost bietet eine &quot;Universal-App&quot;, die als &quot;<a href=\"https:\/\/apps.yunohost.org\/app\/my_webapp\" target=\"_blank\" rel=\"nofollow noopener\">My Webapp<\/a>&quot; bezeichnet wird. Mit dieser kann eine benutzerdefinierte Webanwendung installiert werden. Sie bietet SFTP-Zugriff, bei Bedarf eine Datenbank und PHP. Es wird unter <code class=\"inline-code\">\/var\/www<\/code> ein Verzeichnis angelegt, welches \u00fcber die bei Installation gew\u00e4hlte Domain erreichbar ist.<br \/><br \/><a class=\"zrl\" href=\"https:\/\/hub.hubzilla.hu\/photos\/hz-workshop\/image\/09de6d9f-93e6-44b7-b318-880e5afb888d\" target=\"_blank\" rel=\"nofollow noopener\"><img class=\"zrl\" style=\"max-width: 100%;\" src=\"https:\/\/hub.hubzilla.hu\/photo\/09de6d9f-93e6-44b7-b318-880e5afb888d-2.png\" alt=\"hzyh01.png\" title=\"hzyh01.png\" loading=\"eager\" \/><\/a><br \/><br \/>Also der optimale Ort f\u00fcr eine Hubzilla-Installation.<br \/><br \/>Zun\u00e4chst muss man also eine entsprechende Domain in YunoHost anlegen und selbstverst\u00e4ndlich auch ein Zertifikat erstellen (Let's Encrypt). Das funktioniert genau so, wie f\u00fcr die &quot;normale&quot; Hubzilla-Installation z.B. mit der Verwaltungsoberfl\u00e4che von YunoHost.<br \/><br \/>Man w\u00e4hlt unter Applikationen \u2192 +Installieren aus dem Katalog die Anwendung &quot;My Webapp&quot;.<br \/><br \/><a class=\"zrl\" href=\"https:\/\/hub.hubzilla.hu\/photos\/hz-workshop\/image\/4f80854d-d709-4c40-8fbd-e58a6e4c3183\" target=\"_blank\" rel=\"nofollow noopener\"><img class=\"zrl\" style=\"max-width: 100%;\" src=\"https:\/\/hub.hubzilla.hu\/photo\/4f80854d-d709-4c40-8fbd-e58a6e4c3183-2.png\" alt=\"hzyh02.png\" title=\"hzyh02.png\" loading=\"eager\" \/><\/a><br \/><br \/>Nun kann man eine Bezeichnung f\u00fcr das Label der Kachel (in der YH-Oberfl\u00e4che) eingeben, die Domain\/Subdomain ausw\u00e4hlen. Beim URL-Pfad sollte man, um Probleme zu vermeiden, nur &quot;\/&quot; stehen lassen. F\u00fcr einen \u00f6ffentlichen Hub, w\u00e4hlt man im Feld &quot;Wer soll Zugriff auf diese App haben?&quot; den Eintrag &quot;Besucher&quot;.<br \/><br \/>Als PHP-Version f\u00fcr Hubzilla w\u00e4hlt man 8.2 aus und anschlie\u00dfend noch den Typ des Datenbank (MySQL oder Postgresql).<br \/><br \/>Dann startet man die Installation der Custom-Webapp.<br \/><br \/>Ist sie durchgelaufen, muss man sich per SSH am eigenen Server einloggen. Im Verzeichnis <code class=\"inline-code\">\/var\/www<\/code> findet man nun ein neues Verzeichnis&nbsp;&nbsp;<code class=\"inline-code\">my_webapp<\/code> und in diesem ein Unterverzeichnis <code class=\"inline-code\">www<\/code>. Letzteres ist das Verzeichnis, welches beim Aufruf der Domain vom Webserver geliefert wird.<br \/><br \/>Nun kann man ganz einfach nach der offiziellen Installationsanleitung Hubzilla installieren. Im Root-Verzeichnis (<code class=\"inline-code\">my_webapp\/www<\/code>) findet man eine Datei <code class=\"inline-code\">db_access.txt<\/code>, in welcher die Zugangsdaten f\u00fcr die Datenbank stehen. <strong>Wichtig: sichern!<\/strong> Die Daten (Datenbankname, Datenbanknutzer, Datenbankpasswort) ben\u00f6tigen wir f\u00fcr die Installation von Hubzilla noch.<br \/><br \/>Nun muss das Verzeichnis <code class=\"inline-code\">my_webapp\/www<\/code> geleert werden, also alle darin enthaltenen Dateien gel\u00f6scht, damit man das Hubzilla-Repo dorthin klonen kann.<br \/><br \/>Damit die Dateirechte sofort passen... und generell sowieso, empfiehlt es sich, an dieser Stelle als Benutzer &quot;my_webapp&quot; fortzufahren. Daf\u00fcr gibt man <code class=\"inline-code\">yunohost app shell my_webapp<\/code> ein.<br \/><br \/>Nun befindet man sich im Verzeichnis <code class=\"inline-code\">my_webapp<\/code>. Mit <code class=\"inline-code\">git clone https:\/\/framagit.org\/hubzilla\/core.git www<\/code> klont man das Repo an die richtige Stelle. Danach am besten sofort in das Verzeichnis <code class=\"inline-code\">www<\/code> wechseln: <code class=\"inline-code\">cd www<\/code><br \/><br \/>Es wird beim Klonen auch eine Datei <code class=\"inline-code\">.htaccess<\/code> erzeugt. Diese dient der Konfiguration des Apache Webservers. Nun nutzt YunoHost aber nginx und nicht Apache, weshalb diese Datei nicht von Bedeutung ist.<br \/><br \/>Bei der Installation von My Webapp werden Konfigurationsdateien unter <code class=\"inline-code\">\/etc\/nginx\/conf.d\/&lt;domain von my_webapp&gt;<\/code> erzeugt. Diese gen\u00fcgen aber den Anspr\u00fcchen von Hubzilla nicht. Die <code class=\"inline-code\">my_webapp.conf<\/code> muss wie folgt aussehen:<br \/><br \/><pre><code>#sub_path_only rewrite ^\/$ \/ permanent;<br \/><br \/>location \/ {<br \/>\u00a0 # Path to source<br \/>\u00a0 alias \/var\/www\/my_webapp\/www\/;<br \/>\u00a0 if (!-e $request_filename) {<br \/>\u00a0 \u00a0 rewrite ^(.*)$ \/index.php?q=$1;<br \/>\u00a0 }<br \/><br \/>\u00a0 # Default indexes and catch-all<br \/>\u00a0 index index.php;<br \/>\u00a0 charset utf-8;<br \/><br \/>\u00a0 # Common parameter to increase upload size limit in conjunction with dedicated php-fpm file<br \/>\u00a0 client_max_body_size 50M;<br \/>\u00a0 client_body_buffer_size 128k;<br \/>\u00a0 location ~* \\.php$ {<br \/>\u00a0 \u00a0 try_files $uri =404;<br \/>\u00a0 \u00a0 fastcgi_pass unix:\/var\/run\/php\/php8.2-fpm-hubzilla.sock;<br \/>\u00a0 \u00a0 fastcgi_index index.php;<br \/>\u00a0 \u00a0 include fastcgi_params;<br \/>\u00a0 \u00a0 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;<br \/>\u00a0 }<br \/><br \/>\u00a0 # make sure webfinger and other well known services aren't blocked<br \/>\u00a0 # by denying dot files and rewrite request to the front controller<br \/>\u00a0 location ^~ \/.well-known\/ {<br \/>\u00a0 \u00a0 allow all;<br \/>\u00a0 \u00a0 if (!-e $request_filename) {<br \/>\u00a0 \u00a0 \u00a0 rewrite ^(.*)$ \/index.php?q=$1;<br \/>\u00a0 \u00a0 }<br \/>\u00a0 }<br \/><br \/>\u00a0 # statically serve these file types when possible<br \/>\u00a0 # otherwise fall back to front controller<br \/>\u00a0 # allow browser to cache them<br \/>\u00a0 # added .htm for advanced source code editor library<br \/>\u00a0 # location ~* \\.(jpg|jpeg|gif|png|ico|css|js|htm|html|map|ttf|woff|woff2|svg)$ {<br \/>\u00a0 #\u00a0 expires 30d;<br \/>\u00a0 #\u00a0 try_files $uri \/index.php?q=$uri&$args;<br \/>\u00a0 # }<br \/><br \/>\u00a0 # block these file types<br \/>\u00a0 location ~* \\.(tpl|md|tgz|log|out)$ {<br \/>\u00a0 \u00a0 deny all;<br \/>\u00a0 }<br \/><br \/>\u00a0 # deny access to all dot files<br \/>\u00a0 location ~ \/\\. {<br \/>\u00a0 \u00a0 deny all;<br \/>\u00a0 }<br \/><br \/>\u00a0 #deny access to store<br \/>\u00a0 location ~ \/store {<br \/>\u00a0 \u00a0 deny all;<br \/>\u00a0 }<br \/><br \/>\u00a0 #deny access to util<br \/>\u00a0 location ~ \/util {<br \/>\u00a0 \u00a0 deny all;<br \/>\u00a0 }<br \/><br \/>\u00a0 # Include SSOWAT user panel.<br \/>\u00a0 include conf.d\/yunohost_panel.conf.inc;<br \/>}<\/code><\/pre><br \/>F\u00fcr eine Hubzilla-Installation sind innerhalb des Hubzilla-Verzeichnisses (hier also <code class=\"inline-code\">my_webapp\/www<\/code>) einige Verzeichnisse mit entsprechenden Zugriffsrechten essenziell. Sie werden eigentlich bei der Installation \u00fcber den Webbrowser angelegt (aber wohl nicht immer). Es ist aber sicherer und schadet nicht, wenn man mit <code class=\"inline-code\">cd www<\/code> ins Hubzilla-Verzeichnis wechselt und diese mit<br \/><br \/><pre><code>mkdir -p &quot;store\/[data]\/smarty3&quot;<br \/>chmod -R 777 store<\/code><\/pre><br \/>anlegt.<br \/><br \/>Um auch die Hubzilla-Addons zu installieren, muss man noch<br \/><br \/><pre><code>util\/add_addon_repo https:\/\/framagit.org\/hubzilla\/addons.git hzaddons<br \/>util\/update_addon_repo hzaddons<\/code><\/pre><br \/>eingeben.<br \/><br \/>PHP-Extensions: F\u00fcr Hubzilla ab Version 9 (aktuell) sind die PHP-Extensions sodium, gmp (oder bcmath) und intl erforderlich. Bei meiner YunoHost-installation waren sodium unf gmp vorhanden, intl hingegen fehlte.<br \/><br \/>Herausfinden, welche Extensions installiert und aktiviert sind kann man mit diesem Kommando:<br \/><br \/><code class=\"inline-code\">php -m<\/code><br \/><br \/>Mit<br \/><br \/><code class=\"inline-code\">sudo apt-get update<\/code><br \/><br \/>und<br \/><br \/><code class=\"inline-code\">sudo apt-get install php8.2-intl<\/code><br \/><br \/>ist die fehlende Extension rasch installiert.<br \/><br \/><code class=\"inline-code\">php -m | grep intl<\/code> sollte das nun auch anzeigen.<br \/><br \/>Jetzt ist der Moment gekommen, an welchem man im Webbrowser die URL der neuen Installation aufruft.<br \/><br \/>Eigentlich sollte nun alles problemlos durchlaufen (ansonsten auftretenden Fehlern ggf. gem\u00e4\u00df der offiziellen Installationsanleitung auf den Grund gehen).<br \/><br \/>Jetzt ist es erforderlich, die frisch erzeugte .htconfig.php anzuschauen und dort den Pfad zu PHP anzupassen:<br \/><br \/><pre><code>\/\/ Location of PHP command line processor<br \/>App::$config['system']['php_path'] = '\/usr\/bin\/php8.2';<\/code><\/pre><br \/>Wenn man nun noch immer als Benutzer my_webapp unterwegs ist, sollte man sich mit <code class=\"inline-code\">php -v<\/code> die aktuell genutzte PHP-Version anzeigen lassen. Es sollte die Version 8.2 angezeigt werden.<br \/><br \/><strong><u>HINWEIS:<\/u><\/strong><br \/><br \/>Der Aufruf von <code class=\"inline-code\">php<\/code> ohne Pfadangabe ruft <code class=\"inline-code\">\/usr\/bin\/php<\/code> auf. Dabei handelt es sich um einen symbolischen Link auf <code class=\"inline-code\">\/etc\/alternatives\/php<\/code>. Und dies wiederum ist ein symbolischer Link auf die im System generell verwendeten PHP-Programmdatei. Bei meiner Installation war es so, dass ich einmal eine App installiert hatte, die zwingend php7.4 ben\u00f6tigte. YunoHost hatte deshalb das <code class=\"inline-code\">php<\/code> unter <code class=\"inline-code\">\/etc\/alternatives<\/code> auf <code class=\"inline-code\">\/usr\/bin\/php7.4<\/code> verlinkt. Eigentlich sollte das in der my_webapp-Umgebung aber kein Problem sein und auf php8.2 (wie bei Installation gew\u00e4hlt) verweisen. Bei mir war das anfangs aber nicht so (inzwischen schon, weshalb auch immer).<br \/><br \/>Um das zu &quot;reparieren&quot;, habe ich den symbolischen Link <code class=\"inline-code\">\/etc\/alternatives\/php<\/code> auf <code class=\"inline-code\">\/usr\/bin\/php8.2<\/code> umgebogen.<br \/><br \/>Das ist erforderlich, weil die PHP-Skripte aus util per shebang den Interpreter via <code class=\"inline-code\">#!\/usr\/bin\/env php<\/code> aufrufen und damit auf den Eintrag in<br \/><code class=\"inline-code\">\/etc\/alternatives<\/code> zur\u00fcckgreifen. Bei der Verwendung von Skripten aus util kommt es, wenn dieser auf php7.4 verweist, zum Programmabbruch mit der Fehlermeldung, dass eine zu alte PHP-Version verwendet wird.<br \/><br \/>Jetzt folgt noch ein weiterer, sehr wichtiger Schritt: das Anlegen eines Cronjobs f\u00fcr wichtige Hintergrunddienste.<br \/><br \/>Hierf\u00fcr ruft man <code class=\"inline-code\">crontab -e<\/code> auf und f\u00fcgt die Zeile <code class=\"inline-code\">*\/10 * * * * cd \/var\/www\/my_webapp\/www; \/usr\/bin\/php8.2 Zotlabs\/Daemon\/Master.php Cron &gt; \/dev\/null 2&gt;&amp;1<\/code> zu.<br \/><br \/>Und nun sollte die Hubzilla-Installation unter YunoHost ordentlich laufen. Der Rest sollte bekannt sein (als erstes einen Account mit der zuvor angegebenen Mailadresse registrieren... das ist der Admin-Account) und dann einfach &quot;benutzen&quot;. ;-)<br \/><br \/><hr \/><br \/><br \/><strong>WICHTIGER HINWEIS ZU UPDATES VON YUNOHOST:<\/strong><br \/>Zumindest beim letzten Update der verwendeten my_webapp auf Version 1.0-ynh18, ich vermute aber auch bei jedem folgenden, wird die nginx-Konfigurationsdatei in \/etc\/nginx\/conf.d\/deinedomain.d\/my_webapp.conf mit Standardeinstellungen \u00fcberschrieben, was dazu f\u00fchrt, dass Hubzilla nicht mehr funktioniert.<br \/><br \/>Deshalb ist es sinnvoll, diese Konfigurationsdatei in einem separaten Backupverzeichnis auf dem Server vorzuhalten und die aktualisierte Datei damit zu \u00fcberschreiben. Alternativ kann man sie auch aus der automatisch beim Update angelegten Backup-Datei von YunoHost extrahieren und sie wieder in o.g. Verzeichnis kopieren (\u00fcberschreiben).<\/div><\/div><br \/><\/div>","width":640,"height":426}