From bcb6cc1885fc14b51bb8bc45d5203dccdb86f0b9 Mon Sep 17 00:00:00 2001 From: BinkyTwin Date: Wed, 20 May 2026 22:26:10 +0200 Subject: [PATCH 1/2] feat: add Soft Serve template --- blueprints/soft-serve/docker-compose.yml | 27 +++++++++++ blueprints/soft-serve/soft-serve.svg | 10 ++++ blueprints/soft-serve/template.toml | 62 ++++++++++++++++++++++++ meta.json | 18 +++++++ 4 files changed, 117 insertions(+) create mode 100644 blueprints/soft-serve/docker-compose.yml create mode 100644 blueprints/soft-serve/soft-serve.svg create mode 100644 blueprints/soft-serve/template.toml diff --git a/blueprints/soft-serve/docker-compose.yml b/blueprints/soft-serve/docker-compose.yml new file mode 100644 index 000000000..d29e80ac9 --- /dev/null +++ b/blueprints/soft-serve/docker-compose.yml @@ -0,0 +1,27 @@ +version: "3.8" + +services: + soft-serve: + image: charmcli/soft-serve:v0.11.6 + restart: unless-stopped + expose: + - "23231" + - "23232" + - "23233" + - "9418" + environment: + SOFT_SERVE_NAME: ${SOFT_SERVE_NAME} + SOFT_SERVE_DATA_PATH: /soft-serve + SOFT_SERVE_INITIAL_ADMIN_KEYS: ${SOFT_SERVE_INITIAL_ADMIN_KEYS} + SOFT_SERVE_SSH_LISTEN_ADDR: :23231 + SOFT_SERVE_SSH_PUBLIC_URL: ${SOFT_SERVE_SSH_PUBLIC_URL} + SOFT_SERVE_HTTP_LISTEN_ADDR: :23232 + SOFT_SERVE_HTTP_PUBLIC_URL: ${SOFT_SERVE_HTTP_PUBLIC_URL} + SOFT_SERVE_GIT_LISTEN_ADDR: :9418 + SOFT_SERVE_STATS_LISTEN_ADDR: :23233 + SOFT_SERVE_LOG_LEVEL: ${SOFT_SERVE_LOG_LEVEL} + volumes: + - soft-serve-data:/soft-serve + +volumes: + soft-serve-data: diff --git a/blueprints/soft-serve/soft-serve.svg b/blueprints/soft-serve/soft-serve.svg new file mode 100644 index 000000000..0bb41d559 --- /dev/null +++ b/blueprints/soft-serve/soft-serve.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/blueprints/soft-serve/template.toml b/blueprints/soft-serve/template.toml new file mode 100644 index 000000000..f18f883c8 --- /dev/null +++ b/blueprints/soft-serve/template.toml @@ -0,0 +1,62 @@ +[variables] +main_domain = "${domain}" +server_name = "Soft Serve" +initial_admin_keys = "" +http_public_url = "http://${main_domain}" +ssh_public_url = "ssh://${main_domain}:23231" +log_level = "info" + +[[config.domains]] +serviceName = "soft-serve" +port = 23232 +host = "${main_domain}" +path = "/" + +[[config.mounts]] +filePath = "README.md" +content = """# Soft Serve + +This template deploys Soft Serve, a self-hosted Git server with an SSH TUI, HTTP Git access, Git LFS support, and a lightweight web endpoint. + +## First Start + +Set `initial_admin_keys` to one or more SSH public keys before the first deployment. Soft Serve uses this value to create the initial `admin` user. The keys are consumed during initialization, so changing this variable later does not rewrite an already initialized data volume. + +Example value: + +```text +ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAA... your-name +``` + +## HTTP Access + +The Dokploy domain routes to Soft Serve's HTTP listener: + +- HTTP public URL: `http://${main_domain}` +- HTTP Git clone example: `git clone http://${main_domain}/repo.git` + +Set `http_public_url` to `https://${main_domain}` before deploying if your Dokploy domain enforces TLS. + +Private HTTP access uses tokens created through the SSH admin interface. + +## SSH and Git Protocol Ports + +Soft Serve also listens inside the deployment on: + +- SSH/TUI: `23231` +- Stats: `23233` +- Git protocol: `9418` + +This template does not publish host TCP ports directly. Expose the SSH or Git protocol ports separately in Dokploy if you need direct terminal/TUI access, then use the configured `ssh_public_url` for clone commands. + +## Storage + +Repositories, configuration, keys, and the default SQLite database are stored in the persistent `soft-serve-data` volume mounted at `/soft-serve`. +""" + +[config.env] +SOFT_SERVE_NAME = "${server_name}" +SOFT_SERVE_INITIAL_ADMIN_KEYS = "${initial_admin_keys}" +SOFT_SERVE_HTTP_PUBLIC_URL = "${http_public_url}" +SOFT_SERVE_SSH_PUBLIC_URL = "${ssh_public_url}" +SOFT_SERVE_LOG_LEVEL = "${log_level}" diff --git a/meta.json b/meta.json index 8be7825d7..acec5a47b 100644 --- a/meta.json +++ b/meta.json @@ -5832,6 +5832,24 @@ "authentication" ] }, + { + "id": "soft-serve", + "name": "Soft Serve", + "version": "v0.11.6", + "description": "Soft Serve is a self-hosted Git server with an SSH TUI, HTTP Git access, Git LFS support, and simple repository management.", + "logo": "soft-serve.svg", + "links": { + "github": "https://github.com/charmbracelet/soft-serve", + "website": "https://charm.sh/", + "docs": "https://github.com/charmbracelet/soft-serve/blob/main/README.md" + }, + "tags": [ + "git", + "ssh", + "developer-tools", + "self-hosted" + ] + }, { "id": "soketi", "name": "Soketi", From feb3becfaa20dda94f8992dd47fc1c9579b8cf38 Mon Sep 17 00:00:00 2001 From: BinkyTwin Date: Wed, 20 May 2026 22:37:35 +0200 Subject: [PATCH 2/2] fix: quote Soft Serve listen addresses --- blueprints/soft-serve/docker-compose.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/blueprints/soft-serve/docker-compose.yml b/blueprints/soft-serve/docker-compose.yml index d29e80ac9..ac875d214 100644 --- a/blueprints/soft-serve/docker-compose.yml +++ b/blueprints/soft-serve/docker-compose.yml @@ -13,12 +13,12 @@ services: SOFT_SERVE_NAME: ${SOFT_SERVE_NAME} SOFT_SERVE_DATA_PATH: /soft-serve SOFT_SERVE_INITIAL_ADMIN_KEYS: ${SOFT_SERVE_INITIAL_ADMIN_KEYS} - SOFT_SERVE_SSH_LISTEN_ADDR: :23231 + SOFT_SERVE_SSH_LISTEN_ADDR: ":23231" SOFT_SERVE_SSH_PUBLIC_URL: ${SOFT_SERVE_SSH_PUBLIC_URL} - SOFT_SERVE_HTTP_LISTEN_ADDR: :23232 + SOFT_SERVE_HTTP_LISTEN_ADDR: ":23232" SOFT_SERVE_HTTP_PUBLIC_URL: ${SOFT_SERVE_HTTP_PUBLIC_URL} - SOFT_SERVE_GIT_LISTEN_ADDR: :9418 - SOFT_SERVE_STATS_LISTEN_ADDR: :23233 + SOFT_SERVE_GIT_LISTEN_ADDR: ":9418" + SOFT_SERVE_STATS_LISTEN_ADDR: ":23233" SOFT_SERVE_LOG_LEVEL: ${SOFT_SERVE_LOG_LEVEL} volumes: - soft-serve-data:/soft-serve