Instal·lar #Akkoma en una #Raspberry Pi 3B+ (o superior), segona part

En la primera part vam veure els primers passos. En aquesta entrada veurem els finals:

Instal·lar nginx

No té cap misteri, com a root:

apt install nginx

Activem la unitat systemd per a assegurar que quan engeguem la nostre Raspberry (si és que la parem mai) també s'iniciï nginx i iniciem nginx ara mateix:

systemctl enable nginx && systemctl start nginx

Confirmem que tenim nginx en marxa:

systemctl status nginx

En una de les línies hem de veure que diu “active”.

Obtenir certificat SSL

Si volem federar amb tot el fedivers, el domini de l'instància Akkoma que estem muntant ha de ser accessible sí o sí de manera segura amb el protocol https. Ens cal obtenir un certificat. Si no tenim instal·lat el paquet certbot fem-ho ara:

apt install certbot

Com a root, obtenim el certificat per a nginx així:

certbot certonly -d akkoma.ddns.net --standalone  

Es queixarà d'aquest problema perquè tenim nginx en marxa:

Problem binding to port 80: Could not bind to IPv4 or IPv6.

Parem nginx i tornem a provar-ho:

systemctl stop nginx
certbot certonly -d akkoma.ddns.net --standalone

Si certbot ens dona l'error Timeout during connect (likely firewall problem) és perquè tenim el firewall amb els ports 80 i 443 tancats. Si el firewall és ufw els obrim així de fàcil:

ufw allow 'Nginx Full'

Tornem a provar:

certbot certonly -d akkoma.ddns.net --standalone

Si tot ha anat bé ho sabrem:

Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/akkoma.ddns.net/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/akkoma.ddns.net/privkey.pem

Ja podem configurar nginx per dir-li on tenim el certificat. La configuració per a nginx de Akkoma hauria de ser a /etc/nginx/sites-available/akkoma.conf. Doncs la editem i assegurem tenir aquestes dues línies que diuen on trobar els certificat obtinguts:

sslcertificate /etc/letsencrypt/live/akkoma.ddns.net/fullchain.pem; sslcertificate_key /etc/letsencrypt/live/akkoma.ddns.net/privkey.pem;

Desem els canvis i enllaçament la configuració en el directori sites-enabled per a que nginx la tingui en compte:

ln -s /etc/nginx/sites-available/akkoma.conf /etc/nginx/sites-enabled/akkoma.conf

Ara assegurem que a nginx li agrada:

nginx -t

Si respon test is succesful ja podem reiniciar nginx per a que la carregui:

systemctl restart nginx

Clonar Akkoma

Encara no hem creat l'usuari akkoma:

useradd -r -s /bin/false -m -d /var/lib/akkoma -U akkoma

Creem el directori on clonarem Akkoma i fem propietari al usuari akkoma:
mkdir -p /opt/akkoma
chown -R akkoma:akkoma /opt/akkoma
I com a usuari akkoma clonem la darrera versió estable des d'el repositori:

sudo -Hu akkoma git clone https://akkoma.dev/AkkomaGang/akkoma.git /opt/akkoma  

instal·lar asdf i compilar Akkoma

Un problema potencial quan instal·lem els paquets Elixir i Erlang amb el gestor de paquets del sistema operatiu és que una actualització d'aquests paquets pot provocar que la nostra flamant instància Akkoma deixi de funcionar (ha passat amb diverses instàncies del fedivers). Per evitar això és una bona idea instal·lar el gestor de versions asdf.

Canviem al directori i al usuari akkoma:
cd /opt/akkoma
sudo -Hu akkoma bash
Ara hem de crear un nou fitxer anomenat .tool-versions, on posarem les versions d'Elixir i Erlang que volem per al nostre Akkoma:

elixir 1.14.2 erlang 25.2

Desem els canvis i clonem asdf des de la font. La darrera versió estable en el moment d'escriure aquesta entrada és la v0.11.0:

git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.11.0

Ara afegim a .bashrc les rutes adients:

echo “. $HOME/.asdf/asdf.sh” >> ~/.bashrc echo “. $HOME/.asdf/completions/asdf.bash” >> ~/.bashrc

I les carreguem amb:

exec bash

El següent pas és afegir els dos plugins, tant de Elixir com de Erlang:
asdf plugin-add erlang
asdf plugin-add elixir
Instal·lem i compilem tot plegat (trigarà uns quants minuts, paciència):

asdf install

Pot donar algun error xxxx is missing... no passa res, calma. Si et diu Erlang/OTP 25.2 (asdf_25.2) has been successfully built vol dir que tot ha anat bé i podem continuar.

Executem línia a línia els passos següents per a compilar Akkoma:
mix local.hex --force mix local.rebar --force mix deps.get MIX_ENV=prod mix compile
Quan hagi acabat veurem Generated pleroma app. Ara cal que generem la configuració de l'instància:

MIX_ENV=prod mix pleroma.instance gen

Anem responem a totes les preguntes que ens fa, la primera i més important és el domini, en aquest cas és akkoma.ddns.net. Quan acabi haurà generat la configuració a config/generated_config.exs. L'hem de moure a config/prod.secret.exs:

mv config/{generated_config.exs,prod.secret.exs}

Ara toca crear la base de dades Postgresql. Sortim del usuari akkoma i encara dins de /opt/akkoma, com a root fem:

sudo -Hu postgres psql -f config/setup_db.psql

Tornem al usuari akkoma i executem ecto.migrate per a crear totes les taules de la base de dades:

MIX_ENV=prod mix ecto.migrate

Altre cop com a root, copiem l'unitat systemd al lloc adient:

cp /opt/akkoma/installation/akkoma.service /etc/systemd/system/akkoma.service

Editem l'unitat systemd, comentant la línia que diu ExecStart=/usr/bin/mix phx.serveri afegint a sota les dues línies que veiem a continuació:

;ExecStart=/usr/bin/mix phx.server Environment=“PATH=/var/lib/akkoma/.asdf/shims:/var/lib/akkoma/.asdf/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin” ExecStart=/var/lib/akkoma/.asdf/shims/mix phx.server

Recarreguem els canvis amb systemctl daemon-reload i ja podem posar en marxa la nostra flamant instància Akkoma:

systemctl enable akkoma && systemctl start akkoma

Amb el navegador ja podem visitar-la!

Ep! un moment! voldràs fer-te admin suposo!

cd /opt/akkoma && sudo -Hu akkoma bash

Per a crear l'usuari:

MIX_ENV=prod mix pleroma.user new <usuari> <adreça de correu> --admin

Aquesta línia de dalt et genera un enllaç per a establir la contrasenya del usuari admin que has creat.

Ja està! A gaudir de la teva sobirania digital!