Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 27 additions & 0 deletions blueprints/soft-serve/docker-compose.yml
Original file line number Diff line number Diff line change
@@ -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:
10 changes: 10 additions & 0 deletions blueprints/soft-serve/soft-serve.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
62 changes: 62 additions & 0 deletions blueprints/soft-serve/template.toml
Original file line number Diff line number Diff line change
@@ -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}"
18 changes: 18 additions & 0 deletions meta.json
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down
Loading