Inhalt
Handbuch für Administratoren
Hubzilla ist mehr als eine einfache Webanwendung. Es handelt sich um ein komplexes Kommunikationssystem, das eher einem E-Mail-Server als einem Webserver ähnelt. Aus Gründen der Zuverlässigkeit und Leistung werden Nachrichten im Hintergrund zugestellt und für eine spätere Zustellung in eine Warteschlange gestellt, wenn Websites nicht erreichbar sind. Diese Art von Funktionalität erfordert etwas mehr vom Hostsystem als der typische Blog. Nicht jeder PHP/MySQL-Hosting-Anbieter ist in der Lage, Hubzilla zu unterstützen. Viele können es, aber bitte prüfen Sie die Anforderungen und bestätigen Sie diese mit Ihrem Hosting-Anbieter vor der Installation.
Wir haben uns sehr bemüht, sicherzustellen, dass Hubzilla auf Standard-Hosting-Plattformen läuft, wie sie für Wordpress-Blogs und Drupal-Websites verwendet werden. Es läuft auf den meisten Linux-Systemen.
Wo Sie weitere Hilfe finden
Wenn Sie auf Probleme stoßen oder Fragen haben, die in dieser Dokumentation nicht behandelt werden, lassen Sie es uns bitte über den Issue Tracker wissen. Bitte beschreiben Sie Ihre Betriebsumgebung so genau wie möglich und geben Sie so viele Details wie möglich zu den Fehlermeldungen an, die Sie sehen, damit wir diese in Zukunft vermeiden können. Aufgrund der großen Vielfalt an Betriebssystemen und PHP-Plattformen haben wir nur begrenzte Möglichkeiten, Ihre PHP-Installation zu debuggen oder fehlende Module zu beschaffen, aber wir werden unser Bestes tun, um allgemeine Code-Probleme zu lösen.
Bevor Sie beginnen
Wählen Sie einen Domänennamen oder einen Subdomänennamen für Ihren Server.
Die Software kann nur im Stammverzeichnis einer Domäne oder Subdomäne installiert werden und kann nicht über alternative TCP-Ports installiert werden. Diese Beschränkungen können in Zukunft gelockert werden, sind aber unbequem, so dass wir Ihnen weiterhin DRINGEND empfehlen, sich daran zu halten.
Entscheiden Sie, ob Sie SSL verwenden wollen, und besorgen Sie sich vor der Softwareinstallation ein SSL-Zertifikat. Sie SOLLTEN SSL verwenden. Wenn Sie SSL verwenden, MÜSSEN Sie ein „browsergültiges“ Zertifikat verwenden. Sie KÖNNEN KEINE selbstsignierten Zertifikate verwenden!
Bitte testen Sie Ihr Zertifikat vor der Installation. Ein Webtool zum Testen Ihres Zertifikats finden Sie unter „http://www.digicert.com/help/“. Wenn Sie Ihre Website zum ersten Mal besuchen, verwenden Sie bitte die SSL-URL („https://“), wenn SSL verfügbar ist. Dadurch werden spätere Probleme vermieden. Die Installationsroutine erlaubt es Ihnen nicht, ein nicht browsergültiges Zertifikat zu verwenden.
Diese Einschränkung wird vorgenommen, weil öffentliche Beiträge von Ihnen Verweise auf Bilder in Ihrem eigenen Hub enthalten können. Andere Mitglieder, die ihren Stream auf anderen Hubs betrachten, erhalten Warnungen, wenn Ihr Zertifikat von ihrem Webbrowser nicht als vertrauenswürdig eingestuft wird. Dies wird viele Leute verwirren, da es sich um ein dezentralisiertes Netzwerk handelt, und sie werden die Warnung über Ihren Hub erhalten, während sie ihren eigenen Hub ansehen, und könnten denken, dass ihr eigener Hub ein Problem hat. Diese Warnungen sind sehr technisch und beängstigend für einige Leute, von denen viele nicht wissen, wie sie weiter vorgehen sollen, außer den Ratschlägen des Browsers zu folgen. Das ist für die Gemeinschaft störend. Abgesehen davon erkennen wir die Probleme im Zusammenhang mit der derzeitigen Zertifikatsinfrastruktur an und stimmen zu, dass es viele Probleme gibt, aber das ändert nichts an der Anforderung.
Kostenlose „browsergültige“ Zertifikate gibt es von Anbietern wie ZeroSSL, LetsEncrypt und einigen anderen.
Wenn Sie NICHT SSL verwenden, kann es beim ersten Installationsskript zu einer Verzögerung von bis zu einer Minute kommen - während wir den SSL-Port überprüfen, um zu sehen, ob dort etwas antwortet. Bei der Kommunikation mit neuen Sites versucht Hubzilla immer zuerst eine Verbindung über den SSL-Port herzustellen, bevor es auf eine weniger sichere Verbindung zurückgreift. Wenn Sie kein SSL verwenden, MUSS Ihr Webserver überhaupt nicht auf Port 443 lauschen.
Wenn Sie LetsEncrypt für die Bereitstellung von Zertifikaten verwenden und eine Datei unter .well-known/acme-challenge erstellen, damit LetsEncrypt Ihre Domaineigentümerschaft überprüfen kann, entfernen Sie bitte das Verzeichnis .well-known oder benennen Sie es um, sobald das Zertifikat generiert wurde. Die Software stellt bei der Installation einen eigenen Handler für „.well-known“-Dienste zur Verfügung, und ein bestehendes Verzeichnis an diesem Ort kann verhindern, dass einige dieser Dienste korrekt funktionieren. Dies sollte bei Apache kein Problem sein, kann aber bei nginx oder anderen Webserver-Plattformen ein Problem darstellen.
Installation
Es gibt mehrere Möglichkeiten, einen neuen Hub zu installieren.
- Manuelle Installation auf einem bestehenden Server
- Automatisierte Installation auf einem bestehenden Server mit einem Shell-Skript
- Automatisierte Bereitstellung über einen OpenShift Virtual Private Server (VPS)
- Verwendung eines Docker-Containers
Automatisierte Installation über das Shell-Skript .homeinstall
Es gibt ein Shell-Skript in (.homeinstall/hubzilla-setup.sh
), das Hubzilla und seine Abhängigkeiten auf einer frischen Installation von Debian stable installiert. Es sollte auf ähnlichen Linux-Systemen funktionieren, aber Ihre Ergebnisse können variieren.
Anforderungen
Das Installationsskript wurde ursprünglich für einen kleinen Hardwareserver hinter Ihrem Heimrouter entwickelt. Es wurde jedoch auf mehreren Systemen mit Debian 9 getestet:
- Home-PC (Debian-9.2-amd64) und Rapberry-Pi 3 (Rasbian = Debian 9.3)
- Internetanschluss und Router zu Hause
- Mini-PC / Raspi an den Router angeschlossen
- USB-Laufwerk für Backups
- Frische Installation von Debian auf Ihrem Mini-PC
- Router mit offenen Ports 80 und 443 für Ihr Debian
Überblick über die Installationsschritte
apt-get install git
mkdir -p /var/www/html
cd /var/www/html
git clone https://framagit.org/hubzilla/core.git .
nano .homeeinstall/hubzilla-config.txt
cd .homeeinstall/
./hubzilla-setup.sh
service apache2 neu laden
- Öffnen Sie Ihre Domain mit einem Browser und gehen Sie durch die anfängliche Konfiguration von Hubzilla.
Installation mittels Docker
Es besteht die Möglichkeit, Hubzilla komfortabel und bequem als Docker-Container zu installieren. Dafür bietet Saiwal (sk@hub.utsukta.org) ein vorkonfigurierte Umgebung für einen Hubzilla-Container an.
Hauptfeatures sind:
- Einfache Bereitstellung: Verwenden Sie Docker Compose, um eine voll funktionsfähige Hubzilla-Instanz mit nur wenigen Befehlen einzurichten.
- Benutzerdefinierte Konfiguration: Passen Sie Ihre Hubzilla-Installation ganz einfach mit Umgebungsvariablen für SMTP, Datenbank und mehr an.
- Kontinuierliche Updates: Das Docker-Image ist so aufgebaut, dass es einfach aktualisiert werden kann, wenn neue Änderungen am Hubzilla-Kern oder seinen Abhängigkeiten vorgenommen werden.
- SMTP-Integration: Integrierte Unterstützung für den Versand von E-Mails mit ssmtp, wodurch die Konfiguration von E-Mail-Benachrichtigungen für Ihre Hubzilla-Instanz erleichtert wird.
Das Repository für den Container befindet sich hier: skprg/hubzilla-docker
Das Image von Grund auf neu erstellen
- Klonen Sie das Repository:
git clone https://github.com/skprg/hubzilla-docker.git
cd hubzilla-docker
- Konfigurieren Sie Ihre Umgebung: Aktualisieren Sie die Datei
docker-compose.yml
mit Ihren SMTP- und anderen Einstellungen. - Erstellen und führen Sie den Container aus:
docker-compose up --build -d
Vorgefertigtes Image verwenden
- Ersetzen Sie die folgenden Zeilen in
docker-compose.yml
build:
context: .
Dockerfile: Dockerfile
mit
image: ghcr.io/skprg/hubzilla-docker:latest
- Starten Sie den Container:
docker compose up -d
Greifen Sie auf Ihre Hubzilla-Instanz zu: Navigieren Sie zu http://localhost (oder der entsprechenden URL), um Ihre Hubzilla-Instanz anzuzeigen.
Weitere Hinweise / Update / Tipps
Weitere Hinweise, Upgrade-Anweisungen und Tipps finden Sie im oben verlinkten Repository.
Probleme nach einer Aktualisierung
Gut 90 % aller Fehler, die unmittelbar nach der Aktualisierung des Codes auf die neueste Version auftreten, sind einfache Cache-Fehler der einen oder anderen Art. Wenn Sie ein Update durchführen und feststellen, dass etwas sehr Offensichtliches kaputt ist - z. B. dass Ihre Matrix-Seite nicht geladen wird, dass Benachrichtigungen fehlen oder dass Kommentarboxen fehlen - dann ist es wahrscheinlich gar kein Fehler. Das Brechen grundlegender Funktionen ist die Art von Dingen, die Entwickler eher bemerken. Wenn Ihnen das passiert, können Sie einige einfache Schritte unternehmen, bevor Sie sich an die Support-Foren wenden:
Browser-Cache Symptome: Menüs lassen sich nicht ausklappen, die ACL-Auswahl öffnet sich nicht, die Fortschrittsanzeige wird nicht angezeigt (oder läuft in einer Endlosschleife), Matrix- und Kanalseiten werden nicht geladen. Erzwingen Sie das Neuladen der Seite. Gelegentlich, aber sehr, sehr selten, müssen Sie auch die Sitzungsdaten löschen, was durch einen Neustart des Browsers erreicht wird.
FastCGI Symptome: Falsche Variablen. Die grundlegende Benutzeroberfläche funktioniert meistens, zeigt aber falsche Inhalte an oder es fehlen ganz Inhalte. Wenn Sie php-fpm verwenden, lässt sich dieses Problem in der Regel beheben mit
service php-fpm neu starten
Smarty-Cache Die Symptome:
- Weißer Bildschirm des Todes. Dies tritt vor allem auf den Einstellungs- und Verwaltungsseiten auf.
- Fehlende Icons, Registerkarten, Menüs oder Funktionen.
Wir verwenden die Smarty3-Vorlagen-Engine, um Seiten zu generieren. Diese Vorlagen werden kompiliert, bevor sie angezeigt werden. Es kann vorkommen, dass eine neue oder geänderte Vorlage die alte kompilierte Version nicht überschreibt. Um den Smarty-Cache zu löschen, löschen Sie alle Dateien in store/[data]/smarty3/compiled **, aber nicht das Verzeichnis selbst**. Die Vorlagen werden dann bei ihrem nächsten Zugriff neu kompiliert.
Theme-Probleme Es gibt viele Themes für Hubzilla. Nur Redbasic wird offiziell von den Kernentwicklern unterstützt. Dies gilt auch dann, wenn ein Kernentwickler zufällig ein weiteres Theme unterstützt. Das bedeutet, dass neue Funktionen garantiert nur in Redbasic funktionieren.
Redbasic verwendet einige Javascript-Bibliotheken, die in anderen Themes anders oder gar nicht verwendet werden. Dies bedeutet, dass neue Funktionen möglicherweise nur in Redbasic richtig funktionieren. Bevor Sie ein Problem melden, sollten Sie daher zu Redbasic wechseln, um zu sehen, ob das Problem dort existiert. Wenn das Problem verschwindet, handelt es sich nicht um einen Fehler, sondern um ein Theme, das nicht auf dem neuesten Stand ist.
Sollten Sie das Problem dann den Theme-Entwicklern melden? Nein. Theme-Entwickler verwenden ihre Themes. Die Chancen stehen gut, dass sie es wissen. Geben Sie ihnen zwei oder drei Tage Zeit, um sich auf den neuesten Stand zu bringen, und melden Sie das Problem, wenn es dann immer noch nicht behoben ist. Für diese Situation gibt es zwei Lösungsmöglichkeiten. Erstens können Sie vorübergehend Redbasic verwenden. Zweitens sind die meisten Themes auch Open Source - öffnen Sie einen Pull Request und machen Sie sich einen Freund.
Föderations Addons
Verschiedene Web-Communities haben begonnen, sich unter Verwendung gemeinsamer Protokolle zusammenzuschließen. Die beteiligten Protokolle sind in ihren Möglichkeiten etwas eingeschränkt. Das Diaspora-Protokoll ist etwas restriktiv, was die erlaubten Kommunikationsarten angeht. Alle Kommentare müssen vom ursprünglichen Autor auf eine sehr eindeutige Weise signiert werden. Das ActivityPub-Protokoll wird ebenfalls unterstützt. Kein anderes existierendes Protokoll unterstützt nomadische Standorte (es gibt inzwischen die Unterstützung nomadischer Identitäten bei ActivityPub), wie sie in diesem Projekt verwendet werden. Dies stellt einige Herausforderungen an die Unterstützung, da einige Funktionen mit einigen Netzen funktionieren und mit anderen nicht. Nichtsdestotrotz ermöglichen die Föderationsprotokolle die Herstellung von Verbindungen zu einer viel größeren Gemeinschaft von Menschen weltweit. Sie werden als Addons bereitgestellt.
- Diaspora Protocol - Das Diaspora-Protokoll wird von Diaspora und Friendica verwendet. Sie sollten zuerst 'Diaspora Statistics' (Statistiken) aktivieren, um alle verfügbaren Funktionen zu nutzen.
- PubCrawl - Das ActivityPub-Protokoll, das von Mastodon, MIsskey, Friendica und allen Fediverse-Diensten unterstützt wird.
Jedes Mitglied Ihrer Website muss selbst entscheiden, ob es diese Protokolle zulassen will oder nicht, da sie mit einigen wünschenswerten Kernfunktionen und Fähigkeiten dieser Software (wie z.B. Channel-Migration und Klonen) in Konflikt geraten können. Sie tun dies auf ihrer Seite „Einstellungen -> Feature/Addon-Einstellungen“.
Service-Klassen
Mit Hilfe von Dienstklassen können Sie die Systemressourcen begrenzen, indem Sie die Möglichkeiten einzelner Konten einschränken, z. B. die Speicherung von Dateien und die Begrenzung von Posts auf der obersten Ebene. Definieren Sie benutzerdefinierte Serviceklassen entsprechend Ihren Anforderungen in der Datei .htconfig.php
. Erstellen Sie zum Beispiel eine Standard- und eine Premiumklasse mit den folgenden Zeilen:
// Dienstklassen
App::$config['system']['default_service_class']='standard'; // dies ist die Standard-Serviceklasse, die mit jedem neuen Konto verbunden wird
// Konfiguration für die Standard-Serviceklasse
App::$config['service_class']['standard'] =
array('photo_upload_limit'=>2097152, // Gesamtspeichergrenze für Fotos pro Kanal (hier 2MB)
'total_identities' =>1, // Anzahl der Kanäle, die ein Konto erstellen kann
'total_items' =>0, // Anzahl der Beiträge der obersten Ebene, die ein Kanal erstellen kann. Gilt nur für Top-Level-Posts des Channel-Benutzers, andere Posts und Kommentare sind davon nicht betroffen
'total_pages' =>100, // Anzahl der Seiten, die ein Channel erstellen kann
'total_channels' =>100, // Anzahl der Channels, die der Benutzer hinzufügen kann, andere Benutzer können diesen Channel immer noch hinzufügen, auch wenn das Limit erreicht ist
attach_upload_limit' =>2097152, // Gesamtspeicherplatz für Anhänge pro Kanal (hier 2MB)
'chatters_inroom' =>20);
// Konfiguration für Premium-Dienstklasse
App::$config['service_class']['premium'] =
array('photo_upload_limit'=>20000000000, // Gesamtspeichergrenze für Fotos pro Kanal (hier 20GB)
'total_identities' =>20, // Anzahl der Kanäle, die ein Konto erstellen kann
'total_items' =>20000, // Anzahl der Beiträge der obersten Ebene, die ein Kanal erstellen kann. Gilt nur für Beiträge der obersten Ebene des Kanalbenutzers, andere Beiträge und Kommentare sind davon nicht betroffen
'total_pages' =>400, // Anzahl der Seiten, die ein Channel erstellen kann
'total_channels' =>2000, // Anzahl der Channels, die der Nutzer hinzufügen kann, andere Nutzer können diesen Channel immer noch hinzufügen, auch wenn das Limit erreicht ist
attach_upload_limit' =>20000000000, // Gesamtspeicherplatz für Anhänge pro Kanal (hier 20GB)
'chatters_inroom' =>100);
Um eine Serviceklasse auf ein bestehendes Konto anzuwenden, verwenden Sie das Befehlszeilendienstprogramm aus dem Web-Root:
util/service_class
list service classes
util/config system default_service_class firstclass
setzt die Standarddienstklasse auf 'firstclass'
util/service_class firstclass
listet die Dienste auf, die Teil der Dienstklasse „firstclass“ sind
util/service_class firstclass photo_upload_limit 10000000
setzt die gesamte Fotoplattennutzung der firstclass auf 10 Millionen Bytes
util/service_class --account=5 firstclass
setzt die Konto-ID 5 auf die Serviceklasse 'firstclass' (mit Bestätigung)
util/service_class --channel=blogchan firstclass
setzt das Konto, dem der Kanal „blogchan“ gehört, auf die Serviceklasse „firstclass“ (mit Bestätigung)
Optionen zur Begrenzung der Dienstklasse
- photo_upload_limit - maximale Gesamtzahl an Bytes für Fotos
- total_items - maximale Gesamtzahl an Beiträgen auf oberster Ebene
- total_pages - maximale Anzahl von Seiten für Comanche
- total_identities - maximale Anzahl von Kanälen im Besitz des Kontos
- total_channels - maximale Anzahl von Verbindungen
- total_feeds - Maximale Anzahl von RSS-Feed-Verbindungen
- attach_upload_limit - maximaler Datei-Upload-Speicherplatz (Bytes)
- minimum_feedcheck_minutes - niedrigste zulässige Einstellung für die Abfrage von RSS-Feeds
- chatrooms - maximale Anzahl von Chaträumen
- chatters_inroom - maximale Anzahl Chatter pro Raum
- access_tokens - maximale Anzahl von Gastzugangstoken pro Kanal
Verwaltung der Themen
Beispiel für die Repo-Verwaltung
Navigieren Sie zu Ihrem Hub-Web rootroot@hub
:/root# cd /var/www
Fügen Sie das Theme-Repo hinzu und geben Sie ihm einen nameroot@hub
:/var/www# util/add_theme_repo https://github.com/DeadSuperHero/redmatrix-themes.git DeadSuperHero
Erstellen von Seitenvorlagen
Für eine Seitenvorlage zur Verwendung mit Comanche sind zwei Dateien erforderlich - eine PHP-Vorlage und eine CSS-Datei. Die Seitenvorlagen müssen vom Systemadministrator Ihrer Website installiert werden. Wählen Sie zunächst einen Namen. In diesem Fall werden wir eine Vorlage erstellen und sie „demo“ nennen. Sie müssen die Dateien „view/php/demo.php“ und „view/css/demo.css“ erstellen, um die PHP-Vorlage bzw. das CSS zu speichern. Um eine bessere Vorstellung von diesem Prozess zu bekommen, schauen wir uns eine bestehende Vorlage an - die „Standard“-Vorlage. Diese wird standardmäßig in der gesamten Anwendung verwendet.
view/php/default.php
<!DOCTYPE html >
<html>
<head>
<title><?php if(x($page,'title')) echo $page['title'] ?></title>
<script>var baseurl=„<?php echo z_root() ?>“;</script>
<?php if(x($page,'htmlhead')) echo $page['htmlhead'] ?>
</head>
<body>
<?php if(x($page,'nav')) echo $page['nav']; ?>
<aside id=„region_1“><?php if(x($page,'aside')) echo $page['aside']; ?></aside>
<section id=„region_2“><?php if(x($page,'content')) echo $page['content']; ?>
<div id=„page-footer“></div>
<div id=„pause“></div>
</abschnitt>
<aside id=„region_3“><?php if(x($page,'right_aside')) echo $page['right_aside']; ?></aside>
<footer><?php if(x($page,'footer')) echo $page['footer']; ?></footer>
</body>
</html>
Hier ist die entsprechende CSS-Datei
view/php/default.css
aside#region_1 {
Anzeige: block;
Breite: 210px;
Position: absolut;
oben: 65px;
links: 0;
margin-left: 10px;
}
beiseite input[type='text'] {
Breite: 174px;
}
section {
Position: absolut;
top: 65px;
links: 250px;
Anzeige: block;
rechts: 15px;
padding-bottom: 350px;
}
Wenn Sie sich diese Definitionen ansehen, fallen Ihnen vielleicht einige Dinge auf:
- Wir haben kein CSS für die Bereiche „nav“, „right_aside“ oder „footer“ angegeben. In dieser Vorlage werden „nav“ und „footer“ die volle Seitenbreite einnehmen, und wir lassen die Größe und Platzierung dieser Elemente durch das Thema steuern. „right_aside“ wird derzeit nicht verwendet.
- Es gibt Elemente auf der Seite wie „page-footer“ und „pause“, für die es keinen sichtbaren Inhalt gibt. Dieser Inhalt wird von Javascript-Elementen stammen.
- Unsere Standardvorlage verwendet eine absolute Positionierung. Modernes Webdesign verwendet häufig „float“-Div-Container, so dass bei der Anzeige auf Geräten mit kleinen Bildschirmen in der Regel keine Bildlaufleisten erforderlich sind.
Um eine neue Vorlage zu entwerfen, ist es am besten, mit einer bestehenden Vorlage zu beginnen und sie nach Wunsch zu ändern. Genau das werden wir hier tun. Die Art und Weise, wie Comanche Inhalte innerhalb einer bestimmten Region bereitstellt, ist die Verwendung eines Region-Tags.
[region=aside][widget=profile][/widget][/region]
In diesem Beispiel wird ein „Profil“-Widget in der Region „aside“ platziert. In Wirklichkeit wird jedoch der HTML-Code für das Widget in der Code-Variablen $page['aside'] abgelegt. Unsere Standardseitenvorlage definiert einen Bereich auf der Seite (das CSS positioniert diesen als absolute Seitenleiste) und fügt dann den Inhalt von $page['aside'] ein (falls vorhanden). Wenn Sie also eine Vorlage mit einem Bereich namens „foo“ erstellen wollten, würden Sie einen Platz dafür auf der Seite vorsehen, dann den Inhalt von $page['foo'] dort einfügen, wo Sie ihn verwenden wollen, und dann mit Comanche angeben
[region=foo][widget=profile][/widget][/region]
und dies würde ein Profil-Widget in der von Ihnen erstellten „foo“-Region platzieren. Verwenden Sie die CSS-Datei, um den Bereich an der gewünschten Stelle auf der Seite zu positionieren und optional seine Größe zu steuern.
Hubzilla-Entwicklung - ein Leitfaden für das Schemasystem
Ein Schema ist, kurz gesagt, eine Sammlung von Einstellungen für eine Reihe von Variablen, die bestimmte Elemente eines Themes definieren. Ein Schema wird so geladen, als wäre es Teil der config.php und hat Zugang zu allen Informationen. Das bedeutet, dass es identitätsbewusst ist und für einige interessante Dinge verwendet werden kann. Man könnte z. B. die Optionen nach Dienstklassen einschränken oder verschiedenen Mitgliedern unterschiedliche Optionen anbieten.
Standardmäßig filtern wir nur danach, ob der Expertenmodus aktiviert ist oder nicht. Wenn der Expertenmodus aktiviert ist, werden dem Mitglied alle Optionen angezeigt. Ist dies nicht der Fall, stehen nur Schema, Hintergrundbild, Schriftart und Iconset zur Auswahl.
Ein Schema wird erst nach den persönlichen Einstellungen des Mitglieds geladen. Um einem Mitglied die Möglichkeit zu geben, einen bestimmten Aspekt eines Schemas zu überschreiben, würden Sie daher die folgende Syntax verwenden:
if (! $foo)
$foo = 'bar';
Es gibt jedoch Umstände - insbesondere bei positionalen Elementen -, unter denen es wünschenswert (oder notwendig) sein kann, die Einstellungen eines Mitglieds zu überschreiben. In diesem Fall ist die Syntax noch einfacher:
$foo = 'bar';
Die Mitglieder werden Ihnen dies jedoch nicht danken, also verwenden Sie es nur, wenn es erforderlich ist. Wenn keine persönlichen Optionen eingestellt sind und kein Schema ausgewählt ist, wird zunächst versucht, ein Schema mit dem Dateinamen „default.php“ zu laden. Diese Datei sollte niemals in ein Thema eingebunden werden. Wenn dies der Fall ist, wird es zu Konflikten kommen, wenn andere ihren Code aktualisieren. Vielmehr sollte dies von den Administratoren für jede Seite einzeln festgelegt werden. default.php und default.css MÜSSEN Symlinks zu bestehenden Schemadateien sein.
Ihr Schema muss - und sollte - nicht alle diese Werte enthalten. Nur die Werte, die von den Standardwerten abweichen, sollten aufgeführt werden. Dies gibt Ihnen einige sehr mächtige Optionen mit sehr wenigen Zeilen Code.
Beachten Sie, dass die verfügbaren Optionen von Thema zu Thema unterschiedlich sind. Für das Redbasic-Theme sind folgende Optionen verfügbar:
- nav_colour Die Farbe der Navigationsleiste. Die Optionen sind rot, schwarz und silber. Alternativ kann man $nav_bg_1, $nav_bg_2, $nav_bg_3 und $nav_bg_4 einstellen, um Farbverläufe und Hover-Effekte zu erzielen.
- banner_colour Die Schriftfarbe des Bannerelements. Akzeptiert einen RGB- oder Hex-Wert.
- bgcolour Legt die Hintergrundfarbe des Körpers fest. Akzeptiert einen RGB- oder Hex-Wert.
- background_image Legt ein Hintergrundbild fest. Akzeptiert eine URL oder einen Pfad.
- item_colour Legt die Hintergrundfarbe von Elementen fest. Akzeptiert einen RGB- oder Hex-Wert.
- item_opacity Legt die Deckkraft der Elemente fest. Akzeptiert einen Wert von 0,01 bis 1
- toolicon_colour Legt die Farbe der Werkzeugsymbole fest. Akzeptiert einen RGB- oder Hex-Wert.
- toolicon_activecolour Legt die Farbe der aktiven oder mit dem Mauszeiger gehaltenen Werkzeugsymbole fest.
- font_size Legt die Größe der Schriftarten in Artikeln und Beiträgen fest. Akzeptiert px oder em.
- body_font_size Legt die Größe der Schriftarten auf der Body-Ebene fest. Akzeptiert px oder em.
- font_colour Legt die Farbe der Schrift fest. Akzeptiert einen RGB- oder Hex-Wert.
- radius Legt den Radius der Ecken fest. Akzeptiert einen Zahlenwert und ist immer in px.
- shadow Legt die Größe der Schatten fest, die bei Inline-Bildern angezeigt werden. Akzeptiert einen numerischen Wert. Hinweis: Schatten werden nicht auf Smileys angewendet.
- converse_width Legt die maximale Breite des Inhaltsbereichs in px fest.
- nav_min_opacity
- top_photo
- antwort_foto
Wenn eine Datei your_schema_name.css gefunden wird, wird der Inhalt dieser Datei an das Ende von style.css angehängt. Dies gibt dem Schema-Entwickler die Möglichkeit, jede Style-Komponente zu überschreiben.
Grundlegende Widgets
Einige/viele dieser Widgets haben Einschränkungen, die die Art der Seite, auf der sie erscheinen können, einschränken oder eine Anmeldung erfordern können
- clock - zeigt die aktuelle Zeit an
- args: military (1 oder 0) - verwendet 24-Stunden-Zeit anstelle von AM/PM
- profile - zeigt eine Profil-Seitenleiste auf Seiten an, die Profile laden (Seiten mit Nickname in der URL)
- tagcloud - zeigt eine Tagcloud von Webseiten-Elementen an
- args: count - Anzahl der Elemente, die zurückgegeben werden sollen (Standardwert 24)
- collections - Auswahl der Privatsphärengruppe für den aktuell eingeloggten Kanal
- args: mode - eine der Optionen „conversation“, „group“, „abook“ je nach Modul
- suggestions - Freundesvorschläge für den aktuell angemeldeten Kanal
- follow - zeigt ein Textfeld zum Folgen eines anderen Channels an
- notes - privater Notizbereich für den aktuell eingeloggten Kanal, wenn die Funktion private_notes aktiviert ist
- savedsearch - Netzwerk-/Matrixsuche mit Speicherung - muss eingeloggt und die savedsearch-Funktion aktiviert sein
- filer - Auswahl abgelegter Elemente aus dem Netzwerk/Matrix-Stream - muss eingeloggt sein
- archive - Datumsbereichswähler für Netzwerk- und Kanalseiten
- args: 'wall' - 1 oder 0, Begrenzung auf Wall-Posts oder Netzwerk-/Matrix-Posts (Standard)
- fullprofile - wie das aktuelle Profil
- categories - Kategorien-Filter (Channel-Seite)
- tagcloud_wall - Tagcloud nur für Channelseite
- args: 'limit' - Anzahl der Tags, die zurückgegeben werden sollen (Standardwert 50)
- catcloud_wall - Tagcloud für die Kategorien der Kanalseite
- args: 'limit' - Anzahl der zurückzugebenden Kategorien (Standardwert 50)
- affinity - Affinitäts-Schieberegler für die Netzwerk-Seite - muss eingeloggt sein
- settings_menu - Seitenleistenmenü für die Einstellungsseite, muss eingeloggt sein
- mailmenu - Seitenleistenmenü für die Seite mit den privaten Nachrichten - muss eingeloggt sein
- design_tools - Menü für Design-Tools für Seiten zur Erstellung von Webseiten, muss eingeloggt sein
- findpeople - Werkzeuge, um andere Kanäle zu finden
- photo_albums - Liste der Fotoalben des aktuellen Seitenbesitzers mit einem Auswahlmenü
- vcard - Mini-Profil-Seitenleiste für die Person von Interesse (Seitenbesitzer, was auch immer)
- dirsafemode - Werkzeug zur Verzeichnisauswahl - nur auf Verzeichnisseiten
- dirsort - Werkzeug zur Verzeichnisauswahl - nur auf Verzeichnisseiten
- dirtags - Verzeichnis-Werkzeug - nur auf Verzeichnisseiten
- menu_preview - Vorschau eines Menüs - nur auf Menübearbeitungsseiten
- chatroom_list - Liste der Chaträume für den Seitenbesitzer
- bookmarkedchats - Liste der Chaträume mit Lesezeichen, die auf dieser Seite für den aktuellen Betrachter gesammelt wurden
- suggestedchats - „interessante“ Chaträume für den aktuellen Betrachter ausgewählt
- item - zeigt ein einzelnes Webpage-Element nach Mitte oder Seitentitel an
- args:
- channel_id - Kanal, dem der Inhalt gehört, Standard ist die profile_uid
- mid - message_id der anzuzeigenden Webseite (muss eine Webseite sein, kein Konversationselement)
- title - URL-Seitentitel der Webseite (muss entweder title oder mid enthalten)
- photo - Anzeige eines einzelnen Fotos
- args:
- src - URL des Fotos, muss http oder https sein
- zrl - zid-authentifizierter Link verwenden
- style - CSS-Style-String
cover_photo - zeigt das Titelbild für den ausgewählten Kanal an
- args:
- channel_id - zu verwendender Kanal, Standard ist die profile_uid
- style - CSS-Style-String (standardmäßig wird die Größe dynamisch an die Breite des Bereichs angepasst)
photo_rand - zeigt ein zufälliges Foto aus einem Ihrer Fotoalben an. Fotoberechtigungen werden beachtet
- args:
- album - Name des Albums (sehr zu empfehlen, wenn Sie viele Fotos haben)
- scale - typischerweise 0 (Originalgröße), 1 (1024px), 2, (640px) oder 3 (320px)
- style - CSS-Style-String
- channel_id - wenn nicht Ihre eigene
- random_block - zeigt ein zufälliges Blockelement aus Ihrer Sammlung von Webpage Design Tools an. Erlaubnisse werden beachtet.
- args:
- contains - gibt nur Blöcke zurück, die den String contains im Blocknamen enthalten
- channel_id - wenn nicht Ihre eigene
- tasklist - liefert eine Aufgaben- oder To-Do-Liste für den aktuell eingeloggten Channel.
- args:
- all - zeigt erledigte Aufgaben an, wenn all ungleich Null ist.
- forums - liefert eine Liste der verbundenen öffentlichen Foren mit ungesehenen Beiträgen für den aktuell eingeloggten Channel.
- activity - liefert eine Liste der Autoren von ungelesenen Netzwerkinhalten für den aktuell eingeloggten Channel.
- album - stellt ein Widget zur Verfügung, das ein komplettes Fotoalbum aus den Alben des Seitenbesitzers enthält; dies kann zu groß sein, um in einem Seitenleistenbereich dargestellt zu werden, und wird am besten als Widget für einen Inhaltsbereich implementiert.
- args:
- album - Name des Albums
- title - optionaler Titel, wenn nicht vorhanden wird der Albumname verwendet
Neue Widgets erstellen
Klassen-Widgets
Um ein klassenbasiertes Widget namens 'slugfish' zu erstellen, erstellen Sie eine Datei mit folgendem Inhalt:
<?php
namespace Zotlabs\Widget;
class Slugfish {
function widget($args) {
... der Widget-Code kommt hier hin.
... Die Funktion gibt einen String zurück, der den HTML-Inhalt des Widgets darstellt.
... $args ist ein benanntes Array, dem alle [var]-Variablen aus dem Layout-Editor übergeben werden
... Zum Beispiel füllt [widget=slugfish][var=count]3[/var][/widget] $args mit
... [ 'count' => 3 ]
}
}
?>
Die resultierende Datei kann in Zotlabs/Widgets/Slugfish.php abgelegt werden. Sie kann auch von einem Git-Repository mit util/add_widget_repo verlinkt werden.
Kanal-Verzeichnis
Schlüsselwörter
Es gibt eine „Schlagwortwolke“ mit Schlüsselwörtern, die auf der Kanalverzeichnisseite erscheinen können. Wenn Sie diese Schlüsselwörter, die vom Verzeichnisserver bezogen werden, ausblenden möchten, können Sie das Konfigurationswerkzeug verwenden:
util/config system disable_directory_keywords 1
Wenn sich Ihr Hub im Standalone-Modus befindet, weil Sie sich nicht mit dem globalen Netz verbinden möchten, können Sie stattdessen sicherstellen, dass die Option directory_server system leer ist:
util/config system directory_server „“
Primäres Verzeichnis
Standardmäßig verwendet Hubzilla verfügbare Verzeichnisse im Internet, die Ihnen weltweit verfügbare Kanäle anzeigen.
Es gibt bestimmte Szenarien, in denen Sie Ihren eigenen Verzeichnis-Server benötigen, mit dem Sie mehrere Hubs verbinden können. Dadurch werden die Kanäle, die in allen Ihren Hubs erscheinen, auf die Kanäle der Hubs beschränkt, die mit Ihrem Verzeichnis-Server verbunden sind.
Anleitungen zum Einrichten eines Hubs als primäres Verzeichnis für eine Reihe von privaten Hubs.
- Öffnen Sie auf dem Hub, der der Directory Server sein wird, die Datei .htconfig.php und setzen Sie
App::$config['system']['directory_mode'] = DIRECTORY_MODE_PRIMARY;
Standardmäßig sollte dies bereits **DIRECTORY_MODE_NORMAL** sein, also ändern Sie diese Zeile einfach in **DIRECTORY_MODE_PRIMARY**.
Als Nächstes gehen Sie für jeden Hub (einschließlich des Verzeichnisservers) von einem Terminal aus in den Ordner, in dem er installiert ist, und führen Folgendes aus:
util/config system directory_realm YOURREALMNAME
(YOURREALMNAME kann jeder beliebige Name für Ihren Realm sein)dann:
util/config system realm_token THEPASSWORD
(THEPASSWORD ist das Passwort, das Sie für Ihren Realm verwenden möchten) HINWEIS: Verwenden Sie für jeden Hub denselben Realm-Namen und dasselbe Passwort.Führen Sie schließlich für jeden „Client“-Hub (von einem Terminal aus) aus:
util/config system directory_server https://theaddressofyourdirectoryserver.com
Wenn Sie sich nun das Verzeichnis jedes Hubs ansehen, sollten nur die Kanäle angezeigt werden, die auf den Hubs in Ihrem Realm existieren. Ich habe bisher mit zwei Hubs getestet, und es scheint gut zu funktionieren. Channels, die in jedem Hub erstellt wurden, werden im Primärverzeichnis und anschließend im Verzeichnis aller Client-Hubs angezeigt.
Probleme
Als ich den ersten Hub erstellte, lief er etwa eine Stunde lang, bevor ich ihn auf PRIMARY_MODE umstellte, und nachdem ich ihn umgestellt hatte, waren noch einige Kanäle aus der gesamten Matrix im Verzeichnis vorhanden. Ich habe sie aus der xchan-Tabelle gelöscht, und das scheint das Problem behoben zu haben.
Administration
Website-Verwaltung
Die Verwaltung der Website erfolgt in der Regel über die Verwaltungsseite, die sich unter /admin auf Ihrer Website befindet. Um auf diese Seite zugreifen zu können, müssen Sie über Verwaltungsrechte für den Server verfügen. Administrationsrechte werden dem ersten Konto gewährt, das sich auf Ihrer Website registriert, vorausgesetzt, die E-Mail-Adresse dieses Kontos stimmt genau mit der E-Mail-Adresse überein, die Sie bei der Einrichtung als E-Mail-Adresse des Administrators angegeben haben.
Es gibt mehrere Möglichkeiten, wie dies fehlschlagen und das System ohne ein Administratorkonto bleiben kann, z. B. wenn das erste Konto, das erstellt wurde, eine andere E-Mail-Adresse als die bei der Einrichtung angegebene Administrator-E-Mail-Adresse angegeben hat.
Aus Sicherheitsgründen gibt es auf dem System keine Webseite oder Schnittstelle, die Ihnen Administratorrechte verleiht. Wenn Sie eine Situation korrigieren müssen, in der ein System kein Administratorkonto hat, muss dies durch Bearbeiten der Kontotabelle in der Datenbank geschehen. Es gibt keine andere Möglichkeit. Dazu müssen Sie den Eintrag in der Kontotabelle finden, der zu dem gewünschten Administrator gehört, und „account_roles“ für diesen Eintrag auf 4096 setzen. Anschließend können Sie die Administratorseite über das Profilmenü Ihres Systems oder direkt über /admin aufrufen.
Ein Hub kann mehrere Administratoren haben und die Anzahl der Administratoren ist nicht begrenzt. Wiederholen Sie den obigen Vorgang für jedes Konto, das Sie mit Administrationsrechten ausstatten möchten.
Fehlersuche
Logdateien
Die Systemprotokolldatei ist eine äußerst nützliche Ressource, um Fehler aufzuspüren. Dies kann auf der Konfigurationsseite admin/log aktiviert werden. Eine Loglevel-Einstellung von LOGGER_DEBUG
wird für stabile Produktionsstandorte bevorzugt. Die meisten Probleme bei der Kommunikation oder der Speicherung werden hier aufgelistet. Eine Einstellung von LOGGER_DATA bietet viel mehr Details, kann aber Ihre Festplatte füllen. In jedem Fall empfehlen wir die Verwendung von logrotate auf Ihrem Betriebssystem, um die Protokolle zu überprüfen und ältere Einträge zu löschen.
Am Ende der Datei .htconfig.php befinden sich mehrere (auskommentierte) Zeilen, die die PHP-Fehlerprotokollierung aktivieren. Dies meldet Probleme mit der Codesyntax und der Ausführung des Codes und ist die erste Stelle, an der Sie nach Problemen suchen sollten, die zu einem „weißen Bildschirm“ oder einer leeren Seite führen. Dies ist in der Regel das Ergebnis von Code-/Syntaxproblemen. Datenbankfehler werden in der Systemprotokolldatei gemeldet, aber wir haben es als nützlich empfunden, in Ihrem Hauptverzeichnis eine Datei namens dbfail.out anzulegen, in der nur datenbankbezogene Probleme gesammelt werden. Wenn die Datei existiert und beschreibbar ist, werden Datenbankfehler sowohl in dieser Datei als auch in der Systemprotokolldatei protokolliert.
Im Falle von „500“-Fehlern werden die Probleme oft in den Protokollen Ihres Webservers protokolliert, oft in /var/log/apache2/error.log oder ähnlichem. Konsultieren Sie die Dokumentation Ihres Betriebssystems.
Es gibt drei verschiedene Protokollierungsmöglichkeiten.
Die erste ist das Datenbankfehlerprotokoll. Dieses wird nur verwendet, wenn Sie eine Datei mit dem Namen dbfail.out
im Stammverzeichnis Ihrer Website anlegen und sie für den Webserver schreibbar machen. Wenn Datenbankabfragen fehlgeschlagen sind, werden sie hier gemeldet. Sie weisen im Allgemeinen auf Tippfehler in unseren Abfragen hin, treten aber auch auf, wenn der Datenbankserver die Verbindung unterbricht oder Tabellen beschädigt werden. In seltenen Fällen werden hier Race Conditions angezeigt, wenn zwei Prozesse versuchen, einen xchan- oder Cache-Eintrag mit derselben ID zu erstellen. Alle anderen Fehler (insbesondere anhaltende Fehler) sollten untersucht werden.
Der zweite Bereich ist das PHP-Fehlerprotokoll. Dieses wird vom Sprachprozessor erstellt und meldet nur Probleme in der Sprachumgebung. Auch hier kann es sich um Syntax- oder Programmierfehler handeln, die jedoch in der Regel fatal sind und zu einem „weißen Bildschirm des Todes“ führen, d. h. PHP wird beendet. Sie sollten sich diese Datei ansehen, wenn etwas schief läuft, das nicht zu einem weißen Bildschirm führt, aber es ist nicht ungewöhnlich, dass diese Datei tagelang leer ist.
Am Ende der mitgelieferten Datei .htconfig.php
befinden sich einige Zeilen, die, wenn sie nicht auskommentiert werden, ein PHP-Fehlerprotokoll aktivieren (äußerst nützlich, um die Ursache von Fehlern beim weißen Bildschirm zu finden). Dies ist standardmäßig nicht der Fall, da es Probleme mit dem Eigentum an der Logdatei und den Schreibrechten geben könnte und die Logdatei standardmäßig nicht rotiert.
Die dritte Datei ist das „Anwendungsprotokoll“. Dieses wird von Hubzilla verwendet, um zu berichten, was im Programm vor sich geht und meldet normalerweise alle Schwierigkeiten oder unerwarteten Daten, die wir erhalten haben. Gelegentlich werden auch „Heartbeat“-Statusmeldungen ausgegeben, um anzuzeigen, dass wir einen bestimmten Punkt in einem Skript erreicht haben. Dies ist die wichtigste Protokolldatei für uns, da wir sie selbst nur zu dem Zweck erstellen, den Status von Hintergrundaufgaben und alles, was seltsam oder fehl am Platz erscheint, zu melden. Es muss nicht unbedingt etwas Schlimmes sein, aber vielleicht einfach nur unerwartet. Wenn Sie eine Aufgabe ausführen und ein Problem auftritt, lassen Sie uns wissen, was in dieser Datei steht, wenn das Problem auftritt. (Bitte schicken Sie mir keine 100M-Dumps, das würde mich nur verärgern). Nur ein paar relevante Zeilen, damit ich ein paar hunderttausend Codezeilen ausschließen und mich darauf konzentrieren kann, wo das Problem auftritt.
Dies sind Ihre Website-Protokolle, nicht meine. Wir melden ernsthafte Probleme auf jeder Protokollebene. Für die meisten Websites empfehle ich die Log-Ebene DEBUG
- sie liefert ein paar zusätzliche Informationen und erzeugt keine riesigen Logdateien. Wenn ein Problem auftritt, das sich allen Versuchen entzieht, es zu verfolgen, sollten Sie für einen kurzen Zeitraum die Protokollebene DATA
verwenden, um alle Details der Strukturen zu erfassen, mit denen wir es zu diesem Zeitpunkt zu tun hatten. Diese Protokollebene verbraucht sehr viel Speicherplatz und wird daher nur für kurze Zeiträume oder für Test-Sites von Entwicklern empfohlen.
Ich empfehle die Konfiguration von logrotate sowohl für das php-Protokoll als auch für das Anwendungsprotokoll. Normalerweise werfe ich alle ein bis zwei Wochen einen Blick auf dbfail.out, behebe alle gemeldeten Probleme und beginne dann mit einer neuen Datei. Das Gleiche gilt für die PHP-Protokolldatei. Ich schaue darin ab und zu nach, ob es etwas gibt, das behoben werden muss.
Wenn etwas schief läuft und es sich nicht um einen schwerwiegenden Fehler handelt, schaue ich mir die Anwendungsprotokolldatei an. Oft werde ich
tail -f logfile.out
während ich einen Vorgang wiederhole, bei dem es Probleme gibt. Oft füge ich zusätzliche Logging-Anweisungen in den Code ein, wenn es keinen Hinweis darauf gibt, was schief läuft. Selbst so etwas Einfaches wie „got here“ oder der Ausdruck des Wertes einer Variable, die verdächtig sein könnte. Auch das können Sie tun - ich möchte Sie sogar dazu ermutigen, dies zu tun. Sobald Sie gefunden haben, was Sie suchen müssen, können Sie
git checkout file.php
um sofort alle zusätzlichen Protokollierungsdaten, die Sie hinzugefügt haben, zu löschen. Verwenden Sie die Informationen aus diesem Protokoll und alle Details, die Sie aus Ihrer Untersuchung des Problems liefern können, um Ihren Fehlerbericht einzureichen - es sei denn, Ihre Analyse weist auf die Quelle des Problems hin. In diesem Fall beheben Sie es einfach.
Rotierende Protokolldateien
- Aktiviere das logrot Addon im offiziellen hubzilla-addons repo
- Legen Sie in Ihrem Web-Root ein Verzeichnis namens
log
mit Schreibrechten für den Webserver an - Gehen Sie zu den logrot-Administrationseinstellungen und geben Sie diesen Ordnernamen sowie die maximale Größe und Anzahl der aufbewahrten Protokolldateien ein.
Probleme melden
Wenn Sie Probleme melden, versuchen Sie bitte, so viele Details wie nötig anzugeben, damit die Entwickler das Problem reproduzieren können, und geben Sie den vollständigen Text aller Fehlermeldungen an.
Wir ermutigen Sie, diese Protokolle zusammen mit dem Quellcode, den Sie besitzen, so gut wie möglich zu nutzen, um Probleme zu beheben und ihre Ursache zu finden. Die Community kann oft helfen, aber nur Sie haben Zugang zu den Logdateien Ihrer Website, und es wird als Sicherheitsrisiko angesehen, sie weiterzugeben.
Wenn ein Code-Problem aufgedeckt wurde, melden Sie es bitte im Bugtracker des Projekts (https://framagit.org/hubzilla/core/issues). Geben Sie auch hier so viele Details wie möglich an, damit wir nicht immer wieder Fragen zu Ihrer Konfiguration stellen oder das Problem duplizieren müssen, damit wir das Problem direkt angehen und herausfinden können, was zu tun ist. Sie können auch gerne Ihre eigenen Lösungen anbieten und Patches einreichen. Wir ermutigen Sie sogar dazu, da wir alle Freiwillige sind und nur wenig Zeit zur Verfügung haben. Je mehr Leute mithelfen, desto leichter wird die Arbeit für alle. Es ist in Ordnung, wenn Ihre Lösung nicht perfekt ist. Jedes bisschen hilft, und vielleicht können wir es ja noch verbessern.
Hub-Snapshot-Tools
Hubzilla-Entwickler müssen häufig zwischen Zweigen wechseln, die möglicherweise inkompatible Datenbankschemata oder Inhalte haben. Die folgenden beiden Skripte erstellen und restaurieren komplette Snapshots einer Hubzilla-Instanz, einschließlich des Hub-Web-Root und des gesamten Datenbankstatus. Jedes Skript benötigt eine Konfigurationsdatei namens hub-snapshot.conf
, die sich im selben Ordner befindet und die spezifischen Verzeichnisse und Datenbankdetails Ihres Hubs enthält.
Konfiguration
Das Format der Konfigurationsdatei ist sehr streng. Es dürfen keine Leerzeichen zwischen dem Variablennamen und dem Wert stehen. Ersetzen Sie nur den Inhalt innerhalb der Anführungszeichen durch Ihre Konfiguration. Speichern Sie diese Datei als hub-snapshot.conf
zusammen mit den Skripten.
# Ort des Hub-Root. Normalerweise ist dies der Speicherort des Hubzilla Repo-Klons.
HUBROOT=„/var/www/“
# Name der MySQL-Datenbank
DBNAME=„hubzilla“
# MySQL-Datenbank-Benutzer
DBUSER=„hubzilla“
# MySQL-Datenbank-Passwort
DBPWD=„akeufajeuwfb“
# Der Ziel-Snapshot-Ordner, in dem das Git-Repository initialisiert werden soll
SNAPSHOTROOT=„/root/snapshots/hubzilla/“
Snapshot
Beispiel für die Verwendung:
sh hub-snapshot.sh my-hub.conf „Commit-Meldung für den Snapshot“
hub-snapshot.sh:
#!/bin/bash
if ! [ -f "$1" ]; then
echo "$1 is not a valid file. Aborting..."
exit 1
fi
source "$1"
#echo "$DBNAME"
#echo "$DBUSER"
#echo "$DBPWD"
#echo "$HUBROOT"
#echo "$SNAPSHOTROOT"
MESSAGE="snapshot: $2"
if [ "$DBPWD" == "" -o "$SNAPSHOTROOT" == "" -o "$DBNAME" == "" -o "$DBUSER" == "" -o "$HUBROOT" == "" ]; then
echo "Required variable is not set. Aborting..."
exit 1
fi
if [ ! -d "$SNAPSHOTROOT"/db/ ]; then
mkdir -p "$SNAPSHOTROOT"/db/
fi
if [ ! -d "$SNAPSHOTROOT"/www/ ]; then
mkdir -p "$SNAPSHOTROOT"/www/
fi
if [ ! -d "$SNAPSHOTROOT"/www/ ] || [ ! -d "$SNAPSHOTROOT"/db/ ]; then
echo "Error creating snapshot directories. Aborting..."
exit 1
fi
echo "Export database..."
mysqldump -u "$DBUSER" -p"$DBPWD" "$DBNAME" > "$SNAPSHOTROOT"/db/"$DBNAME".sql
echo "Copy hub root files..."
rsync -va --delete --exclude=.git* "$HUBROOT"/ "$SNAPSHOTROOT"/www/
cd "$SNAPSHOTROOT"
if [ ! -d ".git" ]; then
git init
fi
if [ ! -d ".git" ]; then
echo "Cannot initialize git repo. Aborting..."
exit 1
fi
git add -A
echo "Commit hub snapshot..."
git commit -a -m "$MESSAGE"
exit 0
Restore
#!/bin/bash
# Restore hub to a previous state. Input hub config and commit hash
if ! [ -f "$1" ]; then
echo "$1 is not a valid file. Aborting..."
exit 1
fi
source "$1"
COMMIT=$2
if [ "$DBPWD" == "" -o "$SNAPSHOTROOT" == "" -o "$DBNAME" == "" -o "$DBUSER" == "" -o "$HUBROOT" == "" ]; then
echo "Required variable is not set. Aborting..."
exit 1
fi
RESTOREDIR="$(mktemp -d)/"
if [ ! -d "$RESTOREDIR" ]; then
echo "Cannot create restore directory. Aborting..."
exit 1
fi
echo "Cloning the snapshot repo..."
git clone "$SNAPSHOTROOT" "$RESTOREDIR"
cd "$RESTOREDIR"
echo "Checkout requested snapshot..."
git checkout "$COMMIT"
echo "Restore hub root files..."
rsync -a --delete --exclude=.git* "$RESTOREDIR"/www/ "$HUBROOT"/
echo "Restore hub database..."
mysql -u "$DBUSER" -p"$DBPWD" "$DBNAME" < "$RESTOREDIR"/db/"$DBNAME".sql
chown -R www-data:www-data "$HUBROOT"/{store,extend,addon,.htlog,.htconfig.php}
echo "Restored hub to snapshot $COMMIT"
echo "Removing temporary files..."
rm -rf "$RESTOREDIR"
exit 0
Datenbank
Datenbank-Updates
Auf der Seite /admin/dbsync
kann der Administrator überprüfen, ob eine Aktualisierung fehlgeschlagen ist, und sie gegebenenfalls erneut versuchen.
Wenn eine Aktualisierung fehlgeschlagen ist, aber aus irgendeinem Grund nicht als fehlgeschlagen registriert wird, kann der Administrator versuchen, die Aktualisierung erneut auszuführen. Zum Beispiel für die DB-Aktualisierung #1999, indem er die Webseite besucht:
/admin/dbsync/1999
Datenbank-Tabellen
Tabelle | Beschreibung |
---|---|
abconfig | beliebiger Speicherplatz für Verbindungen von lokalen Kanälen |
abook | Verbindungen der lokalen Kanäle |
account | Dienstanbieterkonto |
addon | registrierte Plugins |
app | persönliche App-Daten |
attach | Dateianhänge |
auth_codes | OAuth Benutzung |
cache | OEmbed Cache |
cal | CalDAV-Container für Ereignisse |
channel | lokale Kanäle |
chat | Chatraum-Inhalte |
chatpresence | Kanalpräsenzinformationen für den Chat |
chatroom | Daten für den eigentlichen Chatraum |
clients | OAuth Benutzung |
config | Hauptkonfigurationsspeicher |
conv | Meta-Konversationsstruktur für private Nachrichten in Diaspora |
event | Events |
pgrp_member | Datenschutzgruppen (Sammlungen), Gruppeninformationen |
pgrp | Datenschutzgruppen (Sammlungen), Mitgliederinformationen |
hook | Plugin-Hook-Register |
hubloc | xchan-Standortspeicher, verknüpft einen Hub-Standort mit einem xchan |
iconfig | erweiterbarer, beliebiger Speicher für Elemente |
issue | künftige Fehler-/Problemdatenbank |
item | alle Beiträge und Webseiten |
item_id | (veraltet durch iconfig) andere Identifikatoren in anderen Diensten für Beiträge |
likes | "Dinge“ mögen |
private Nachrichten | |
menu | Webseiten-Menü-Daten |
menu_item | Einträge für Menüs auf Webseiten |
notify | Benachrichtigungen |
obj | Objektdaten für Dinge (x hat y) |
outq | Ausgangswarteschlange |
pconfig | persönlicher (pro Kanal) Konfigurationsspeicher |
photo | Fotospeicher |
poll | Daten für Umfragen |
poll_elm | Daten für Abfrageelemente |
profdef | Definitionen für benutzerdefinierte Profilfelder |
profext | benutzerdefinierte Profilfelddaten |
profile | Kanalprofile |
profile_check | DFRN-Fernautorisierung, kann veraltet sein |
register | Registrierungen, die eine Verwaltungsgenehmigung erfordern |
session | Speicherung von Websitzungen |
shares | Informationen über gemeinsame Elemente |
sign | Diaspora-Unterschriften. Wird schrittweise abgebaut. |
site | Standorttabelle zum Auffinden von Verzeichnis-Peers |
source | Daten aus Kanalquellen |
sys_perms | erweiterbare Berechtigungen für OAuth |
term | Tabelle der Artikeltaxonomie (Kategorien, Tags usw.) |
tokens | OAuth Benutzung |
updates | Verzeichnis-Synchronisations-Updates |
verify | allgemeine Verifikationsstruktur |
vote | Abstimmungsdaten für Umfragen |
xchan | Liste der bekannten Kanäle im Universum |
xchat | Chaträume mit Lesezeichen |
xconfig | wie pconfig, aber für Kanäle ohne lokales Konto |
xign | von Freundschaftsvorschlägen ignorierte Kanäle |
xlink | von poco abgeleitete „Freunde von Freunden“-Verknüpfungen, auch Speicherung von Bewertungen |
xperm | OAuth/OpenID-Connect erweiterbare Berechtigungen Berechtigungsspeicher |
xprof | wenn dieser Knotenpunkt ein Verzeichnisserver ist, enthält er grundlegende öffentliche Profilinformationen über jeden im Netz |
xtag | wenn dieser Hub ein Verzeichnisserver ist, enthält er Tags oder Interessen von jedem im Netzwerk |
Erweiterte Konfigurationen für Administratoren
Dieses Dokument setzt voraus, dass Sie ein Administrator sind.
Hubzilla enthält viele Konfigurationsoptionen, die im Hauptverwaltungsbereich verborgen sind. Im Allgemeinen handelt es sich dabei um Optionen, die als zu nischenartig, fortgeschritten oder verwirrend angesehen werden.
Diese Einstellungen können über die Shell vom Webverzeichnis der obersten Ebene aus mit folgender Syntax geändert werden
util/config cat key value
für eine Website-Konfiguration, oder
util/pconfig channel_id cat key value
für eine Mitgliedskonfiguration.
Für eine Site-Konfiguration ist eine weitere Möglichkeit, eine Zeile in .htconfig.php einzufügen, mit der Syntax:
App::$config['cat']['Schlüssel'] = 'Wert';
Mitgliederkonfiguration (pconfig)
system.always_my_theme
Verwende immer dein eigenes Theme, wenn du Kanäle im selben Hub anschaust. Dies führt zu einigen recht einfallsreichen Problemen, wenn Kanäle mit themenabhängigen Comanche angezeigt werden.
system.blocked
Ein Array von Xchans, die von diesem Channel blockiert werden. Technisch gesehen ist dies eine versteckte Konfiguration und gehört hierher, aber Addons (insbesondere Superblock) haben dies in der Benutzeroberfläche verfügbar gemacht.
system.default_cipher
Setzt den Standardchiffre, der für E2EE-Elemente verwendet wird.
system.display_friend_count
Legt die Anzahl der Verbindungen fest, die im Widget des Verbindungsprofils angezeigt werden sollen.
system.do_not_track
Wie der Browser-Header. Dies wird viele identitätsbasierte Funktionen unterbrechen. Sie sollten wirklich nur Berechtigungen setzen, die Sinn machen.
system.forcepublicuploads
Erzwingt, dass hochgeladene Fotos öffentlich sind, wenn sie als Wandelemente hochgeladen werden. Es ist viel sinnvoller, die Berechtigungen von vornherein richtig zu setzen. Tun Sie das stattdessen.
system.network_page_default
Legt die Standardparameter für die Anzeige der Netzwerkseite fest. Dies sollte den gleichen Querystring enthalten wie die manuelle Filterung.
system.paranoia
Legt die Sicherheitsstufe der IP-Überprüfung fest. Wenn sich die IP-Adresse einer angemeldeten Sitzung ändert, wird diese Stufe angewendet, um festzustellen, ob das Konto als Sicherheitsverletzung abgemeldet werden sollte. Die Optionen sind: 0 - keine IP-Überprüfung 1 - 3 Oktette prüfen 2 - 2 Oktette prüfen 3 - Prüfung auf alle Unterschiede
system.prevent_tag_hijacking
Verhindert, dass fremde Netzwerke Hashtags in Ihren Beiträgen klauen und sie auf ihre eigenen Ressourcen leiten.
system.startpage
Eine weitere dieser technisch versteckten Konfigurationen, die von Addons zur Verfügung gestellt werden. Legt die Standardseite fest, die beim Einloggen angezeigt wird. Diese wird der Benutzeroberfläche durch das startpage-Addon zur Verfügung gestellt.
system.taganyone
Erfordert, dass die gleichnamige Konfiguration aktiviert ist. Erlaubt das @mention tagging von jedem, egal ob man verbunden ist oder nicht. Dies skaliert nicht.
system.anonymous_kommentare
Standardmäßig oder wenn auf 1 gesetzt, können benutzerdefinierte Berechtigungen gesetzt werden, um anonyme (moderierte) Kommentare wie bei WordPress zu erlauben, die vom Channel-Besitzer moderiert werden. Ist der Wert auf 0 gesetzt, kann kein Mitglied Ihrer Website dies auswählen oder aktivieren.
system.user_scalable
Bestimmt, ob die App auf Touchscreens skalierbar ist. Standardmäßig auf on, zum Deaktivieren auf zero setzen - real zero, nicht nur false.
Konfiguration der Website
randprofile.check
Bei der Anforderung eines Zufallsprofils zuerst prüfen, ob es tatsächlich existiert
randprofile.retry
Anzahl der Versuche, ein zufälliges Profil zu erhalten
system.admin_email
Gibt die E-Mail-Adresse des Administrators für diese Site an. Diese wird bei der Installation festgelegt.
system.authlog
Logdatei, die für die Protokollierung von Authentifizierungsfehlern verwendet wird. Wird verwendet, um eine Verbindung zu serverseitiger Software wie fail2ban herzustellen. Auth-Fehler werden auch in den Hauptprotokollen protokolliert.
system.auto_channel_create
Fügt die notwendigen Formularelemente hinzu, um den ersten Kanal auf der Kontoregistrierungsseite zu erstellen, und erstellt ihn (möglicherweise nach einer E-Mail-Validierung oder der Genehmigung des Administrators). Dies schließt die Möglichkeit aus, einen Channel von einer anderen Website als ersten auf dieser Website für ein neues Konto erstellten Channel zu importieren. Verwendung mit system.default_permissions_role zur Rationalisierung der Registrierung.
system.auto_follow
Der erste Channel eines Accounts folgt automatisch den hier aufgelisteten Channels - kommagetrennte Liste von Webbies (member@hub Adressen).
system.blacklisted_sites
Ein Array spezifischer Hubs, die von diesem Hub komplett blockiert werden sollen.
system.block_public_search
Ähnlich wie block_public, mit dem Unterschied, dass nur der öffentliche Zugang zu den Suchfunktionen blockiert wird. Nützlich für Seiten, die öffentlich sein wollen, aber von Suchmaschinen überrannt werden.
system.cron_hour
Geben Sie eine Stunde an, in der cron_daily ausgeführt werden soll. Standardmäßig, ohne Konfiguration, wird dies um Mitternacht UTC ausgeführt.
system.default_permissions_role
Wenn dieser Wert auf einen gültigen Namen für eine Berechtigungsrolle gesetzt ist, wird diese Rolle für den ersten Channel verwendet, der von einem neuen Konto erstellt wird, und es wird nicht nach dem „Channel-Typ“ im Formular zur Channel-Erstellung gefragt. Beispiele für gültige Namen sind: 'social', 'social_restricted', 'social_private', 'forum', 'forum_restricted' und 'forum_private'. Lesen Sie hier mehr über Berechtigungsrollen.
system.default_profile_photo
Legt das Profilfoto fest, mit dem neue Channels beginnen. Dies sollte den Namen eines Verzeichnisses enthalten, das sich unter images/default_profile_photos/ befindet, oder es sollte nicht gesetzt werden. Wenn es nicht gesetzt ist, wird 'rainbow_man' angenommen.
system.directorytags
Legt die Anzahl der Schlüsselwort-Tags fest, die auf der Verzeichnisseite angezeigt werden. Die Voreinstellung ist 50, wenn sie nicht auf eine positive ganze Zahl gesetzt wird.
system.disable_directory_keywords
Wenn '1', werden keine Verzeichnisschlüsselwörter angezeigt. Wenn der Hub ein Verzeichnisserver ist, verhindern Sie die Rückgabe von Schlüsselwörtern an alle Verzeichnis-Clients. Bitte setzen Sie dies nicht für Verzeichnisserver im Bereich RED_GLOBAL.
system.disable_discover_tab
Hiermit können Sie die Fähigkeit, öffentliche Inhalte von externen Sites zu entdecken, vollständig deaktivieren.
system.disable_dreport
Wenn '1', werden keine Zustellungsberichte gespeichert oder verlinkt.
system.dlogfile
Logdatei, die für die Protokollierung von Entwicklungsfehlern verwendet wird. Genau dasselbe wie logger sonst. Dies ist keine Magie und erfordert Ihre eigenen Logging-Anweisungen. Entwickler-Tool.
system.email_notify_icon_url
URL des Bildes (32x32), das in E-Mail-Benachrichtigungen (HTML-Bodies) angezeigt werden soll.
system.expire_delivery_reports
Verfallsdatum in Tagen für Zustellungsberichte - Standardwert 10
system.expire_limit
Nicht mehr als diese Anzahl von Beiträgen pro Kanal pro Ablauflauf ablaufen lassen, um den Speicher nicht zu erschöpfen. Voreinstellung 5000.
system.photo_storage_type
Wenn '1', wird das Dateisystem anstelle der SQL-Datenbank zum Speichern der Thumbnails verwendet. Voreinstellung ist '0'. Eingeführt in 4.2
system.hidden_version_siteinfo
Wenn 'true', wird die Softwareversion nicht auf den Seiten von siteinfo angezeigt (system.hide_version verbirgt die Version auch auf diesen Seiten, diese Einstellung verbirgt nur die Version auf den Seiten von siteinfo).
system.hide_help
Link zur Hilfedokumentation nicht in der Navigationsleiste anzeigen
system.hide_in_statistiken
Weist die roten Statistikserver an, diesen Hub in Hublisten komplett auszublenden.
system.hide_version
Wenn true, wird die Softwareversion auf Webseiten und Tools nicht angezeigt. (*) Muss in .htconfig.php eingestellt werden.
system.ignore_imagick
Ignoriert imagick und verwendet GD, auch wenn imagick auf dem Server installiert ist. Verhindert einige Probleme mit PNG-Dateien in älteren Versionen von imagick.
system.max_daily_registrations
Legt die maximale Anzahl der an einem Tag erlaubten Neuanmeldungen fest. Nützlich, um eine Überzeichnung zu verhindern, wenn das Projekt in der Öffentlichkeit bekannt gemacht wird.
system.max_import_size
Falls konfiguriert, die maximale Länge einer importierten Textnachricht. Diese wird normalerweise auf 200 KByte oder mehr belassen, um private Friendica-Fotos, die eingebettet sind, unterzubringen.
system.max_tagged_forums
Spam-Schutz. Begrenzt die Anzahl der getaggten Foren, die in jedem Beitrag erkannt werden. Standard ist 2. Nur die ersten 'n' Tags werden als Foren zugestellt, die anderen verursachen keine Zustellung.
system.minimum_feedcheck_minutes
Das minimale Intervall zwischen der Abfrage von RSS-Feeds. Wenn dieses Intervall kleiner als das Cron-Intervall ist, werden die Feeds bei jedem Cronjob abgefragt. Der Standardwert ist 60, wenn er nicht festgelegt wurde. Die Site-Einstellung kann auch für jeden einzelnen Kanal durch eine Serviceklassen-Einstellung mit dem treffenden Namen „minimum_feedcheck_minutes“ außer Kraft gesetzt werden.
system.no_age_restriction
Beschränken Sie die Registrierung nicht auf Personen über 13 Jahren. In vielen Ländern ist es gesetzlich vorgeschrieben, dass das Alter angegeben werden muss und dass alle persönlichen Daten von Minderjährigen gesperrt werden müssen.
system.object_cache_days
Legt fest, wie lange zwischengespeicherte eingebettete Inhalte ohne erneutes Abrufen verwendet werden können. Die Voreinstellung ist 30 Tage.
system.openssl_conf_file
Geben Sie eine Datei an, die die OpenSSL-Konfiguration enthält. Wird in einigen Windows-Installationen benötigt, um die openssl-Konfigurationsdatei auf dem System zu finden. Lesen Sie zuerst den Code. Wenn Sie den Code nicht lesen können, spielen Sie nicht mit ihm.
system.openssl_encrypt
Verschlüsselungs-Engine von openssl verwenden, Standard ist false (verwendet mcrypt für AES-Verschlüsselung)
system.optimize_items
Führt optimise_table während einiger Aufgaben aus, um Ihre Datenbank sauber und defragmentiert zu halten. Dies geht zu Lasten der Leistung, während die Operationen laufen, sorgt aber auch dafür, dass die Dinge etwas schneller laufen, wenn sie nicht laufen. Es gibt auch CLI-Hilfsprogramme zur Durchführung dieser Operation, die Sie vielleicht bevorzugen, besonders wenn Sie eine große Site haben.
system.override_poll_lockfile
Ignoriert die Sperrdatei im Poller-Prozess, damit mehr als ein Prozess gleichzeitig laufen kann.
system.paranoia
Wie pconfig, aber auf einer site-weiten Basis. Kann durch Mitgliedereinstellungen überschrieben werden.
system.pin_types
Array der zulässigen Elementtypen für die Anheftung. Die Standardwerte hängen vom Modul ab, können aber hier geändert werden.
system.photo_cache_time
Wie lange die Fotos zwischengespeichert werden sollen, in Sekunden. Standardwert ist 86400 (1 Tag). Eine längere Zeit erhöht die Leistung, bedeutet aber auch, dass es länger dauert, bis geänderte Berechtigungen gelten.
system.plattform_name
Was als Plattformname auf Webseiten und in Statistiken angezeigt werden soll. (*) Muss in .htconfig.php eingestellt werden.
system.rating_enabled
Verteilte Reputationsberichte und Datenerfassung. Diese Funktion wird derzeit überarbeitet.
system.poke_basic
Reduziert die Anzahl der poke-Verben auf genau 1 („poke“). Deaktivieren Sie andere Verben.
system.proc_run_use_exec
Wenn 1, wird der Systemaufruf exec in proc_run verwendet, um Hintergrundaufgaben auszuführen. Standardmäßig verwenden wir proc_open und proc_close. Auf einigen (derzeit seltenen) Systemen funktioniert dies nicht gut.
system.projecthome
Zeigt die Projektseite auf Ihrer Homepage für abgemeldete Betrachter an.
system.projekthome
Legt die Projekthomepage als Startseite des Hubs fest. (Veraltet)
system.pubstream_bestellung
Legt die Pubstream-Reihenfolge fest. Mögliche Werte 'commented' (Standard), 'created' und 'edited'.
system.register_link
Pfad, auf den der „register“-Link im Anmeldeformular verweisen soll. Bei geschlossenen Sites wird dies auf 'pubsites' verweisen. Bei offenen Sites wird er normalerweise auf 'register' umgeleitet, aber Sie können dies auf eine benutzerdefinierte Site-Seite ändern, die Abonnements oder ähnliches anbietet.
system.reserved_channels
Erlaube den Mitgliedern nicht, Kanäle mit dieser durch Kommata getrennten Liste von Namen (keine Leerzeichen) zu registrieren.
system.sellpage
Eine URL, die in der Liste der öffentlichen Sites angezeigt wird, um Ihren Hub zu verkaufen - Serviceklassen anzeigen, usw.
system.startpage
Legt die Standardseite fest, die nach einer Anmeldung für alle Channels auf dieser Website angezeigt wird. Kann durch Benutzereinstellungen überschrieben werden.
system.sys_expire_days
Wie viele Tage sollen entdeckte öffentliche Inhalte von anderen Websites aufbewahrt werden?
system.taganyone
Erlaubt das @mention-Tagging von jedem, egal ob Sie verbunden sind oder nicht.
system.tempdir
Ort, an dem temporäre Dateien gespeichert werden (derzeit unbenutzt), Standard ist in der PHP-Konfiguration definiert.
system.tos_url
Setzt einen alternativen Link für den ToS-Speicherort.
system.transport_security_header
wenn ungleich Null und SSL verwendet wird, wird ein strict-transport-security-Header auf den Webseiten eingefügt
system.uploaddir
Speicherort für das Hochladen von Dateien (Standard ist system.tempdir, derzeit nur vom js_upload-Plugin verwendet)
system.workflow_channel_next
Die Seite, zu der neue Mitglieder unmittelbar nach der Erstellung eines Channels weitergeleitet werden sollen.
system.arbeitsablauf_register_next
Die Seite, auf die Mitglieder direkt nach dem Erstellen eines Kontos geleitet werden (nur wenn auto_channel_create oder UNO aktiviert ist).
Verzeichnis-Konfiguration
Standardwerte für die Verzeichnissuche
directory.globaldir
0 oder 1. Standardwert 0. Wenn Sie das Verzeichnis auf einer Site besuchen, sehen Sie standardmäßig nur die Mitglieder dieser Site. Man muss einen zusätzlichen Schritt machen, um die Leute im Rest des Netzwerks zu sehen; und indem man das tut, gibt es eine klare Abgrenzung, dass diese Leute nicht Mitglieder dieser Site sind, sondern eines größeren Netzwerks.
directory.pubforums
0 oder 1. Öffentliche Foren sollten standardmäßig 0 sein.
directory.safemode
0 oder 1.
Konfiguration des Verzeichnisservers
- system.directory_mode
- system.directory_primary
- system.directory_realm
- system.verzeichnis_server
- system.realm_token
CLI Tools (utils)
Wer als Administrator Zugang zur Shell hat, kann weitere kleine CLI Tools verwenden, welche sich im Verzeichnis "utils" finden.
addons
Mit dem Script addons können Sie sich anzeigen lassen, welche Addons installiert und welche vorhanden sind. Außerdem können Sie Addons installieren und deinstallieren, sowie alle Addons neu installieren.
util/addons list
Anzeige aller installierter Addonsutil/addons list all
Anzeige aller Addons , die installiert sind (*) und solcher, die aufgrund von Inkompatibilität deaktiviert sind (!)util/addons install foo
Installiere das Addon mit dem Namen "foo"util/addons uninstall foo
Deinstalliere das Addon mit dem Namen "foo"util/addons reinstall
Reinstalliere alle Addons
admins
Das Script admins ermöglicht es Ihnen, sich sämtliche Admins des Hub anzeigen zu lassen, sowie weitere Admins hinzuzufügen und bestehende Admins zu entfernen.
util/admins
util/admins list
util/admins add <account_id>
util/admins remove <account_id>
config / pconfig
Siehe: Erweiterte Konfigurationen für Administratoren
connect
Mit connect können Sie eine Verbindung zwischen einem Kanal Ihres Hubs mit einem anderen Kanal herstellen.
util/connect <channel_id> <channel@hub>
util/connect <channel_address> <channel@hub>
dcp
Mit dcp können Sie Dateien in den Store-Bereich eines Kanals auf Ihrem Hub kopieren.
util/dcp <quelle> <zielverzeichnis>
wobei Zielverzeichnisstore/$nickname/path
oder$nickname/path
sein muss.
dmkdir
Mit dmkdir können Sie im Store-Bereich eines Kanals auf Ihrem Hub ein Unterverzeichnis anlegen.
util/dmkdir <directory>
wobei Directorystore/$nickname/path/<directory>
oder$nickname/path/<directory>
sein muss.
fresh (The Freaking REd Shell)
Dies funktioniert nur unter Unix/Linux. Wenn das readline-Modul installiert ist, verwenden es dieses für die Eingabe, ansonsten liest es nur von stdin und schreibt nach stdout. Die Befehle werden der Reihe nach abgearbeitet, bis der Befehl „exit“, „quit“ oder das Ende der Datei erreicht ist.
Kommandos:
version
Zeigt die aktuelle Fresh-Version an.login <E-Mail-Adresse>
Fragt nach einem Passwort und authentifiziert<E-Mail-Adresse>
als den aktuellen Benutzer.finger <Kanal-Adresse>
Führt einen Lookup von<Kanal-Adresse>
durch und meldet das Ergebnis.channel <Kanal-Nickname>
Schaltet den aktuellen Kanal auf den Kanal mit dem angegebenen Spitznamen um.conn [<id1> <id2> ...]
- Ohne Argumente listet dies alle Verbindungen des aktuellen Kanals mit einer ID auf. Wenn IDs angegeben werden, werden die Details der einzelnen Verbindungen angezeigt.
hz
Einfaches, minimalistisches Kommandozeilentool, um den Status über die API an hubzilla zu senden. Erfordert curl.
hz [<Konfigurationsdatei>]
hz benötigt eine Konfigurationsdatei. Sie können entweder eine Datei .hubzilla
verwenden und den Parameter <Konfigurationsdatei>
weglassen oder eine Konfigurationsdatei unter einem beliebigen Namen im Hubzilla-Verzeichnis erstellen, deren Namen Sie dann bei Aufruf von hz angeben.
Format der Konfigurationsdatei:
USER=<Ihr Benutzername>
PASS=<Ihr Passwort>
HUB=<Domain Ihres Hubs>
Anschließend können Sie Ihr Posting eingeben und die Eingabe mit Strg-D abschließen.
storageconf
Mit storageconf können Sie den Speicherort für Thumbnails festlegen (Dateisystem oder Datenbank), sowie die aktuelle Konfiguration abfragen.
util/storageconv stats
Zeigt den aktuell eingestellten Statusutil/storageconv fs
Verschiebt die Thumbnails von der Datenbank ins Dateisystemutil/storageconv db
Verschiebt die Thumbnails vom Dateisystem in die Datenbank
thumbrepair
thumbrepair erstellt die lokalen Thumbnails neu.
Datei-Synchronisation und Klonen
Das Klonen von Dateien über mehrere Instanzen eines Channels hinweg ist aufgrund der Natur der PHP-Speicherzuweisung ein sehr schwieriges Problem. Dies muss völlig anders gehandhabt werden als das Klonen oder Synchronisieren anderer Informationen. (Die Verarbeitung einer großen Videodatei oder von 40-50 Fotos kann den Speicher voll auslasten). Daher können wir nicht einfach alle Daten in eine Speicherauszugsdatei auslagern und sie dann sequentiell verarbeiten. Das Laden der Speicherauszugsdatei selbst wird wahrscheinlich den Speicherplatz erschöpfen.
Außerdem gibt es zwei Hauptoperationen, die wir in Betracht ziehen. Die erste ist die schwierigste - das Speichern und anschließende Importieren aller Kanalinformationen in einen neuen Kanal-Klon. Der zweite ist die Synchronisierung von Datei-Änderungen, die in zwei oder mehr „aktiven“ Klonen auftreten. Beim ersten Versuch mit diesem Tool werden wir uns auf den zweiten Fall konzentrieren, während wir versuchen, ein gewisses Maß an Kompatibilität mit dem ersten Fall aufrechtzuerhalten, damit wir dieselben Tools wiederverwenden können.
Metadaten
Zunächst benötigen wir die Metadaten der Datei, um ihre Struktur auf einer anderen Website genau rekonstruieren zu können. Dazu sind die folgenden Informationen erforderlich: die „attach“-Struktur (ohne Dateiinhalt - das ist die Standardeinstellung) für die Datei selbst und ihre übergeordneten Verzeichnisse, damit wir ihren genauen Platz im Dateisystem wiederherstellen können, da wir nicht wissen, ob das übergeordnete Verzeichnis schon einmal importiert worden ist oder nicht. Foto"-Struktur für alle Fotoelemente, die durch das Hochladen dieser Datei in das System erstellt wurden. Diese enthält in der Regel mehrere verschiedene „Skalen“ oder Miniaturbilder, von denen einige für die Verwendung als Profilfoto oder Titelbild beschnitten werden können. Wir müssen die Informationen über den Bildausschnitt aufbewahren, die nicht in den Metadaten, sondern nur in den gespeicherten Daten enthalten sind. Die eigentlichen Miniaturbilddaten können in den Metadaten enthalten sein, müssen es aber nicht. Ein großformatiges Titelbild (Maßstab #7) könnte möglicherweise zu Speicherproblemen führen. Es ist zwar nicht so schlimm wie ein 100-Meter-Video, aber wenn Sie mehrere davon haben, können sie sich summieren.
Objekteinträge, die mit dieser Datei verknüpft sind. Dabei kann es sich um Dateifreigabeaktivitäten, das „übergeordnete Element“, das mit Fotos verknüpft ist, und angehängte Konversationselemente (Foto-Likes, Kommentare usw.) handeln.
Für alle diese Elemente muss die URL ersetzt und das Element neu signiert werden, wenn es auf eine andere Website verschoben wird.
Dateidaten
Dann haben wir die eigentlichen Dateidaten, die wir für die Rekonstruktion der Datei benötigen. Diese müssen getrennt von den Metadaten gespeichert werden, damit der Speicher bei der Verarbeitung nicht überlastet wird. Die eigentlichen Dateidaten können zur Rekonstruktion der Anhangsstruktur und der ersten vier Fotoskalen verwendet werden. Wenn es sich um ein Foto handelt, benötigen wir Zugriff auf die Skala „#4“ (Profilfoto) und die Skala #7 (Titelbild), so wie sie ursprünglich beschnitten wurden. Alle anderen Miniaturansichten können aus diesen generiert werden.
Dateiabgleich
Wir werden diesen Vorgang zuerst betrachten, weil er wahrscheinlich am einfachsten zu implementieren ist. Wenn ein Foto zum Quellsystem hinzugefügt, entfernt oder geändert wird, senden wir ein Klon-Synchronisierungspaket an alle bekannten Klone, das die Metadaten, aber keine Dateidaten enthält. Wir können nur ein Sync-Paket pro zu synchronisierendem Dateivorgang senden.
Die empfangende Seite erstellt alle Metadatenstrukturen, führt eine URL-Übersetzung durch und speichert sie. Dann muss es die eigentlichen Daten abrufen. Unter der Voraussetzung, dass CURL Streaming unterstützt, wird eine authentifizierte Anfrage an die ursprüngliche Website gesendet und die Originaldatei wird angefordert und direkt auf die Festplatte gestreamt (unter Umgehung aller Verarbeitungsschritte). Wenn Fotomaßstab Nr. 4 oder Maßstab Nr. 7 erforderlich ist, werden diese angefordert und in den entsprechenden Strukturen gespeichert. Wir gehen in diesem Fall davon aus, dass der große Maßstab des Titelbildes den Speicher nicht erschöpft. Wenn CURL das Streaming nicht unterstützen kann, müssen die Anforderungspakete in eine Warteschlange gestellt und an den Ursprungsort gesendet werden, um „Chunks“ der Datei zu erhalten, und wieder zusammengesetzt werden, sobald alle Chunks abgerufen wurden.
Die authentifizierte Anfrage hängt vom jeweiligen Mechanismus ab. Beim CURL-Streaming muss wahrscheinlich ein signiertes Geheimnis mit einem Zeitstempel erzeugt und an die Ursprungsseite der Datei gesendet werden. Dann können die Daten mit minimaler interner Verarbeitung abgerufen und unter Verwendung von stdio-Pufferung direkt auf die Festplatte ausgegeben werden. Im Falle einer Nomad-Anforderung wird das Nomad-Anforderungspaket validiert, aber die Planung von Chunk-Batches und deren Wiederzusammensetzung könnte sich als schwierig erweisen.
Sicherung/Wiederherstellung von Dateien
Dies ist viel komplizierter, da wir keinen authentifizierten Webserver haben, von dem wir Daten anfordern können. Die Metadaten können größtenteils identisch sein, aber wir brauchen eine Form der Signalisierung, dass wir die Datei nicht über das Web abrufen werden. Dies erfordert wahrscheinlich einen clientseitigen Prozess, um jede Metadaten-Datei zu analysieren und eine Datei auf der Festplatte zu finden, mit der sie verknüpft ist. Anschließend müssten die Daten mit einem speziellen Endpunkt, der für diese Aufgabe vorgesehen ist, an den Zielserver gestreamt werden. Eine Java-Applikation könnte hier die beste Option sein, um die Plattformneutralität zu wahren.
Eine andere Möglichkeit wäre die Verwendung von WebDAV für diesen Schritt. Die Metadaten würden zuerst hochgeladen, dann die Datendateien. Wenn eine Datendatei mit einer vorhandenen Metadaten-Datei übereinstimmt, würden die Metadaten verarbeitet, die Datei entsprechend gespeichert und die Metadaten-Datei anschließend entfernt. In diesem Fall müssten in den Metadaten Fotos der Skalen 4 und 7 bereitgestellt werden.
Optional könnte dieser Schritt auch mit einem lokalen Dateisystem auf dem Zielserver durchgeführt werden. Dies wäre die leistungsfähigste Lösung, und eine Reihe von Shell-basierten Tools (im Falle von Linux) könnte die „Client-Seite“ der Aufgabe übernehmen.
Die Komplexität dieser Aufgabe erfordert eine sorgfältige Planung, wie die Daten organisiert und gespeichert und gegebenenfalls per Fernzugriff gesichert oder von der Quellwebsite zur Sicherung übertragen werden.
Rückwärtskompatibilität
Es gibt einige offensichtliche Probleme bei der Bereitstellung von Daten für die Sicherung oder das Klonen, die auf dem System vor der Existenz von Wiederherstellungs-/Synchronisierungstools vorhanden waren. Um die Werkzeuge selbst relativ unkompliziert zu halten (soweit dies angesichts der Beschränkungen möglich ist), muss die Abwärtskompatibilität möglicherweise durch ein spezielles Plugin oder Addon hergestellt werden.
Nomad - Ein Überblick auf oberer Ebene
Hier ist eine allgemeine Beschreibung der Funktionsweise von Nomad.
In diesem Beispiel wird „Indigo“ eine öffentliche Nachricht von seiner Website „podunk.edu“ aus versenden. „Nickordo„ ist ein Empfänger auf einer anderen Website (“example.com").
Indigo stellt seine Nachricht zuerst auf podunk.edu ein. podunk.edu schaut nach, wer die Nachricht erhalten soll und findet Nickordo. Nickordo postet normalerweise von example.com aus, also fügen wir dieses Ziel zu unserer Liste der Empfänger hinzu. Wir können auch andere Ziele für Nickordo und alle anderen, die Indigos Beiträge verfolgen, hinzufügen.
In diesem Beispiel stellen wir fest, dass wir nur einen bekannten Empfänger an einem bekannten Ort haben.
Wir senden ein Paket an example.com:
{
"type":"notify",
"sender":{
"guid":"kgVFf_1_SSbyqH-BNWjWuhAvJ2EhQBTUdw-Q1LwwssAntr8KTBgBSzNVzUm9_RwuDpxI6X8me_QQhZMf7RfjdA",
"guid_sig":"PT9-TApzpm7QtMxC63MjtdK2nUyxNI0tUoWlOYTFGke3kNdtxSzSvDV4uzq_7SSBtlrNnVMAFx2_1FDgyKawmqVtRPmT7QSXrKOL2oPzL8Hu_nnVVTs_0YOLQJJ0GYACOOK-R5874WuXLEept5-KYg0uShifsvhHnxnPIlDM9lWuZ1hSJTrk3NN9Ds6AKpyNRqf3DUdz81-Xvs8I2kj6y5vfFtm-FPKAqu77XP05r74vGaWbqb1r8zpWC7zxXakVVOHHC4plG6rLINjQzvdSFKCQb5R_xtGsPPfvuE24bv4fvN4ZG2ILvb6X4Dly37WW_HXBqBnUs24mngoTxFaPgNmz1nDQNYQu91-ekX4-BNaovjDx4tP379qIG3-NygHTjFoOMDVUvs-pOPi1kfaoMjmYF2mdZAmVYS2nNLWxbeUymkHXF8lT_iVsJSzyaRFJS1Iqn7zbvwH1iUBjD_pB9EmtNmnUraKrCU9eHES27xTwD-yaaH_GHNc1XwXNbhWJaPFAm35U8ki1Le4WbUVRluFx0qwVqlEF3ieGO84PMidrp51FPm83B_oGt80xpvf6P8Ht5WvVpytjMU8UG7-js8hAzWQeYiK05YTXk-78xg0AO6NoNe_RSRk05zYpF6KlA2yQ_My79rZBv9GFt4kUfIxNjd9OiV1wXdidO7Iaq_Q",
"url":"http:\/\/podunk.edu",
"url_sig":"T8Bp7j5DHHhQDCFcAHXfuhUfGk2P3inPbImwaXXF1xJd3TGgluoXyyKDx6WDm07x0hqbupoAoZB1qBP3_WfvWiJVAK4N1FD77EOYttUEHZ7L43xy5PCpojJQmkppGbPJc2jnTIc_F1vvGvw5fv8gBWZvPqTdb6LWF6FLrzwesZpi7j2rsioZ3wyUkqb5TDZaNNeWQrIEYXrEnWkRI_qTSOzx0dRTsGO6SpU1fPWuOOYMZG8Nh18nay0kLpxReuHCiCdxjXRVvk5k9rkcMbDBJcBovhiSioPKv_yJxcZVBATw3z3TTE95kGi4wxCEenxwhSpvouwa5b0hT7NS4Ay70QaxoKiLb3ZjhZaUUn4igCyZM0h6fllR5I6J_sAQxiMYD0v5ouIlb0u8YVMni93j3zlqMWdDUZ4WgTI7NNbo8ug9NQDHd92TPmSE1TytPTgya3tsFMzwyq0LZ0b-g-zSXWIES__jKQ7vAtIs9EwlPxqJXEDDniZ2AJ6biXRYgE2Kd6W_nmI7w31igwQTms3ecXe5ENI3ckEPUAq__llNnND7mxp5ZrdXzd5HHU9slXwDShYcW3yDeQLEwAVomTGSFpBrCX8W77n9hF3JClkWaeS4QcZ3xUtsSS81yLrp__ifFfQqx9_Be89WVyIOoF4oydr08EkZ8zwlAsbZLG7eLXY"
},
"callback":"\/post",
"version":1,
"secret":"1eaa6613699be6ebb2adcefa5379c61a3678aa0df89025470fac871431b70467"
}
In diesem Paket steht das Folgende:
Ich bin Indigo und hier ist der Beweis. Ich poste von podunk.edu und hier ist der Beweis. Ich habe ein Paket für Sie. Die Kontrollnummer lautet „1eaa6613....“.
Example.com nimmt dieses Paket an und sagt: „Moment mal - ich kenne Sie nicht. Ich möchte beweisen, wer du bist.“ Example.com stellt also eine Verbindung zu podunk.edu über eine „bekannte URL“ her, die wir für diesen Zweck verwenden, und sucht nach der oben genannten „guid“. Es sollte eine Reihe von Informationen zurückgeben, darunter auch einen öffentlichen Schlüssel. Example.com verwendet diesen Schlüssel, um die Signaturen in der Nachricht zu überprüfen und festzustellen, ob es tatsächlich eine Person namens Indigo bei podunk.edu gibt. Wir müssen dies nur einmal tun. (Beachten Sie, dass Indigo von jedem Ort aus posten kann. Wir müssen nur beweisen, dass es sich um Indigo handelt und dass Indigo beweisen kann, dass er von einem anderen Standort aus postet).
Dann trennt example.com die Verbindung und weist darauf hin, dass eine Nachricht auf podunk.edu wartet. Entweder sofort oder immer dann, wenn der Drang besteht (je nachdem, wie wichtig Indigo für jemanden auf dieser Website ist), „ruft“ example.com podunk.edu an. Die Nachricht lautet in etwa so:
{
"type":"pickup",
"url":"http:\/\/example.com",
"callback_sig":"teE1_fLIqfyeCuZY4iS7sNU8jUlUuqYOYBiHLarkC99I9K-uSr8DAwVW8ZPZRK-uYdxRMuKFb6cumF_Gt9XjecCPBM8HkoXHOi_VselzJkxPwor4ZPtWYWWaFtRfcAm794LrWjdz62zdESTQd2JJIZWbrli1sUhK801BF3n0Ye6-X1MWhy9EUTVlNimOeRipcuD_srMhUcAXOEbLlrugZ8ovy2YBe6YOXkS8jj0RSFjsOduXAoVhQmNpcobSYsDvaQS3e3MvE6-oXE602zGQhuNLr7DIMt9PCdAeQo-ZM-DHlZGCkGk4O2oQFCXFzGPqLUMWDACGJfTfIWGoh_EJqT_SD5b_Yi_Wk9S1lj7vb-lmxe5JuIf7ezWzHoBT8vswnZxPYlidH2i9wapdzij9il_qqcCWWHIp7q_XkY_Zj52Z4r4gdmiqM-8y1c_1SDX7hrJFRwqL_PKFbEvyi5nMWTEzqp55Tay5Woiv19STK_H_8ufFfD9AOkYnk6rIOMsk9dn3a5tAFpDRyRndXkBWAXwiJjiND2zjue7BFu7Ty40THXcfYRh1a5XrAXcaGeYuagg-8J9tAufu9_LY3qGazFg8kRBVMOn4M8DRKSIhKj7z4MnbYL0s09gREojy4jqWO3VkaOjP2jUGzoPuUDLasudE1ehWFq0K_MTQNavgmp8",
"callback":"http:\/\/example.com\/post",
"secret":"1eaa6613699be6ebb2adcefa5379c61a3678aa0df89025470fac871431b70467",
"secret_sig":"O7nB4_UJHBXi28Suwl9LBZF9hI_9KGVTgehnUlWF1oYMNRnBbVHB9lzUfAoalvp3STbU3xJbtD_S58tv6MfV7J5j2V_S1W5ex3dulmDGB8Pt_7Fe5mbEPmjQFcfv3Eg5dUjYIuDl0TDScfrHyImj7RZIWHbwd7wWVoMzzDa_o33klpYmKZCBvObCh55bRrlFkXZs_dRuOiPwkfX0C6_XES4OyOIYl45V30rdhmf-STrf4L9dKYy_axQ12RIwRcKychvVLwlUJn3bn9lgNXRRU_HTne-09OPcJbUOdcD3DkFoKOxMULBNKPHzsCau0ICYug7S0EP6LpCom_mW78s08LyVA1vYeFZjevBCiGecj57yIAQDYi6_rpWJfihYaWHRN0oqtScUR4Bdf0bQbEHxMs4zAtrOAxfyJCbi6U1pfnGgzXzB9ulOYGnVGNTF7Ey4K7FOZIBtk0ILY2JfvBUaVvVs8ttagOOHmhWhnbCvrnOFlkNdlce7zoJCSUJENUOCYmTRfwB_Jno5fAzRnrsYU3_Z-l1mzniU_OmUPz8mPEh7PwhkqAiVlyaM-q15gn7l2lAIDk9kp2X_iCme7v4V0ADN_DbpaI_0-6mPw5HLbKrCsA-sxlSMB4DO4lDCHYkauj0l25sbfroRWB_hax1O4Q0oWyOlVJLUqEC5nuUJCCE"
}
Was diese Nachricht aussagt, ist: Hier ist example.com, ich habe einen Beweis, und ich bin hier, um ein Paket abzuholen. Hier ist die Sendungsverfolgungsnummer, und hier ist der Beweis, dass dies die Sendungsverfolgungsnummer ist, die Sie vermutlich an example.com gesendet haben.
Gut genug. Podunk.edu überprüft die Geschichte und tatsächlich, es ist example.com, und ja, da wartet ein Paket mit dieser Kontrollnummer. Hier ist das Paket...
{
"success":1,
"pickup":{
"notify":{
"type":"notify",
"sender":{
"guid":"kgVFf_1_SSbyqH-BNWjWuhAvJ2EhQBTUdw-Q1LwwssAntr8KTBgBSzNVzUm9_RwuDpxI6X8me_QQhZMf7RfjdA",
"guid_sig":"PT9-TApzpm7QtMxC63MjtdK2nUyxNI0tUoWlOYTFGke3kNdtxSzSvDV4uzq_7SSBtlrNnVMAFx2_1FDgyKawmqVtRPmT7QSXrKOL2oPzL8Hu_nnVVTs_0YOLQJJ0GYACOOK-R5874WuXLEept5-KYg0uShifsvhHnxnPIlDM9lWuZ1hSJTrk3NN9Ds6AKpyNRqf3DUdz81-Xvs8I2kj6y5vfFtm-FPKAqu77XP05r74vGaWbqb1r8zpWC7zxXakVVOHHC4plG6rLINjQzvdSFKCQb5R_xtGsPPfvuE24bv4fvN4ZG2ILvb6X4Dly37WW_HXBqBnUs24mngoTxFaPgNmz1nDQNYQu91-ekX4-BNaovjDx4tP379qIG3-NygHTjFoOMDVUvs-pOPi1kfaoMjmYF2mdZAmVYS2nNLWxbeUymkHXF8lT_iVsJSzyaRFJS1Iqn7zbvwH1iUBjD_pB9EmtNmnUraKrCU9eHES27xTwD-yaaH_GHNc1XwXNbhWJaPFAm35U8ki1Le4WbUVRluFx0qwVqlEF3ieGO84PMidrp51FPm83B_oGt80xpvf6P8Ht5WvVpytjMU8UG7-js8hAzWQeYiK05YTXk-78xg0AO6NoNe_RSRk05zYpF6KlA2yQ_My79rZBv9GFt4kUfIxNjd9OiV1wXdidO7Iaq_Q",
"url":"http:\/\/z.podunk.edu",
"url_sig":"T8Bp7j5DHHhQDCFcAHXfuhUfGk2P3inPbImwaXXF1xJd3TGgluoXyyKDx6WDm07x0hqbupoAoZB1qBP3_WfvWiJVAK4N1FD77EOYttUEHZ7L43xy5PCpojJQmkppGbPJc2jnTIc_F1vvGvw5fv8gBWZvPqTdb6LWF6FLrzwesZpi7j2rsioZ3wyUkqb5TDZaNNeWQrIEYXrEnWkRI_qTSOzx0dRTsGO6SpU1fPWuOOYMZG8Nh18nay0kLpxReuHCiCdxjXRVvk5k9rkcMbDBJcBovhiSioPKv_yJxcZVBATw3z3TTE95kGi4wxCEenxwhSpvouwa5b0hT7NS4Ay70QaxoKiLb3ZjhZaUUn4igCyZM0h6fllR5I6J_sAQxiMYD0v5ouIlb0u8YVMni93j3zlqMWdDUZ4WgTI7NNbo8ug9NQDHd92TPmSE1TytPTgya3tsFMzwyq0LZ0b-g-zSXWIES__jKQ7vAtIs9EwlPxqJXEDDniZ2AJ6biXRYgE2Kd6W_nmI7w31igwQTms3ecXe5ENI3ckEPUAq__llNnND7mxp5ZrdXzd5HHU9slXwDShYcW3yDeQLEwAVomTGSFpBrCX8W77n9hF3JClkWaeS4QcZ3xUtsSS81yLrp__ifFfQqx9_Be89WVyIOoF4oydr08EkZ8zwlAsbZLG7eLXY"
},
"callback":"\/post",
"version":1,
"secret":"1eaa6613699be6ebb2adcefa5379c61a3678aa0df89025470fac871431b70467"
},
"message":{
"message_id":"10b049ce384cbb2da9467319bc98169ab36290b8bbb403aa0c0accd9cb072e76@podunk.edu",
"message_top":"10b049ce384cbb2da9467319bc98169ab36290b8bbb403aa0c0accd9cb072e76@podunk.edu",
"message_parent":"10b049ce384cbb2da9467319bc98169ab36290b8bbb403aa0c0accd9cb072e76@podunk.edu",
"created":"2012-11-20 04:04:16",
"edited":"2012-11-20 04:04:16",
"title":"",
"body":"Hi Nickordo",
"app":"",
"verb":"post",
"object_type":"",
"target_type":"",
"permalink":"",
"location":"",
"longlat":"",
"owner":{
"name":"Indigo",
"address":"indigo@podunk.edu",
"url":"http:\/\/podunk.edu",
"photo":{
"mimetype":"image\/jpeg",
"src":"http:\/\/podunk.edu\/photo\/profile\/m\/5"
},
"guid":"kgVFf_1_SSbyqH-BNWjWuhAvJ2EhQBTUdw-Q1LwwssAntr8KTBgBSzNVzUm9_RwuDpxI6X8me_QQhZMf7RfjdA",
"guid_sig":"PT9-TApzpm7QtMxC63MjtdK2nUyxNI0tUoWlOYTFGke3kNdtxSzSvDV4uzq_7SSBtlrNnVMAFx2_1FDgyKawmqVtRPmT7QSXrKOL2oPzL8Hu_nnVVTs_0YOLQJJ0GYACOOK-R5874WuXLEept5-KYg0uShifsvhHnxnPIlDM9lWuZ1hSJTrk3NN9Ds6AKpyNRqf3DUdz81-Xvs8I2kj6y5vfFtm-FPKAqu77XP05r74vGaWbqb1r8zpWC7zxXakVVOHHC4plG6rLINjQzvdSFKCQb5R_xtGsPPfvuE24bv4fvN4ZG2ILvb6X4Dly37WW_HXBqBnUs24mngoTxFaPgNmz1nDQNYQu91-ekX4-BNaovjDx4tP379qIG3-NygHTjFoOMDVUvs-pOPi1kfaoMjmYF2mdZAmVYS2nNLWxbeUymkHXF8lT_iVsJSzyaRFJS1Iqn7zbvwH1iUBjD_pB9EmtNmnUraKrCU9eHES27xTwD-yaaH_GHNc1XwXNbhWJaPFAm35U8ki1Le4WbUVRluFx0qwVqlEF3ieGO84PMidrp51FPm83B_oGt80xpvf6P8Ht5WvVpytjMU8UG7-js8hAzWQeYiK05YTXk-78xg0AO6NoNe_RSRk05zYpF6KlA2yQ_My79rZBv9GFt4kUfIxNjd9OiV1wXdidO7Iaq_Q"
},
"author":{
"name":"Indigo",
"address":"indigo@podunk.edu",
"url":"http:\/\/podunk.edu",
"photo":{
"mimetype":"image\/jpeg",
"src":"http:\/\/podunk.edu\/photo\/profile\/m\/5"
},
"guid":"kgVFf_1_SSbyqH-BNWjWuhAvJ2EhQBTUdw-Q1LwwssAntr8KTBgBSzNVzUm9_RwuDpxI6X8me_QQhZMf7RfjdA",
"guid_sig":"PT9-TApzpm7QtMxC63MjtdK2nUyxNI0tUoWlOYTFGke3kNdtxSzSvDV4uzq_7SSBtlrNnVMAFx2_1FDgyKawmqVtRPmT7QSXrKOL2oPzL8Hu_nnVVTs_0YOLQJJ0GYACOOK-R5874WuXLEept5-KYg0uShifsvhHnxnPIlDM9lWuZ1hSJTrk3NN9Ds6AKpyNRqf3DUdz81-Xvs8I2kj6y5vfFtm-FPKAqu77XP05r74vGaWbqb1r8zpWC7zxXakVVOHHC4plG6rLINjQzvdSFKCQb5R_xtGsPPfvuE24bv4fvN4ZG2ILvb6X4Dly37WW_HXBqBnUs24mngoTxFaPgNmz1nDQNYQu91-ekX4-BNaovjDx4tP379qIG3-NygHTjFoOMDVUvs-pOPi1kfaoMjmYF2mdZAmVYS2nNLWxbeUymkHXF8lT_iVsJSzyaRFJS1Iqn7zbvwH1iUBjD_pB9EmtNmnUraKrCU9eHES27xTwD-yaaH_GHNc1XwXNbhWJaPFAm35U8ki1Le4WbUVRluFx0qwVqlEF3ieGO84PMidrp51FPm83B_oGt80xpvf6P8Ht5WvVpytjMU8UG7-js8hAzWQeYiK05YTXk-78xg0AO6NoNe_RSRk05zYpF6KlA2yQ_My79rZBv9GFt4kUfIxNjd9OiV1wXdidO7Iaq_Q"
}
}
}
}
Und das ist das Paket (die ursprüngliche Nachricht). Example.com wandelt diese in eine Form um, die von Nickordo eingesehen werden kann, und benachrichtigt Nickordo, dass es eine neue Nachricht gibt. Podunk.edu könnte feststellen, dass noch andere Pakete auf example.com warten. Wenn dies der Fall ist, kann es auch alle anderen wartenden Pakete zu diesem Zeitpunkt versenden. Jedes dieser Pakete ist mit der ursprünglichen Sendungsnummer versehen.
Hubzilla FAQ
Gibt es eine Möglichkeit, das Admin-Konto zu ändern?
Gibt es eine Möglichkeit, mehrere Administratoren zu haben?
Ja, aber im Moment ist es noch etwas umständlich, da es noch nicht in der Benutzeroberfläche sichtbar ist. Um ein Konto zu einem administrativen Konto zu machen, muss man 4096 zum account_roles-Eintrag in der Kontotabelle der Datenbank hinzufügen. Um administrative Berechtigungen zu entfernen, muss man 4096 von den Kontorollen abziehen.
Ich kann mich einloggen, aber es gibt keine Beiträge oder Webseiten
Höchstwahrscheinlich ist Ihre Artikeltabelle abgestürzt. Führen Sie den MySQL-Befehl
repair table item;
Das Einloggen funktioniert nicht, sofort nach dem Einloggen wird die Seite neu geladen und ich werde ausgeloggt
Höchstwahrscheinlich ist Ihre Sitzungstabelle abgestürzt. Führen Sie den MySQL-Befehl
repair table session;
aus.
Wenn ich das Thema wechsle, werden manchmal Elemente des einen Themas über das andere gelegt
a) store/[data]/smarty3 ist für den Webserver nicht beschreibbar. Machen Sie es möglich. b) Sie verwenden Midori, oder bei bestimmten Themes Konqueror im KHTML-Modus.
Mein Netzwerk-Tab wird nicht geladen, es scheint durch ein Foto oder Video verursacht zu werden
Ihr PHP-Speicherlimit ist zu niedrig. Erhöhen Sie die Größe der memory_limit-Anweisung in Ihrer php.ini Entgegen der landläufigen Meinung hat die Anzahl der Nutzer eines Hubs keinen Einfluss auf das benötigte Speicherlimit, vielmehr zählt der Inhalt einer individuellen Matrix. Streams mit vielen Fotos und Videos benötigen mehr Speicher als Streams mit viel Text.
Ich habe keine Kommunikation mit jemandem
Sie lauschen auf Port 443, haben aber kein gültiges SSL-Zertifikat. Dies gilt auch, wenn Ihre Basisurl http lautet. Lauschen Sie nicht auf Port 443, wenn Sie ihn nicht verwenden können. Es wird dringend empfohlen, dieses Problem durch die Installation eines gültigen SSL-Zertifikats für den Browser zu lösen, anstatt Port 443 zu deaktivieren.
Wie kann ich eine Nicht-Git-Installation aktualisieren?
- Sichern Sie .htconfig.php
- Sichern Sie alles in store/
- Sichern Sie alle benutzerdefinierten Änderungen in mod/site/ und view/site
- Löschen Sie Ihre bestehende Installation
- Laden Sie die neue Version hoch.
- Laden Sie die neue Version der Themes und Addons hoch.
- Stellen Sie alles wieder her, was Sie zuvor gesichert haben.
Was muss ich tun, wenn ich meinen Hub auf einen anderen Server verschiebe?
- Erstellen Sie einen Git-Klon auf dem neuen Server. Wiederholen Sie den Vorgang für alle benutzerdefinierten Themes und Addons.
- Rsync .htconfig.php
- Rsync alles in store/
- Rsync alles in mod/site/ und view/site (diese sind nur vorhanden, wenn Sie eigene Module haben)
- Dump und Wiederherstellung der DB.
Wie installiere ich einen bestehenden Hub auf demselben Server neu?
git reset --hard HEAD
setzt alle Dateien auf ihre Upstream-Standardwerte zurück. Dabei werden keine lokalen Dateien zurückgesetzt, die nicht auch im Upstream existieren. Wenn Sie z.B. lokale Änderungen an mod/channel.php vorgenommen haben, werden diese zurückgesetzt - nicht aber die Änderungen in mod/site/channel.php.
- Wenn Sie unbedingt eine Neuinstallation durchführen müssen - z.B. wenn Sie das Betriebssystem aktualisieren müssen - befolgen Sie die Schritte für den Umzug auf einen anderen Server, aber anstatt rsync zu verwenden, erstellen Sie ein Backup und stellen Sie es auf andere Weise wieder her.
Installieren Sie einen Hub nicht mit einer neuen Datenbank und einer neuen .htconfig.php neu, es sei denn, dies ist der allerletzte Ausweg. Das Anlegen eines temporären Accounts und das Anfordern von Hilfe über einen Support-Kanal für nicht-triviale Neuinstallationen ist einer Neuinstallation vorzuziehen.
Wie kann ich die Standard-Homepage für abgemeldete Besucher festlegen?
Verwenden Sie das Addon custom_home, das im Hauptrepository für Addons verfügbar ist.
Was bedeuten die verschiedenen Einstellungen für den Verzeichnismodus?
// Konfigurieren Sie, wie wir mit Verzeichnisservern kommunizieren.
// DIRECTORY_MODE_NORMAL = Verzeichnis-Client, wir finden ein Verzeichnis (alle Abfragen Ihrer Mitglieder werden an andere Stellen geleitet)
// DIRECTORY_MODE_SECONDARY = Zwischenspeicherverzeichnis oder Mirror (hält sich synchron mit dem primären Realm [fügt erhebliche Cron-Ausführungszeit hinzu])
// DIRECTORY_MODE_PRIMARY = Hauptverzeichnisserver (dies ist nur sinnvoll, wenn Sie einen eigenen Realm betreiben. einer pro Realm)
// DIRECTORY_MODE_STANDALONE = „Off the grid“ oder private Verzeichnisdienste (nur lokale Site-Mitglieder im Verzeichnis)
- Die Voreinstellung ist NORMAL. Damit werden die meisten Verzeichnisdienste auf einen anderen Server verlagert. Der verwendete Server ist der config:system/directory_server. Diese Einstellung KANN durch den Code auf einen der Projektsekundärserver aktualisiert werden, wenn der aktuelle Server nicht erreichbar ist. Sie sollten entweder die Kontrolle über diesen anderen Server haben oder ihm vertrauen, dass er diese Einstellung verwendet.
- SEKUNDÄR. Dies ermöglicht es Ihrer lokalen Site, als Verzeichnisserver zu fungieren, ohne die Abfragen Ihrer Mitglieder einem anderen Server zu überlassen. Es erfordert zusätzliche Verarbeitungszeit während der Cron-Abfrage und wird nicht empfohlen, auf einem gemeinsam genutzten Webhost ausgeführt zu werden.
- PRIMÄR. Dies ermöglicht es Ihnen, ein komplett separates 'Netzwerk' von Verzeichnisservern mit einem eigenen Realm zu betreiben. Standardmäßig befinden sich alle Server im Realm RED_GLOBAL, es sei denn, die Einstellung config:system/directory_realm wird überschrieben. Verwenden Sie dies nicht, wenn Sie keinen eigenen directory_realm haben.
- STANDALONE. Dies ist wie primary, außer dass es sich um ein eigenständiges „Netzwerk“ handelt, das mit keinem anderen Server kommuniziert. Verwenden Sie dies, wenn Sie nur einen Server haben und von den Red#Matrix-Verzeichnislisten getrennt sein wollen.