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 - - + + - - - + + + - - + + - - + + + + + - - - - + +
crypt0rr @@ -282,13 +282,6 @@ A huge thank you to all our contributors! ScaleTail wouldn’t be what it is tod michaelhodges - - LaijieJi -
- LaijieJi -
-
adamsthws @@ -296,8 +289,6 @@ A huge thank you to all our contributors! ScaleTail wouldn’t be what it is tod adamsthws
theryukverse @@ -305,6 +296,8 @@ A huge thank you to all our contributors! ScaleTail wouldn’t be what it is tod theryukverse
KhaaL @@ -320,10 +313,17 @@ A huge thank you to all our contributors! ScaleTail wouldn’t be what it is tod - - jpmurray + + onlykshitij
- jpmurray + onlykshitij +
+
+ + LaijieJi +
+ LaijieJi
@@ -340,8 +340,8 @@ A huge thank you to all our contributors! ScaleTail wouldn’t be what it is tod mikkotor
NI-R0 @@ -384,8 +384,8 @@ A huge thank you to all our contributors! ScaleTail wouldn’t be what it is tod pjv
wedge22 @@ -393,6 +393,13 @@ A huge thank you to all our contributors! ScaleTail wouldn’t be what it is tod wedge22 + + jpmurray +
+ jpmurray +
+
Jacob-JA-Shanks @@ -421,6 +428,8 @@ A huge thank you to all our contributors! ScaleTail wouldn’t be what it is tod dfilvtov
cdkooistra @@ -428,8 +437,6 @@ A huge thank you to all our contributors! ScaleTail wouldn’t be what it is tod cdkooistra
Aurorainic @@ -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 -
- onlykshitij -
- LaijieJi @@ -340,8 +333,6 @@ A huge thank you to all our contributors! ScaleTail wouldn’t be what it is tod mikkotor - - NI-R0 @@ -349,6 +340,8 @@ A huge thank you to all our contributors! ScaleTail wouldn’t be what it is tod NI-R0 + + RychidM @@ -384,14 +377,21 @@ A huge thank you to all our contributors! ScaleTail wouldn’t be what it is tod pjv - - wedge22
wedge22
+ + + + + + onlykshitij +
+ 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 +
+ onlykshitij +
+ LaijieJi @@ -333,6 +340,8 @@ A huge thank you to all our contributors! ScaleTail wouldn’t be what it is tod mikkotor + + NI-R0 @@ -340,8 +349,6 @@ A huge thank you to all our contributors! ScaleTail wouldn’t be what it is tod NI-R0 - - RychidM @@ -377,21 +384,14 @@ A huge thank you to all our contributors! ScaleTail wouldn’t be what it is tod pjv + + wedge22
wedge22
- - - - - - onlykshitij -
- 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}