Aquest projecte busca mostrar el potencial de les eines lliures auto-allotjables de generar un ecosistema per a cubrir les necessitats d’un laboratori de investigació.
L’objectiu no és crear una guia exhaustiva de com instal·lar tot el programari ni com fer-ho de la forma més eficient, si no documentar el procés que jo he seguit per a aquesta prova de concepte, enfocant-me en opcions senzilles i quasi sempre buscant la compartimentalització amb docker.
Aquestes són les necessitats cobertes per eines lliures:
- eLabFTW: libreta electrònica.
- Nextcloud: espai al núvol, calendari i edició de documents col·laboratius.
- Etherpad y HedgeDoc: edició de notes col·laboratives.
- Git: control de versions.
- Jitsi-Meet: reunions virtuals.
- Liberaforms: formularis.
- Grav: pàgina web.
En aquest vídeo faig una petita visita a aquest ecosistema:
Instal·lació
A continuació, us mostro el meu procés.
El primer és instal·lar docker i docker-compose:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"
sudo apt update
sudo apt install docker-ce
sudo curl -L "https://github.com/docker/compose/releases/download/1.28.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
També necessitarem nginx i certbot (per instal·lar certificats de Let’s Encrypt).
sudo apt install nginx certbot python3-certbot-nginx
Per a una configuració típica de nginx, he fet servir el següent fitxer de configuració com a plantilla. L’he creat a la carpeta /etc/nginx/sites-available/
amb el nom que vulgui i que descrigui el servei:
server {
listen 80;
listen [::]:80;
server_name servei.example.org;
location / {
proxy_pass http://localhost:3838; #Aquí s'ha d'anar canviant el port per el que faci servir el servei en concret.
}
}
Cal activar el fitxer creant un enllaç simbòlic a la carpeta de “permesos”:
sudo ln -s /etc/nginx/sites-available/<fitxer> /etc/nginx/sites-enabled/
I només ens caldria instal·lar un certificat amb la següent ordre:
sudo certbot --nginx
Aquestes operacions les haurem de realitzar per a cada servei, tot i que alguns tenen fitxers de configuració lleugerament modificats (els aniré posant a l’article).
Ara ja ho tenim tot llest per a començar a instal·lar serveis!
Etherpad
Comencem amb l’eina de pads col·laboratius Etherpad, en aquest cas l’instal·lem amb docker directament:
sudo docker pull etherpad/etherpad
sudo docker run --detach --publish 1976:9001 etherpad/etherpad
Gitea
A partir d’aquí, la resta ho instal·larem amb scripts de docker-compose, que utilitzen un fitxer de configuració per a fer la instal·lació de docker. Per instal·lar el servei Gitea:
mkdir gitea
cd gitea
vim docker-compose.yml #Jo faig servir l'editor de text vim, però serviria qualsevol editor per terminal
I hi posem el següent text:
version: "3"
networks:
gitea:
external: false
services:
server:
image: gitea/gitea:1.13.1
container_name: gitea
environment:
- USER_UID=1000
- USER_GID=1000
restart: always
networks:
- gitea
volumes:
- ./gitea:/data
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
ports:
- "3000:3000"
- "222:22"
Una vegada creat el fitxer, aixequem el servei amb:
sudo docker-compose up -d
HedgeDoc
Repetim una operació semblant amb HedgeDoc, en aquest cas utilitzem l’eina git per a importar el repositori, que ja inclourà un fitxer de configuració docker-compose:
git clone https://github.com/hedgedoc/container.git hedgedoc-container
cd hedgedoc-container
sudo docker-compose up -d
Abans d’arrencar el servei, cal comprovar que els ports no els estigui fent servir un altre servei, cas en què s’haurà de canviar el primer dels ports aparellats (ex. 3000:3000).
Nextcloud
El següent servei és la suit de productivitat Nextcloud. Creem en una carpeta (mkdir nextcloud
) el següent fitxer docker-compose.yml
:
version: '2'
volumes:
nextcloud:
db:
services:
db:
image: mariadb
restart: always
command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW
volumes:
- db:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=111222333444
- MYSQL_PASSWORD=111222333444
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
app:
dns:
- 192.168.0.1
- 1.1.1.1
image: nextcloud
restart: always
ports:
- 8080:80
links:
- db
volumes:
- nextcloud:/var/www/html
environment:
- MYSQL_PASSWORD=111222333444
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
- MYSQL_HOST=db
Cal canviar les contrasenyes!!
I com sempre, aixecar el servei amb sudo docker-compose up -d
.
eLabFTW
Per a la llibreta de laboratori digital, element clau per al nostre projecte, seguim els passos de la seva documentació:
# get the program (a bash script)
curl -sL https://get.elabftw.net -o elabctl && chmod +x elabctl
# add it to a directory in your $PATH
sudo mv elabctl /usr/local/bin/
Creem un fitxer de configuració d’nginx a /etc/nginx/sites-available/
amb el següent contingut:
server {
server_name demo.elabftw.net;
listen 80;
listen [::]:80;
location / {
proxy_pass http://localhost:3148; # canviar port si es vol un altre!!
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# add this if nginx is terminating TLS
proxy_set_header X-Forwarded-Proto $scheme;
}
}
L’activem i creem un certificat de Let’s Encrypt tal com hem explicat més amunt.
Executem la següent ordre:
sudo elabctl install
I ens assegurem que el fitxer de configuració /etc/elabftw.yml
tingui el mateix port que hem posat al fitxer de configuració nginx.
Iniciem el servei i executem el contenidor:
sudo elabctl start
sudo docker exec -it elabftw bin/install start
Jitsi-Meet
Per al Jitsi-Meet vaig fer la instal·lació manual següint exactament les instruccions que tenen a la seva documentació, així que no la copiaré aquí. Cal dir que també tenen una imatge de docker que seria interessant explorar.
Grav
Finalment cal instal·lar el Grav, que ens permetrà tenir una pàgina de grup i un portal per a les diferents eines.
Jo vaig triar un esquelet, és a dir una instal·lació de grav amb un tema concret ja molt completa. Vaig descarregar-lo, descomprimir-lo i moure’l a la carpeta /var/www/html/grav/
.
Tot seguit vaig crear el següent fitxer de configuració nginx per a apuntar cap a aquella carpeta:
#nginx conf para grav
server {
server_name example.org;
root /var/www/html/grav/;
index index.html index.php;
listen 80;
listen [::]:80;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
## Begin - PHP
location ~ \.php$ {
# Choose either a socket or TCP/IP address
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
# fastcgi_pass unix:/var/run/php5-fpm.sock; #legacy
# fastcgi_pass 127.0.0.1:9000;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
}
## End - PHP
}
Finalment, m’asseguro que els permisos al grav són els que toquen, 644
per a fitxers i 755
per carpetes:
cd /var/www/html/grav/
sudo find . -type f -exec chmod 644 {} ";"
sudo find . -type d -exec chmod 755 {} ";"
Per a accedir al panell d’administració cal instal·lar-lo com a plugin si no hi és:
#Dins de la carpeta grav
sudo bin/gpm install admin
I ja hi podem accedir a través de “example.org/admin” al navegador.
Ja tenim el nostre paquet de serveis totalment operatius!