Skip to content

Commit 945a424

Browse files
authored
Added Subtrackr (#134)
* Added Subtrackr * Update health
1 parent 5a9d931 commit 945a424

File tree

5 files changed

+106
-0
lines changed

5 files changed

+106
-0
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ If you would like to add your own config, you can use the [service-template](tem
9090
| 🗂️ **Copyparty** | A self-hosted file server with accelerated resumable uploads. | [Details](services/copyparty) |
9191
| 💸 **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) |
9292
| 🧑‍🧑‍🧒‍🧒 **Gramps Web** | A web-based genealogy platform for collaborative family tree browsing, editing, AI-powered chat, media tagging, mapping, charts, search, and reporting. | [Details](services/grampsweb) |
93+
| **Subtrackr** | A self-hosted web app to track subscriptions, renewal dates, costs, and payment methods. | [Details](services/subtrackr) |
9394

9495
### 📊 Dashboards and Visualization
9596

services/subtrackr/.env

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
#version=1.0
2+
#url=https://github.com/2Tiny2Scale/tailscale-docker-sidecar-configs
3+
#COMPOSE_PROJECT_NAME= // only use in multiple deployments on the same infra
4+
SERVICE=subtrackr
5+
IMAGE_URL=ghcr.io/bscott/subtrackr
6+
SERVICEPORT=8080
7+
TS_AUTHKEY=
8+
DNS_SERVER=9.9.9.9

services/subtrackr/README.md

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# Subtrackr with Tailscale Sidecar Configuration
2+
3+
This Docker Compose configuration sets up [**Subtrackr**](https://github.com/bscott/subtrackr) with Tailscale as a sidecar container, enabling secure access to your self-hosted subscription tracking platform from anywhere on your private Tailscale network. With this setup, your Subtrackr instance remains fully private and accessible only from authorized devices.
4+
5+
## Subtrackr
6+
7+
[**Subtrackr**](https://github.com/bscott/subtrackr) is an open-source, self-hosted web application for managing and tracking recurring subscriptions. It provides a clean, modern interface to help you monitor costs, renewal dates, and payment methods across all your services. Designed for individuals and households, Subtrackr makes it easy to stay on top of your digital and physical subscriptions without relying on third-party services.
8+
9+
## Key Features
10+
11+
* **Centralized Subscription Management** – Keep all your recurring subscriptions organized in one place.
12+
* **Expense Tracking** – Monitor total spending, breakdowns, and trends across services.
13+
* **Renewal Reminders** – Stay informed with upcoming renewal and billing notifications.
14+
* **Service Categorization** – Group subscriptions by category for clear overviews (e.g., streaming, utilities, software).
15+
* **Payment Method Tracking** – Associate subscriptions with credit cards, bank accounts, or other payment methods.
16+
* **Responsive Web Interface** – A simple, mobile-friendly UI for adding and reviewing subscriptions.
17+
* **Self-Hosted & Open Source** – Run Subtrackr on your own infrastructure with Docker, ensuring privacy and data ownership.
18+
19+
## Configuration Overview
20+
21+
In this deployment, the `tailscale-subtrackr` service runs the Tailscale client to establish a secure private network. The `subtrackr` container uses `network_mode: service:tailscale-subtrackr` to route all traffic through the Tailscale interface. This ensures that your subscription data, dashboards, and administration interface are only accessible via Tailscale, preventing public exposure.
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
{
2+
"TCP": {
3+
"443": {
4+
"HTTPS": true
5+
}
6+
},
7+
"Web": {
8+
"${TS_CERT_DOMAIN}:443": {
9+
"Handlers": {
10+
"/": {
11+
"Proxy": "http://127.0.0.1:8080"
12+
}
13+
}
14+
}
15+
}
16+
}
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
services:
2+
# Make sure you have updated/checked the .env file with the correct variables.
3+
# All the ${ xx } need to be defined there.
4+
# Tailscale Sidecar Configuration
5+
tailscale:
6+
image: tailscale/tailscale:latest # Image to be used
7+
container_name: tailscale-${SERVICE} # Name for local container management
8+
hostname: ${SERVICE} # Name used within your Tailscale environment
9+
environment:
10+
- TS_AUTHKEY=${TS_AUTHKEY}
11+
- TS_STATE_DIR=/var/lib/tailscale
12+
- TS_SERVE_CONFIG=/config/serve.json # Tailsacale Serve configuration to expose the web interface on your local Tailnet - remove this line if not required
13+
- TS_USERSPACE=false
14+
- TS_ENABLE_HEALTH_CHECK=true # Enable healthcheck endpoint: "/healthz"
15+
- TS_LOCAL_ADDR_PORT=127.0.0.1:41234 # The <addr>:<port> for the healthz endpoint
16+
#- TS_ACCEPT_DNS=true # Uncomment when using MagicDNS
17+
volumes:
18+
- ${PWD}/config:/config # Config folder used to store Tailscale files - you may need to change the path
19+
- ${PWD}/ts/state:/var/lib/tailscale # Tailscale requirement - you may need to change the path
20+
devices:
21+
- /dev/net/tun:/dev/net/tun # Network configuration for Tailscale to work
22+
cap_add:
23+
- net_admin # Tailscale requirement
24+
- sys_module # Tailscale requirement
25+
#ports:
26+
# - 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
27+
# If any DNS issues arise, use your preferred DNS provider by uncommenting the config below
28+
#dns:
29+
# - ${DNS_SERVER}
30+
healthcheck:
31+
test: ["CMD", "wget", "--spider", "-q", "http://127.0.0.1:41234/healthz"] # Check Tailscale has a Tailnet IP and is operational
32+
interval: 1m # How often to perform the check
33+
timeout: 10s # Time to wait for the check to succeed
34+
retries: 3 # Number of retries before marking as unhealthy
35+
start_period: 10s # Time to wait before starting health checks
36+
restart: always
37+
38+
# ${SERVICE}
39+
application:
40+
image: ${IMAGE_URL} # Image to be used
41+
network_mode: service:tailscale # Sidecar configuration to route ${SERVICE} through Tailscale
42+
container_name: app-${SERVICE} # Name for local container management
43+
environment:
44+
- PUID=1000
45+
- PGID=1000
46+
- TZ=Europe/Amsterdam
47+
- GIN_MODE=release
48+
- DATABASE_PATH=/app/data/subtrackr.db
49+
volumes:
50+
- ${PWD}/${SERVICE}-data/data:/app/data
51+
depends_on:
52+
tailscale:
53+
condition: service_healthy
54+
# healthcheck:
55+
# test: ["CMD", "pgrep", "-f", "${SERVICE}"] # Check if ${SERVICE} process is running
56+
# interval: 1m # How often to perform the check
57+
# timeout: 10s # Time to wait for the check to succeed
58+
# retries: 3 # Number of retries before marking as unhealthy
59+
# start_period: 30s # Time to wait before starting health checks
60+
restart: always

0 commit comments

Comments
 (0)