Skip to content

Commit 4c18463

Browse files
authored
Add BentoPDF (#169)
1 parent df0a3ea commit 4c18463

File tree

5 files changed

+121
-8
lines changed

5 files changed

+121
-8
lines changed

README.md

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ If you would like to add your own config, you can use the [service-template](tem
9494
| 🔗 **Pingvin Share** | **PROJECT ARCHIVED** A self-hosted file sharing platform. | [Details](services/pingvin-share) |
9595
| 🔄 **Resilio Sync** | A fast, reliable, and simple file sync and share solution. | [Details](services/resilio-sync) |
9696
| 🗂️ **Stirling-PDF** | A web application for managing and editing PDF files. | [Details](services/stirlingpdf) |
97+
| 📄 **BentoPDF** | A lightweight, self-hosted web app for viewing and managing PDF documents. | [Details](services/bentopdf) |
9798
| 🏦 **Subtrackr** | A self-hosted web app to track subscriptions, renewal dates, costs, and payment methods. | [Details](services/subtrackr) |
9899
| 🗃️ **Vaultwarden** | An unofficial Bitwarden server implementation written in Rust. | [Details](services/vaultwarden) |
99100
| 💸 **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) |
@@ -139,14 +140,14 @@ If you would like to add your own config, you can use the [service-template](tem
139140

140141
### 📱 Utilities
141142

142-
| 📱 Service | 📝 Description | 🔗 Link |
143-
| ---------------- | ------------------------------------------------------------------------------------ | ------------------------------- |
144-
| 🔁 **ConvertX** | A fast, full-featured self-hosted conversion API for images, docs, videos, and more. | [Details](services/convertx) |
145-
| 🔔 **Gotify** | A simple server for sending and receiving messages in real-time. | [Details](services/gotify) |
146-
| 📣 **ntfy** | A simple HTTP-based pub/sub notification service for sending push notifications. | [Details](services/ntfy) |
147-
| 🚗 **LubeLogger** | Self-hosted vehicle maintenance tracker with private access. | [Details](services/lube-logger) |
148-
| 📱 **Mini-QR** | A minimal, self-hosted QR code generator with a mobile-friendly UI. | [Details](services/mini-qr) |
149-
| 🔐 **Hemmelig** | A self-hosted, zero-knowledge encrypted secret sharing platform with expiring secrets. | [Details](services/hemmelig) |
143+
| 📱 Service | 📝 Description | 🔗 Link |
144+
| ---------------- | -------------------------------------------------------------------------------------- | ------------------------------- |
145+
| 🔁 **ConvertX** | A fast, full-featured self-hosted conversion API for images, docs, videos, and more. | [Details](services/convertx) |
146+
| 🔔 **Gotify** | A simple server for sending and receiving messages in real-time. | [Details](services/gotify) |
147+
| 📣 **ntfy** | A simple HTTP-based pub/sub notification service for sending push notifications. | [Details](services/ntfy) |
148+
| 🚗 **LubeLogger** | Self-hosted vehicle maintenance tracker with private access. | [Details](services/lube-logger) |
149+
| 📱 **Mini-QR** | A minimal, self-hosted QR code generator with a mobile-friendly UI. | [Details](services/mini-qr) |
150+
| 🔐 **Hemmelig** | A self-hosted, zero-knowledge encrypted secret sharing platform with expiring secrets. | [Details](services/hemmelig) |
150151

151152
### 🍽️ Food & Wellness
152153

services/bentopdf/.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=bentopdf
5+
IMAGE_URL=bentopdf/bentopdf:latest
6+
SERVICEPORT=3000
7+
TS_AUTHKEY=
8+
DNS_SERVER=9.9.9.9

services/bentopdf/README.md

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
# BentoPDF with Tailscale Sidecar Configuration
2+
3+
This Docker Compose configuration sets up **BentoPDF** with a Tailscale sidecar container, enabling secure access to your self-hosted PDF management interface over your private Tailscale network. With this setup, your BentoPDF instance remains **private and accessible only from authorized devices on your Tailnet**, keeping your documents protected from public exposure.
4+
5+
## BentoPDF
6+
7+
[**BentoPDF**](https://github.com/alam00000/bentopdf) is an open-source, self-hosted web application for **viewing, organizing, and managing PDF documents**. It provides a clean, modern interface focused on simplicity and performance, making it ideal for personal document libraries, internal teams, or homelab environments that require private document access.
8+
9+
## Key Features
10+
11+
- 📄 **In-Browser PDF Viewer** – View PDF files directly from a modern web interface.
12+
- 🗂 **Document Organization** – Browse and manage PDFs stored on your server.
13+
- 🔍 **Fast & Lightweight** – Minimal overhead with a focus on performance.
14+
- 🧭 **Clean, Minimal UI** – Simple and distraction-free user experience.
15+
- 🐳 **Docker-Friendly** – Designed to run easily in containerized environments.
16+
- 🔐 **Privacy-First** – Your documents stay entirely on your own infrastructure.
17+
- 📦 **Open Source** – Fully open-source and self-hostable.
18+
19+
## Why Self-Host?
20+
21+
PDF files often contain sensitive personal or business information. Self-hosting BentoPDF ensures **full control and ownership of your documents**, without relying on third-party cloud storage or services. Combined with Tailscale, BentoPDF becomes a private document portal that is securely accessible from anywhere while remaining invisible to the public internet.
22+
23+
## Configuration Overview
24+
25+
In this deployment, a **Tailscale sidecar container** (for example `tailscale-bentopdf`) runs the Tailscale client and joins your private Tailscale network. The main `bentopdf` service uses:
26+
27+
```plain
28+
network_mode: service:tailscale-bentopdf
29+
```
30+
31+
This configuration routes all traffic through the Tailscale interface, ensuring that the BentoPDF web UI is accessible **only via your Tailscale network**. This provides a simple and secure way to access your PDF library from all trusted devices.
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:3000"
12+
}
13+
}
14+
}
15+
}
16+
}
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
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 # Tailscale 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+
- ./config:/config # Config folder used to store Tailscale files - you may need to change the path
19+
- ./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+
#ports:
25+
# - 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
26+
# If any DNS issues arise, use your preferred DNS provider by uncommenting the config below
27+
#dns:
28+
# - ${DNS_SERVER}
29+
healthcheck:
30+
test: ["CMD", "wget", "--spider", "-q", "http://127.0.0.1:41234/healthz"] # Check Tailscale has a Tailnet IP and is operational
31+
interval: 1m # How often to perform the check
32+
timeout: 10s # Time to wait for the check to succeed
33+
retries: 3 # Number of retries before marking as unhealthy
34+
start_period: 10s # Time to wait before starting health checks
35+
restart: always
36+
37+
# ${SERVICE}
38+
application:
39+
image: ${IMAGE_URL} # Image to be used
40+
network_mode: service:tailscale # Sidecar configuration to route ${SERVICE} through Tailscale
41+
container_name: app-${SERVICE} # Name for local container management
42+
environment:
43+
- PUID=1000
44+
- PGID=1000
45+
- TZ=Europe/Amsterdam
46+
volumes:
47+
- ./${SERVICE}-data/app/config:/config
48+
depends_on:
49+
tailscale:
50+
condition: service_healthy
51+
healthcheck:
52+
test: ["CMD", "pgrep", "-f", "${SERVICE}"] # Check if ${SERVICE} process is running
53+
interval: 1m # How often to perform the check
54+
timeout: 10s # Time to wait for the check to succeed
55+
retries: 3 # Number of retries before marking as unhealthy
56+
start_period: 30s # Time to wait before starting health checks
57+
restart: always

0 commit comments

Comments
 (0)