En la primera part vam veure els primers passos. En aquesta entrada veurem els finals:
- instal·lar les dependències
- instal·lar nginx
- obtenir un certificat SSL
- clonar Akkoma
- instal·lar el gestor de versions Elixir/Erlang asdf
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 --forcemix 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.server
i 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:
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!