Installera Mastodon i FreeBSD 12.2

29 Dec 2020

Som tidigare meddelats har jag börjat migrera bort mina CentOS 7 servrar till FreeBSD 12.2 istället. I vissa fall har det varit enkelt, och i andra fall har det varit ett rent helskotta. I skrivande stund har jag precis klarat av en migrering: min Mastodon-server, och jag har 2-3 kvar som är riktigt jobbiga också, men vi korsar den bron när vi kommer till den som det brukar heta. Om du vill läsa lite mer om mina tankar om Mastodon kan du göra det här.

Att installera Mastodon

Börja med att installera Mastodon på en server med FreeBSD. Om du gör den till en server som tillåter registreringar så kan du tänka på att gott om minne, processorkraft och diskyta kommer bespara dig problem i framtiden. Min Mastodon-server har ett 20-tal användare, mer eller mindre, aktiva, och min databas låg på närmare en gigabyte i storlek och katalogen med bilder och annat som användarna postat eller fått i sina flöden uppgick till 70-80 gigabyte. Servern jag kör det på har två processorkärnor och åtta gigabyte internminne, vilket säkert går att banta lite men jag gillar marginaler och servern tuffar på bra som den är:

Innan du sätter igång och installerar Mastodon är det bra att läsa på lite. Det finns gott om dokumentation att läsa, och det enda som saknas egentligen är det där lilla problemet: det finns ingen installationsguide för oss som kör FreeBSD. Tidigare fanns Mastodon paketerat via FreeBSD:s inbyggda pakethanterare men det har försvunnit av någon anledning.

När du installerat din server, gett den ett fullständigt värdnamn i /etc/rc.conf (inklusive domän och tld) så kan du börja installera lite paket:

$ pkg install bash sudo

Därefter är det dags att installera ännu fler paket. Här är det frestande att installera senare versioner än de jag listar här nedan men problemet är att Mastodon exempelvis inte stödjer den senaste versionen av Ruby så följ denna guide så ska det gå bra:

$ pkg install git imagemagick-nox11 ffmpeg libxml2 libxslt gcc protobuf pkgconf autoconf automake gmake bison python readline ncurses openssl libyaml icu libffi gdbm libidn redis postgresql96-server postgresql96-contrib postgresql96-client ruby-2.6 ruby-26-gems rubygem-bundler node yarn npm nginx

Därefter skapar du användaren för Mastodon:

<br /> $ pw useradd -n mastodon -u 144 -c "Mastodon User" -m -d /usr/local/www/mastodon -s /usr/local/bin/bash<br />

Sedan är det dags att “installera” Mastodon:

<br /> $ su - mastodon<br /> $ git clone <a href="https://github.com/tootsuite/mastodon.git">https://github.com/tootsuite/mastodon.git</a> live<br /> $ cd ~/live<br /> $ git checkout $(git tag -l | grep -v 'rc[0-9]*$' | sort -V | tail -n 1)<br /> $ bundle install -j$(getconf NPROCESSORS_ONLN) --deployment --without<br /> development test<br /> $ yarn install --pure-lockfile<br /> $ exit<br />

Konfigurera PostgreSQL

Att lattja med databasen som körs med Mastodon är ett kapitel för sig. Det finns många varianter på hur man gör detta men jag listar hur jag gjort här och det har fungerat.

Först initierar du databasen:

<br /> $ /usr/local/etc/rc.d/postgresql initdb<br />

Därefter startar du PostgreSQL:

<br /> service postgresql onestart<br />

Därefter skapar du användare och databas för Mastodon:

<br /> $ sudo su - postgres<br /> $ psql<br /> CREATE USER mastodon CREATEDB;<br /> CREATE DATABASE mastodon_production;<br /> GRANT ALL PRIVILEGES ON DATABASE mastodon_production TO mastodon;<br /> \q<br />

Konfigurera Nginx

Nginx fungerar som en proxy mellan Mastodon och resten av omvärlden. Det är mot Nginx du skickar trafiken från ditt LAN och WAN där Nginx tar emot trafiken på port 80 eller 443 och skickar den “bakåt” till Mastodon på port 3000 och 4000.

Jag har lagt upp mina konfigurationsfiler här som du kan ladda ned och titta på. Notera att konfigurationsfilen för Mastodon ska placeras under katalogen conf.d i rootkatalogen för Nginx som är /usr/local/etc/nginx/.

Det är också en god idé att du tittar på att installera Let’s Encrypt och skaffar dig ett certifikat till din Mastodon-server. I och med att certifikatet hanteras av Nginx är detta enkelt och inget denna guide går igenom.

Starta sedan Nginx med kommandot service nginx onestart

Skapa serviceobjekt för Mastodon

Mastodon består av tre olika komponenter som ska startas av operativsystemet genom att placera tre filer i /usr/local/etc/rc.d. Mina tre exempel på dessa filer kan du ladda ner här. Värt att notera är att dessa filer placerar process-id-filerna (pid) i /var/run – du kan ändra detta själv i filerna efter tycke och smak, men notera att du sedan måste göra motsvarande ändringar i andra filer i Mastodon oavsett om du använder samma inställningar som jag eller egna, nämligen dessa två:

~/live/config/pumba.rb – på rad 4 lägger du in följande rad:
pidfile '/var/run/mastodon_web.pid'

~/live/config/sidekiq.yml – längst ner i filen lägger du in följande rad:
:pidfile: /var/run/mastodon_workers.pid

Du kan behöva justera rättigheterna för /var/run om PID-filerna inte skrivs där.

Gör de tre processfilerna körbara med följande kommando:

chmod +x /usr/local/etc/rc.d/mastodon_*

Justera Redis för lokala anslutningar

I Redis konfigurationsfil finns det tydliga tecken på att Redis ska acceptera anslutningar från localhost (127.0.0.1) på port 6379 i och med denna rad:

bind 127.0.0.1

Av någon anledning räcker inte detta utan jag fick modifiera raden så här:

bind 127.0.0.1 192.168.1.10 där 192.168.1.10 är IP-adressen på Mastodon-servern. Denna IP-adress ersätter du givetvis med den faktiska adressen på din egna server.

Förbered Mastodon

Det är dags att förbereda Mastodon för sin första körning.

Skapa katalogen för loggar:

$ mkdir /var/log/mastodon<br /> $ chown mastodon /var/log/mastodon

Gå över till Mastodon-användaren med följande kommando:

sudo su - mastodon

Ge sedan följande kommando:

$ cd ~/live
$ RAILS_ENV=production bundle exec rake mastodon:setup
$ RAILS_ENV=production bundle exec rails assets:precompile

När detta är klart kan du sedan redigera ~/live/.env.production. Notera särskilt att du måste konfigurera någon form av e-postfunktion så användare kan registrera sig hos dig, få e-post med information om nya följare, och så vidare.

Starta alla tjänster automagiskt

Det är trevligt när ens tjänster startar automagiskt vid omboot och liknande. Lägg in följande rader i /etc/rc.conf:

<br /> redis_enable="YES"<br /> postgresql_enable="YES"<br /> nginx_enable="YES"<br /> mastodon_stream_enable="YES"<br /> mastodon_web_enable="YES"<br /> mastodon_workers_enable="YES"<br />

Boota till sist om din server och se att allt kommer upp ordentligt. Kolla i loggarna för Nginx och Mastodon efter felmeddelanden från uppstarten. Ser allt rimligt bra ut kan du testa att surfa till din nya Mastodon-server, registrera ditt konto och se till att du blir administratör för servern innan du släpper på användare utifrån.

Lycka till!