Vikunja

Vikunja is a self-hosted to-do and project management app using the AGPL licence.


Note

For this guide you should be familiar with the basic concepts of

Prerequisites

You’ll need your MySQL credentials. Get them with my_print_defaults:

[isabell@stardust ~]$ my_print_defaults client
--default-character-set=utf8mb4
--user=isabell
--password=MySuperSecretPassword
[isabell@stardust ~]$

We need a database:

[isabell@stardust ~]$ mysql --execute "CREATE DATABASE ${USER}_vikunja"
[isabell@stardust ~]$

We can use the uberspace or your own domain:

[isabell@stardust ~]$ uberspace web domain list
isabell.uber.space
[isabell@stardust ~]$

Installation

Download

Find the latest version of Vikunja on the releases page and download it:

[isabell@stardust ~]$ VERSION=0.24.4
[isabell@stardust ~]$ mkdir ~/vikunja
[isabell@stardust ~]$ wget -O ~/vikunja/vikunja.zip "https://dl.vikunja.io/vikunja/$VERSION/vikunja-v$VERSION-linux-amd64-full.zip"
[...]
Saving to: ‘/home/isabell/vikunja/vikunja.zip’

100%[==========================================================>] 30,607,427  70.3MB/s   in 0.4s

2024-10-14 20:24:47 (70.3 MB/s) - '/home/isabell/vikunja/vikunja.zip' saved [30607427/30607427]

Verifying (optional)

Optionally you can verify the downloaded file using gpg. To do so, download the pgp signature file and trust key and verify the binary:

[isabell@stardust ~]$ wget --output-document ~/vikunja/vikunja.zip.asc "https://dl.vikunja.io/vikunja/$VERSION/vikunja-v$VERSION-linux-amd64-full.zip.asc"
[...]
[isabell@stardust ~]$ gpg --keyserver keyserver.ubuntu.com --recv FF054DACD908493A
[...]
[isabell@stardust ~]$ gpg --verify ~/vikunja/vikunja.zip.asc ~/vikunja/vikunja.zip
gpg: Signature made Sun Sep 29 16:24:53 2024 CEST using RSA key ID D908493A
gpg: Good signature from "Frederic (Vikunja) (The key to sign vikunja releases.) <  frederic@vikunja.io>"
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 7D06 1A4A A614 36B4 0713  D42E FF05 4DAC D908 493A

If the verification is fine, we get a Good signature from "Frederic (Vikunja) (The key to sign vikunja releases.) <frederic@vikunja.io>" line. You can ignore the WARNING here.

Extract Archive

Extract the archive containing the Vikunja binary and config file, and rename the binary:

[isabell@stardust ~]$ cd ~/vikunja
[isabell@stardust vikunja]$ unzip vikunja.zip
Archive:  vikunja.zip
  inflating: vikunja-v0.24.4-linux-amd64
  inflating: vikunja-v0.24.4-linux-amd64.sha256
  inflating: LICENSE
  inflating: config.yml.sample
[isabell@stardust vikunja]$ mv vikunja-v$VERSION-linux-amd64 vikunja
[isabell@stardust vikunja]$

Clean up the no longer needed archive, signature, and binary hash:

[isabell@stardust ~]$ rm ~/vikunja/vikunja.zip ~/vikunja/vikunja.zip.asc ~/vikunja/vikunja-v$VERSION-linux-amd64.sha256
[isabell@stardust ~]$

Set permissions

The downloaded binary should already be executable. If this is not the case, set the corresponding permission manually:

[isabell@stardust ~]$ chmod u+x ~/vikunja/vikunja
[isabell@stardust ~]$

Configuration

Configuration file

Create a copy of the sample configuration file:

[isabell@stardust ~]$ cp ~/vikunja/config.yml.sample ~/vikunja/config.yml
[isabell@stardust ~]$

Open the config file and fill in your database details:

[...]
database:
  # Database type to use. Supported types are mysql, postgres and sqlite.
  type: "mysql"
  # Database user which is used to connect to the database.
  user: "isabell"
  # Database password
  password: "SuperSecretDBPassword"
  # Database host
  host: "localhost"
  # Database to use
  database: "isabell_vikunja"
[...]

There are a couple of settings in the service section which need to be set. If you are using Vikunja just for yourself and some friends, you might want to disable registration. Note that you can still create new users by using the vikunja binary.

[...]
service:
  # The public facing URL where your users can reach Vikunja. Used in emails and for the communication between api and frontend.
  publicurl: "https://isabell.uber.space/"
  # Whether to let new users registering themselves or not
  enableregistration: false
  # The time zone all timestamps are in. Please note that time zones have to use [the official tz database names](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones). UTC or GMT offsets won't work.
  timezone: "UTC"
[...]

If you want Vikunja to send reminder mails for due tasks (or password reset links), you need to enable the mailer. Create a new mailbox for vikunja, naming it e. g. vikunja:

[isabell@stardust ~]$ uberspace mail user add vikunja
Enter a password for the mailbox:
Please confirm your password:
New mailbox created for user: 'vikunja', it will be live in a few minutes...

Now fill in the details in the configuration file.

