Keila

Aus Hostsharing Wiki
Zur Navigation springen Zur Suche springen

Keila installieren

Keila ist eine Software zum erstellen und verwalten von Newslettern. Es werden mehrere (E-Mail)Sender, sowie Instanzweite geteilte Sender und viele praktische Einstellmöglichkeiten unterstützt. Zwar gibt es (noch) kein SSO, es werden allerdings mehrere Nutzer unterstützt. Viele benötigen Double-Opt-In – dieses Feature wird in Keila v0.12.9 erwartet.

Die Software ist in Erlang/Elixir geschrieben und stellt keine fertigen Binaries bereit, daher müssen wir von Hand bauen:

Keila herunterladen

Wir clonen den aktuellen Release-branch mit Git.

git clone https://github.com/pentacent/keila -b v$releasenummer

Paketmanager für Abhängigkeiten

asdf installieren

Keila erwartet ganz bestimmte Paketversionen. Um diese bereitzustellen, installieren wir als erstes einen lokalen Paketmanager. Der Einfachheit halber ua. wegen Versionierung ein Verweis:
=> https://asdf-vm.com/guide/getting-started.html

nötige asdf Plugins installieren

asdf plugin add erlang https://github.com/asdf-vm/asdf-erlang.git
asdf plugin add elixir https://github.com/asdf-vm/asdf-elixir.git

Abhängigkeiten installieren

Wichtig! Abhängigkeiten in keila/.tool-versions überprüfen und unten ersetzen!

asdf install erlang 26.0
asdf install elixir 1.15.6

Keila bauen

Ehe wir beginnen, müssen wir für das Hostsharing Mailsystem noch eine Kleinigkeit anpassen. In config/runtime.exs suchen wir den Block:

[
 adapter: Swoosh.Adapters.SMTP,
 relay: host,
 username: user,
 password: password,
 from_email: from_email
]

Hier ergänzen wir ein Komma hinter from_email und ergänzen die Zeile no_mx_lookups: true. Das Ergebnis sieht dann so aus:

[
 adapter: Swoosh.Adapters.SMTP,
 relay: host,
 username: user,
 password: password,
 from_email: from_email,
 no_mx_lookups: true
]

Das ist wichtig, damit Keila sich nicht mit dem Posteingangs-Server versucht zu verbinden. Okey, weiter:

export MIX_ENV=prod

mix local.hex --force
mix local.rebar --force
mix deps.get
mix deps.compile

npm ci --prefix ./assets

mix deps.clean mime --build
mix assets.deploy
mix release

# falls Fehlermeldung beim letzten Befehl, nochmal das Folgende getrennt ausführen:
mix assets.deploy && mix release

Keila sollte im Anschluss wiefolgt startbar sein: ./_build/prod/rel/keila/bin/keila start

Der Ordnung halber wird die Binary in einen ~/bin Ordner verlinkt oder kopiert:
ln -s $HOME/var/keila/_build/prod/rel/keila/bin/keila $HOME/bin/

In Betrieb nehmen

Das Projekt erwartet mit Docker gestartet zu werden ua. daher kann Vieles über Environment Variablen konfiguriert werden. Eine Orientierung bietet die Keila Dokumentation. In unserem Beispiel wird die lokale Datei ~/etc/keina.env angelegt und unten über systemd eingebunden:

Hinweis: eventuell auch Port setzen, bitte Hostmaster kontaktieren für freien Port

MIX_ENV=prod

DB_URL=postgres://xyz00_newsletter:sicheresDatenbankPasswort@localhost/xyz00_newsletter_db

KEILA_USER=email@adresse
KEILA_PASSWORD=sicheresPasswort

URL_HOST=newsletter.meine.domain
URL_SCHEMA=https

# Wichtig: mindestens 64 Zeichen erforderlich!
SECRET_KEY_BASE=langerrandomstringmindestens64zeichen

USER_CONTENT_DIR=/home/storage/xyz00/users/newsletter/keila_uploads

# keine leeren Passwörter unterstützt
MAILER_SMTP_HOST=xyz00.hostsharing.net # auch das anpassen!
MAILER_SMTP_USER=xyz00_newsletter
MAILER_SMTP_PORT=587
MAILER_SMTP_PASSWORD=sicheresUser/MailboxPasswort

# diese Option ist zum Registrieren
# und eg. Eintragungen erforderlich
CAPTCHA_PROVIDER=hcaptcha # hcaptcha ist default, friendly_captcha als Option möglich
CAPTCHA_SITE_KEY=
CAPTCHA_SECRET_KEY=
#CAPTCHA_URL=wird auch automatisch gesetzt

systemd

Verzeichnis mkdir -p .config/systemd/user/ anlegen und keila.service erstellen:

[Unit]
Description=Keila

[Service]
Type=simple
Restart=on-abort
WorkingDirectory=/home/pacs/xyz00/users/newsletter
EnvironmentFile=-/home/pacs/xyz00/users/newsletter/etc/keila.env

ExecStart=/home/pacs/xyz00/users/newsletter/bin/keila start

[Install]
# Achtung: multiuser.target würde hier zu Problemen führen
WantedBy=default.target
  • eventuell setzen einer Variabel nötig: export XDG_RUNTIME_DIR=/run/user/$UID
  • starten+Autostart: systemctl enable --now --user keila

Webserver

Editieren von ~/doms/newsletter.meine.domain/htdocs-ssl/.htaccess

DirectoryIndex disabled
RewriteEngine On

# ohne Websocket Upgrade funktionieren beispielsweise Editoren nicht 
RewriteCond %{HTTP:Connection} Upgrade [NC]
RewriteCond %{HTTP:Upgrade} websocket [NC]
RewriteRule ^(.*) ws://127.0.0.1:4000/$1 [P,L]

RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RequestHeader set X-Forwarded-Proto "https"
RewriteRule ^(.*) http://127.0.0.1:4000/$1 [P,L]

Keila updaten

  • Repo aktualisieren
cd ~/var/keila
git fetch
git checkout $(git tag -l | grep '^v[0-9.]*$' | sort -V | tail -n 1)
# prüfen ob auch wirklich release und nicht release candidate
  • jetzt den Instruktionen zum Bauen oben folgen!
  • systemctl restart --user keila
    • bei systemd Fehler sicherstellen das die nötige Variabel gesetzt ist (siehe oben, systemd)

Troubleshooting

Loglevel konfigurieren

Leider reicht es nicht immer MIX_ENV zu verwenden. Um das Loglevel hochzusetzen kann die prod.exs manipuliert werden. Keila muss im Anschluss allerdings erneut gebaut werden:

diff --git a/config/prod.exs b/config/prod.exs
index 7272be4..a5c5aa2 100644
--- a/config/prod.exs
+++ b/config/prod.exs
@@ -16,7 +16,7 @@ config :keila, KeilaWeb.Endpoint,
   server: true

 # Do not print debug messages in production
-config :logger, level: :info
+config :logger, level: :debug

 config :keila, Keila.Repo, []

Links