
Gestire attività, scadenze e progetti con strumenti cloud proprietari significa spesso rinunciare al controllo sui propri dati.
Vikunja è un task manager open source, self-hosted, che offre liste, board Kanban, diagrammi di Gantt e sincronizzazione CalDAV senza dipendere da servizi di terze parti.
Scritto in Go per il backend e Vue 3 per il frontend, viene distribuito come immagine Docker unificata, il che semplifica notevolmente il deploy rispetto ad altre soluzioni self-hosted più pesanti.
In questa guida vedremo come installare Docker da zero su Ubuntu Server 26.04 e come configurare Vikunja con Docker Compose, database PostgreSQL incluso, fino al primo accesso e alla configurazione base del servizio.
INSTALLAZIONE DI DOCKER
Rimuovere eventuali versioni precedenti/pacchetti in conflitto con il comando:
|
0 |
sudo apt remove docker docker-engine docker.io containerd runc
|
Aggiornare i repository e installare i pacchetti necessari con i comandi:
|
0
1
|
sudo apt update
sudo apt install -y ca-certificates curl gnupg
|
Aggiungere la chiave GPG ufficiale Docker con il comando:
|
0
1
2
|
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
|
Aggiungere il repository Docker con il comando:
|
0
1
2
3
|
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
|
NOTA BENE: se Ubuntu 26.04 non ha ancora un repository dedicato su download.docker.com al momento dell’installazione usare il codename della release LTS precedente supportata (es. noble) al posto di $VERSION_CODENAME. Verifica su https://download.docker.com/linux/ubuntu/dists/ quali codename sono disponibili.
Installare Docker Engine, CLI, containerd e il plugin Compose con i comandi:
|
0
1
|
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
|
Verificare l’installazione con il comando:
|
0 |
sudo docker run hello-world
|
Dovremmo visualizzare il seguente output:
|
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/get-started/
|
Usare Docker senza sudo (Opzionale ma consigliato) con i seguenti comandi:
|
0
1
|
sudo usermod -aG docker $USER
newgrp docker
|
Verificare le versioni installare con i comandi:
|
0 |
docker --version
|
Dovremmo visualizzare il seguente output:
|
0 |
Docker version 29.7.2, build a7dcaa6
|
Quindi eseguire il comando:
|
0 |
docker compose version
|
Dovremmo visualizzare il seguente output:
|
0 |
Docker Compose version v5.4.0
|
INSTALLAZIONE DI VIKUNJA
Questa configurazione esporrà Vikunja direttamente sulla porta 3456 dell’host raggiungibile via http://<ip-del-server>:3456.
È la configurazione minima secondo la documentazione ufficiale, adatta per test o uso interno su rete LAN.
Creare le directory di progetto con il comando:
|
0
1
2
|
mkdir -p ~/docker/vikunja/{files,db}
cd ~/docker/vikunja
|
Impostare i permessi sulla cartella files con il comando:
|
0 |
sudo chown 1000 ./files
|
Con Docker rootless i permessi funzionano diversamente: in quel caso imposta user: “0:0” sul servizio vikunja nel compose invece di fare il chown.
Generare un secret sicuro con il comando:
|
0 |
openssl rand -hex 32
|
Dovremmo visualizzare un output simile al seguente:
|
0 |
b5a7c0652de8fd878b51c2369a3abc6dc23098a38ccc01dac64b370056e2850f |
Copiare il secret perchè lo useremo più avanti in VIKUNJA_SERVICE_SECRET.
Creare il file docker-compose.yml con il comando:
|
0 |
sudo nano docker-compose.yml
|
quindi incollare all’interno del file il seguente output:
|
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
services:
vikunja:
image: vikunja/vikunja
environment:
VIKUNJA_SERVICE_PUBLICURL: http://<ip-del-server>:3456
VIKUNJA_DATABASE_HOST: db
VIKUNJA_DATABASE_PASSWORD: CAMBIA_QUESTA_PASSWORD
VIKUNJA_DATABASE_TYPE: postgres
VIKUNJA_DATABASE_USER: vikunja
VIKUNJA_DATABASE_DATABASE: vikunja
VIKUNJA_SERVICE_SECRET: "IL_SECRET_GENERATO_AL_PASSO_3"
ports:
- "3456:3456"
volumes:
- ./files:/app/vikunja/files
depends_on:
db:
condition: service_healthy
restart: unless-stopped
db:
image: postgres:18
environment:
POSTGRES_PASSWORD: CAMBIA_QUESTA_PASSWORD
POSTGRES_USER: vikunja
POSTGRES_DB: vikunja
volumes:
- ./db:/var/lib/postgresql
restart: unless-stopped
healthcheck:
test: ["CMD-SHELL", "pg_isready -h localhost -U $$POSTGRES_USER"]
interval: 2s
start_period: 30s
|
Salvare e chiudere il file YML
ATTENZIONE:
VIKUNJA_DATABASE_PASSWORD e POSTGRES_PASSWORD devono essere identiche.
VIKUNJA_SERVICE_PUBLICURL deve puntare all’IP/hostname e porta effettivamente raggiungibili dal browser: è l’URL che il frontend usa per contattare le API.
Se cambi porta o IP dopo, aggiorna anche questo valore.
NOTA BENE: Senza reverse proxy non hai TLS: il traffico resta in HTTP semplice. Va bene per una LAN interna, ma non per esporlo su internet.
Avviare lo stack con il comando:
|
0 |
docker compose up -d
|
Dovremmo visualizzare il seguente output:
|
0
1
2
3
4
5
|
[+] up 25/25
✔ Image vikunja/vikunja Pulled 7.0s
✔ Image postgres:18 Pulled 9.6s
✔ Network vikunja_default Created 0.0s
✔ Container vikunja-db-1 Healthy 12.9s
✔ Container vikunja-vikunja-1 Started
|
Controllare i log con il comando:
|
0 |
docker compose logs -f vikunja
|
Aspetta il messaggio che confermi che le migration del database siano completate e che il server sia in ascolto.
ACCESSO DI VIKUNJA DA WEB GUI
Aprire il browser e richiamare il seguente link:
http://<ip-del-server>:3456
Cliccare su Crea Account per creare il primo account
Inserire tutte le info richieste quindi cliccare su Crea Account
Se è andato tutto a buon fine dovremmo visualizzare la Dashboard di Vikunja come mostrato nell’immagine sovrastante
Disabilitare la registrazione pubblica dopo aver creato gli utenti necessari aggiungendo al servizio vikunja:
|
0
1
|
environment:
VIKUNJA_SERVICE_ENABLEREGISTRATION: "false"
|
Quindi riavviare docker con il comando:
|
0 |
docker compose up -d
|
COMANDI UTILI
Di seguito i comandi utili:
- docker compose down # ferma lo stack
- docker compose pull # scarica l’ultima immagine
- docker compose up -d # riavvia con l’immagine aggiornata
- docker compose logs -f # segue i log di tutti i servizi
PRO E CONTRO DI VIKUNJA
Ecco un elenco di pro e contro di Vikunja, pensato in chiave self-hosting.
PRO
- Open source e completamente gratuito da self-hostare — nessun limite su progetti, task o funzionalità nella versione self-hosted, a differenza di molti concorrenti che bloccano funzioni dietro un piano a pagamento
- Deploy semplificato — l’immagine Docker unificata (frontend + backend in un solo container) rende lo stack molto più leggero rispetto ad altre soluzioni PM self-hosted
- Viste multiple — lista classica, Kanban, tabella e Gantt nello stesso progetto, così ognuno usa il layout che preferisce
- Quick Add Magic — sintassi rapida per inserire scadenze, etichette e assegnatari direttamente durante la digitazione del task, senza passaggi aggiuntivi
- Collaborazione solida — condivisione di progetti/sottoprogetti con singoli o intere squadre, assegnazione task chiaraStrong collaboration features for teams
- Importer integrati — es. da Todoist, utile in fase di migrazione da tool proprietariVikunja.
- CalDAV nativo — sincronizzazione con client calendario esterni, cosa che molti tool PM self-hosted non offrono
- Reminders senza paywall — anche nella versione gratuita/self-hosted, a differenza di alternative come Todoist che le riservano al piano ProVikunja works.
CONTRO
- Richiede competenze tecniche per il self-hosting — setup e manutenzione (Docker, database, permessi, reverse proxy) non sono alla portata di un utente non tecnico
- Gestione utenti da riga di comando — nella versione self-hosted alcune operazioni di amministrazione utenti passano da CLI, non da interfaccia grafica (automatizzabile, ma è un gradino in più)
- SMTP da configurare fin da subito — reminder e reset password non funzionano senza un mailer configurato, e aggiungerlo dopo richiede un restart dello stack meglio pianificarlo al primo deploy
- Nessun account admin predefinito — il primo utente registrato è un utente normale, va gestito manualmente chi ha ruoli elevati
- App native ancora in roadmap — al momento è una PWA, non un’app nativa mobile/desktop
- Meno adatto a documentazione mista stile Notion — è un tool di task/project management puro, non un workspace con documenti ricchi integrati
- Community storage limitato solo su Vikunja Cloud — se non fai self-hosting e usi il piano cloud gratuito/personale, gli allegati hanno limiti di spazio

0 commenti