[...]
mailer:
  # Whether to enable the mailer or not. If it is disabled, all users are enabled right away and password reset is not possible.
  enabled: true
  # SMTP Host
  host: "stardust.uberspace.de"
  # SMTP Host port.
  # **NOTE:** If you're unable to send mail and the only error you see in the logs is an `EOF`, try setting the port to `25`.
  port: 587
  # SMTP Auth Type. Can be either `plain`, `login` or `cram-md5`.
  authtype: "plain"
  # SMTP username
  username: "vikunja@isabell.uber.space"
  # SMTP password
  password: "SuperSecretMailPassword"
  # Whether to skip verification of the tls certificate on the server
  skiptlsverify: false
  # The default from address when sending emails
  fromemail: "vikunja@isabell.uber.space"
[...]

Lastly, you should think about some sensible default values for your newly created users. If you are e. g. in Germany, you should set the appropriate timezone and start of the week.

[...]
defaultsettings:
  # Start of the week for the user. `0` is sunday, `1` is monday and so on.
  week_start: 1
  # The time zone of each individual user. This will affect when users get reminders and overdue task emails.
  timezone: "Europe/Berlin"
[...]

Note

See the Vikunja documentation and the configuration sample for all configuration options.

Finishing installation

In order to set up the database, run all migrations for Vikunja.

[isabell@stardust ~]$ ~/vikunja/vikunja migrate
2024-10-15T18:41:36+02:00: INFO ▶ 001 Using config file: /home/isabell/vikunja/config.yml
2024-10-15T18:41:36+02:00: INFO ▶ 002 Running migrations…
2024-10-15T18:41:41+02:00: INFO ▶ 0df Ran all migrations successfully.
[isabell@stardust ~]$

Now create the first user.

[isabell@stardust ~]$ ~/vikunja/vikunja user create --username isabell --password SuperSecret --email isabell@uber.space
2024-10-15T20:47:39+02:00: INFO ▶ 001 Using config file: /home/isabell/vikunja/config.yml
2024-10-15T20:47:39+02:00: INFO ▶ 002 Running migrations…
2024-10-15T20:47:39+02:00: INFO ▶ 06a Ran all migrations successfully.

User was created successfully.
[isabell@stardust ~]$

Service for Vikunja

To keep Vikunja up and running in the background, you need to create a service that takes care of it. Create a config file ~/etc/services.d/vikunja.ini for the service:

[program:vikunja]
directory=%(ENV_HOME)s/vikunja
command=%(ENV_HOME)s/vikunja/vikunja
startsecs=30
autorestart=yes

After creating the configuration, tell supervisord to refresh its configuration and start the service:

[isabell@stardust ~]$ supervisorctl reread
SERVICE: available
[isabell@stardust ~]$ supervisorctl update
SERVICE: added process group
[isabell@stardust ~]$ supervisorctl status
SERVICE                            RUNNING   pid 26020, uptime 0:03:14
[isabell@stardust ~]$

Note

The status of vikunja must be RUNNING. If it’s not, check the log output at ~/logs/supervisord.log and the configuration file ~/vikunja/config.yml.

Uberspace web backend

In order to access Vikunja, you need to configure a web backend. Vikunja serves both the API part and the frontend part via port 3456.

Note

Vikunja is running on port 3456.

To make the application accessible from the outside, configure a web backend:

[isabell@stardust ~]$ uberspace web backend set / --http --port <port>
Set backend for / to port <port>; please make sure something is listening!
You can always check the status of your backend using "uberspace web backend list".
[isabell@stardust ~]$

Installed files and folders are:

  • ~/vikunja

  • ~/etc/services.d/vikunja.ini

Now we are done and can access Vikunja through isabell.uber.space.

Optional steps

Enabling migrations from other services

If you’ve used other organizers previously, Vikunja comes with a few migration services. You can import your data from another Vikunja instance, TickTick, Trello, Microsoft To Do, and Todoist. You need to enable the specific migration service in the configuration file and restart Vikinja.

[isabell@stardust ~]$ supervisorctl restart vikunja
vikunja: stopped
vikunja: started
[isabell@stardust ~]$

Change log levels

By default the log configuration is very verbose. You can change it to only log warnings, errors, or critical events by editing the config file and restarting Vikunja:

[...]
log:
  # Change the log level. Possible values (case-insensitive) are CRITICAL, ERROR, WARNING, NOTICE, INFO, DEBUG.
  level: "WARNING"
  # The log level for database log messages. Possible values (case-insensitive) are CRITICAL, ERROR, WARNING, NOTICE, INFO, DEBUG.
  databaselevel: "WARNING"
  # The log level for event log messages. Possible values (case-insensitive) are ERROR, INFO, DEBUG.
  eventslevel: "ERROR"
[...]
[isabell@stardust ~]$ supervisorctl restart vikunja
vikunja: stopped
vikunja: started
[isabell@stardust ~]$

Updates

Note

Check the changelog or releases page regularly to stay informed about the newest version.

Manual updating

  • Stop the application supervisorctl stop vikunja

  • Do the download (and optionally verifying) part from above.

  • Check if you have to modify the config file. (See documentation.)

  • Start the application supervisorctl start vikunja

  • Check if the application is running supervisorctl status vikunja


Tested with Vikunja 0.24.4, Uberspace 7.16.1

Written by: Sascha Mann <https://saschamann.eu/>, Tobias Quathamer <t.quathamer@mailbox.org>