Организация времени и задач – актуальный вопрос, когда необходимо следить за огромным количеством вещей. И уж тем более в бизнесе, при ведении проектов, как совместных, так и собственных, ведь важно не упускать из виду необходимые задачи и отслеживать использованные для этого ресурсы.
В обоих случаях помогают таск-менеджеры наподобие Redmine, Bitrix 24, Trello, Jira и аналогов, как платных, так и бесплатных. Но далеко не всем компаниям необходим их полный функционал. Тут на сцену и выходит Vikunja – легковесное приложение для отслеживания задач с простым и удобным интерфейсом и возможностью интеграции с n8n. Vikunja можно использовать на различных устройствах, включая Android.
В данной статье мы рассмотрим, как установить Vikunja на собственный облачный сервер Beget и начать работу с ним.
Установка Vikunja
В рамках данной статьи мы рассмотрим процесс установки на готовом решении Docker, а также разберем, как настроить работу на собственном домене с Caddy в качестве реверс-прокси для работы по https. При установке будет использоваться база данных PostgreSQL, установка с SQLite и MySQL описана в документации приложения. Команды в статье будут выполняться от имени пользователя root.
Для установки Vikunja подключитесь к серверу по ssh и создайте директорию под конфигурационные файлы и поддиректории данных.
mkdir -p /opt/vikunja/{files,db}Перейдите в созданную директорию:
cd /opt/vikunjaСоздайте файл compose.yml со следующим содержимым:
services:
vikunja:
image: vikunja/vikunja
environment:
VIKUNJA_SERVICE_PUBLICURL: "${VIKUNJA_SERVICE_PUBLICURL}"
VIKUNJA_DATABASE_HOST: db
VIKUNJA_DATABASE_PASSWORD: "${POSTGRES_PASSWORD}"
VIKUNJA_DATABASE_TYPE: postgres
VIKUNJA_DATABASE_USER: vikunja
VIKUNJA_DATABASE_DATABASE: vikunja
VIKUNJA_SERVICE_JWTSECRET: "${VIKUNJA_SERVICE_JWTSECRET}"
VIKUNJA_SERVICE_ALLOWICONCHANGES: false
ports:
- 3456:3456
volumes:
- ./files:/app/vikunja/files
depends_on:
db:
condition: service_healthy
restart: unless-stopped
db:
image: postgres:17
environment:
POSTGRES_PASSWORD: "${POSTGRES_PASSWORD}"
POSTGRES_USER: vikunja
volumes:
- ./db:/var/lib/postgresql/data
restart: unless-stopped
healthcheck:
test: ["CMD-SHELL", "pg_isready -h localhost -U $$POSTGRES_USER"]
interval: 2s
start_period: 30sПосле чего создайте файл переменных окружения, поочередно выполнив следующие команды, подставив соответствующие значения:
echo "VIKUNJA_SERVICE_PUBLICURL=http://45.12.18.73" >> .env
echo "POSTGRES_PASSWORD=$(openssl rand -hex 64)" >> .env
echo "VIKUNJA_SERVICE_JWTSECRET=$(openssl rand -hex 64)" >> .envВ результате выполнения команд должен получиться файл с тремя переменными:
cat .env
VIKUNJA_SERVICE_PUBLICURL=http://45.12.18.73
POSTGRES_PASSWORD=a458371ce0de950e757e7f26b37d8caf3dc39601bd1cb9d2010e8fe173da4bfec8a333307f39db2299500a1596cb00dc3fe58ee549298316059adf9276969c5b
VIKUNJA_SERVICE_JWTSECRET=6dcfdbe30f340a5ffb74ef2c978f5cf06574184168e3ea5c705508cf2e27fb1b60f5523164271a209e46735db02092adc339f59c86b1e8cdf8d39dc7c57a9e31Для загрузки образов контейнеров выполните команду:
docker compose pullПо завершении загрузки запустите контейнеры командой:
docker compose up -dСервис будет доступен по адресу http://ip_сервера:3456:

Первичная настройка
Для начала работы потребуется зарегистрировать аккаунт – нажмите “Create account”, заполните форму и подтвердите создание аккаунта:

После успешной регистрации откроется главная страница приложения:

Отключение самостоятельной регистрации
После регистрации рекомендуется отключить самостоятельную регистрацию на сервере во избежание нежелательных пользователей сервиса. Для этого откройте в удобном вам текстовом редакторе файл compose.yml и добавьте в блок environment сервиса vikunja строку VIKUNJA_SERVICE_ENABLEREGISTRATION: false следующим образом:
services:
vikunja:
image: vikunja/vikunja
environment:
VIKUNJA_SERVICE_PUBLICURL: "${VIKUNJA_SERVICE_PUBLICURL}"
VIKUNJA_DATABASE_HOST: db
VIKUNJA_DATABASE_PASSWORD: "${POSTGRES_PASSWORD}"
VIKUNJA_DATABASE_TYPE: postgres
VIKUNJA_DATABASE_USER: vikunja
VIKUNJA_DATABASE_DATABASE: vikunja
VIKUNJA_SERVICE_JWTSECRET: "${VIKUNJA_SERVICE_JWTSECRET}"
VIKUNJA_SERVICE_ALLOWICONCHANGES: false
VIKUNJA_SERVICE_ENABLEREGISTRATION: falseЗатем сохраните файл и пересоздайте контейнеры, последовательно выполнив команды:
docker compose down
docker compose up -dПосле отключения регистрации при попытке перехода к странице создания аккаунта будет показано соответствующее сообщение:

