Outline ist eine schöne, schnelle und flexible Team-Wissensdatenbank und Wiki-Software, mit der Sie Ihre interne Dokumentation, Betriebshandbücher, Handbücher und mehr organisieren können.
**Aktualisierung:** Dieses Tutorial wurde für 2024 mit Unterstützung für lokale Dateispeicherung aktualisiert. Schauen Sie sich auch die Kommentare an, da sie einige großartige Lösungen für häufige Probleme enthalten!
Obwohl Outline eine gehostete Lösung ist, handelt es sich um eine Open-Source-Software. Das heißt, Sie können es auf Ihrem eigenen Server installieren und verwalten. Das Outline-Team hat eine Dokumentation für die eigene Installation bereitgestellt, die jedoch etwas kompliziert ist (selbst für einen erfahrenen Entwickler wie mich).
Nach vielen Versuchen und Fehlschlägen habe ich beschlossen, Ihnen zu helfen, den Ärger zu vermeiden, indem ich eine einfache, schrittweise Anleitung schreibe, um die Outline-Team-Wissensdatenbank und das Wiki auf Ihrem eigenen Server zum Laufen zu bringen. Und das mit Erfolg - gleich beim ersten Mal!
Wichtigste Erkenntnisse
- Outline ist eine außergewöhnliche Wissensdatenbank und Wiki-Software, die für Einzelpersonen, Unternehmen und Teams geeignet ist.
- Es ist einfach, Outline selbst zu hosten, wenn Sie die richtige Anleitung haben, und diese detaillierte Anleitung wird Ihnen Schritt für Schritt zeigen, wie.
- Sobald Sie fertig sind, können Sie Outline auf Ihrem eigenen Server nutzen - und das ohne großen Aufwand!
Vision der Ergebnisse
Wenn Sie die einzelnen Schritte dieser Anleitung zur Installation der Outline-Team-Wissensdatenbank und des Wikis unter Ubuntu sorgfältig befolgen, werden Sie die folgenden Ergebnisse erzielen:
- Eine öffentlich zugängliche, SSL-gesicherte URL, unter der Sie auf Ihre neue, selbst gehostete Outline-Installation zugreifen können. Sie können sich die Beispielinstallation ansehen, die ich nach genau dem gleichen Verfahren wie in diesem Tutorial erstellt habe: https://outline.thomasgriffin.com
- Ein täglicher Cron, der Ihr SSL-Zertifikat überprüft und automatisch erneuert
- Ein monatlicher Cron, der automatisch nach neuen offiziellen Outline-Versionen sucht und diese anwendet.
- Sie haben die Gewissheit, dass Sie sich die Kopfschmerzen erspart haben, die Sie sich selbst machen mussten. 💯
Voraussetzungen
Sie benötigen die folgenden Dinge, um dieses Tutorial erfolgreich abzuschließen:
- Ein Digital Ocean-Konto. Es gibt zwar auch andere Hosting-Plattformen, die Sie verwenden können, aber ich habe mich für Digital Ocean entschieden, weil es so einfach ist, das für die Unterstützung von Outline erforderliche Servergerüst einzurichten. Ich kann nicht garantieren, dass dieses Tutorial auf einer anderen Serverplattform funktioniert, da ich es dort nicht ausprobiert habe.
- Die Möglichkeit, DNS-Einträge zu ändern, um eine Subdomain für den öffentlichen Zugang zu Ihrer Outline-Instanz hinzuzufügen. Ich empfehle Cloudflare, da ich es in diesem Tutorium zur Demonstration verwenden werde.
- Ein Google Workspace-Konto. Outline bietet viele verschiedene Arten der Authentifizierung an (z. B. Slack oder Microsoft), aber ich habe mich für Google entschieden, weil ich ein Google Workspace-Konto habe, das ich für Tests verwenden kann.
- OPTIONAL: ein Amazon Web Services (AWS)-Konto. Wenn Sie Ihre Assets nicht lokal speichern möchten, benötigen Sie dieses, um sowohl IAM als auch S3 einzurichten und zu konfigurieren, um alle Ihre Outline-Assets zu hosten. Beide Optionen werden in diesem Lernprogramm vorgestellt.
Ausgehend von meiner eigenen Erfahrung, die ich gemacht habe, als ich dieses Tutorial mehrmals durchlief, um die Ergebnisse zu überprüfen, werden Sie etwa 45-60 Minuten für die Bearbeitung benötigen. Wenn Sie sich für einen der oben genannten Dienste registrieren müssen, kann es etwas länger dauern.
Außerdem kostet diese Einrichtung in der Regel ~$6/Monat (ohne Gebühren für Google Workspace oder andere Authentifizierungsanbieter), aber wenn Sie sich über meinen Link bei Digital Ocean anmelden, erhalten Sie die ersten 2 Monate kostenlos. Ich halte das für angemessen angesichts des Wertes, den Outline Ihrem Team und seiner Produktivität bieten kann.
Inhaltsübersicht
Da diese Anleitung sehr umfangreich und technisch ist, habe ich ein hilfreiches Inhaltsverzeichnis erstellt, damit Sie bei Bedarf nachschlagen können.
- Einrichten des Servers auf Digital Ocean
- Installieren und Konfigurieren des Servers Voraussetzungen
- Konfigurieren von Subdomain-DNS-Einträgen, Nginx und Let's Encrypt
- Einrichten von AWS IAM und S3
- Erstellen einer Google Workspace Oauth-App
- Erstellen und Ausführen des Outline-Docker-Images
- Konfigurieren des Nginx-Server-Blocks
- Anzeigen und Authentifizieren in Ihrer Gliederung Selbst gehostete Installation
- SMTP konfigurieren
- Konfigurieren von automatischen Updates für Ihre selbst gehostete Outline-Installation
- Hilfreiche Befehle, Tipps und Tricks
- Einpacken
Beginnen wir mit der Installation der Wissensdatenbank und des Wikis des Outline-Teams unter Ubuntu!
Einrichten des Servers auf Digital Ocean
Outline erfordert ein Unix-basiertes Betriebssystem, und da Ubuntu sehr beliebt ist, werde ich es als Betriebssystem verwenden.
Gehen Sie zu Ihrem Digital Ocean-Konto und erstellen Sie ein neues Droplet. Wählen Sie das Rechenzentrum Ihrer Wahl, dann wählen Sie Ubuntu 22.04 LTS x64 als Ihr Image, und wählen Sie dann die Option, die Sie am meisten für Ihren Server bevorzugen. Ich mag die $8/Monat 1GB Intel SSD-Option, da die Ausführung von SSH-Befehlen damit deutlich schneller ist als mit der Basisoption für $6/Monat.
Als Nächstes wählen Sie die gewünschte Authentifizierungsmethode aus (SSH-Schlüssel sind die bevorzugte Option, aber wenn das für Sie nicht funktioniert, werden auch root-Passwörter unterstützt).
Wählen Sie die restlichen Konfigurationsoptionen (ich empfehle, Backups zu aktivieren), passen Sie den Hostnamen Ihres Droplets an, fügen Sie beliebige Tags hinzu und erstellen Sie dann Ihr neues Droplet.
Sobald Ihr Droplet bereitgestellt wurde, verbinden Sie sich per SSH mit dem Server, indem Sie Ihren bevorzugten Terminal-Client verwenden (anstelle von yourip
mit der IP, die Sie von Digital Ocean erhalten haben):
ssh -A root@Ihrip
Sobald Sie eingeloggt sind, können Sie alles auf dem Droplet aktualisieren. Wählen Sie "J" oder klicken Sie auf "Zurück", um alles zu aktualisieren/aktualisieren, was während des Prozesses empfohlen wird.
sudo apt update && sudo apt upgrade
Da für das Upgrade wahrscheinlich einige Dienste neu gestartet werden müssen, starten Sie den Server jetzt neu.
sudo Neustart
Durch den Neustart werden Sie von Ihrer Terminalsitzung abgemeldet. Warten Sie ein paar Minuten und melden Sie sich dann wieder an (ersetzen Sie yourip
mit der IP, die Sie von Digital Ocean erhalten haben):
ssh -A root@Ihrip
Führen Sie abschließend diesen Befehl erneut aus, um alle Pakete zu aktualisieren und zu aktualisieren, die zuvor einen Neustart erforderten.
sudo apt update && sudo apt upgrade
Bereitstellen eines Nicht-Root-Benutzers
Als Nächstes müssen Sie die Anleitung zur Ersteinrichtung des Servers mit Ubuntu 22.04 auf Digital Ocean befolgen. In dieser Anleitung werden Sie eine sicherere Umgebung für Ihren Server einrichten, einschließlich der Erstellung eines Nicht-Root-Benutzers und der Einrichtung einiger hilfreicher Firewalls, um den Zugriff auf Ihren Server zu sperren.
Bitte befolgen Sie alle in diesem Artikel aufgeführten Schritte! Der Rest des Tutorials setzt voraus, dass Sie über.
Sobald Sie die Schritte dort ausgeführt haben, müssen Sie sich mit dem neuen Benutzer, den Sie gerade erstellt haben, per SSH wieder in Ihren Server einloggen.
Sie können nun mit der Installation der Servervoraussetzungen für Outline fortfahren.
Installieren und Konfigurieren des Servers Voraussetzungen
Installation der Hauptkomponenten
Lassen Sie uns einige allgemeine Dienstprogramme installieren, die Ihr Server benötigt, um Outline erfolgreich in Betrieb zu nehmen.
Vergewissern Sie sich zunächst, dass Sie als Nicht-Root-Benutzer angemeldet sind, den Sie gerade erstellt haben.
Führen Sie dann den folgenden Befehl in Ihrem Terminal aus:
sudo apt update && sudo apt install apt-transport-https ca-certificates curl software-properties-common nano curl wget zip unzip gnupg
Geben Sie "Y" ein und drücken Sie die Eingabetaste, um alle Aufforderungen während der Installation zu akzeptieren.
Installation von Docker
Outline wird in einem Docker-Container ausgeführt. Daher müssen Sie Docker auf Ihrem neuen Server installieren und konfigurieren, um Outline zum Laufen zu bringen. Sie fügen eine neue Quelle für Docker hinzu, um die neueste stabile Version zu beziehen und deren Installation auf Ihrem Server zu überprüfen.
Führen Sie die folgenden Befehle nacheinander aus:
sudo apt update
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update && apt-cache policy docker-ce && sudo apt install docker-ce
Geben Sie "Y" ein und drücken Sie die Eingabetaste, um alle Aufforderungen während der Installation zu akzeptieren. Zu diesem Zeitpunkt sollte Docker erfolgreich auf Ihrem Server installiert sein. Um dies zu überprüfen, führen Sie diesen Befehl aus:
sudo systemctl status docker
Sie sollten eine Ausgabe wie diese sehen:
Wenn Sie den obigen Befehl eingegeben haben, geben Sie :q ein, um das Docker-Menü zu verlassen.
Erinnern Sie sich an den Nicht-Root-Benutzer, den Sie zuvor angelegt haben? Wenn nicht, folgen Sie bitte der Anleitung für die Ersteinrichtung eines Servers mit Ubuntu 22.04 auf Digital Ocean.
Fügen Sie diesen Benutzer der Gruppe docker
Gruppe, so dass Sie den Docker-Befehlen nicht das Präfix sudo
jedes Mal. Führen Sie den folgenden Befehl aus und ersetzen Sie dabei ${USER}
mit dem Benutzernamen, den Sie zuvor gewählt haben.
sudo usermod -aG docker ${USER} && su - ${USER}
Wenn Sie nun die groups
sollten Sie nun sehen, dass Ihr Benutzer zu der docker
Gruppe.
Installation von Docker Compose
Um das Docker-Image zu erstellen, das für den Betrieb der Open-Source-Wissensdatenbank Outline und des Team-Wikis auf Ihrem Server erforderlich ist, müssen Sie Docker Compose installieren und konfigurieren.
Führen Sie den folgenden Befehl aus:
sudo apt update && sudo apt install docker-ce-cli containerd.io docker-compose-plugin docker-compose
Geben Sie "Y" ein und drücken Sie die Eingabetaste, um alle Aufforderungen während der Installation zu akzeptieren.
Sie sollten in der Lage sein, den folgenden Befehl auszuführen und die unten stehende Versionsausgabe zu sehen:
docker compose version
Ausgezeichnet! Docker ist bereit, mit Docker Compose verwendet zu werden, und Sie haben nun die erforderlichen Tools installiert, um Ihre benutzerdefinierte Gliederung zu erstellen und bereitzustellen docker-compose.yml
Datei.
Absicherung von Docker
Docker und UFW vertragen sich nicht gut miteinander. Docker überschreibt einen Großteil der iptables
Funktionalität, die von UFW verwendet wird. Das bedeutet, dass Docker standardmäßig alle Ihre Server-Ports für die Welt offenlegt. Igitt!
Das ist nicht gut, also müssen Sie Docker absichern und die Portfreigabe auf Ihrem Rechner begrenzen. Es gibt ein ausgezeichnetes Github-Repository, das dies im Detail erklärt, wenn Sie mehr erfahren möchten.
Um Docker zu sichern und UFW wie erwartet arbeiten zu lassen, führen Sie den folgenden Befehl aus:
sudo nano /etc/ufw/after.rules
Wenn Sie dazu aufgefordert werden, fügen Sie den folgenden Code ganz am Ende der Datei ein (nach dem letzten COMMIT
Text):
# UFW UND DOCKER BEGINNEN
*Filter
:ufw-user-forward - [0:0]
:ufw-docker-logging-deny - [0:0]
:DOCKER-USER - [0:0]
-A DOCKER-USER -j ufw-user-forward
-A DOCKER-BENUTZER -j RETURN -s 10.0.0.0/8
-A DOCKER-USER -j RETURN -s 172.16.0.0/12
-A DOCKER-USER -j RETURN -s 192.168.0.0/16
-A DOCKER-USER -p udp -m udp --sport 53 --dport 1024:65535 -j RETURN
-A DOCKER-USER -j ufw-docker-logging-deny -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -d 192.168.0.0/16
-A DOCKER-USER -j ufw-docker-logging-deny -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -d 10.0.0.0/8
-A DOCKER-USER -j ufw-docker-logging-deny -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -d 172.16.0.0/12
-A DOCKER-USER -j ufw-docker-logging-deny -p udp -m udp --dport 0:32767 -d 192.168.0.0/16
-A DOCKER-USER -j ufw-docker-logging-deny -p udp -m udp --dport 0:32767 -d 10.0.0.0/8
-A DOCKER-USER -j ufw-docker-logging-deny -p udp -m udp --dport 0:32767 -d 172.16.0.0/12
-A DOCKER-USER -j RETURN
-A ufw-docker-logging-deny -m limit --limit 3/min --limit-burst 10 -j LOG --log-prefix "[UFW DOCKER BLOCK] "
-A ufw-docker-logging-deny -j DROP
COMMIT
# UFW UND DOCKER BEENDEN
Drücken Sie Crtl + X, Y und Return, um die Datei zu speichern. Laden Sie anschließend die UFW-Anwendung neu, indem Sie diesen Befehl ausführen (möglicherweise müssen Sie ihn zweimal ausführen):
sudo systemctl restart ufw
Abschließend müssen Sie Ihren Computer neu starten, damit alle Upgrades und Änderungen vollständig wirksam werden. Führen Sie den folgenden Befehl aus, um Ihren Rechner neu zu starten:
sudo Neustart
An diesem Punkt wird die SSH-Verbindung zu Ihrem Rechner geschlossen. Warten Sie etwa 60 Sekunden und melden Sie sich dann wieder an, indem Sie die ${USER}
mit dem Nicht-Root-Benutzer, den Sie zuvor erstellt haben, und der IP-Adresse für Ihren Server:
ssh -A ${BENUTZER}@ihrip
Bevor Sie mit Docker fortfahren, müssen Sie zunächst einige andere Dienste und Systeme konfigurieren. Das tun Sie jetzt und kehren später im Lehrgang zu Docker zurück.
Konfigurieren von Subdomain-DNS-Einträgen, Nginx und Let's Encrypt
DNS-Einträge
Wie ich bereits erwähnt habe, verwalte ich meine DNS-Einträge mit Cloudflare. Sie müssen die IP-Adresse Ihres neuen Digital Ocean-Droplets übernehmen und einen neuen A-Eintrag erstellen, der auf eine Subdomain Ihrer Wahl verweist.
Fügen Sie Ihren neuen A-Eintrag hinzu und aktualisieren Sie Ihre DNS-Einträge. Ich habe meine Subdomain wie folgt gewählt outline
Sie können also meine selbst gehostete Outline-Installation sehen unter https://outline.thomasgriffin.com. Wenn Sie Cloudflare verwenden, schalten Sie die Proxy-Einstellung vorerst aus. Sie können sie wieder einschalten, sobald Sie das Tutorial beendet haben.
Nachdem Sie den Zugriff auf die Subdomain konfiguriert haben, müssen Sie einen Webserver und ein SSL-Zertifikat hinzufügen, um öffentliche Anfragen zu bearbeiten.
In diesem Tutorial verwenden Sie Nginx als Reverse-Proxy, um in Ihrem Docker-Container auf Outline zuzugreifen, und Sie verwenden Let's Encrypt, um die Erstellung und Verwaltung von SSL-Zertifikaten zu verwalten.
Nginx
Ubuntu wird standardmäßig mit einer älteren Version von Nginx ausgeliefert, so dass Sie die neueste Version verwenden sollten.
Führen Sie die folgenden Befehle nacheinander in Ihrem Terminal aus:
curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
| sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
Wenn es so aussieht, als ob der Prozess an diesem Schritt hängen bleibt, müssen Sie wahrscheinlich Ihre sudo
Benutzerkennwort, um fortzufahren.
echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg arch=amd64] \
http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" \
| sudo tee /etc/apt/sources.list.d/nginx.list
sudo apt update && sudo apt install nginx
Nginx ist nun auf Ihrem Server installiert. Lassen wir nun den Webverkehr auf dem Server zu. Führen Sie den folgenden Befehl in Ihrem Terminal aus:
sudo ufw allow 80 && sudo ufw allow 443
Das ist alles, was Sie im Moment tun müssen. Sie werden zu Nginx zurückkehren, um eingehenden Datenverkehr zu empfangen und ordnungsgemäß zu verarbeiten, später im Tutorial.
Let's Encrypt
Let's Encrypt ist ein Server-Dienstprogramm zur Verwaltung von SSL-Zertifikaten. Sie verwenden es, um das SSL-Zertifikat für Ihre Outline-Installation zu erstellen und zu verwalten.
Führen Sie die folgenden Befehle aus, um Let's Encrypt auf Ihrem Server zu installieren:
sudo apt install snapd && sudo snap install core && sudo snap refresh core
sudo snap install --classic certbot
Verknüpfen wir die certbot
Befehl an die /usr/bin
Verzeichnis, damit Sie die certbot
Befehl ohne das Präfix snap:
sudo ln -s /snap/bin/certbot /usr/bin/certbot
Jetzt können Sie Ihr SSL-Zertifikat für die gewählte Subdomain erstellen. Meine Subdomain ist outline
z.B. outline.thomasgriffin.com
. Führen Sie den folgenden Befehl aus und ersetzen Sie dabei ${DOMAIN}
mit der Subdomain/Domain-Kombination, die Sie für Ihre selbst gehostete Outline-Installation gewählt haben.
sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m noreply@${DOMAIN} -d ${DOMAIN} --pre-hook="systemctl stop nginx" --post-hook="systemctl start nginx"
Ihr neues SSL-Zertifikat sollte nun unter folgender Adresse gespeichert sein /etc/letsencrypt/live
.
Da Sie das SSL-Zertifikat mit dem Certbot Snap-Tool erstellt haben, erstellt Certbot automatisch einen Timer, um das Zertifikat für Sie zu erneuern. Schön!
Einrichten von AWS IAM und S3
Dieser Abschnitt ist optional. Seit Outline v0.72.0 unterstützt Outline die lokale Speicherung von Assets auf dem Server. Wenn Sie nur lokal speichern möchten, können Sie diesen gesamten Abschnitt überspringen.
Outline kann verschiedene Arten von Dateianhängen für seine Dokumente akzeptieren. Aus diesem Grund benötigen Sie eine Dateispeicherlösung, um diese Anhänge zu hosten und bereitzustellen.
Richten wir einen speziellen IAM-Benutzer und ein S3-Bucket für Ihre Outline-Installation ein. Notieren Sie sich beim Erstellen dieser Elemente die zugehörigen Zonen, Schlüssel, Geheimnisse und Namen. Sie werden sie später bei der Konfiguration Ihrer docker-compose.yml
Datei.
Wenn Sie noch kein AWS-Konto haben, sollten Sie jetzt eines erstellen.
In diesem Tutorial verwende ich die folgenden Namen für den Benutzernamen und den Bucket-Namen:
- Benutzername:
Outline
- Name des Eimers:
tg-outline-assets
Da S3 Bucket-Namen eindeutig sind, müssen Sie einen eigenen Bucket-Namen erstellen. Die Bereiche, in denen Sie dies tun müssen, werden in den folgenden Schritten erwähnt.
Erstellen des S3 Buckets
Erstellen Sie Ihren S3-Bucket, um Gliederungsanhänge und Assets zu speichern.
Wie ich bereits erwähnt habe, werde ich den Eimernamen tg-outline-assets
. Sie müssen diesen Namen in Ihren eigenen eindeutigen Bucket-Namen ändern.
Navigieren Sie in der AWS-Konsole zu S3 und klicken Sie auf "Bucket erstellen", um zu beginnen.
Geben Sie den Namen des Eimers ein (in diesem Tutorial lautet er tg-outline-assets
) und wählen Sie die gewünschte Region aus. Sie müssen sich die Region Ihres Eimers notieren, da Sie diese später beim Einrichten Ihrer docker-compose.yml
Datei.
Wählen Sie im Abschnitt Objektbesitz die Option ACLs aktiviert und lassen Sie die Option Bucketbesitzer bevorzugt aktiviert.
Deaktivieren Sie im Abschnitt Block Public Access die Einstellung Block all public access und aktivieren Sie das Kontrollkästchen, um die Warnungen zu bestätigen. Dies ist erforderlich, damit bestimmte Bilder hochgeladen und in Ihrer Outline-Installation angezeigt werden können.
Die übrigen Bucket-Einstellungen lassen Sie so, wie sie voreingestellt sind. Scrollen Sie nach unten und klicken Sie auf "Bucket erstellen", um Ihren neuen S3-Bucket zu erstellen.
Suchen Sie auf dem Hauptbildschirm für den S3-Bucket Ihren neuen Bucket und klicken Sie ihn an. Klicken Sie dann auf die Registerkarte "Berechtigungen".
Scrollen Sie zum Ende der Registerkarte Berechtigungen und klicken Sie auf die Schaltfläche CORS (Cross-origin resource sharing), um diese zu bearbeiten.
Fügen Sie die folgende Richtlinienkonfiguration in den Editor ein und speichern Sie sie, wobei Sie Folgendes ersetzen ${DOMAIN}
mit der Domäne, die Sie für Ihre Outline-Installation gewählt haben. In diesem Beispiel verwende ich https://outline.thomasgriffin.com
(einschließlich der https://
Protokoll).
[
{
"AllowedHeaders": [
"*"
],
"AllowedMethods": [
"PUT",
"POST",
"DELETE"
],
"AllowedOrigins": [
"${DOMAIN}"
],
"ExposeHeaders": []
},
{
"AllowedHeaders": [],
"AllowedMethods": [
"GET"
],
"AllowedOrigins": [
"*"
],
"ExposeHeaders": []
}
]
Erstellen des IAM-Benutzers und der Richtlinie
Suchen Sie nach "IAM" und beginnen Sie, indem Sie auf "Benutzer hinzufügen" klicken.
Legen Sie den Benutzernamen als Outline
und wählen Sie als Berechtigungstyp "Zugangsschlüssel - Programmatischer Zugang". Wenn es keine Option zur Auswahl des programmatischen Zugriffs gibt, ist dieser standardmäßig aktiviert.
Wählen Sie auf dem nächsten Bildschirm "Vorhandene Richtlinien direkt anhängen" und klicken Sie dann auf die Schaltfläche "Richtlinie erstellen", um eine benutzerdefinierte Zugangsrichtlinie für diesen Benutzer zu erstellen.
Wählen Sie auf dem nächsten Bildschirm die Registerkarte "JSON" und fügen Sie den folgenden Richtliniencode in den Editor ein, wobei Sie Folgendes ersetzen ${BUCKET}
mit dem Namen des gerade erstellten S3-Buckets:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor",
"Effect": "Allow",
"Action": [
"s3:GetObjectAcl",
"s3:DeleteObject",
"s3:PutObject",
"s3:GetObject",
"s3:PutObjectAcl"
],
"Resource": "arn:aws:s3:::${BUCKET}/*"
}
]
}
Fahren Sie mit dem Hinzufügen der gewünschten Tags fort und fahren Sie dann mit dem nächsten Bildschirm fort, um der Richtlinie einen Namen und eine optionale Beschreibung zu geben. Ich habe mich für den Namen der Richtlinie entschieden OutlineS3
. Klicken Sie nach der Überprüfung auf "Richtlinie erstellen", um die neue Zugangsrichtlinie zu erstellen.
Nachdem Sie nun die neue benutzerdefinierte Richtlinie erstellt haben, müssen Sie sie Ihrem neuen IAM-Benutzer zuordnen. Klicken Sie wieder auf die andere IAM-Registerkarte und klicken Sie auf das Symbol Aktualisieren direkt über der Tabelle mit den Richtlinienergebnissen. Geben Sie "Gliederung" in die Suchleiste ein und wählen Sie dann Ihre neue benutzerdefinierte Richtlinie aus.
Fahren Sie mit dem nächsten Bildschirm fort und fügen Sie alle gewünschten Tags hinzu. Überprüfen Sie dann die Änderungen und klicken Sie auf "Benutzer erstellen", um den neuen Outline IAM-Benutzer zu erstellen.
Nachdem Sie den neuen Benutzer angelegt haben, Ich schlage vor, dass Sie die Zugangsdaten zur sicheren Aufbewahrung herunterladen oder irgendwo notierenda Sie sie bei der Konfiguration Ihres Systems verwenden werden. docker-compose.yml
Datei im weiteren Verlauf des Tutorials. Sie können sie finden, indem Sie zu IAM zurückkehren, auf den neu erstellten Benutzer klicken, dann zur Registerkarte "Sicherheitsberechtigungen" gehen und entweder neue Zugangsschlüssel herunterladen oder erstellen.
(Wenn AWS eine andere Methode empfiehlt, ignorieren Sie diese, wählen Sie eine Option wie z. B. Verwendung für CLI und erstellen Sie dann die Zugangsschlüssel).
Erstellen einer Google Workspace Oauth-App
Als nächstes müssen Sie die Authentifizierung in Outline aktivieren. Es gibt zwar viele Authentifizierungsmethoden, aber ich habe mich für Google entschieden, weil ich über ein Google Workspace-Konto verfüge, das über meine Domain verfügbar ist.
Wenn die Verwendung von Google bei Ihnen nicht funktioniert, können Sie auch andere Authentifizierungsmethoden ausprobieren, die in der Dokumentation aufgeführt sind. Ich kann nicht garantieren, dass sie funktionieren, da ich den Prozess nur mit Google getestet und überprüft habe.
Erstellen des Cloud-Projekts
Gehen Sie zur Google Developers Console und wechseln Sie ggf. zum entsprechenden Google Workspace-Nutzerkonto.
Wählen Sie das Dropdown-Menü "Projekt" in der Kopfzeile und klicken Sie auf "Neues Projekt", um zu beginnen.
Geben Sie dem Projekt einen Namen (ich habe es Outline Auth genannt), wählen Sie die Standorte aus und klicken Sie auf "Erstellen", um das neue Projekt zu erstellen.
Hinzufügen von Authentifizierungs-APIs
Vergewissern Sie sich, dass Ihr neues Projekt im Kopfmenü ausgewählt ist (an der gleichen Stelle, an der Sie zum Start auf das Dropdown-Symbol geklickt haben), und klicken Sie dann auf die Schaltfläche "APIs und Dienste aktivieren", um die erforderlichen Authentifizierungs-APIs zu Ihrem Projekt hinzuzufügen.
Geben Sie in der Suchleiste "google+" ein und wählen Sie dann die Option Google+ API. Klicken Sie nach der Auswahl auf "Aktivieren", um die API für Ihr Projekt zu aktivieren.
Konfigurieren des Oauth-Zustimmungsflusses
Als nächstes müssen Sie den Oauth-Zustimmungsfluss für Authentifizierungsanfragen konfigurieren.
Klicken Sie auf den Link "Oauth-Zustimmungsbildschirm" in der linken Seitenleiste. Wählen Sie die Option "Intern" und klicken Sie dann auf "Erstellen".
Geben Sie der App einen Namen (ich habe meine Outline Auth genannt) und füllen Sie die Benutzer-Support-E-Mail aus. Fügen Sie unter Autorisierte Domains Ihre Top-Level-Domain hinzu.
Da sich meine Gliederungsinstanz für dieses Tutorial unter https://outline.thomasgriffin.com
füge ich hinzu thomasgriffin.com
als eine autorisierte Domäne.
Geben Sie abschließend die E-Mail-Adresse eines Entwicklers ein und klicken Sie auf "Speichern und weiter".
Klicken Sie auf dem Bildschirm "Bereiche" auf "Bereiche hinzufügen oder entfernen" und wählen Sie die erste, zweite und dritte Option in der Liste. Scrollen Sie dann zum unteren Ende des Flyout-Fensters und klicken Sie auf "Aktualisieren".
Blättern Sie bis zum Ende des Bildschirms und klicken Sie auf "Speichern und weiter".
Erzeugen von Oauth-Zugangsdaten
Schließlich müssen Sie Oauth-Anmeldeinformationen für das von Ihnen erstellte Google Cloud-Projekt generieren.
Klicken Sie auf den Link "Berechtigungsnachweise" in der linken Seitenleiste. Klicken Sie auf die Schaltfläche "Berechtigungsnachweise erstellen" und wählen Sie dann "Oauth-Client-ID" als Berechtigungstyp.
Wählen Sie auf dem nächsten Bildschirm "Webanwendung" als Anwendungstyp aus und geben Sie ihr einen Namen. Für dieses Lernprogramm habe ich meiner Anwendung den Namen Outline Oauth Client
.
Geben Sie unter "Autorisierte JavaScript-Ursprünge" die URL Ihrer Subdomain ein. Für dieses Lernprogramm lautet meine https://outline.thomasgriffin.com
.
Geben Sie unter Authorized redirect URIs die folgende URL ein und ersetzen Sie ${DOMAIN}
mit Ihrem Subdomain-/Domainnamen:
https://${DOMAIN}/auth/google.callback
Klicken Sie auf "Erstellen", um Ihre neuen Projektanmeldedaten zu erstellen. Kopieren Sie die Client-ID und das Geheimnis und notieren Sie sie an einem sicheren Ort, da Sie sie bei der Konfiguration Ihres Projekts verwenden werden. docker-compose.yml
Datei im nächsten Schritt.
Erstellen und Ausführen des Outline-Docker-Images
Jetzt können Sie Ihre benutzerdefinierte docker-compose.yml
Datei, die die Dienste definiert, die für den Betrieb von Outline auf Ihrem Droplet erforderlich sind.
Als Erstes müssen Sie auf dem Server ein neues Verzeichnis als "Home" für Ihr Outline-Projekt erstellen. Erinnern Sie sich an den Nicht-Root-Benutzer, den Sie im Digital Ocean-Tutorial am Anfang dieses Artikels erstellt haben? Sie werden das Home-Verzeichnis dieses Benutzers verwenden, um Ihre Dateien zu speichern. Führen Sie den folgenden Befehl aus und ersetzen Sie dabei ${USER}
mit dem Namen des Benutzers, den Sie zuvor erstellt haben.
mkdir -p /home/${USER}/docker && mkdir -p /home/${USER}/docker/logs && cd /home/${USER}/docker && touch docker.env && touch docker-compose.yml
Bevor Sie Docker booten, müssen Sie einige notwendige Umgebungsvariablen zu Ihrem neuen docker.env
Datei. Ich verwende nicht alle verfügbaren Variablen für dieses Tutorial. Wenn Sie also mehr wissen wollen, klicken Sie hier, um alle verfügbaren Umgebungsvariablen zu sehen.
Hier sind die Variablen, die Sie in Ihrem docker.env
Datei:
## Erforderliche Variablen
SECRET_KEY=
UTILS_SECRET=
FORCE_HTTPS=
ENABLE_UPDATES=
WEB_CONCURRENCY=
## Postgres-Variablen
POSTGRES_USER=
POSTGRES_PASSWORT=
POSTGRES_DB=
DATABASE_URL=
PGSSLMODE=
## Redis-Variablen
REDIS_URL=
## Domain-Variablen
URL=
PORT=
## Ratenbegrenzungsvariablen
RATE_LIMITER_ENABLED=
RATE_LIMITER_DURATION_WINDOW=
RATE_LIMITER_REQUESTS=
## Lokale Dateispeichervariablen - NUR VERWENDEN, WENN ASSETS LOKAL GESPEICHERT WERDEN
FILE_STORAGE=
FILE_STORAGE_LOCAL_ROOT_DIR=
FILE_STORAGE_UPLOAD_MAX_SIZE=
## AWS-Variablen - OPTIONAL, ENTFERNEN, wenn AWS nicht für die ASSET-SPEICHERUNG verwendet wird
AWS_REGION=
AWS_S3_FORCE_PATH_STYLE=
AWS_S3_UPLOAD_BUCKET_NAME=
AWS_S3_UPLOAD_BUCKET_URL=
AWS_S3_UPLOAD_MAX_SIZE=
AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
## Google Login Authentifizierungsvariablen
GOOGLE_CLIENT_ID=
GOOGLE_CLIENT_SECRET=
Einige Informationen zu den oben aufgeführten Variablen:
- Wir generieren 3 eindeutige Schlüssel für die
${SECRET_KEY}
,${UTILS_SECRET}
und${POSTGRES_PASSWORD}
Variablen. - Da wir SSL beenden werden, können wir die Option
${FORCE_HTTPS}
Variable zufalse
. - Für die
${URL}
durch die HTTPS-URL für Ihre Outline-Installation, z. B.https://outline.thomasgriffin.com
- Schnappen Sie sich die Zugriffsschlüssel, Client-IDs und andere Schlüssel, die Sie beim Durchgehen der AWS- und Google Workspace-Teile des Tutorials erstellt haben. Sie müssen sie in Ihr
docker.env
Datei. - Wo immer Sie sonst sehen
${VARIABLE}
imdocker.env
Datei, stellen Sie sicher, dass Sie ihn durch den entsprechenden Wert ersetzen. - Wenn Sie die lokale Dateispeicherung verwenden möchten, setzen Sie die
${FILE_STORAGE}
Variable zulocal
. Wenn Sie AWS S3 verwenden möchten, setzen Sie den Wert aufs3
.
Um die eindeutigen Schlüssel zu erzeugen, führen Sie den folgenden Befehl dreimal aus. Kopieren Sie nach jedem Mal die Ausgabe und ersetzen Sie ${SECRET_KEY}
, ${UTILS_SECRET}
und ${POSTGRES_PASSWORD}
Variablen jeweils in der docker.env
Dateiinhalt unten.
openssl rand -hex 32
Um die Datei im Terminal zu bearbeiten, führen Sie den folgenden Befehl aus:
nano docker.env
Hier ist der Code, der eingefügt wird docker.env
. Vergessen Sie nicht, die Befehle auszuführen und die entsprechenden Variablen zu ersetzen!
## Required Variables
SECRET_KEY=${SECRET_KEY}
UTILS_SECRET=${UTILS_SECRET}
FORCE_HTTPS=false
ENABLE_UPDATES=true
WEB_CONCURRENCY=2
## Postgres Variables
POSTGRES_USER=outline_user
POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
POSTGRES_DB=outline
DATABASE_URL=postgres://outline_user:${POSTGRES_PASSWORD}@postgres:5432/outline
PGSSLMODE=disable
## Redis Variables
REDIS_URL=redis://redis:6379
## Domain Variables
URL=${URL}
PORT=3000
## Rate Limiting Variables
RATE_LIMITER_ENABLED=true
RATE_LIMITER_DURATION_WINDOW=60
RATE_LIMITER_REQUESTS=600
## Local File Storage Variables - IF USING AWS, CHANGE VALUE TO s3
FILE_STORAGE=local
FILE_STORAGE_LOCAL_ROOT_DIR=/var/lib/outline/data
FILE_STORAGE_UPLOAD_MAX_SIZE=26214400
## AWS Variables
AWS_REGION=${AWS_BUCKET_REGION}
AWS_S3_FORCE_PATH_STYLE=false
AWS_S3_UPLOAD_BUCKET_NAME=${AWS_BUCKET_NAME}
AWS_S3_UPLOAD_BUCKET_URL=https://${AWS_BUCKET_NAME}.s3.${AWS_BUCKET_REGION}.amazonaws.com
AWS_S3_UPLOAD_MAX_SIZE=26214400
AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY}
AWS_SECRET_ACCESS_KEY=${AWS_SECRET_KEY}
## Google Login Authentication Variables
GOOGLE_CLIENT_ID=${GOOGLE_CLIENT_ID}
GOOGLE_CLIENT_SECRET=${GOOGLE_CLIENT_SECRET}
Als nächstes werden Sie die docker-compose.yml
Datei, um die Bilder zu definieren, die Sie für die Ausführung von Outline benötigen:
nano docker-compose.yml
Fügen Sie den folgenden Code in die Eingabeaufforderung ein:
Version: "3"
Dienstleistungen:
outline:
Bild: outlinewiki/outline:latest
neustart: immer
env_file: docker.env
Befehl: sh -c "yarn --env=production-ssl-disabled && yarn start --env=production-ssl-disabled"
ports:
- "3000:3000"
Volumes:
- storage-data:/var/lib/outline/data
depends_on:
- postgres
- redis
redis:
image: redis:7
restart: immer
env_file: docker.env
expose:
- "6379"
volumes:
- ./redis.conf:/redis.conf
command: ["redis-server", "/redis.conf"]
postgres:
image: postgres:14
restart: immer
env_file: docker.env
expose:
- "5432"
Volumes:
- datenbank-daten:/var/lib/postgresql/data
Volumes:
storage-data:
datenbank-daten:
Zum Schluss speichern Sie die Datei (Strg + X, Y und dann Return). Jetzt sind Sie bereit, Outline mit Docker zum Laufen zu bringen!
Führen Sie den folgenden Befehl aus, um Ihren neuen Outline-Docker-Container zu starten:
docker-compose up -d
Sie sollten einige Informationen in Ihrem Terminal angezeigt bekommen. Sie wird in etwa so aussehen:
Wenn Sie einen Fehler sehen, liegt das häufig daran, dass docker-compose
mag keine Tabs. Sie müssen Tabulatoren in Leerzeichen umwandeln im docker-compose.yml
Datei.
Sie können überprüfen, ob die Dinge im Container funktionieren, indem Sie diesen Befehl ausführen:
docker ps
Außerdem ist es hilfreich, die Docker-Protokolle zu überprüfen, um sicherzustellen, dass keine Fehler aufgetreten sind. Sie können diese Protokolle überprüfen, indem Sie den folgenden Befehl ausführen:
docker-compose-Protokolle
Wenn Sie Fehler in den Protokollen sehen, machen Sie eine Pause vom Lernprogramm, um diese zu beheben.
Wenn Sie Probleme haben, diese zu lösen, können Sie einen Kommentar zu diesem Artikel hinterlassen, mich über mein Kontaktformular kontaktieren oder mich auf Twitter anpingen. Ich helfe Ihnen gerne!
Jetzt können Sie den Nginx-Serverblock so konfigurieren, dass Ihre neue Outline-Wissensdatenbank und Ihr Team-Wiki öffentlich zugänglich sind.
Konfigurieren des Nginx-Server-Blocks
Dies ist der letzte Schritt zum Zugriff auf Ihre neue Outline-Wissensdatenbank und Ihr Team-Wiki. Sie müssen in der Lage sein, eingehenden Webverkehr von Ihrer neuen Subdomäne zu empfangen und zu verarbeiten, z. B. https://outline.thomasgriffin.com.
Da Outline in Docker ausgeführt wird, muss Nginx als Reverse-Proxy für den Webverkehr fungieren. Diese Details werden Sie jetzt konfigurieren.
Zunächst müssen Sie Ihren SSL-Sicherheitsaustausch verbessern, indem Sie einen Diffie-Helman-Austauschschlüssel erstellen. Führen Sie den folgenden Befehl in Ihrem Terminal aus:
sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
Führen Sie anschließend den folgenden Befehl aus, um eine neue Konfigurationsdatei für Ihre Outline-Anwendung zu erstellen:
sudo nano /etc/nginx/conf.d/outline.conf
Kopieren Sie im Bearbeitungsbildschirm den unten stehenden Code und fügen Sie ihn ein, indem Sie die folgenden Variablen ersetzen:
- Ersetzen Sie
${DOMAIN}
mit der von Ihnen gewählten Domäne, z. B.outline.thomasgriffin.com
- Ersetzen Sie
${USER}
mit dem Nicht-Root-Benutzer, den Sie in der Anleitung für die Ersteinrichtung von Ubuntu auf Digital Ocean erstellt haben, z. B.thomas
server {
listen 80;
listen [::]:80;
server_name ${DOMAIN};
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name ${DOMAIN};
access_log off;
error_log /home/${USER}/docker/logs/error.log;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS;
ssl_prefer_server_ciphers on;
ssl_session_timeout 24h;
ssl_stapling on;
ssl_stapling_verify on;
ssl_certificate /etc/letsencrypt/live/${DOMAIN}/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/${DOMAIN}/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/${DOMAIN}/chain.pem;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
ssl_session_cache shared:OutlineSSL:10m;
ssl_session_tickets off;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Scheme $scheme;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_redirect off;
}
}
Wenn Sie mit der Bearbeitung fertig sind, drücken Sie Strg + X, dann Y und Return, um die Datei zu speichern.
Sie können Ihre Nginx-Serverblöcke später weiter optimieren. Dies sind einige grundlegende Konfigurationseinstellungen, mit denen Sie auf sichere Weise arbeiten können.
Um zu überprüfen, ob alles in Ordnung ist, führen Sie den folgenden Befehl aus:
sudo nginx -t
Wenn Sie Fehler erhalten haben, überprüfen Sie diese und bearbeiten Sie Ihre outline.conf
Datei, um die Fehler zu beheben, und führen Sie dann den obigen Befehl erneut aus, um die Korrekturen zu überprüfen.
Wenn alles gut aussieht, führen Sie den folgenden Befehl aus, um Nginx neu zu laden und die Konfigurationsänderungen anzuwenden:
sudo systemctl neu starten nginx
Anzeigen und Authentifizieren in Ihrer Gliederung Selbst gehostete Installation
Sie sollten in der Lage sein, Ihre URL, z. B. https://outline. thomasgriffin.com, aufzurufen und einen Bildschirm zu sehen, der wie folgt aussieht:
Klicken Sie auf die Schaltfläche, um sich bei Google anzumelden, und melden Sie sich dann mit der E-Mail-Adressdomäne an, die mit dem zuvor erstellten benutzerdefinierten Oauth-Client verknüpft ist.
Herzlichen Glückwunsch! Viel Spaß mit Ihrer neuen, selbst gehosteten Outline-Installation! 🎉
Von hier aus werde ich einige zusätzliche Konfigurationen mit Ihnen teilen, z. B. die Einrichtung von SMTP, damit E-Mails von Ihrem Server aus funktionieren, sowie die Konfiguration von Outline, um einmal im Monat automatisch nach Updates zu suchen und diese anzuwenden.
Ich habe unzählige Stunden damit verbracht, herauszufinden, wie ich Outline für mich selbst installieren kann, sowie dieses Tutorial zu schreiben, zu testen und zu validieren. Wenn es für Sie hilfreich war, teilen Sie es bitte mit anderen, indem Sie die mit diesem Tutorial verbundenen sozialen Schaltflächen verwenden.
Vielen Dank im Voraus für Ihre Unterstützung, wenn Sie dies tun!
Fahren wir mit dem Lernprogramm fort.
SMTP konfigurieren
Wenn Sie Teammitglieder zu Ihrer selbst gehosteten Outline-Installation einladen möchten, müssen Sie SMTP-Unterstützung konfigurieren. Andernfalls werden Ihre E-Mails den Server nie verlassen.
Hierfür benötigen Sie einen Transaktions-E-Mail-Dienst. Ich empfehle SendLayer. Es ist eines der Produkte meines Unternehmens und es gibt einen kostenlosen Plan für Ihre ersten 500 E-Mails.
Melden Sie sich für einen kostenlosen Tarif an. Fügen Sie anschließend eine Domain für den E-Mail-Versand hinzu. Ich empfehle die Verwendung einer separaten Subdomain für Transaktions-E-Mails. Meine lautet zum Beispiel outlinemail.thomasgriffin.com
.
Nachdem Sie Ihre Domain hinzugefügt haben, werden Sie aufgefordert, einige neue DNS-Einträge hinzuzufügen, um den Einrichtungsprozess abzuschließen. Genau wie bei den obigen Schritten zum Hinzufügen Ihrer Subdomain für Ihre Outline-Installation werden Sie hier die gleiche Arbeit verrichten.
Hier ist ein Beispiel für die Datensätze, die Sie konfigurieren müssen:
Sobald Sie Ihre DNS-Einträge konfiguriert und überprüft haben, wechseln Sie zur Registerkarte SMTP-Zugangsdaten. Sie müssen die Anmeldeinformationen zu Ihrem docker.env
Datei.
Sobald Sie die SMTP-Zugangsdaten haben, kehren Sie zu Ihrem docker.env
Datei (zu finden unter /home/${USER}/docker
) und fügen Sie unten Folgendes hinzu, wobei Sie die SMTP-Variablen durch die Anmeldedaten von SendLayer ersetzen. Die ${FROM_EMAIL}
sollte von der Subdomain sein, die Sie für SMTP eingerichtet haben, und die Variable ${REPLY_EMAIL}
Die Variable kann sein, was immer Sie wollen.
## SMTP-Variablen
SMTP_HOST=smtp.sendlayer.net
SMTP_PORT=587
SMTP_BENUTZERNAME=${SMTP_BENUTZERNAME}
SMTP_PASSWORD=${SMTP_PASSWORD}
SMTP_FROM_EMAIL=${FROM_EMAIL}
SMTP_REPLY_EMAIL=${REPLY_EMAIL}
SMTP_SECURE=false
Sobald Sie die Datei gespeichert haben, müssen Sie die Änderungen auf Ihre Docker-Container anwenden. Führen Sie den folgenden Befehl in Ihrem Terminal aus:
docker-compose down --remove-orphans && docker-compose up -d
Vielleicht bemerken Sie eine kurze 502 Bad Gateway
Fehler von Nginx, nachdem Sie Docker neu geladen haben. Normalerweise ist er in weniger als 30 Sekunden behoben.
Sie können jetzt Ihre Teammitglieder einladen, an Ihrer neuen Gliederungsinstallation mitzuarbeiten... und sie werden Ihre E-Mail-Einladungen tatsächlich erhalten!
Konfigurieren von automatischen Updates für Ihre selbst gehostete Outline-Installation
Wenn es Ihnen so geht wie mir, finden Sie es mühsam, etwas einmal eingerichtet zu haben und es mit rudimentären Aktualisierungen zu pflegen.
Glücklicherweise können Sie diese Aufgabe mit dem System-Cron leicht automatisieren. Lassen Sie uns zwei Aufträge erstellen: einen, der täglich geplante Outline-Aufträge auslöst, und einen, der einmal im Monat automatisch nach Aktualisierungen sucht (und wenn eine Aktualisierung für Outline gefunden wird, wird sie automatisch installiert, angewendet und neu gestartet).
Täglich geplante Aufträge
Führen Sie diesen Befehl in Ihrem Terminal aus, um den neuen täglichen Cron-Job zu erstellen, der die geplanten Outline-Jobs auslöst:
sudo nano /etc/cron.daily/outline-daily
Fügen Sie den folgenden Code ein, wenn Sie dazu aufgefordert werden, und ersetzen Sie dabei die ${DOMAIN}
mit der Domain, die Sie für Ihre Outline-Installation gewählt haben (z. B. outline.thomasgriffin.com) und ${UTILS_SECRET}
mit dem UTILS_SECRET
Variable aus Ihrer docker.env
Datei:
#!/bin/sh
curl https://${DOMAIN}/api/cron.daily?token=${UTILS_SECRET}
Speichern Sie die Datei (Strg + X, Y und dann Return). Machen Sie die Datei dann mit dem folgenden Befehl ausführbar:
sudo chmod +x /etc/cron.daily/outline-daily
Der Cron wird nun einmal täglich ausgeführt und löst alle von Outline geplanten Aufträge aus.
Monatliche Updates
Führen Sie diesen Befehl in Ihrem Terminal aus, um den neuen monatlichen Cron-Job zur Aktualisierung von Outline zu erstellen:
sudo nano /etc/cron.monthly/outline-update
Fügen Sie den folgenden Code ein, wenn Sie dazu aufgefordert werden, und ersetzen Sie dabei die ${USER}
mit dem Nicht-Root-Benutzer, den Sie zu Beginn des Tutorials angelegt haben:
#!/bin/sh
cd /home/${USER}/docker
docker-compose down --remove-orphans
docker pull outlinewiki/outline
docker pull redis:7
docker pull postgres:14
docker-compose run --rm outline yarn --env=production-ssl-disabled
docker-compose up -d
Speichern Sie die Datei (Strg + X, Y und dann Return).
Als Nächstes müssen Sie sicherstellen, dass der monatliche Cron ausgeführt werden kann. Führen Sie diesen Befehl in Ihrem Terminal aus:
sudo chmod +x /etc/cron.monthly/outline-update
Der Cron wird nun einmal im Monat ausgeführt und aktualisiert Outline automatisch auf die neueste Version. Er führt auch alle neuen Datenbankmigrationen aus, die Teil der Outline-Aktualisierung sein könnten.
Noch einmal: Herzlichen Glückwunsch! Sie haben die Wissensdatenbank und das Wiki des Outline-Teams erfolgreich auf Ubuntu installiert!
Wenn Sie diese Anleitung hilfreich fanden, lassen Sie es bitte die Welt wissen. Ich habe viel Zeit damit verbracht, diese Anleitung für Sie zu verfassen und zum Laufen zu bringen. Über die Schaltflächen für soziale Netzwerke in diesem Artikel können Sie es schnell teilen.
Außerdem würde ich gerne wissen, ob Sie es erfolgreich eingerichtet haben oder ob Sie Hilfe brauchen. Hinterlassen Sie unten einen Kommentar, nutzen Sie mein Kontaktformular oder schreiben Sie mir auf Twitter.
Hilfreiche Befehle, Tipps und Tricks
Bei der Arbeit mit komplexen Systemen wie diesem ist es hilfreich, eine Liste von Befehlen/Tipps/Tricks zu haben, um die Verwaltung und Fehlersuche zu erleichtern.
Im Folgenden finden Sie einige hilfreiche Dinge, die ich bei der Einführung von Outline auf meiner eigenen Website verwendet habe.
Alte Datenbank-Volumes entfernen
Wenn Postgres sich aus irgendeinem Grund beim ersten Start von Docker nicht verhält, kann es sein, dass Sie am Ende ein schlechtes Datenvolumen haben.
Aufgrund der Funktionsweise von Docker werden beim anschließenden Herunterfahren und Starten Schritte zur Bereitstellung von Datenbanken und Benutzern übersprungen. Wenn Sie feststellen, dass eine Datenbank- oder Benutzerrolle in den Protokollen fehlt (docker-compose logs
), können Sie die folgenden beiden Befehle ausführen, um alte Datenbank-Volumes zu entfernen, damit sie vollständig neu erstellt werden können:
docker volume ls
docker volume rm <volume_name>
Beachten Sie, dass Sie dabei alle Ihre Daten verlieren. Dies ist vor allem bei der Ersteinrichtung Ihrer Outline-Installation hilfreich.
Normalerweise ist das postgres-Volume offensichtlich, da es postgres in seinem Namen enthält. Entfernen Sie es, dann können Sie die Docker-Container herunterfahren (docker-compose down
) und wieder nach oben (docker-compose up -d
).
Vollständiges Löschen von Docker
Es ist nicht schwer, aber es war schwierig, die richtigen Befehle zu finden, um es einfach zu machen.
Um alle Container und Volumes zu entfernen, führen Sie diesen Befehl aus:
docker rm -vf $(docker ps -aq)
Um alle Bilder zu entfernen, führen Sie diesen Befehl aus:
docker rmi -f $(docker images -aq)
Dann sind Sie frei zu laufen docker-compose up -d
und zwar auf eine völlig neue Art und Weise.
Einpacken
Ich danke Ihnen für Ihre Zeit. Ich hoffe, Sie erleben die Vision der Ergebnisse so, wie ich sie vorhin beschrieben habe.
Wenn Sie dies als hilfreich empfunden haben, teilen Sie es bitte mit anderen. Ich habe zahlreiche Stunden damit verbracht, dies zum Laufen zu bringen und für Sie zu dokumentieren. Über die Schaltflächen für soziale Netzwerke in diesem Artikel können Sie ihn schnell teilen.
Außerdem würde ich gerne wissen, ob Sie es erfolgreich eingerichtet haben oder ob Sie Hilfe benötigen. Hinterlassen Sie unten einen Kommentar, nutzen Sie mein Kontaktformular oder schreiben Sie mir auf Twitter.
Und wenn Sie sich für mehr von mir Geschriebenes interessieren, finden Sie hier ein paar gute Anlaufstellen:
- Überlegungen zur Größe (und wie man großartig wird) Jeder möchte in irgendetwas großartig sein. Aber was braucht es eigentlich, um großartig zu sein? Die Antwort mag überraschen, und ich zeige eine interessante Grafik, die erklärt, warum.
- Wie man effektiv kommuniziert (in jeder Situation) Wirksame Kommunikation ist eine wichtige Fähigkeit, die jeder entwickeln muss. In diesem Artikel definiere ich die Anforderungen, gebe Kommentare ab und zeige hilfreiche Beispiele, wie Sie Ihre Kommunikation effektiver gestalten können.
- Willkommen bei Leadership Blühen Sie als Führungskraft mit kampferprobten Führungsprinzipien, Erkenntnissen und Taktiken auf.
Ich wünsche Ihnen einen schönen Tag!
Thomas
R. Kennedy
Erstaunlich Tutorial hier! Ich hatte einen bestehenden Server läuft Docker, Redis und Postgres mit anderen Sachen auf dem gleichen Server installiert, aber Ihr Tutorial verwendet, um zu verstehen, wie man sie zusammen zu haken und es war besonders nützlich re: die AWS S3-Einstellungen, die nicht scheinen sehr detailliert in der Standard-Installationsanleitung. Gut gemacht, Thomas. Danke, Thomas.
Thomas Griffin
Danke Reess! Vielen Dank für die netten Worte, und ich bin froh, dass Sie dieses Tutorial für die Installation der Outline Knowledge Base / Wiki auf Ubuntu hilfreich fanden! 🥂
Praveena Sarathchandra
Sehr gut geschriebenes Tutorial Thomas! Vielen Dank, dass Sie es zusammengestellt haben. Das hat uns viele Stunden erspart, in denen wir uns die Haare raufen mussten, um es zum Laufen zu bringen! Prost!
Thomas Griffin
Vielen Dank für die freundlichen Worte! Ich freue mich, dass du das Outline-Wiki erfolgreich installieren konntest. 🚀
Jeongwoo Hong
Ihr Tutorial war besonders nützlich für den Aufbau eines Outline-Wikis auf einer bestimmten Domain-Adresse. danke Aber ich bin auf ein Problem gestoßen. Nachdem ich mit docker-compose begonnen habe, benutze ich das Wiki für eine Weile, und dann bekomme ich einen 502-Fehler, wenn ich es nach ein paar Stunden oder einem Tag erneut versuche. Das Protokoll des Redis-Dockers zeigt einen Fehler im Zusammenhang mit Redis.
ReplyError: READONLY You can’t write against a read only replica.
at parseError(/opt/outline/node_modules/redis-parser/lib/parser.js:179:12)
at parseType(/opt/outline/node_modules/redis-parser/lib/parser.js:302:14) {
command: { name: ‘del’, args: [ ‘UPDATES_KEY’ ] }
There was someone else who had the same problem as me.
https://github.com/outline/outline/discussions/3682
Ich bin nicht sehr gut mit Redis. Ich habe noch keine gute Lösung gefunden.
Haben Sie einen Rat für Sie?
Thomas Griffin
Leider habe ich keine Erfahrung mit der Behebung dieses speziellen Problems mit Redis. Es hört sich so an, als ob etwas Redis dazu veranlasst, in den Nur-Lese-Modus zu wechseln. Haben Sie versucht, den Redis-Dienst in Docker neu zu starten? Das könnte den Cache oder andere Probleme, die dies verursachen, beseitigen, und es könnte sein, dass das Problem dadurch langfristig gelöst wird.
Roland
Ausgezeichnetes Tutorial, wie könnte man es mit GCP Cloud Storage anstelle von aws S3 erreichen?
Thomas Griffin
Hey Roland - danke für die netten Worte und ich freue mich, dass Sie die Outline-Wissensdatenbank und das Wiki für sich selbst als hilfreich empfunden haben!
Was GCP Cloud Storage betrifft, so scheint es, dass es derzeit nicht unterstützt wird. Sie können jederzeit einen Eintrag im Github Repo erstellen, um eine Anfrage für diese Funktion zu stellen!
Sven
Hallo Thomas,
Vielen Dank für die Anleitung.
Wie stelle ich sicher, dass Redis nicht für die Öffentlichkeit zugänglich ist? Mit der gegebenen Konfiguration, die meines Erachtens die Standardkonfiguration lädt, scheint jeder darauf zugreifen zu können.
Thomas Griffin
Hey Sven - danke für die netten Worte!
Was Ihren Kommentar betrifft, so bin ich beim Durcharbeiten des Tutorials auch auf dieses Problem gestoßen, und mit der von mir angegebenen Konfiguration sollte es nicht öffentlich zugänglich sein. Sie können dies mit diesem Befehl testen:
telnet {ip} 6379
Einfach ersetzen
{ip}
mit der IP-Adresse Ihres Servers. Ich habe mit dem für dieses Tutorial verwendeten Server getestet, und er lässt keine Verbindungen zu. Lassen Sie mich wissen, was Sie entdecken, wenn Sie es selbst ausprobieren!Sam
Hallo Sven & Thomas,
Die
port
Schlüssel in Docker Compose erlaubt in der Tat den öffentlichen Zugriff auf die Redis- (und Postgres-) Ports. Ich denke, dass die Unsicherheit auch mit dem obigen Beitrag von JEONGWOO HONG zusammenhängt, wo es zu Serverabstürzen / 502s führen kann.Ich habe hier eine Lösung dokumentiert: https://github.com/outline/outline/discussions/3682#discussioncomment-3658318
Grundsätzlich ist die Änderung der
port
Taste fürexpose
und einige Firewall-Regeln auf Ihrem Server zu erzwingen (ich nehme an, dass Thomas dies über Digital Ocean getan hat, so dass das Problem nicht in erster Linie auftritt).Viel Glück!
Thomas Griffin
Update: Sams Lösung hat funktioniert, also habe ich die Anleitung entsprechend aktualisiert.
Sam - vielen Dank, dass du deine Lösung mit uns geteilt hast! Ich werde diese Anleitung testen und entsprechend aktualisieren, sobald ich festgestellt habe, dass sie auch funktioniert.
Ich werde auch meine UFW-Regeln überprüfen, um zu sehen, ob ich welche dafür konfiguriert habe. Es ist möglich, dass ich das getan und nur vergessen habe, sie in das Lernprogramm aufzunehmen. Wenn ja, werde ich die Anleitung aktualisieren, um diese neuen Firewall-Regeln einzubeziehen.
Sam
Dieser Artikel ist erstaunlich und ein Lebensretter. Ich habe meine eigene Outline-Instanz ohne jegliche Probleme eingerichtet, indem ich alle Schritte befolgt habe.
Ich danke Ihnen vielmals!
Thomas Griffin
Fantastische Neuigkeiten, Sam! Ich freue mich, das zu hören. 🚀
Sam
Außerdem gibt es in den Einrichtungsdokumenten von Outline eine Seite, die sich mit geplanten Aufträgen und der Einrichtung eines täglichen Cronjobs befasst: https://app.getoutline.com/share/770a97da-13e5-401e-9f8a-37949c19f97e/doc/scheduled-jobs-RhZzCt770H
Ich bin mir nicht sicher, was es tut TBH und sah es nicht in Ihrem Artikel, aber habe es gerade auf meinem Ende einrichten. Prost.
Thomas Griffin
Update: Ich habe das Tutorial aktualisiert und einen Abschnitt zur Erstellung des täglichen Cron-Programms hinzugefügt, das geplante Aufträge in Outline ausführt.
Sam - nochmals vielen Dank für diese Information! Ich werde das Tutorial entsprechend überarbeiten und aktualisieren (und auch meine eigene Installation, so dass dies auch täglich läuft).
Nochmals vielen Dank, dass Sie Ihre Informationen hier zur Verfügung stellen. Viele Leute werden in der Lage sein, die Outline-Wissensdatenbank und das Wiki richtig einzurichten, dank des Tutorials und der wertvollen Dinge, die Sie hier geteilt haben!
Offenbarung
Das ist wirklich hilfreich. Vielen Dank dafür!
Thomas Griffin
Schön, dass Sie es hilfreich fanden, Revel!
Jere
Was bedeutet dieser Satz?
Befehl:
sh -c "yarn sequelize:migrate --env=production-ssl-disabled && yarn start --env=production-ssl-disabled"
Ich danke Ihnen vielmals!
Thomas Griffin
Hallo Jere,
Das bedeutet, dass bei der Erstellung eines Docker-Containers dieser Befehl ausgeführt wird, sobald der Outline-Dienst installiert und hochgefahren ist. Dadurch wird sichergestellt, dass Ihre Datenbankmigrationen ausgeführt wurden und dass die Outline-Anwendung läuft und für den Zugriff verfügbar ist.
Ich hoffe, diese Erklärung hilft!
Jeff
Danke für den Austausch!
Ich bin auf der Suche nach einem internen Wiki/KB und habe BookStack, wiki.js und Joplin ausprobiert. Jedes hat eine oder mehrere Funktionen, die in den anderen nicht verfügbar sind.
Outline sieht ansprechend aus, aber ich kann nirgendwo eine Admin-Demo finden. Haben Sie BookStack oder wiki.js benutzt? Wissen Sie, wie sie im Vergleich zu Outline abschneiden?
Ich wünschte, es wäre einfach, einen Outline-Container in Portainer aufzusetzen, um damit zu testen, aber der Einrichtungsprozess scheint etwas aufwändiger zu sein als bei den anderen, die ich erwähnt habe. Ich würde auch alles selbst hosten wollen und kein externes S3 verwenden.
Thomas Griffin
Hallo Jeff - Ich habe die anderen von Ihnen erwähnten Wiki-Plattformen nicht ausprobiert, kann mich also nicht zu ihren Vorzügen äußern oder dazu, wie sie sich mit Outline vergleichen lassen. Ich wünschte auch, Outline wäre einfacher einzurichten. Die Einführung eines einfachen E-Mail-/Passwort-Authentifizierungssystems und die lokale Speicherung von Assets würden den Installationsprozess erheblich vereinfachen. Bis dahin ist die Befolgung der Schritte in dieser Anleitung der beste Weg, um es sicher einzurichten!
Matthew
Toller Artikel und ich werde ihn ausprobieren, um Outline in meiner Umgebung zu installieren.
Wäre es möglich, dass Sie in diesem großen Leitfaden über die Verwendung von minio onprem gehostet S3 Bucket anstelle der Verwendung von Amazon S3 Bucket, so dass alles für Outline ist onprem hinzufügen?
Thomas Griffin
Hallo Matthew - danke für die freundlichen Worte! Ja, ich plane, den Artikel bald zu aktualisieren (erstes Halbjahr 2023), um auch die Verwendung von Minio einzubeziehen.
Harry
Hallo Thomas,
Vielen Dank für diesen Artikel! Allerdings habe ich 5. Zeit in und immer noch nicht in der Lage, dies zu bekommen, um zu arbeiten.
Mein Container "docker_outline_1" macht beim Neustart eine Schleife und ich kann nicht herausfinden, warum. Die Protokolle geben den folgenden Fehler..:
yarn run v1.22.18
error Befehl "sequelize:migrate" nicht gefunden.
info Besuchen Sie https://yarnpkg.com/en/docs/cli/run für die Dokumentation zu diesem Befehl.
Wenn Sie einen Vorschlag haben, wäre das fantastisch. Ich reiße mir die Haare aus!
Thomas Griffin
Hallo Harry,
Es sieht aus wie in einem Aktuelles Änderungsprotokollhaben sie die
sequelize:migrate
Befehl. In Ihrer Datei docker.env müssen Sie Folgendes ersetzenyarn sequelize:migrate
mityarn db:migrate
. Damit sollte alles funktionieren.Ich habe die Anleitung aktualisiert, um diese Änderung zu berücksichtigen. Ich hoffe, das hilft!
Harry
Sie sind eine absolute Legende!
Letzte Frage 🙂 - wissen Sie, ob es eine Möglichkeit gibt, die X-Frame-Options auf ALLOW zu ändern? Ich habe versucht, die Nginx-Konfigurationsdatei zu überschreiben und Cloudflare Worker zu verwenden, aber das scheint nichts zu bringen.
Nochmals vielen Dank!
Harry
Ich habe es geschafft. Für alle anderen, die das Wiki in einer anderen Anwendung/Website implementieren möchten. Sie können die "Antwort-Header ändern" im Abschnitt Transform Rules von Firestore verwenden.
Nochmals vielen Dank, Thomas.
Thomas Griffin
Ich bin froh, dass es jetzt funktioniert, Harry, und danke für die zusätzlichen Informationen zu den Firewall-Regeln. Das dürfte für andere, die das gleiche Problem haben, sehr hilfreich sein!
jvm
vielen Dank für das fantastische Tutorial. Ich habe es bis und läuft störungsfrei für einen Monat, aber auf die monatliche Cron Job Aktualisierung bekomme ich eine 502 Bad Gateway. Ich kann ein Backup über Dropbox wiederherstellen und weitermachen - aber wie kann ich den Cronjob deaktivieren, sobald er aktiviert ist? Oder wie aktualisiere ich die Outline manuell?
Thomas Griffin
Sie können
crontab -e
in Ihrem Terminal, um eine Liste Ihrer Cron-Jobs zu finden, und dann können Sie einfach den Cron mit nano bearbeiten, um den Befehl zu entfernen.Wenn Sie Outline manuell aktualisieren möchten, kopieren Sie einfach den Befehl, den Sie im Cron-Job gefunden haben, bevor Sie ihn entfernen, und führen Sie dann, wenn Sie Outline aktualisieren möchten, jede Zeile Schritt für Schritt in Ihrem Terminal aus, um den Aktualisierungsvorgang abzuschließen.
jvm
erstaunlich - vielen Dank
Glenn
Vielen Dank für diesen tollen Leitfaden zu Outline. Ich hatte zwei Fragen:
1) Können Sie mir bitte sagen, wie ich die Daten im Gliederungs-Wiki speichern kann? Wie würde ich die Daten speichern, die im Wiki enthalten sind, bevor ich auf eine neue Version aktualisiere, die möglicherweise die aktuelle Konfiguration zerstören könnte? Wenn die Datenbank gespeichert wird, welche Datenbankdatei muss dann genau gespeichert werden? Ist jede Gliederungs "sammlung" ein eigener Ordner in der Datenbank? Ich bin mir über den Prozess der Datensicherung nicht sicher. Ich weiß, dass es eine Exportfunktion in Markdown gibt, aber wenn ich 5 Sammlungen und 50 verschiedene Seiten habe, würde ich lieber meine gesamten Gliederungsdaten sichern, als 50 verschiedene Markdown-Dateien zu exportieren und sie danach manuell wieder hochzuladen.
2) Wie funktioniert das Aktualisieren des Outline-Containers? Müssen alle mit Outline verbundenen Container (Redis, Postgres, Minio) ebenfalls aktualisiert werden, oder kann Outline auch allein aktualisiert werden? Gibt es spezielle Verfahren zur Aktualisierung von Outline?
Ich danke Ihnen vielmals!
Thomas Griffin
Hey Glenn - schön, dass dir das Tutorial gefallen hat!
Um Ihre Fragen zu beantworten:
1. Ich würde empfehlen, Digital Ocean Backups zu aktivieren. Dadurch werden Ihre Daten automatisch jeden Tag gesichert, und Sie können sich jederzeit in Ihr DO-Panel einloggen und eine manuelle Sicherung durchführen, bevor Sie mit dem Upgrade fortfahren. Auf diese Weise haben Sie die Gewissheit, dass Ihre Daten nicht verloren sind, selbst wenn beim Upgrade etwas schief geht.
2. Bei dem aktuellen Verfahren, das ich aufgelistet habe, aktualisiere ich alle Dienste im Container, aber Sie müssen das nicht tun, wenn Sie das nicht wollen. Sie können die zusätzlichen Dienste auskommentieren oder entfernen und nur die Aktualisierung von Outline selbst zulassen. Und wenn Sie den Cron nicht mögen, können Sie die Befehle einfach kopieren und selbst manuell ausführen 🙂 .
Ich hoffe, diese Antworten sind hilfreich!
Vasile Ciuban
Hallo, ich habe Ihr Verfahren Schritt für Schritt befolgt, aber ich verstehe nicht, warum ich immer wieder diese Fehlermeldung bekomme:
502 Schlechtes Gateway
nginx/1.24.0
wirklich frustrierend, die ganze App läuft, aber sie funktioniert nicht
Thomas Griffin
Hey Vasile - kannst du die
docker-compose logs
und die Fehler mitteilen, die auftreten?Renzo
Ich habe auch das gleiche Problem, anscheinend ist mein Fehler beim Ausführen von Garn, anscheinend habe ich keine Berechtigungen auf /opt/outline
Vasile Ciuban
Auch
Wenn ich regelmäßig Docker ps ausführe, sehe ich, dass der Container docker_outline_1 oft neu startet,
Weil die UP-Zeit anders ist als die Erstellungszeit im Gegensatz zu Redis und Postgres
Thomas Griffin
Okay, danke. Hier ist nichts Offensichtliches zu erkennen. Kannst du auch deine Nginx-Konfigurationsdatei hier teilen? Es handelt sich um ein Nginx-Problem, aber ich sehe hier keine Nginx-Fehler aufgelistet. Wenn Sie außerdem Ihre Nginx-Protokolle im Docker-Container finden und teilen können, wäre das ebenfalls sehr hilfreich.
Thomas Griffin
Ich habe den Kommentar gesehen, den Sie mit Ihren Nginx-Protokollen geteilt haben. Für mich sieht nichts Ungewöhnliches aus. Es scheint, als hätte Nginx ein Problem mit dem Proxying zum Docker-Container.
Bestätigen Sie, dass Ihr
docker.env
hat die Ports offen auf"3000:3000"
?Haben Sie versucht, Docker neu zu starten, z. B.
docker-compose down --remove-orphans && docker-compose up -d
Renzo Barros
Hallo, ich bekomme 502 Bad Gateway-Fehler nach allen Schritten wie der Artikel.
Thomas Griffin
Tut mir leid, dass Sie dieses Problem haben, Renzo! Können Sie Ihre Nginx-Konfigurationsdatei und Nginx-Fehlerprotokolldatei zur Verfügung stellen?
Vasile Ciuban
HI,
Nach 3 Tagen des Testens habe ich es endlich zum Laufen gebracht.
Was Sie tun müssen, ist in docker.env dies zu bearbeiten:
## Redis-Variablen
REDIS_URL=redis://docker_redis_1:6379
DATABASE_URL=postgres://outline_user:pass@docker_postgres_1:5432/outline
Als Url von redis und postgress müssen Sie den Namen des Docker-Containers angeben, den Sie mit docker ps erhalten
In meinem Fall sind das: docker_postgres_1 und docker_redis_1
dann in nginx
Sie müssen Ihre öffentliche Domain ohne https nur docs.example.com bei server_name eintragen
und in proxy_pass müssen Sie die IP Ihres Rechners eingeben.
Führen Sie diesen Befehl aus und Sie erhalten Ihre Lan-IP
hostname -I | awk '{print $1}'
Thomas Griffin
Danke für die Mitteilung, Vasile! Ich frage mich, ob Ihr Server Nginx auch für etwas anderes verwendet? Es scheint, dass diese Änderungen bedeuten, dass Sie Nginx auch für etwas anderes verwenden.
Francesco R. Di Caprio
Hallo Thomas. Danke für diese schöne Anleitung. Ich wollte dir sagen, dass Outline seit Version 0.69.0 nicht mehr manuell migriert werden darf. Daher wird der Befehl "sequelize:migrate" fehlschlagen. Du solltest docker-compose.yml aktualisieren, um nur noch
Befehl: sh -c "yarn start -env=production-ssl-disabled"
Mit freundlichen Grüßen
Thomas Griffin
Ja, Francesco, ich habe dafür gesorgt, dass dies aktualisiert wurde, sobald diese Version herauskam, so dass es nicht mehr Teil des Tutorials ist. Vielen Dank für den Kommentar!
Alain
Hallo Thomas. Meinen aufrichtigen Dank für diese exquisite Anleitung. Diese Schritt-für-Schritt-Anleitung ist schlichtweg außergewöhnlich. Du hast eindeutig ein natürliches Talent dafür, komplexe Konzepte in verständliche Stücke zu zerlegen, glaub mir.
Ich habe akribisch jedes einzelne Detail befolgt, aber am Ende habe ich einen "502 Bad Gateway" Nginx-Fehler. Im Moment kann ich mit "docker ps" Postgres- und Redis-Images mit einem "Up"-Status für eine bestimmte Zeit sehen, aber Outline sagt nur 2 Minuten. Irgendwann, und aus unbekannten Gründen, startet es also neu. Ich habe ehrlich gesagt keine Ahnung, was passiert ist. Ich werde meine Logs mit Ihnen teilen. Ich entschuldige mich im Voraus, wenn dies nicht der richtige Kanal dafür ist. Bitte helfen Sie und danke.
Logs kurz nach Abschluss des ersten up -d:
docker ps(https://pastebin.com/93svmMLd)
docker-compose-Protokolle(https://pastebin.com/pWU2fjMm)
Protokolliert nach einer Weile:
docker ps(https://pastebin.com/M0rExWhw)
docker-compose-Protokolle(https://pastebin.com/t4vk6zjK)
Thomas Griffin
Hallo Alain - es tut mir leid, dass du Probleme mit dem gefürchteten 502-Gateway-Fehler hattest. Auch ich erinnere mich an ein ähnliches Problem, aber ehrlich gesagt weiß ich nicht mehr, wie ich es gelöst habe. Ich denke, dass es ein Problem mit den Berechtigungen war ODER dass es ein Problem mit deinen Datenbankanmeldeinformationen gibt (vielleicht hast du sie falsch kopiert oder die Namen sind versehentlich nicht übereinstimmend), aber ich hätte mir diese Notiz notieren sollen.
Ich wünschte, ich hätte mehr Informationen, die ich weitergeben könnte. Ich würde die Anmeldeinformationen in Ihrer Docker-Umgebungsdatei erneut überprüfen und sicherstellen, dass alles für Postgres korrekt ist.
Raghu
Vielen Dank, TG, für eine so ausführliche Anleitung! Ich folgte den Schritten, bis der NGINX-Server-Block eingerichtet, aber ich sehe eine 502 auf meine App.
Wenn ich "docker-compose logs | grep -i error" ausführe, sehe ich das folgende -
"`
error Konnte Datei "/opt/outline/yarn-error.log" nicht schreiben: "EACCES: Berechtigung verweigert, open '/opt/outline/yarn-error.log'"
outline_1 | error Ein unerwarteter Fehler ist aufgetreten: "EACCES: Berechtigung verweigert, unlink '/opt/outline/node_modules/.yarn-integrity'".
"`
Dadurch wird verhindert, dass der Umrisscontainer "nach oben" geht.
Können Sie mir bitte helfen, dieses Problem zu lösen?
Thomas Griffin
Hallo Raghu - jemand anderes hat mich über mein Kontaktformular nach einem ähnlichen Problem gefragt. Das Problem war, dass das Verzeichnis `/opt/outline` dem Root-Benutzer gehörte, es aber dem Benutzer `nodejs` gehören sollte. Nachdem sie diese Berechtigungen korrigiert hatten, funktionierte es. Ich konnte das nicht verifizieren, aber das könnte Sie zumindest in die richtige Richtung bringen. Vielleicht möchten Sie sich manuell mit dem Container verbinden und den Benutzer überprüfen, unter dem er läuft. Wenn es `nodejs` ist, dann wird das Ändern der Eigentümerschaft der betroffenen Verzeichnisse das Problem wahrscheinlich für Sie lösen. Ich hoffe, das hilft!
Victor
Ich habe das gleiche Problem (auf AWS EC2)
Um das Problem zu lösen, habe ich diese Befehle ausgeführt:
docker-compose run -rm outline yarn db:create -env=production-ssl-disabled
docker-compose run -rm outline yarn db:migrate -env=production-ssl-disabled
Wie in der offiziellen Dokumentation gefordert, habe ich dies in der Docker-Compose-Datei gelöscht (Befehl: sh -c "yarn -env=production-ssl-disabled && yarn start -env=production-ssl-disabled")
darionco
Vielen Dank für die Anleitung, ich hatte den gleichen 502 Bad Gateway Error, den die meisten Leute in letzter Zeit zu haben scheinen, und basierend auf diesem Thread:
https://github.com/yarnpkg/yarn/issues/1806
Ich beschloss, das Outline-Image als root auszuführen, indem ich Folgendes hinzufügte
user: root
zumoutline
Abschnitt vondocker-compose.yaml
Es mag nicht die optimalste Lösung sein, aber es ist bei weitem die einfachste. Hoffentlich hilft das jemandem!
Thomas Griffin
Großartig, danke, dass Sie das mit uns teilen! Können Sie teilen, was Ihr
docker-compose.yaml
nach dieser Änderung aussieht? Ich werde die Anleitung wahrscheinlich auf der Grundlage dieser Vorschläge aktualisieren.darionco
Sicher, hier ist der entsprechende Teil:
"`
outline:
image: outlinewiki/outline:latest
restart: immer
env_file: docker.env
Benutzer: root
Befehl: sh -c "yarn -env=production-ssl-disabled && yarn start -env=production-ssl-disabled"
ports:
- "3000:3000"
depends_on:
- postgres
- redis
"`
Something else that I did was to use DigitalOcean’s spaces instead of AWS’ S3, for that the `docker.env` config looks like this:
“`
## AWS Variables
AWS_REGION=${REGION}
AWS_S3_UPLOAD_BUCKET_NAME=${BUCKET_NAME}
AWS_S3_UPLOAD_BUCKET_URL=https://${AWS_S3_UPLOAD_BUCKET_NAME}.${AWS_REGION}.digitaloceanspaces.com
AWS_S3_ACCELERATE_URL=https://${AWS_S3_UPLOAD_BUCKET_NAME}.${AWS_REGION}.digitaloceanspaces.com
AWS_S3_UPLOAD_MAX_SIZE=26214400
AWS_ACCESS_KEY_ID=${ACCESS_KEY_ID}
AWS_SECRET_ACCESS_KEY=${SECRET_ACCESS_KEY}
AWS_S3_FORCE_PATH_STYLE=false
AWS_S3_ACL=private
“`
Then on the CORS options for the bucket I made sure to add
`origin: ${DOMAIN}`, `allowed_methods: GET, PUT, DELETE, POST, HEAD` and `allowed_headers: Accept, Content-Type, Origin`
Ich hoffe, das hilft!
Thomas Griffin
Super hilfreich - vielen Dank, dass Sie es hier teilen und die Community davon profitieren kann!
John
Ich bin auch in der 502 Fehler Boot. Aber anstelle von DigitalOcean lasse ich meinen Dienst auf einer EC2-Instanz laufen.
Muss ich dafür einige Ports (3000 usw.) in der Sicherheitsrichtlinie öffnen?
Der genaue Fehler, den ich erhalte, ist (docker/logs/error.log):
[error] 4622#4622: *21 recv() fehlgeschlagen (104: Connection reset by peer) beim Lesen des Response Headers vom Upstream, client: 171.76.87.217, server: wiki.bindins.me, request: "GET /favicon.ico HTTP/2.0", upstream: "http://127.0.0.1:3000/favicon.ico", host: "wiki.bindins.me", referrer: "https://wiki.bindins.me/"
Thomas Griffin
Hey John - wenn deine docker-compose Datei so aussieht wie die, die ich geteilt habe, sollten alle notwendigen Ports freigelegt sein. Ich habe bemerkt, dass ein paar Leute in den Kommentaren erwähnt haben, dass das Ändern des Benutzers in
user: root
im Abschnitt outline der Datei docker-compose hat diese Probleme behoben. Haben Sie dies ausprobiert?Craig Hodges
Ich möchte mich nur kurz einmischen. Ich war immer die Yarn Berechtigung verweigert Fehler als gut, und @darionco ' s user:root fix in der compose yml löst die Berechtigung Problem.
Feigo
lokale Speicherung sind ab Version 0.72.0 verfügbar.
Thomas Griffin
Hallo Feigo - ich habe das Tutorial heute mit Unterstützung für das neue Update der lokalen Dateispeicherung in Outline aktualisiert. Danke!
Mike
Ich kann mich nicht bei Ihrer Testinstanz unter outline.yourpage.com anmelden.
Wenn ich mich per E-Mail (gmail) anmelden möchte, erhalte ich keinen magischen Link. Wenn ich mich über Google anmelden möchte, erhalte ich die Meldung "Ich bin nicht in der Organisation, in der ich mich anmelden kann".
Thomas Griffin
Hey Mike - so sollte es eigentlich funktionieren. Es ist nur für meine eigene Google Workspace-Organisation gesperrt, sodass Sie sich nicht anmelden können. Es wird für Sie genauso funktionieren, wenn Sie es während des Tutorials mit Ihrer eigenen Google Workspace-Organisation verbinden.
const
Danke. Die nginx-Konfiguration muss allerdings korrigiert werden. Doppelte `proxy_set_header Host`-Header verwirren den Reverse-Proxy.
Thomas Griffin
Danke, dass Sie diesen Fehler entdeckt haben! Ich habe das Tutorial aktualisiert, um die doppelten Direktiven zu entfernen.
Will
Zunächst einmal; absolut EPIC Walkthrough - Ich verbrachte so viel Zeit versuchen, Outline auf meinem eigenen und dies war ein kompletter Lebensretter einrichten! Vielen Dank dafür!
Zweitens gehöre ich zu den Leuten, die wiederholt den 502-Fehler erhielten. Das vollständige Löschen von Docker hat einmal geholfen, aber beim zweiten Mal konnte ich ein bisschen mehr in die Tiefe gehen und fand eine Lösung für diese Instanz (keine Garantie, dass dies in allen Situationen funktioniert), aber das Ausführen von "sudo certbot" und "Versuch, dieses vorhandene Zertifikat neu zu installieren" löste das Problem für mich.
Mir ist aufgefallen, dass in den nginx-Protokollen ein Fehler bei der Abfrage des Zertifikatsstatus auftrat, so dass die Neuinstallation des Zertifikats die Lösung war. Hoffentlich hilft das jemandem da draußen!
Thomas Griffin
Hey Will - schön, dass dir das Tutorial gefallen hat, und danke für den Hinweis! Ich frage mich, ob es eine Möglichkeit gibt, dies (die Neuinstallation des bestehenden Zertifikats) von Anfang an zu tun, anstatt es ganz am Ende tun zu müssen? Ich werde die Schritt-für-Schritt-Anleitung bald noch einmal durchgehen und es ausprobieren!
Alberto
Hallo Thomas,
vielen Dank für Ihre tolle Anleitung!
Leider habe ich versucht, von Grund auf zu installieren 3 mal, aber ich habe 502 Bad Gateway (nginx/1.26.0). Ich habe versucht, alle Workarounds in den Kommentaren hier vorgeschlagen, aber sie haben nicht funktioniert.
Installiert in ubuntu 22.04 auf Azure.
Irgendwelche Ideen?
Thomas Griffin
Hallo Alberto - es tut mir leid, dass Sie auf die gleichen 502-Fehler gestoßen sind. Leider bin ich nicht sicher, wie dies auf Azure funktionieren wird. Ich habe nur mit Linux/Ubuntu-Distributionen getestet, daher kann ich nicht garantieren, dass dies in Azure-Umgebungen funktionieren wird.