From 0d3470a987757c413a7520e7b99e598ecbbaaa45 Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
<41898282+github-actions[bot]@users.noreply.github.com>
Date: Sat, 18 Apr 2026 20:33:35 +0000
Subject: [PATCH 01/12] docs(contributor): contrib-readme-action has updated
readme
---
README.md | 51 +++++++++++++++++++++++++++++----------------------
1 file changed, 29 insertions(+), 22 deletions(-)
diff --git a/README.md b/README.md
index 5ecd61e..416c75a 100644
--- a/README.md
+++ b/README.md
@@ -252,8 +252,8 @@ A huge thank you to all our contributors! ScaleTail wouldn’t be what it is tod
-
-
+
+
@@ -282,13 +282,6 @@ A huge thank you to all our contributors! ScaleTail wouldn’t be what it is tod
michaelhodges
|
-
-
-
-
- LaijieJi
-
- |
@@ -296,8 +289,6 @@ A huge thank you to all our contributors! ScaleTail wouldn’t be what it is tod
adamsthws
|
-
-
@@ -305,6 +296,8 @@ A huge thank you to all our contributors! ScaleTail wouldn’t be what it is tod
theryukverse
|
+
+
@@ -320,10 +313,17 @@ A huge thank you to all our contributors! ScaleTail wouldn’t be what it is tod
|
-
-
+
+
- jpmurray
+ onlykshitij
+
+ |
+
+
+
+
+ LaijieJi
|
@@ -340,8 +340,8 @@ A huge thank you to all our contributors! ScaleTail wouldn’t be what it is tod
mikkotor
|
-
-
+
+
@@ -384,8 +384,8 @@ A huge thank you to all our contributors! ScaleTail wouldn’t be what it is tod
pjv
|
-
-
+
+
@@ -393,6 +393,13 @@ A huge thank you to all our contributors! ScaleTail wouldn’t be what it is tod
wedge22
|
+
+
+
+
+ jpmurray
+
+ |
@@ -421,6 +428,8 @@ A huge thank you to all our contributors! ScaleTail wouldn’t be what it is tod
dfilvtov
|
+
+
@@ -428,8 +437,6 @@ A huge thank you to all our contributors! ScaleTail wouldn’t be what it is tod
cdkooistra
|
-
-
@@ -458,8 +465,8 @@ A huge thank you to all our contributors! ScaleTail wouldn’t be what it is tod
orchard0
|
-
-
+
+
From 14844f6b6467b09059f5460a9fe0e4f6331650c4 Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
<41898282+github-actions[bot]@users.noreply.github.com>
Date: Sun, 19 Apr 2026 05:37:32 +0000
Subject: [PATCH 02/12] docs(contributor): contrib-readme-action has updated
readme
---
README.md | 22 +++++++++++-----------
1 file changed, 11 insertions(+), 11 deletions(-)
diff --git a/README.md b/README.md
index 416c75a..a2c4ae5 100644
--- a/README.md
+++ b/README.md
@@ -312,13 +312,6 @@ A huge thank you to all our contributors! ScaleTail wouldn’t be what it is tod
SamPlaysKeys
-
-
-
-
- onlykshitij
-
- |
@@ -340,8 +333,6 @@ A huge thank you to all our contributors! ScaleTail wouldn’t be what it is tod
mikkotor
|
-
-
@@ -349,6 +340,8 @@ A huge thank you to all our contributors! ScaleTail wouldn’t be what it is tod
NI-R0
|
+
+
@@ -384,14 +377,21 @@ A huge thank you to all our contributors! ScaleTail wouldn’t be what it is tod
pjv
|
-
-
wedge22
+ |
+
+
+
+
+
+
+ onlykshitij
+
|
From 963ef66819efa74f0b90e3c38bf415988a56ad67 Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
<41898282+github-actions[bot]@users.noreply.github.com>
Date: Mon, 20 Apr 2026 05:49:27 +0000
Subject: [PATCH 03/12] docs(contributor): contrib-readme-action has updated
readme
---
README.md | 22 +++++++++++-----------
1 file changed, 11 insertions(+), 11 deletions(-)
diff --git a/README.md b/README.md
index a2c4ae5..416c75a 100644
--- a/README.md
+++ b/README.md
@@ -312,6 +312,13 @@ A huge thank you to all our contributors! ScaleTail wouldn’t be what it is tod
SamPlaysKeys
|
+
+
+
+
+ onlykshitij
+
+ |
@@ -333,6 +340,8 @@ A huge thank you to all our contributors! ScaleTail wouldn’t be what it is tod
mikkotor
|
+
+
@@ -340,8 +349,6 @@ A huge thank you to all our contributors! ScaleTail wouldn’t be what it is tod
NI-R0
|
-
-
@@ -377,21 +384,14 @@ A huge thank you to all our contributors! ScaleTail wouldn’t be what it is tod
pjv
|
+
+
wedge22
- |
-
-
-
-
-
-
- onlykshitij
-
|
From 9a62ff8031e81d93624aa4e76737254394f76ffc Mon Sep 17 00:00:00 2001
From: michaelhodges
Date: Thu, 23 Apr 2026 11:09:57 +0100
Subject: [PATCH 04/12] Update compose.yaml
Use tailscale Docker configuration parameters to advertise routes
---
services/tailscale-subnet-router-node/compose.yaml | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/services/tailscale-subnet-router-node/compose.yaml b/services/tailscale-subnet-router-node/compose.yaml
index ade1408..d320736 100644
--- a/services/tailscale-subnet-router-node/compose.yaml
+++ b/services/tailscale-subnet-router-node/compose.yaml
@@ -9,7 +9,8 @@ services:
environment:
- TS_AUTHKEY=${TS_AUTHKEY}
- TS_STATE_DIR=/var/lib/tailscale
- - TS_EXTRA_ARGS=--advertise-routes=${SUBNET_ROUTES}
+ - TS_ROUTES=${SUBNET_ROUTES}
+ - TS_EXTRA_ARGS=
- TS_USERSPACE=false
- TS_ENABLE_HEALTH_CHECK=true # Enable healthcheck endpoint: "/healthz"
- TS_LOCAL_ADDR_PORT=127.0.0.1:41234 # The : for the healthz endpoint
From 02eeb17a54f4f528cc98b4ed8866f63602559cc6 Mon Sep 17 00:00:00 2001
From: michaelhodges
Date: Thu, 7 May 2026 20:11:02 +0100
Subject: [PATCH 05/12] New Service - EspoCRM
---
README.md | 1 +
services/espocrm/.env | 39 ++++++++++++++++
services/espocrm/README.md | 22 +++++++++
services/espocrm/compose.yml | 88 ++++++++++++++++++++++++++++++++++++
4 files changed, 150 insertions(+)
create mode 100644 services/espocrm/.env
create mode 100644 services/espocrm/README.md
create mode 100644 services/espocrm/compose.yml
diff --git a/README.md b/README.md
index 3f9cc41..28b42bf 100644
--- a/README.md
+++ b/README.md
@@ -130,6 +130,7 @@ ScaleTail provides ready-to-run [Docker Compose](https://docs.docker.com/compose
| 📚 **Docmost** | A self-hosted, real-time collaborative wiki with rich editing, diagrams, permissions, and full-text search. | [Details](services/docmost) |
| ✅ **DumbDo** | A self-hosted, minimalistic task manager for simple to-do lists. | [Details](services/dumbdo) |
| ✅ **Eigenfocus** | A self-hosted task and project management tool for productivity. | [Details](services/eigenfocus) |
+| 🗂️ **EspoCRM** | A CRM for Sales, support and marketing. | [Details](services/espocrm) |
| 📝 **Excalidraw** | A virtual collaborative whiteboard tool. | [Details](services/excalidraw) |
| 📝 **Flatnotes** | A simple, self-hosted note-taking app using Markdown files. | [Details](services/flatnotes) |
| 👨🏼💻 **Forgejo** | A community-driven, self-hosted Git service. | [Details](services/forgejo) |
diff --git a/services/espocrm/.env b/services/espocrm/.env
new file mode 100644
index 0000000..18ad0d9
--- /dev/null
+++ b/services/espocrm/.env
@@ -0,0 +1,39 @@
+#version=1.1
+#URL=https://github.com/tailscale-dev/ScaleTail
+#COMPOSE_PROJECT_NAME= # Optional: only use when running multiple deployments on the same infrastructure.
+
+# Service Configuration
+SERVICE=espocrm # Service name (e.g., adguard). Used as hostname in Tailscale and for container naming (app-${SERVICE}).
+IMAGE_URL=espocrm/espocrm # Docker image URL from container registry (e.g., adguard/adguard-home).
+
+# Network Configuration
+SERVICEPORT= # Port to expose to local network. Uncomment the "ports:" section in compose.yaml to enable.
+DNS_SERVER=9.9.9.9 # Preferred DNS server for Tailscale. Uncomment the "dns:" section in compose.yaml to enable.
+
+# Tailscale Configuration
+TS_AUTHKEY= # Auth key from https://tailscale.com/admin/authkeys. See: https://tailscale.com/kb/1085/auth-keys#generate-an-auth-key for instructions.
+
+# Optional Service variables
+# PUID=1000
+
+#Time Zone setting for containers
+TZ=Europe/Amsterdam # See: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
+
+# Any Container environment variables are declared below. See https://docs.docker.com/compose/how-tos/environment-variables/
+
+#EXAMPLE_VAR="Environment varibale"
+
+TS_DOMAIN=.ts.net
+
+MARIADB_ROOT_PASSWORD=password
+MARIADB_DATABASE=espocrm
+MARIADB_USER=espocrm
+MARIADB_PASSWORD=password
+ESPOCRM_DEFAULT_CURRENCY=EUR
+ESPOCRM_DATABASE_PLATFORM=Mysql
+ESPOCRM_DATABASE_HOST=espocrm-db
+ESPOCRM_DATABASE_USER=espocrm
+ESPOCRM_DATABASE_PASSWORD=password
+ESPOCRM_ADMIN_USERNAME=admin
+ESPOCRM_ADMIN_PASSWORD=password
+ESPOCRM_SITE_URL=https://${SERVICE}.${TS_DOMAIN}
diff --git a/services/espocrm/README.md b/services/espocrm/README.md
new file mode 100644
index 0000000..bd27009
--- /dev/null
+++ b/services/espocrm/README.md
@@ -0,0 +1,22 @@
+# EspoCRM with Tailscale Sidecar Configuration
+
+This Docker Compose configuration sets up [EspoCRM](https://www.espocrm.com/) with Tailscale as a sidecar container to keep the app reachable over your Tailnet.
+
+## EspoCRM
+
+[EspoCRM](https://www.espocrm.com/) is a web application that allows users to see, enter and evaluate all your company relationships regardless of the type. People, companies, projects or opportunities — all in an easy and intuitive interface.
+
+## Configuration Overview
+
+In this setup, the `tailscale-EspoCRM` service runs Tailscale, which manages secure networking for EspoCRM. The `EspoCRM` service utilizes the Tailscale network stack via Docker's `network_mode: service:` configuration. This keeps the app Tailnet-only unless you intentionally expose ports.
+
+## What to document for users
+
+- Links: [EspoCRM Features](https://www.espocrm.com/features/) [Environment Details](https://docs.espocrm.com/administration/docker/installation/#installation-environments)
+
+## Files to check
+
+Please check the following contents for validity as some variables need to be defined upfront.
+
+- `.env` // Main variable `TS_AUTHKEY`
+- `.env` // Required for normal operation. `TS_DOMAIN`
diff --git a/services/espocrm/compose.yml b/services/espocrm/compose.yml
new file mode 100644
index 0000000..9fd43de
--- /dev/null
+++ b/services/espocrm/compose.yml
@@ -0,0 +1,88 @@
+configs:
+ ts-serve:
+ content: |
+ {"TCP":{"443":{"HTTPS":true}},
+ "Web":{"$${TS_CERT_DOMAIN}:443":
+ {"Handlers":{"/":
+ {"Proxy":"http://127.0.0.1:80"}}}},
+ "AllowFunnel":{"$${TS_CERT_DOMAIN}:443":false}}
+
+services:
+# Make sure you have updated/checked the .env file with the correct variables.
+# All the ${ xx } need to be defined there.
+ # Tailscale Sidecar Configuration
+ tailscale:
+ image: tailscale/tailscale:latest # Image to be used
+ container_name: tailscale-${SERVICE} # Name for local container management
+ hostname: ${SERVICE} # Name used within your Tailscale environment
+ environment:
+ - TS_AUTHKEY=${TS_AUTHKEY}
+ - TS_STATE_DIR=/var/lib/tailscale
+ - TS_SERVE_CONFIG=/config/serve.json # Tailscale Serve configuration to expose the web interface on your local Tailnet - remove this line if not required
+ - TS_USERSPACE=false
+ - TS_ENABLE_HEALTH_CHECK=true # Enable healthcheck endpoint: "/healthz"
+ - TS_LOCAL_ADDR_PORT=127.0.0.1:41234 # The : for the healthz endpoint
+ #- TS_ACCEPT_DNS=true # Uncomment when using MagicDNS
+ - TS_AUTH_ONCE=true
+ configs:
+ - source: ts-serve
+ target: /config/serve.json
+ volumes:
+ - ./config:/config # Config folder used to store Tailscale files - you may need to change the path
+ - ./ts/state:/var/lib/tailscale # Tailscale requirement - you may need to change the path
+ devices:
+ - /dev/net/tun:/dev/net/tun # Network configuration for Tailscale to work
+ cap_add:
+ - net_admin # Tailscale requirement
+ #ports:
+ # - 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
+ # If any DNS issues arise, use your preferred DNS provider by uncommenting the config below
+ #dns:
+ # - ${DNS_SERVER}
+ healthcheck:
+ test: ["CMD", "wget", "--spider", "-q", "http://127.0.0.1:41234/healthz"] # Check Tailscale has a Tailnet IP and is operational
+ interval: 1m # How often to perform the check
+ timeout: 10s # Time to wait for the check to succeed
+ retries: 3 # Number of retries before marking as unhealthy
+ start_period: 10s # Time to wait before starting health checks
+ restart: always
+
+ # ${SERVICE}
+ espocrm-db:
+ image: mariadb:latest
+ container_name: app-${SERVICE}-db
+ environment:
+ - MARIADB_ROOT_PASSWORD=${MARIADB_ROOT_PASSWORD}
+ - MARIADB_DATABASE=${MARIADB_DATABASE}
+ - MARIADB_USER=${MARIADB_USER}
+ - MARIADB_PASSWORD=${MARIADB_PASSWORD}
+ volumes:
+ - ./${SERVICE}-db:/var/lib/mysql
+ restart: always
+ healthcheck:
+ test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
+ interval: 20s
+ start_period: 10s
+ timeout: 10s
+ retries: 3
+ espocrm:
+ image: ${IMAGE_URL}
+ network_mode: service:tailscale # Sidecar configuration to route ${SERVICE} through Tailscale
+ container_name: app-${SERVICE}
+ environment:
+ - ESPOCRM_DATABASE_PLATFORM=${ESPOCRM_DATABASE_PLATFORM}
+ - ESPOCRM_DATABASE_HOST=${ESPOCRM_DATABASE_HOST}
+ - ESPOCRM_DATABASE_USER=${ESPOCRM_DATABASE_USER}
+ - ESPOCRM_DATABASE_PASSWORD=${ESPOCRM_DATABASE_PASSWORD}
+ - ESPOCRM_ADMIN_USERNAME=${ESPOCRM_ADMIN_USERNAME}
+ - ESPOCRM_ADMIN_PASSWORD=${ESPOCRM_ADMIN_PASSWORD}
+ - ESPOCRM_SITE_URL=${ESPOCRM_SITE_URL}
+ - ESPOCRM_DEFAULT_CURRENCY=${ESPOCRM_DEFAULT_CURRENCY}
+ volumes:
+ - ./${SERVICE}-data:/var/www/html
+ restart: always
+ depends_on:
+ tailscale:
+ condition: service_healthy
+ espocrm-db:
+ condition: service_started
From d34d3af41a97f405149c6b6412ae7c95c263eb46 Mon Sep 17 00:00:00 2001
From: michaelhodges
Date: Sat, 9 May 2026 20:31:15 +0100
Subject: [PATCH 06/12] Update services/espocrm/compose.yml
Co-authored-by: Jack Spiering <46534141+jackspiering@users.noreply.github.com>
---
services/espocrm/compose.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/services/espocrm/compose.yml b/services/espocrm/compose.yml
index 9fd43de..5162954 100644
--- a/services/espocrm/compose.yml
+++ b/services/espocrm/compose.yml
@@ -62,7 +62,7 @@ services:
healthcheck:
test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
interval: 20s
- start_period: 10s
+ start_period: 30s
timeout: 10s
retries: 3
espocrm:
From ac212f063ab63241c351f3f6b368dad20162599f Mon Sep 17 00:00:00 2001
From: michaelhodges
Date: Sat, 9 May 2026 20:31:31 +0100
Subject: [PATCH 07/12] Update services/espocrm/compose.yml
Co-authored-by: Jack Spiering <46534141+jackspiering@users.noreply.github.com>
---
services/espocrm/compose.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/services/espocrm/compose.yml b/services/espocrm/compose.yml
index 5162954..1e7f798 100644
--- a/services/espocrm/compose.yml
+++ b/services/espocrm/compose.yml
@@ -50,7 +50,7 @@ services:
# ${SERVICE}
espocrm-db:
image: mariadb:latest
- container_name: app-${SERVICE}-db
+ container_name: db-${SERVICE}
environment:
- MARIADB_ROOT_PASSWORD=${MARIADB_ROOT_PASSWORD}
- MARIADB_DATABASE=${MARIADB_DATABASE}
From 76cf9b1ec226e28427e8c15bc88d120cfe09c757 Mon Sep 17 00:00:00 2001
From: michaelhodges
Date: Sat, 9 May 2026 20:31:42 +0100
Subject: [PATCH 08/12] Update services/espocrm/compose.yml
Co-authored-by: Jack Spiering <46534141+jackspiering@users.noreply.github.com>
---
services/espocrm/compose.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/services/espocrm/compose.yml b/services/espocrm/compose.yml
index 1e7f798..24b5545 100644
--- a/services/espocrm/compose.yml
+++ b/services/espocrm/compose.yml
@@ -61,7 +61,7 @@ services:
restart: always
healthcheck:
test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
- interval: 20s
+ interval: 1m
start_period: 30s
timeout: 10s
retries: 3
From 400f2128d0cc1a288b9b4f771ee7b0d012708684 Mon Sep 17 00:00:00 2001
From: michaelhodges
Date: Sat, 9 May 2026 20:31:52 +0100
Subject: [PATCH 09/12] Update services/espocrm/compose.yml
Co-authored-by: Jack Spiering <46534141+jackspiering@users.noreply.github.com>
---
services/espocrm/compose.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/services/espocrm/compose.yml b/services/espocrm/compose.yml
index 24b5545..b496be3 100644
--- a/services/espocrm/compose.yml
+++ b/services/espocrm/compose.yml
@@ -65,7 +65,7 @@ services:
start_period: 30s
timeout: 10s
retries: 3
- espocrm:
+ application:
image: ${IMAGE_URL}
network_mode: service:tailscale # Sidecar configuration to route ${SERVICE} through Tailscale
container_name: app-${SERVICE}
From 0a25febeb94e45e6e7a39538bf59dd30d209fcbc Mon Sep 17 00:00:00 2001
From: michaelhodges
Date: Sat, 9 May 2026 20:32:31 +0100
Subject: [PATCH 10/12] Update services/espocrm/compose.yml
Co-authored-by: Jack Spiering <46534141+jackspiering@users.noreply.github.com>
---
services/espocrm/compose.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/services/espocrm/compose.yml b/services/espocrm/compose.yml
index b496be3..0f8a55f 100644
--- a/services/espocrm/compose.yml
+++ b/services/espocrm/compose.yml
@@ -48,7 +48,7 @@ services:
restart: always
# ${SERVICE}
- espocrm-db:
+ database:
image: mariadb:latest
container_name: db-${SERVICE}
environment:
From 0b398f39fdc8678c965f7ac38893d9dcd342f6ed Mon Sep 17 00:00:00 2001
From: michaelhodges
Date: Sat, 9 May 2026 20:34:57 +0100
Subject: [PATCH 11/12] Update services/espocrm/compose.yml
Co-authored-by: Jack Spiering <46534141+jackspiering@users.noreply.github.com>
---
services/espocrm/compose.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/services/espocrm/compose.yml b/services/espocrm/compose.yml
index 0f8a55f..68f8bcc 100644
--- a/services/espocrm/compose.yml
+++ b/services/espocrm/compose.yml
@@ -84,5 +84,5 @@ services:
depends_on:
tailscale:
condition: service_healthy
- espocrm-db:
+ database:
condition: service_started
From 3f01b5253d7726c1f2ad09797ef5c9eef9ad28c1 Mon Sep 17 00:00:00 2001
From: michaelhodges
Date: Sat, 9 May 2026 20:41:25 +0100
Subject: [PATCH 12/12] define mariadb version
---
services/espocrm/compose.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/services/espocrm/compose.yml b/services/espocrm/compose.yml
index 68f8bcc..47c3406 100644
--- a/services/espocrm/compose.yml
+++ b/services/espocrm/compose.yml
@@ -49,7 +49,7 @@ services:
# ${SERVICE}
database:
- image: mariadb:latest
+ image: mariadb:12.2
container_name: db-${SERVICE}
environment:
- MARIADB_ROOT_PASSWORD=${MARIADB_ROOT_PASSWORD}
|