Installazione e configurazione di Linkding come container Docker su Raspberry Pi
Linkding è un semplice servizio di segnalibri (bookmark) che può essere ospitatato autonomamente (su un proprio server). È stato progettato per essere minimale, veloce e facile da configurare utilizzando Docker.
Il nome deriva da:
- link, che nel linguaggio comune è spesso utilizzato come sinonimo di URL e/o segnalibri.
- Ding, che in tedesco significa “thing”
- …quindi fondamentalmente qualcosa per la gestione dei link
Panoramica delle caratteristiche:
- Tags per organizzare i segnalibri
- Ricerca per testo o tag
- Modifica in blocco
- Archivio dei segnalibri
- Modalità scura
- Crea automaticamente istantanee dei siti web contrassegnati dai segnalibri su Internet Archive Wayback Machine
- Fornisce automaticamente titoli e descrizioni dei siti web inseriti nei segnalibri
- Importazione ed esportazione dei segnalibri in formato Netscape HTML
- Estensioni per Firefox e Chrome e un bookmarklet che dovrebbe funzionare nella maggior parte dei browser
- REST API per lo sviluppo di applicazioni di terze parti
- Pannello di amministrazione per il self-service degli utenti e l’accesso ai dati grezzi
- Facile da configurare utilizzando Docker, utilizza SQLite come database
E’ possibile ottenere maggiorni informazioni a riguardo, qui (pagina web GitHub dello sviluppatore).
Fatta questa premessa, per poter procedere all’installazione di Linkding come container in Docker sul nostro Raspberry Pi è ovviamente necessario disporrre di:
- Un Raspberry Pi (Pi0 o superiore);
- Docker e docker-compose installato (qui una guida su come installarlo su RaspberryPi);
- Un DDNS o un indirizzo IP Pubblico (per accesso da remoto e configurazione del plug-in per web browser);
Detto questo, procediamo con la creazione di una cartella che a sua volta conterrà il file docker-compose.yml
necessario per creare e configurare il nostro container.
mkdir linkding
cd linkding
nano docker-compose.yml
e riportiamo quanto segue:
version: '3' services: linkding: container_name: "${LD_CONTAINER_NAME:-linkding}" image: sissbruecker/linkding:latest ports: - "${LD_HOST_PORT:-9090}:9090" volumes: - "${LD_HOST_DATA_DIR:-./data}:/etc/linkding/data" env_file: - .env restart: unless-stopped
Una volta incollato il testo, possiamo chiudere il file digitando CRTL+X
dopo di che digitiamo Y
o S
(a seconda della lingua impostata) ed infine premiamo il tasto ENTER
per confermare.
Ora andremo invece a creare un file chiamato Dockerfile
che conterrà i comandi preliminari per la creazione del container (verranno eseguiti solamente alla prima esecuzione), per cui andiamo ad eseguire il seguente comando:
nano Dockerfile
e riportiamo quanto segue:
FROM node:current-alpine AS node-build WORKDIR /etc/linkding # install build dependencies COPY package.json package-lock.json ./ RUN npm install -g npm && \ npm install # compile JS components COPY . . RUN npm run build FROM python:3.9.6-slim-buster AS python-base RUN apt-get update && apt-get -y install build-essential WORKDIR /etc/linkding FROM python-base AS python-build # install build dependencies COPY requirements.txt requirements.txt RUN pip install -U pip && pip install -Ur requirements.txt # run Django part of the build COPY --from=node-build /etc/linkding . RUN python manage.py compilescss && \ python manage.py collectstatic --ignore=*.scss && \ python manage.py compilescss --delete-files FROM python-base AS prod-deps COPY requirements.prod.txt ./requirements.txt RUN mkdir /opt/venv && \ python -m venv --upgrade-deps --copies /opt/venv && \ /opt/venv/bin/pip install --upgrade pip wheel && \ /opt/venv/bin/pip install -Ur requirements.txt FROM python:3.9.6-slim-buster as final RUN apt-get update && apt-get -y install mime-support WORKDIR /etc/linkding # copy prod dependencies COPY --from=prod-deps /opt/venv /opt/venv # copy output from build stage COPY --from=python-build /etc/linkding/static static/ # copy application cod COPY . . # Expose uwsgi server at port 9090 EXPOSE 9090 # Activate virtual env ENV VIRTUAL_ENV /opt/venv ENV PATH /opt/venv/bin:$PATH # Allow running containers as an an arbitrary user in the root group, to support deployment scenarios like OpenShift, Podman RUN ["chmod", "g+w", "."] # Run bootstrap logic RUN ["chmod", "+x", "./bootstrap.sh"] CMD ["./bootstrap.sh"]
Anche qui, una volta incollato il testo, possiamo chiudere il file digitando CRTL+X
, dopo di che digitiamo Y
o S
(a seconda della lingua impostata) ed infine premiamo il tasto ENTER
per confermare.
Ora andremo invece a creare un file nascosto che contine i valori per le variabili dichiarate nel file docker-compose.yml
, per cui andiamo ad eseguire il seguente comando:
nano .env
e anche qui riportiamo quanto segue:
# Docker container name LD_CONTAINER_NAME=linkding # Port on the host system that the application should be published on LD_HOST_PORT=9090 # Directory on the host system that should be mounted as data dir into the Docker container LD_HOST_DATA_DIR=./data # Option to disable background tasks LD_DISABLE_BACKGROUND_TASKS=False # Option to disable URL validation for bookmarks completely LD_DISABLE_URL_VALIDATION=False
Qui possiamo modificare la porta nella quale verrà pubblicata la pagina web di linkding andando ad esempio a modificare la voce:
... LD_HOST_PORT=9090 ...
con ad esempio:
... LD_HOST_PORT=9099 ...
Altro parametro che possiamo modificare a nostro piacimento, è il percorso dove vengono memorizzati i dati (db e configurazione) di linkding. Nel codice originale è riportato il seguente valore:
... LD_HOST_DATA_DIR=./data ...
dove ./data
sarà una cartella (che verrà automaticamente generata) all’interno della cartella linkding (creata all’inizio del tutorial) in alternativa potremmo posizionarla dove preferiamo definendo l’intero percorso (ad esempio /home/pi/Documents/Linkding-data
).
Una volta incollato il testo e modificato secondo le nostre esigenze, possiamo chiudere il file digitando CRTL+X
dopo di che digitiamo Y
o S
(a seconda della lingua impostata) ed infine premiamo il tasto ENTER
per confermare.
Arrivati a questo punto non ci resta che tirare su il container con il seguente comando:
docker-compose up -d
User setup
Per motivi di sicurezza, l’immagine Docker di linkding non fornisce un utente iniziale, quindi è necessario crearne uno dopo aver avviato l’installazione. Per farlo, sostituite le credenziali (evidenziate in rosso) nel comando seguente ed eseguirlo:
docker-compose exec linkding python manage.py createsuperuser --username=joe --email=joe@example.com
Il comando richiederà una password sicura. Al termine del comando sarà possibile iniziare a utilizzare l’applicazione accedendo all’interfaccia utente con le proprie credenziali.
attendiamo qualche secondo, dopo di che apriamo il web browser che preferiamo e digitiamo nella barra dell’indirizzo:
http://[IP-DEL-TUO-RASPBERRY]:9090
e verremo accolti dalla seguente schermata
Le credenziali per accedere saranno quelle impostate con il comando di creazione dell’utente.
Per poter rendere accessibile questo servizio dall’esterno della nostra rete, dobbiamo “nattare” ad esempio la porta TCP 80 (esterna) con l’IP (LAN) del nostro Raspberry Pi sullla porta TCP 9090. Inoltre, se avete un IP dinamico con il vostro ISP (Internet Service Provider), abbiate configurato un DDNS (Dynamic Domain Name Server… qui una guida su come abilitarlo e configurarlo utilizzando DuckDNS) oppure un indirizzo IP Statico con un Nome di Dominio registrato.
Ovviamente così facendo il traffico dall’esterno verso il nostro Raspberry non sarà criptato (perchè senza SSL). Per abilitare una connessione crittografata con SSL consiglio di installare e configurare NGINX Proxy Manager (qui una guida su come installarlo come container in Docker)
Indifferentemente dal fatto se utilizzare o meno l’NGINIX Proxy Manager per completare la configurazione di linkding, accediamo alla Web User Interface ed eseguiamo il login con le nostre credenziali. Una volta eseguito il login visualizzeremo una schermata simile alla seguente:
Clicchiamo sulla voce “Settings” posta in alto a destra
Successivamente clicchiamo sulla voce “Integrations” posta in alto al centro
Nella schermata che si apparirà non dobbiamo far altro che copiare il codice REST API posto in fondo alla pagina.
Questo codice, insieme all’url dove viene pubblicato il nostro linkding ci serviranno per configurare il Browser Extension (per Google Chrome o per Mozilla Firefox).
Attraverso questa estensione per brower ci semplificherà di parecchio l’aggiunta di un url al nostro bookmark.
Buon divertimento!