Mastodon bei Hostsharing: Unterschied zwischen den Versionen
(Starten der Dienste / fehlendes export-Statement) |
Cds09 (Diskussion | Beiträge) |
||
(37 dazwischenliegende Versionen von 7 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
Mastodon ist ein verteilter Microblogging Dienst, der das ActivityPub-Protokoll verwendet. | |||
Wenn man nur wenige Nutzer oder gar nur für sich selbst einen Einstiegspunkt ins "Fediverse" schaffen will, kann sich auch die Ressourcen-schonende Alternative [[Pleroma]] anbieten. | |||
Diese Anleitung beschreibt, wie man Mastodon auf der Managed Hosting Plattform von Hostsharing installieren kann. | Diese Anleitung beschreibt, wie man Mastodon auf der Managed Hosting Plattform von Hostsharing installieren kann. | ||
Hostsharing selbst nutzt die Hosting Plattform und betreibt zwei Mastodon Instanzen: | |||
* https://geno.social | |||
* https://hostsharing.coop | |||
Der Autor dieser Seite betreibt: | |||
* https://krefeld.life | |||
{{Textkasten|gelb|Für Managed Server|Ein funktionierender Mastodon-Server erfordert mehrere laufende Server-Dienste. Für den Betrieb ist ein Managed Server sinnvoll.}} | {{Textkasten|gelb|Für Managed Server|Ein funktionierender Mastodon-Server erfordert mehrere laufende Server-Dienste. Für den Betrieb ist ein Managed Server sinnvoll.}} | ||
Zeile 12: | Zeile 23: | ||
Verwendete IP-Ports der Server-Dienste: | Verwendete IP-Ports der Server-Dienste: | ||
# Redis: localhost:32002 | # Redis: localhost:32002 | ||
# Mastodon-Web: localhost:32003 | # Mastodon-Web: localhost:32003 | ||
Zeile 21: | Zeile 31: | ||
Anlegen einer Datei ''/home/pacs/xyz00/users/mastodon/redis/etc/redis.conf'' mit folgendem Inhalt: | Anlegen einer Datei ''/home/pacs/xyz00/users/mastodon/redis/etc/redis.conf'' mit folgendem Inhalt: | ||
<syntaxhighlight lang="ini" line> | |||
daemonize yes | |||
pidfile /home/pacs/xyz00/users/mastodon/redis/var/redis-server.pid | |||
requirepass <hierhin-gehoert-ein-redis-passwort> | |||
port 32002 | |||
tcp-backlog 128 | |||
bind 127.0.0.1 | |||
timeout 300 | |||
loglevel notice | |||
logfile /home/pacs/xyz00/users/mastodon/redis/var/redis.log | |||
databases 16 | |||
save 900 1 | |||
save 300 10 | |||
save 60 10000 | |||
slave-serve-stale-data yes | |||
appendonly no | |||
dbfilename dump.rdb | |||
dir /home/pacs/xyz00/users/mastodon/redis/var | |||
</syntaxhighlight> | |||
== Installation von NodeJS == | == Installation von NodeJS == | ||
Als User 'xyz00-mastodon'': Installation von ''nvm'' und ''nodejs'' (Version | Als User 'xyz00-mastodon'': Installation von ''nvm'' und ''nodejs'' (Version 20) nach der Anleitung [[NodeJS]] | ||
Installation von ''yarn'' mit: | Installation von ''yarn'' mit: | ||
<syntaxhighlight lang="bash"> | |||
npm install -g yarn | |||
</syntaxhighlight> | |||
== Installation von Ruby == | == Installation von Ruby == | ||
Zeile 53: | Zeile 67: | ||
Zunächst ''rbenv'' and ''ruby-build'': | Zunächst ''rbenv'' and ''ruby-build'': | ||
<syntaxhighlight lang="bash"> | |||
git clone https://github.com/rbenv/rbenv.git ~/.rbenv | |||
cd ~/.rbenv && src/configure && make -C src | |||
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.profile | |||
echo 'eval "$(rbenv init -)"' >> ~/.profile | |||
</syntaxhighlight> | |||
starte neue Shell: | starte neue Shell: | ||
<syntaxhighlight lang="bash"> | |||
exec bash | |||
</syntaxhighlight> | |||
Überprüfe rbenv-Installation | Überprüfe rbenv-Installation | ||
<syntaxhighlight lang="bash"> | |||
type rbenv | |||
</syntaxhighlight> | |||
Installiere ruby-build als rbenv-Plugin | Installiere ruby-build als rbenv-Plugin | ||
<syntaxhighlight lang="bash"> | |||
git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build | |||
</syntaxhighlight> | |||
Nun kann die benötigte Ruby-Version installiert werden: | Nun kann die benötigte Ruby-Version installiert werden: | ||
<syntaxhighlight lang="bash"> | |||
rbenv install 3.2.3 | |||
</syntaxhighlight> | |||
== Installation der Mastodon Software == | == Installation der Mastodon Software == | ||
Zeile 78: | Zeile 102: | ||
Weiterhin Als User ''xyz00-mastodon'': | Weiterhin Als User ''xyz00-mastodon'': | ||
<syntaxhighlight lang="bash"> | |||
cd ~ | |||
git clone https://github.com/tootsuite/mastodon.git live | |||
cd ~/live | |||
</syntaxhighlight> | |||
Die stabile Version auschecken: | Die stabile Version auschecken: | ||
<syntaxhighlight lang="bash"> | |||
git checkout $(git tag -l | grep -v 'rc[0-9]*$' | sort -V | tail -n 1) | |||
</syntaxhighlight> | |||
Ruby Pakete installieren: | Ruby Pakete installieren: | ||
<syntaxhighlight lang="bash"> | |||
gem install bundler | |||
bundle install -j$(getconf _NPROCESSORS_ONLN) --deployment --without development test | |||
</syntaxhighlight> | |||
Node.js Pakete installieren: | Node.js Pakete installieren: | ||
<syntaxhighlight lang="bash"> | |||
yarn install --pure-lockfile | |||
</syntaxhighlight> | |||
== Konfiguration der Mastodon Software == | == Konfiguration der Mastodon Software == | ||
Anlegen einer Datei ''/home/pacs/xyz00/users/mastodon | Anlegen einer Datei ''/home/pacs/xyz00/users/mastodon/live/.env.production'' mit dem folgenden Inhalt: | ||
<syntaxhighlight lang=ini line> | |||
REDIS_HOST=localhost | |||
REDIS_PORT=32002 | |||
REDIS_PASSWORD=<hierhin-gehoert-ein-redis-passwort> | |||
DB_HOST=localhost | |||
DB_USER=xyz00_mastuser | |||
DB_NAME=xyz00_mastdb | |||
DB_PASS=meinPasswort | |||
DB_PORT=5432 | |||
LOCAL_DOMAIN=beispiel.social | |||
SECRET_KEY_BASE=12ab.. | |||
OTP_SECRET=34ef.. | |||
VAPID_PRIVATE_KEY=ABCD.. | |||
VAPID_PUBLIC_KEY=EFGH.. | |||
DEFAULT_LOCALE=de | |||
SMTP_SERVER=localhost | |||
SMTP_PORT=25 | |||
SMTP_FROM_ADDRESS=notifications@beispiel.social | |||
SMTP_AUTH_METHOD=none | |||
SMTP_OPENSSL_VERIFY_MODE=none | |||
STREAMING_CLUSTER_NUM=1 | |||
</syntaxhighlight> | |||
Die Zufallswerte für die Variablen SECRET_KEY_BASE und OTP_SECRET erzeugt man durch zwei Aufrufe des Kommandos | Die Zufallswerte für die Variablen SECRET_KEY_BASE und OTP_SECRET erzeugt man durch zwei Aufrufe des Kommandos | ||
<syntaxhighlight lang="bash"> | |||
RAILS_ENV=production bundle exec rake secret | |||
</syntaxhighlight> | |||
Die Werte für VAPID_PRIVATE_KEY und VAPID_PUBLIC_KEY erzeugt das Kommando | Die Werte für VAPID_PRIVATE_KEY und VAPID_PUBLIC_KEY erzeugt das Kommando | ||
<syntaxhighlight lang="bash"> | |||
RAILS_ENV=production bundle exec rake mastodon:webpush:generate_vapid_key | |||
</syntaxhighlight> | |||
Initialisieren der Datenbank: | |||
<syntaxhighlight lang="bash"> | |||
export SAFETY_ASSURED=1 | |||
RAILS_ENV=production bundle exec rails db:schema:load | |||
RAILS_ENV=production bundle exec rails db:seed | |||
</syntaxhighlight> | |||
Erzeugen der Web-Resourcen | |||
<syntaxhighlight lang="bash"> | |||
yarn set version classic | |||
RAILS_ENV=production bundle exec rails assets:precompile | |||
</syntaxhighlight> | |||
== Starten der Dienste == | == Starten der Dienste == | ||
Zum Start aller notwendigen Dienste wird in dieser Anleitung '' | Zum Start aller notwendigen Dienste wird in dieser Anleitung ''systemctl'' benutzt. | ||
Die Datei <code>~/.config/systemd/user/redis.service</code> kann so aussehen: | |||
<syntaxhighlight lang=shell line> | |||
[Unit] | |||
Description=Redis User Service | |||
[Service] | |||
WorkingDirectory=%h/var/redis | |||
Environment="PATH=/usr/local/bin:/usr/bin:/bin" | |||
ExecStart=/usr/bin/redis-server %h/etc/redis.conf | |||
Restart=always | |||
PrivateTmp=true | |||
NoNewPrivileges=true | |||
[Install] | |||
WantedBy=default.target | |||
</syntaxhighlight> | |||
Die Datei <code>~/.config/systemd/user/puma.service</code> kann so aussehen: | |||
<syntaxhighlight lang=shell line> | |||
[Unit] | |||
Description=Mastodon Web Service Puma | |||
After=redis.service | |||
[Service] | |||
WorkingDirectory=%h/live | |||
Environment="RAILS_ENV=production" | |||
ExecStart=%h/.rbenv/shims/bundle exec puma -C config/puma.rb -e production -b tcp://127.0.0.1:32003 | |||
StandardError=append:%h/var/log/puma.log | |||
StandardOutput=append:%h/var/log/puma.log | |||
Restart=always | |||
PrivateTmp=true | |||
NoNewPrivileges=true | |||
[Install] | |||
WantedBy=default.target | |||
</syntaxhighlight> | |||
Die Datei <code>~/.config/systemd/user/sidekiq.service</code> kann so aussehen: | |||
<syntaxhighlight lang=shell line> | |||
[Unit] | |||
Description=Mastodon Sidekiq Service | |||
After=redis.service | |||
[Service] | |||
WorkingDirectory=%h/live | |||
Environment="RAILS_ENV=production" | |||
Environment="DB_POOL=5" | |||
ExecStart=%h/.rbenv/shims/bundle exec sidekiq -c 5 -q default -q mailers -q pull -q push -q scheduler | |||
StandardError=append:%h/var/log/sidekiq.log | |||
StandardOutput=append:%h/var/log/sidekiq.log | |||
Restart=always | |||
PrivateTmp=true | |||
NoNewPrivileges=true | |||
[Install] | |||
WantedBy=default.target | |||
</syntaxhighlight> | |||
Die Datei <code>~/.config/systemd/user/streaming.service</code> kann so aussehen: | |||
<syntaxhighlight lang=shell line> | |||
[Unit] | |||
Description=Mastodon Streaming Service | |||
After=redis.service | |||
[Service] | |||
WorkingDirectory=%h/live | |||
Environment="NVM_DIR=%h/.nvm" | |||
Environment="NVM_BIN=%h/.nvm/versions/node/v20.14.0/bin" | |||
Environment="NODE_ENV=production" | |||
Environment="PORT=32004" | |||
Environment="BIND=127.0.0.1" | |||
ExecStart=%h/.nvm/versions/node/v20.14.0/bin/node streaming/index.js | |||
StandardError=append:%h/var/log/streaming.log | |||
StandardOutput=append:%h/var/log/streaming.log | |||
Restart=always | |||
PrivateTmp=true | |||
NoNewPrivileges=true | |||
[Install] | |||
WantedBy=default.target | |||
</syntaxhighlight> | |||
Die Dienste werden dann aktiviert und gestartet: | |||
<syntaxhighlight lang=shell line> | |||
systemctl --user enable redis --now | |||
systemctl --user enable puma --now | |||
systemctl --user enable streaming --now | |||
systemctl --user enable sidekiq --now | |||
</syntaxhighlight> | |||
== Einrichten des Apache VHost == | == Einrichten des Apache VHost == | ||
Zeile 175: | Zeile 290: | ||
folgende Konfiguration einfügen: | folgende Konfiguration einfügen: | ||
<syntaxhighlight lang=apache line> | |||
DirectoryIndex disabled | |||
RewriteEngine On | |||
RewriteBase / | |||
RewriteCond %{REQUEST_URI} ^/api/v1/streaming [NC] | |||
RewriteRule .* ws://localhost:32004%{REQUEST_URI} [proxy] | |||
RequestHeader set X-Forwarded-Proto "https" | |||
RewriteCond %{REQUEST_FILENAME} !-f | |||
RewriteCond %{REQUEST_FILENAME} !-l | |||
RewriteRule .* http://localhost:32003%{REQUEST_URI} [proxy] | |||
RequestHeader set X-Forwarded-Proto "https" | |||
</syntaxhighlight> | |||
== Systemd Timer == | |||
Mit einem systemd Timer werden alte Ressourcen aufgeräumt. | |||
<code>~/.config/systemd/user/mastodon_cleanup.env</code> | |||
<syntaxhighlight lang=bash line> | |||
HOME=/home/pacs/xyz00/users/mastodon | |||
MAILTO=mastodon@beispiel.social | |||
RAILS_ENV=production | |||
NUM_DAYS=31 | |||
</syntaxhighlight> | |||
<code>~/.config/systemd/user/mastodon_cleanup.service</code> | |||
<syntaxhighlight lang=ini line> | |||
[Unit] | |||
Description=fetch mail from remote server | |||
[Service] | |||
EnvironmentFile=/home/pacs/xyz00/users/mastodon/.config/systemd/user/mastodon_cleanup.env | |||
WoringDirectory=/home/pacs/xyz00/users/mastodon/live | |||
Type=oneshot | |||
ExecStart=/home/pacs/xyz00/users/mastodon/live/bin/tootctl media remove | |||
</syntaxhighlight> | |||
<code>~/.config/systemd/user/mastodon_cleanup.timer</code> | |||
<syntaxhighlight lang=ini line> | |||
[Unit] | |||
Description=fetch mail every five minutes | |||
[Timer] | |||
OnCalendar=4:18 | |||
Persistent=True | |||
[Install] | |||
WantedBy=timers.target | |||
</syntaxhighlight> | |||
Timer aktivieren und starten: | |||
<syntaxhighlight lang=shell line> | |||
$ systemctl --user enable mastodon_cleanup.timer | |||
$ systemctl --user start mastodon_cleanupl.timer | |||
</syntaxhighlight> | |||
== Volltextsuche == | == Volltextsuche == | ||
In der installierten Version gibt es noch keine Volltextsuche. Es kann lediglich nach Nutzerkennungen und Hastags gesucht werden. Für die Volltextsuche kann optional Elasticsearch installiert werden. | In der installierten Version gibt es noch keine Volltextsuche. Es kann lediglich nach Nutzerkennungen und Hastags gesucht werden. Für die Volltextsuche kann optional Elasticsearch installiert werden. | ||
* https://github.com/tootsuite/ | |||
* [[Elasticsearch]] bei Hostsharing | |||
* https://docs.joinmastodon.org/admin/optional/elasticsearch/ | |||
== Instanz einrichten == | |||
Nach der Installation kann man sich auf https://beispiel.social einen Benutzer einrichten. | |||
Auf der Kommandozeile: | |||
<syntaxhighlight lang="bash"> | |||
RAILS_ENV=production bin/tootctl accounts create \ | |||
alice \ | |||
--email alice@example.com \ | |||
--confirmed \ | |||
--role Admin | |||
</syntaxhighlight> | |||
Weitere Einrichtung sollte vorgenommen werden, z.B. eine Beschreibung der Instanz hinterlegen, siehe https://docs.joinmastodon.org/admin/setup/ | |||
== Mastodon Updates == | |||
siehe: | |||
* https://github.com/tootsuite/mastodon/releases | |||
(hier für das Update auf die Mastodon Version v4.2.9 mit Ruby 3.2.3) | |||
=== Ruby === | |||
<syntaxhighlight lang="bash"> | |||
cd ~/.rbenv | |||
git pull | |||
cd ~/.rbenv/plugins/ruby-build | |||
git pull | |||
cd | |||
rbenv install -l | |||
rbenv install 3.2.3 | |||
rbenv global 3.2.3 | |||
</syntaxhighlight> | |||
=== Mastodon === | |||
<syntaxhighlight lang="bash"> | |||
cd ~/mastodon/live | |||
git fetch | |||
git checkout v4.2.9 | |||
gem update --system | |||
bundle install | |||
yarn install | |||
RAILS_ENV=production bundle exec rails db:migrate | |||
yarn set version classic | |||
RAILS_ENV=production bundle exec rails assets:precompile | |||
</syntaxhighlight> | |||
Restart Mastodon! | |||
== Links == | == Links == | ||
* https://github.com/ | * [https://joinmastodon.org/ Offizielle Webseite von Mastodon] | ||
* im Archiv: https://github.com/mastodon/documentation/blob/archive/Running-Mastodon/Production-guide.md | |||
* aktuell: https://docs.joinmastodon.org/admin/install/ | |||
* https://krinetzki.de/2017/04/installation-von-mastodon-auf-debian-8-jessie/ | * https://krinetzki.de/2017/04/installation-von-mastodon-auf-debian-8-jessie/ | ||
* [https://codeberg.org/tpokorra/hs.ansible/src/branch/main/playbooks/mastodon Ansible Playbook für Hostsharing] | |||
[[Kategorie:Installationsanleitungen]] | [[Kategorie:Installationsanleitungen]] | ||
[[Kategorie:Fediverse]] | |||
[[Kategorie:Activitypub]] | |||
[[Kategorie:Ansible Playbook]] |
Aktuelle Version vom 3. Dezember 2024, 14:37 Uhr
Mastodon ist ein verteilter Microblogging Dienst, der das ActivityPub-Protokoll verwendet.
Wenn man nur wenige Nutzer oder gar nur für sich selbst einen Einstiegspunkt ins "Fediverse" schaffen will, kann sich auch die Ressourcen-schonende Alternative Pleroma anbieten.
Diese Anleitung beschreibt, wie man Mastodon auf der Managed Hosting Plattform von Hostsharing installieren kann.
Hostsharing selbst nutzt die Hosting Plattform und betreibt zwei Mastodon Instanzen:
Der Autor dieser Seite betreibt:
Für Managed Server
Ein funktionierender Mastodon-Server erfordert mehrere laufende Server-Dienste. Für den Betrieb ist ein Managed Server sinnvoll.
Vorbereitungen
Mit Hilfe von HSAdmin wird angelegt:
- Ein User als Service-User mit /bin/bash als Shell, zum Beispiel Beispiel: xyz00-mastodon
- Eine Domain mit xyz00-mastodon als Domain-Administrator, zum Beispiel beispiel.social
- Einen Postgresql-User xyz00_mastuser mit Passwort meinPasswort
- Eine Postgresql-Datenbank xyz00_mastdb mit Datenbank-Owner xyz00_mastuser
Verwendete IP-Ports der Server-Dienste:
- Redis: localhost:32002
- Mastodon-Web: localhost:32003
- Mastodon-Streaming: localhost:32004
Konfiguration des Redis Server
Anlegen einer Datei /home/pacs/xyz00/users/mastodon/redis/etc/redis.conf mit folgendem Inhalt:
daemonize yes
pidfile /home/pacs/xyz00/users/mastodon/redis/var/redis-server.pid
requirepass <hierhin-gehoert-ein-redis-passwort>
port 32002
tcp-backlog 128
bind 127.0.0.1
timeout 300
loglevel notice
logfile /home/pacs/xyz00/users/mastodon/redis/var/redis.log
databases 16
save 900 1
save 300 10
save 60 10000
slave-serve-stale-data yes
appendonly no
dbfilename dump.rdb
dir /home/pacs/xyz00/users/mastodon/redis/var
Installation von NodeJS
Als User 'xyz00-mastodon: Installation von nvm und nodejs (Version 20) nach der Anleitung NodeJS
Installation von yarn mit:
npm install -g yarn
Installation von Ruby
Als User xyz00-mastodon: Installation von Ruby mit rbenv mit folgenden Befehlen:
Zunächst rbenv and ruby-build:
git clone https://github.com/rbenv/rbenv.git ~/.rbenv
cd ~/.rbenv && src/configure && make -C src
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.profile
echo 'eval "$(rbenv init -)"' >> ~/.profile
starte neue Shell:
exec bash
Überprüfe rbenv-Installation
type rbenv
Installiere ruby-build als rbenv-Plugin
git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build
Nun kann die benötigte Ruby-Version installiert werden:
rbenv install 3.2.3
Installation der Mastodon Software
Weiterhin Als User xyz00-mastodon:
cd ~
git clone https://github.com/tootsuite/mastodon.git live
cd ~/live
Die stabile Version auschecken:
git checkout $(git tag -l | grep -v 'rc[0-9]*$' | sort -V | tail -n 1)
Ruby Pakete installieren:
gem install bundler
bundle install -j$(getconf _NPROCESSORS_ONLN) --deployment --without development test
Node.js Pakete installieren:
yarn install --pure-lockfile
Konfiguration der Mastodon Software
Anlegen einer Datei /home/pacs/xyz00/users/mastodon/live/.env.production mit dem folgenden Inhalt:
REDIS_HOST=localhost
REDIS_PORT=32002
REDIS_PASSWORD=<hierhin-gehoert-ein-redis-passwort>
DB_HOST=localhost
DB_USER=xyz00_mastuser
DB_NAME=xyz00_mastdb
DB_PASS=meinPasswort
DB_PORT=5432
LOCAL_DOMAIN=beispiel.social
SECRET_KEY_BASE=12ab..
OTP_SECRET=34ef..
VAPID_PRIVATE_KEY=ABCD..
VAPID_PUBLIC_KEY=EFGH..
DEFAULT_LOCALE=de
SMTP_SERVER=localhost
SMTP_PORT=25
SMTP_FROM_ADDRESS=notifications@beispiel.social
SMTP_AUTH_METHOD=none
SMTP_OPENSSL_VERIFY_MODE=none
STREAMING_CLUSTER_NUM=1
Die Zufallswerte für die Variablen SECRET_KEY_BASE und OTP_SECRET erzeugt man durch zwei Aufrufe des Kommandos
RAILS_ENV=production bundle exec rake secret
Die Werte für VAPID_PRIVATE_KEY und VAPID_PUBLIC_KEY erzeugt das Kommando
RAILS_ENV=production bundle exec rake mastodon:webpush:generate_vapid_key
Initialisieren der Datenbank:
export SAFETY_ASSURED=1
RAILS_ENV=production bundle exec rails db:schema:load
RAILS_ENV=production bundle exec rails db:seed
Erzeugen der Web-Resourcen
yarn set version classic
RAILS_ENV=production bundle exec rails assets:precompile
Starten der Dienste
Zum Start aller notwendigen Dienste wird in dieser Anleitung systemctl benutzt.
Die Datei ~/.config/systemd/user/redis.service
kann so aussehen:
[Unit]
Description=Redis User Service
[Service]
WorkingDirectory=%h/var/redis
Environment="PATH=/usr/local/bin:/usr/bin:/bin"
ExecStart=/usr/bin/redis-server %h/etc/redis.conf
Restart=always
PrivateTmp=true
NoNewPrivileges=true
[Install]
WantedBy=default.target
Die Datei ~/.config/systemd/user/puma.service
kann so aussehen:
[Unit]
Description=Mastodon Web Service Puma
After=redis.service
[Service]
WorkingDirectory=%h/live
Environment="RAILS_ENV=production"
ExecStart=%h/.rbenv/shims/bundle exec puma -C config/puma.rb -e production -b tcp://127.0.0.1:32003
StandardError=append:%h/var/log/puma.log
StandardOutput=append:%h/var/log/puma.log
Restart=always
PrivateTmp=true
NoNewPrivileges=true
[Install]
WantedBy=default.target
Die Datei ~/.config/systemd/user/sidekiq.service
kann so aussehen:
[Unit]
Description=Mastodon Sidekiq Service
After=redis.service
[Service]
WorkingDirectory=%h/live
Environment="RAILS_ENV=production"
Environment="DB_POOL=5"
ExecStart=%h/.rbenv/shims/bundle exec sidekiq -c 5 -q default -q mailers -q pull -q push -q scheduler
StandardError=append:%h/var/log/sidekiq.log
StandardOutput=append:%h/var/log/sidekiq.log
Restart=always
PrivateTmp=true
NoNewPrivileges=true
[Install]
WantedBy=default.target
Die Datei ~/.config/systemd/user/streaming.service
kann so aussehen:
[Unit]
Description=Mastodon Streaming Service
After=redis.service
[Service]
WorkingDirectory=%h/live
Environment="NVM_DIR=%h/.nvm"
Environment="NVM_BIN=%h/.nvm/versions/node/v20.14.0/bin"
Environment="NODE_ENV=production"
Environment="PORT=32004"
Environment="BIND=127.0.0.1"
ExecStart=%h/.nvm/versions/node/v20.14.0/bin/node streaming/index.js
StandardError=append:%h/var/log/streaming.log
StandardOutput=append:%h/var/log/streaming.log
Restart=always
PrivateTmp=true
NoNewPrivileges=true
[Install]
WantedBy=default.target
Die Dienste werden dann aktiviert und gestartet:
systemctl --user enable redis --now
systemctl --user enable puma --now
systemctl --user enable streaming --now
systemctl --user enable sidekiq --now
Einrichten des Apache VHost
cd ~/doms/beispiel.social rm -rf htdocs-ssl subs/www subs-ssl/www ln -s ~/live/public htdocs-ssl touch htdocs-ssl/.htaccess
Dann die htdocs-ssl/.htaccess mit dem Editor der Wahl öffnen und folgende Konfiguration einfügen:
DirectoryIndex disabled
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} ^/api/v1/streaming [NC]
RewriteRule .* ws://localhost:32004%{REQUEST_URI} [proxy]
RequestHeader set X-Forwarded-Proto "https"
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule .* http://localhost:32003%{REQUEST_URI} [proxy]
RequestHeader set X-Forwarded-Proto "https"
Systemd Timer
Mit einem systemd Timer werden alte Ressourcen aufgeräumt.
~/.config/systemd/user/mastodon_cleanup.env
HOME=/home/pacs/xyz00/users/mastodon
MAILTO=mastodon@beispiel.social
RAILS_ENV=production
NUM_DAYS=31
~/.config/systemd/user/mastodon_cleanup.service
[Unit]
Description=fetch mail from remote server
[Service]
EnvironmentFile=/home/pacs/xyz00/users/mastodon/.config/systemd/user/mastodon_cleanup.env
WoringDirectory=/home/pacs/xyz00/users/mastodon/live
Type=oneshot
ExecStart=/home/pacs/xyz00/users/mastodon/live/bin/tootctl media remove
~/.config/systemd/user/mastodon_cleanup.timer
[Unit]
Description=fetch mail every five minutes
[Timer]
OnCalendar=4:18
Persistent=True
[Install]
WantedBy=timers.target
Timer aktivieren und starten:
$ systemctl --user enable mastodon_cleanup.timer
$ systemctl --user start mastodon_cleanupl.timer
Volltextsuche
In der installierten Version gibt es noch keine Volltextsuche. Es kann lediglich nach Nutzerkennungen und Hastags gesucht werden. Für die Volltextsuche kann optional Elasticsearch installiert werden.
Instanz einrichten
Nach der Installation kann man sich auf https://beispiel.social einen Benutzer einrichten.
Auf der Kommandozeile:
RAILS_ENV=production bin/tootctl accounts create \
alice \
--email alice@example.com \
--confirmed \
--role Admin
Weitere Einrichtung sollte vorgenommen werden, z.B. eine Beschreibung der Instanz hinterlegen, siehe https://docs.joinmastodon.org/admin/setup/
Mastodon Updates
siehe:
(hier für das Update auf die Mastodon Version v4.2.9 mit Ruby 3.2.3)
Ruby
cd ~/.rbenv
git pull
cd ~/.rbenv/plugins/ruby-build
git pull
cd
rbenv install -l
rbenv install 3.2.3
rbenv global 3.2.3
Mastodon
cd ~/mastodon/live
git fetch
git checkout v4.2.9
gem update --system
bundle install
yarn install
RAILS_ENV=production bundle exec rails db:migrate
yarn set version classic
RAILS_ENV=production bundle exec rails assets:precompile
Restart Mastodon!