Linux
Installazione e configurazione di Linkding come container Docker su Raspberry Pi

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.

Flusso di rete senza NGINIX Proxy Manager (senza SSL)

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)

Flusso di rete con NGINIX Proxy Manager (con SSL)

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!

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *