Skip to content

Commit 8c635b2

Browse files
authored
Add Transmute (#279)
* Add Transmute service with Tailscale sidecar configuration and environment setup * fix
1 parent e2f9a55 commit 8c635b2

File tree

4 files changed

+151
-22
lines changed

4 files changed

+151
-22
lines changed

README.md

Lines changed: 23 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -202,16 +202,17 @@ ScaleTail provides ready-to-run [Docker Compose](https://docs.docker.com/compose
202202

203203
### 📱 Utilities
204204

205-
| 📱 Service | 📝 Description | 🔗 Link |
206-
| ---------------- | -------------------------------------------------------------------------------------- | ------------------------------- |
207-
| 🔁 **ConvertX** | A fast, full-featured self-hosted conversion API for images, docs, videos, and more. | [Details](services/convertx) |
208-
| 🔔 **Gotify** | A simple server for sending and receiving messages in real-time. | [Details](services/gotify) |
209-
| 📣 **ntfy** | A simple HTTP-based pub/sub notification service for sending push notifications. | [Details](services/ntfy) |
210-
| 🚗 **LubeLogger** | Self-hosted vehicle maintenance tracker with private access. | [Details](services/lube-logger) |
211-
| 🚗 **Tracktor** | Self-hosted vehicle maintenance tracker. | [Details](services/tracktor) |
212-
| 📱 **Mini-QR** | A minimal, self-hosted QR code generator with a mobile-friendly UI. | [Details](services/miniqr) |
213-
| 🔐 **Hemmelig** | A self-hosted, zero-knowledge encrypted secret sharing platform with expiring secrets. | [Details](services/hemmelig) |
214-
| 📦 **Homebox** | A self-hosted home inventory and asset management system. | [Details](services/homebox) |
205+
| 📱 Service | 📝 Description | 🔗 Link |
206+
| ---------------- | ----------------------------------------------------------------------------------------------------------------- | ------------------------------- |
207+
| 🔁 **ConvertX** | A fast, full-featured self-hosted conversion API for images, docs, videos, and more. | [Details](services/convertx) |
208+
| 🔔 **Gotify** | A simple server for sending and receiving messages in real-time. | [Details](services/gotify) |
209+
| 🔐 **Hemmelig** | A self-hosted, zero-knowledge encrypted secret sharing platform with expiring secrets. | [Details](services/hemmelig) |
210+
| 📦 **Homebox** | A self-hosted home inventory and asset management system. | [Details](services/homebox) |
211+
| 🚗 **LubeLogger** | Self-hosted vehicle maintenance tracker with private access. | [Details](services/lube-logger) |
212+
| 📱 **Mini-QR** | A minimal, self-hosted QR code generator with a mobile-friendly UI. | [Details](services/miniqr) |
213+
| 📣 **ntfy** | A simple HTTP-based pub/sub notification service for sending push notifications. | [Details](services/ntfy) |
214+
| 🚗 **Tracktor** | Self-hosted vehicle maintenance tracker. | [Details](services/tracktor) |
215+
| 🔁 **Transmute** | A self-hosted file conversion and transformation service for handling documents, media, and other format changes. | [Details](services/transmute) |
215216

216217
### 🍽️ Food & Wellness
217218

@@ -252,8 +253,8 @@ A huge thank you to all our contributors! ScaleTail wouldn’t be what it is tod
252253

253254
<!-- readme: contributors -start -->
254255
<table>
255-
<tbody>
256-
<tr>
256+
<tbody>
257+
<tr>
257258
<td align="center">
258259
<a href="https://github.com/crypt0rr">
259260
<img src="https://avatars.githubusercontent.com/u/57799908?v=4" width="100;" alt="crypt0rr"/>
@@ -296,8 +297,8 @@ A huge thank you to all our contributors! ScaleTail wouldn’t be what it is tod
296297
<sub><b>adamsthws</b></sub>
297298
</a>
298299
</td>
299-
</tr>
300-
<tr>
300+
</tr>
301+
<tr>
301302
<td align="center">
302303
<a href="https://github.com/theryukverse">
303304
<img src="https://avatars.githubusercontent.com/u/22323518?v=4" width="100;" alt="theryukverse"/>
@@ -340,8 +341,8 @@ A huge thank you to all our contributors! ScaleTail wouldn’t be what it is tod
340341
<sub><b>mikkotor</b></sub>
341342
</a>
342343
</td>
343-
</tr>
344-
<tr>
344+
</tr>
345+
<tr>
345346
<td align="center">
346347
<a href="https://github.com/NI-R0">
347348
<img src="https://avatars.githubusercontent.com/u/98448863?v=4" width="100;" alt="NI-R0"/>
@@ -384,8 +385,8 @@ A huge thank you to all our contributors! ScaleTail wouldn’t be what it is tod
384385
<sub><b>pjv</b></sub>
385386
</a>
386387
</td>
387-
</tr>
388-
<tr>
388+
</tr>
389+
<tr>
389390
<td align="center">
390391
<a href="https://github.com/wedge22">
391392
<img src="https://avatars.githubusercontent.com/u/34723349?v=4" width="100;" alt="wedge22"/>
@@ -428,8 +429,8 @@ A huge thank you to all our contributors! ScaleTail wouldn’t be what it is tod
428429
<sub><b>cdkooistra</b></sub>
429430
</a>
430431
</td>
431-
</tr>
432-
<tr>
432+
</tr>
433+
<tr>
433434
<td align="center">
434435
<a href="https://github.com/Aurorainic">
435436
<img src="https://avatars.githubusercontent.com/u/88829187?v=4" width="100;" alt="Aurorainic"/>
@@ -458,8 +459,8 @@ A huge thank you to all our contributors! ScaleTail wouldn’t be what it is tod
458459
<sub><b>orchard0</b></sub>
459460
</a>
460461
</td>
461-
</tr>
462-
<tbody>
462+
</tr>
463+
<tbody>
463464
</table>
464465
<!-- readme: contributors -end -->
465466

services/transmute/.env

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
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=transmute # Service name (e.g., adguard). Used as hostname in Tailscale and for container naming (app-${SERVICE}).
7+
IMAGE_URL=ghcr.io/transmute-app/transmute:latest # Docker image URL from container registry (e.g., adguard/adguard-home).
8+
9+
# Network Configuration
10+
SERVICEPORT=3313 # 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"

services/transmute/README.md

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
# Transmute with Tailscale Sidecar Configuration
2+
3+
This Docker Compose configuration sets up **Transmute** with a Tailscale sidecar container, allowing you to securely access your instance over your private Tailnet. With this setup, Transmute remains private by default and is only accessible from devices authenticated to your Tailscale network.
4+
5+
## Transmute
6+
7+
[**Transmute**](https://github.com/transmute-app/transmute) is an open-source file conversion and transformation service designed to handle a wide variety of document, media, and data format conversions through a clean API and web interface. It is particularly useful for workflows that require automated or repeatable transformations between formats.
8+
9+
Running Transmute behind Tailscale ensures that your file processing pipelines and potentially sensitive data remain secure, without exposing the service publicly.
10+
11+
## Key Features
12+
13+
- Convert files between multiple formats (documents, images, and more)
14+
- API-first design for automation and integrations
15+
- Web interface for manual conversions
16+
- Lightweight and container-friendly deployment
17+
- Self-hosted with full control over your data
18+
19+
## Configuration Overview
20+
21+
In this setup, the `tailscale-transmute` service runs Tailscale and manages secure connectivity to your Tailnet. The `transmute` container shares the same network stack using Docker’s `network_mode: service:tailscale-transmute`.
22+
23+
## Service Notes / Gotchas
24+
25+
- Some conversions may require additional system dependencies depending on formats used
26+
- Initial startup may take longer if Transmute initializes processing tools
27+
- Ensure sufficient CPU and memory for heavy conversions
28+
29+
## Useful Links
30+
31+
- GitHub Repository: <https://github.com/transmute-app/transmute>
32+
- Tailscale Auth Keys: <https://tailscale.com/kb/1085/auth-keys>
33+
- Tailscale Serve Docs: <https://tailscale.com/kb/1242/tailscale-serve>

services/transmute/compose.yaml

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
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:3313"}}}},
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+
environment: # Varibles are delared in .env file.
56+
- PUID=1000
57+
- PGID=1000
58+
- TZ=${TZ}
59+
#- EXAMPLE_VAR=${EXAMPLE_VAR}
60+
volumes:
61+
- ./${SERVICE}-data:/app/data
62+
depends_on:
63+
tailscale:
64+
condition: service_healthy
65+
healthcheck:
66+
test: ["CMD", "wget", "-q", "-O", "/dev/null", "--tries=1", "http://localhost:3313/api/health/ready"]
67+
interval: 1m
68+
timeout: 10s
69+
retries: 3
70+
start_period: 30s
71+
restart: always

0 commit comments

Comments
 (0)