Skip to content

Commit 10652e1

Browse files
Added Vikunja (#276)
Co-authored-by: Jack Spiering <46534141+jackspiering@users.noreply.github.com>
1 parent 51ca7c6 commit 10652e1

File tree

5 files changed

+635
-0
lines changed

5 files changed

+635
-0
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,7 @@ ScaleTail provides ready-to-run [Docker Compose](https://docs.docker.com/compose
155155
| 📋 **Formbricks** | A self-hosted, open-source platform for collecting user feedback, surveys, and NPS. | [Details](services/formbricks) |
156156
| 🏦 **Subtrackr** | A self-hosted web app to track subscriptions, renewal dates, costs, and payment methods. | [Details](services/subtrackr) |
157157
| 🗃️ **Vaultwarden** | An unofficial Bitwarden server implementation written in Rust. | [Details](services/vaultwarden) |
158+
|**Vikunja** | A self-hosted task and project management platform with projects, reminders, labels, recurring tasks, and collaboration features. | [Details](services/vikunja) |
158159
| 💸 **Wallos** | An open-source, self-hostable web app to track and manage your recurring subscriptions and expenses, with multi-currency support, customizable categories, and statistics. | [Details](services/wallos) |
159160

160161
### 📊 Dashboards and Visualization

services/vikunja/.env

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
#version=1.1
2+
#URL=https://github.com/tailscale-dev/ScaleTail
3+
#COMPOSE_PROJECT_NAME= # Optional: only use when running multiple deployments on the same infrastructure.
4+
5+
# Service Configuration
6+
SERVICE=vikunja # Service name (e.g., adguard). Used as hostname in Tailscale and for container naming (app-${SERVICE}).
7+
IMAGE_URL=vikunja/vikunja:latest # Docker image URL from container registry (e.g., adguard/adguard-home).
8+
9+
# Network Configuration
10+
SERVICEPORT=3456 # Port to expose to local network. Uncomment the "ports:" section in compose.yaml to enable.
11+
DNS_SERVER=9.9.9.9 # Preferred DNS server for Tailscale. Uncomment the "dns:" section in compose.yaml to enable.
12+
13+
# Tailscale Configuration
14+
TS_AUTHKEY= # Auth key from https://tailscale.com/admin/authkeys. See: https://tailscale.com/kb/1085/auth-keys#generate-an-auth-key for instructions.
15+
16+
# Optional Service variables
17+
# PUID=1000
18+
19+
#Time Zone setting for containers
20+
TZ=Europe/Amsterdam # See: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
21+
22+
# Any Container environment variables are declared below. See https://docs.docker.com/compose/how-tos/environment-variables/
23+
24+
#EXAMPLE_VAR="Environment varibale"
25+
26+
VIKUNJA_SERVICE_PUBLICURL=https://vikunja.<YOUR_TS_DOMAIN>.ts.net/
27+
VIKUNJA_DATABASE_PATH=/db/vikunja.db # Path to the SQLite database file. Ensure this path is correctly mapped in your Docker volumes.a

services/vikunja/README.md

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
# Vikunja with Tailscale Sidecar Configuration
2+
3+
This Docker Compose configuration sets up **Vikunja** with Tailscale as a sidecar container, enabling secure, private access to your task management system over your Tailnet. With this setup, your Vikunja instance is only reachable from authorized devices, keeping your tasks, projects, and personal data off the public internet.
4+
5+
## Vikunja
6+
7+
[Vikunja](https://vikunja.io) is an open-source, self-hosted task management and to-do list application designed as a privacy-focused alternative to tools like Todoist, Trello, and Asana. It supports projects, tasks, labels, reminders, recurring tasks, and team collaboration.
8+
9+
Vikunja is ideal for individuals or teams who want full ownership of their productivity data while maintaining a modern and feature-rich task management experience. Pairing it with Tailscale ensures that your task system remains private while still being accessible from anywhere on your Tailnet.
10+
11+
## Key Features
12+
13+
- Projects, tasks, and sub-tasks with flexible organization
14+
- Labels, priorities, due dates, and reminders
15+
- Recurring tasks and advanced filtering
16+
- Collaboration and shared projects
17+
- REST API and integrations
18+
- Clean web UI and mobile app support
19+
20+
## Configuration Overview
21+
22+
In this setup, the `tailscale-vikunja` service runs Tailscale, which manages secure networking for Vikunja. The `vikunja` service uses the Tailscale network stack via Docker's `network_mode: service:` configuration. This ensures the application is only accessible through your Tailnet unless you explicitly expose ports.
23+
24+
### Service-Specific Notes
25+
26+
- On first launch, you will need to create an admin account via the web UI
27+
- Default URL will be your Tailscale IP or MagicDNS name
28+
- Vikunja stores data in its configured database (SQLite by default unless changed)
29+
30+
## Useful Links
31+
32+
- Vikunja Website: <https://vikunja.io>
33+
- Documentation: <https://vikunja.io/docs>
34+
- GitHub: <https://github.com/go-vikunja/vikunja>

services/vikunja/compose.yaml

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
configs:
2+
ts-serve:
3+
content: |
4+
{"TCP":{"443":{"HTTPS":true}},
5+
"Web":{"$${TS_CERT_DOMAIN}:443":
6+
{"Handlers":{"/":
7+
{"Proxy":"http://127.0.0.1:3456"}}}},
8+
"AllowFunnel":{"$${TS_CERT_DOMAIN}:443":false}}
9+
10+
services:
11+
# Make sure you have updated/checked the .env file with the correct variables.
12+
# All the ${ xx } need to be defined there.
13+
# Tailscale Sidecar Configuration
14+
tailscale:
15+
image: tailscale/tailscale:latest # Image to be used
16+
container_name: tailscale-${SERVICE} # Name for local container management
17+
hostname: ${SERVICE} # Name used within your Tailscale environment
18+
environment:
19+
- TS_AUTHKEY=${TS_AUTHKEY}
20+
- TS_STATE_DIR=/var/lib/tailscale
21+
- TS_SERVE_CONFIG=/config/serve.json # Tailscale Serve configuration to expose the web interface on your local Tailnet - remove this line if not required
22+
- TS_USERSPACE=false
23+
- TS_ENABLE_HEALTH_CHECK=true # Enable healthcheck endpoint: "/healthz"
24+
- TS_LOCAL_ADDR_PORT=127.0.0.1:41234 # The <addr>:<port> for the healthz endpoint
25+
#- TS_ACCEPT_DNS=true # Uncomment when using MagicDNS
26+
- TS_AUTH_ONCE=true
27+
configs:
28+
- source: ts-serve
29+
target: /config/serve.json
30+
volumes:
31+
- ./config:/config # Config folder used to store Tailscale files - you may need to change the path
32+
- ./ts/state:/var/lib/tailscale # Tailscale requirement - you may need to change the path
33+
devices:
34+
- /dev/net/tun:/dev/net/tun # Network configuration for Tailscale to work
35+
cap_add:
36+
- net_admin # Tailscale requirement
37+
#ports:
38+
# - 0.0.0.0:${SERVICEPORT}:${SERVICEPORT} # Binding port ${SERVICE}PORT to the local network - may be removed if only exposure to your Tailnet is required
39+
# If any DNS issues arise, use your preferred DNS provider by uncommenting the config below
40+
#dns:
41+
# - ${DNS_SERVER}
42+
healthcheck:
43+
test: ["CMD", "wget", "--spider", "-q", "http://127.0.0.1:41234/healthz"] # Check Tailscale has a Tailnet IP and is operational
44+
interval: 1m # How often to perform the check
45+
timeout: 10s # Time to wait for the check to succeed
46+
retries: 3 # Number of retries before marking as unhealthy
47+
start_period: 10s # Time to wait before starting health checks
48+
restart: always
49+
50+
# ${SERVICE}
51+
application:
52+
image: ${IMAGE_URL} # Image to be used
53+
network_mode: service:tailscale # Sidecar configuration to route ${SERVICE} through Tailscale
54+
container_name: app-${SERVICE} # Name for local container management
55+
user: "0:0"
56+
environment: # Varibles are delared in .env file.
57+
- TZ=${TZ}
58+
- VIKUNJA_SERVICE_PUBLICURL=${VIKUNJA_SERVICE_PUBLICURL}
59+
- VIKUNJA_DATABASE_PATH=${VIKUNJA_DATABASE_PATH}
60+
volumes:
61+
- ./${SERVICE}-data/files:/app/vikunja/files
62+
- ./${SERVICE}-data/db:/db
63+
#- ./config.yml:/etc/vikunja/config.yml # Uncomment when using the `config.yml` file.
64+
depends_on:
65+
tailscale:
66+
condition: service_healthy
67+
restart: always

0 commit comments

Comments
 (0)