Работа с приложением
Vikunja позволяет управлять задачами в различных форматах, самый простой – обычный todo-список. Для добавления задачи введите ее название в поле на главной странице и нажмите “add”:

После добавления задачи она отобразится в списке с указанием проекта, в который она добавлена:

Для редактирования задачи нажмите на нее – откроется страница управления задачей:

Здесь можно добавить описание задачи, назначить ее на определенного пользователя, добавить теги для сортировки, управлять прогрессом и временем выполнения.
Проекты
Vikunja позволяет организовывать задачи по проектам, упрощая управление ими. По умолчанию создается один проект Inbox, он же назначается для задач по умолчанию. Для перехода к проекту нажмите на его название в левом меню либо перейдите в раздел Projects и нажмите на карточку проекта.

На странице проекта можно просматривать и добавлять задачи в различных форматах – списком, в виде диаграммы Ганта, в виде таблицы и на Kanban-доске.
В разделе Kanban можно создавать дополнительные бакеты для отслеживания статуса задач – например, создать бакеты для статусов “В работе” и “Готово”:

Также можно задать лимиты для определенных статусов, к примеру, не больше 3 задач в In Progress, и назначить бакет для выполненных задач (Done bucket).

Для создания нового проекта перейдите в раздел Projects и нажмите New Project, в появившемся окне введите желаемое название и, при необходимости, родительский проект, после чего подтвердите создание.

Созданный проект отобразится в списке слева:

Добавление реверс-прокси с автоматическим SSL-сертификатом
Для удобства использования Vikunja и защиты передаваемых данных рекомендуется настроить работу на собственном домене на HTTPS-протоколе. Для этого потребуется добавить в существующую конфигурацию реверс-прокси. В рамках данной статьи мы воспользуемся Caddy для решения этой задачи.
Для настройки реверс-прокси подключитесь к серверу по ssh и перейдите в директорию с конфигурационными файлами.
cd /opt/vikunjaСоздайте директорию под конфигурацию Caddy.
mkdir caddyconfВ созданной директории создайте файл с названием Caddyfile со следующим содержимым, заменив todo.betutorial.ru на ваш домен:
todo.betutorial.ru {
reverse_proxy vikunja:3456
}В файл compose.yml добавьте блок конфигурации контейнера caddy:
caddy:
image: caddy
restart: unless-stopped
ports:
- "80:80"
- "443:443"
depends_on:
- vikunja
volumes:
- ./caddyconf:/etc/caddy:roИтоговый compose.yml будет выглядеть так:
services:
vikunja:
image: vikunja/vikunja
environment:
VIKUNJA_SERVICE_PUBLICURL: "${VIKUNJA_SERVICE_PUBLICURL}"
VIKUNJA_DATABASE_HOST: db
VIKUNJA_DATABASE_PASSWORD: "${POSTGRES_PASSWORD}"
VIKUNJA_DATABASE_TYPE: postgres
VIKUNJA_DATABASE_USER: vikunja
VIKUNJA_DATABASE_DATABASE: vikunja
VIKUNJA_SERVICE_JWTSECRET: "${VIKUNJA_SERVICE_JWTSECRET}"
VIKUNJA_SERVICE_ALLOWICONCHANGES: false
VIKUNJA_SERVICE_ENABLEREGISTRATION: false
ports:
- 3456:3456
volumes:
- ./files:/app/vikunja/files
depends_on:
db:
condition: service_healthy
restart: unless-stopped
db:
image: postgres:17
environment:
POSTGRES_PASSWORD: "${POSTGRES_PASSWORD}"
POSTGRES_USER: vikunja
volumes:
- ./db:/var/lib/postgresql/data
restart: unless-stopped
healthcheck:
test: ["CMD-SHELL", "pg_isready -h localhost -U $$POSTGRES_USER"]
interval: 2s
start_period: 30s
caddy:
image: caddy
restart: unless-stopped
ports:
- "80:80"
- "443:443"
depends_on:
- vikunja
volumes:
- ./caddyconf:/etc/caddy:roИзмените значение переменной VIKUNJA_SERVICE_PUBLICURL в .env на https://ваш_домен. Например, для домена todo.betutorial.ru это будет выглядеть так:
VIKUNJA_SERVICE_PUBLICURL=https://todo.betutorial.ruДля пересоздания контейнеров последовательно выполните команды:
docker compose down
docker compose up -dВ случае успешной настройки приложение Vikunja будет доступно по указанному в конфигурации caddy домену по протоколу HTTPS.

Если вы ранее открывали порт 3456 для внешнего доступа в настройках firewall, порт можно закрыть.
Заключение
В данной статье мы рассмотрели процесс установки, первичной настройки и начала работы с альтернативой Redmine и Jira – таск-менеджером Vikunja.
Если возникнут вопросы, напишите нам, пожалуйста, тикет из панели управления аккаунта (раздел “Помощь и поддержка”), а если вы захотите обсудить эту статью или наши продукты с коллегами по цеху и сотрудниками Beget – ждем вас в нашем сообществе в Telegram.