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

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.0 erlang 25.1.1

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

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

systemctl enable akkoma && systemctl start akkoma

Podem confirmar que tot va bé mirant l'status: systemctl status akkoma

Possibles problemes relacionats amb les llibreries Crypto

Si Akkoma no engega podem veure el motiu amb:

journalctl -xfe -u akkoma.service

Si hi veiem errors relacionats amb rsaEncryption o public_key o private_key o RSAPrivateKey, és molt possible que el nostre Ubuntu no tingui instal·lada la llibreia libssl adient. Amb Ubuntu Server 22.04.2 LTS ho he sol·lucionat així:

Descarregar i instal·lar libssl1.1 (per a Ubuntu Server 22.04.2 LTS):

wget http://nz2.archive.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.1f-1ubuntu2.18_amd64.deb dpkg -i libssl1.1_1.1.1f-1ubuntu2.18_amd64.deb

Nota: em va donar una pista de com sol·lucionar el problema la versió OTP que vaig provar d'instal·lar al veure que no em funcionava aquesta. Ho tinc publicat a mastodont.cat:

Unable to load Crypto Library

nginx

Copiem la configuració exemple per a nginx: cp /opt/akkoma/installation/nginx/akkoma.nginx /etc/nginx/sites-available/akkoma.nginx

Ara ja podem afegir a la configuració de nginx on tenim el certificat. Editem la configuració exemple que hem copiat a dalt i assegurem tenir aquestes dues línies que diuen on trobar els certificats obtinguts:

ssl_certificate /etc/letsencrypt/live/akkoma.ddns.net/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/akkoma.ddns.net/privkey.pem;

Canviem example.tld a server_name per akkoma.ddns.net en els dos blocs server.

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.nginx /etc/nginx/sites-enabled/akkoma.nginx

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

Engegar Akkoma

Amb el navegador ja podem visitar-la!

Veurem que ems diu “Welcome to Akkoma! If you are seeinf this page, your server works!” però a sota demanarà que hi instal·lem un frontend:

cd /opt/akkoma && sudo -Hu akkoma bash MIX_ENV=prod mix pleroma.frontend install pleroma-fe --ref stable

I ja està, si tornem al navegador ja veurem el nostre Akkoma amb frontend!

Crear l'usuari admin

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

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

Per a crear l'usuari amb drets d'administració:

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.

Per a poder fer tasques d'admin et cal instal·lar el frontend adient:

MIX_ENV=prod mix pleroma.frontend install admin-fe --ref stable

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