docker.recipes

Soft Serve Git Server

beginner

Minimalist Git server with TUI interface and SSH access.

Overview

Soft Serve is a self-hosted Git server created by Charm that brings a minimalist approach to code hosting with an elegant terminal user interface. Built in Go, it eliminates the complexity of traditional Git servers like GitLab or Gitea by focusing on core Git functionality while providing both SSH and web interfaces. The server supports repository management through an intuitive TUI accessible via SSH, making it perfect for developers who prefer command-line workflows. This Docker deployment configures Soft Serve with proper port mappings for SSH access (23231), Git protocol (9418), and web interface (23232), along with persistent storage for repository data. The stack is particularly valuable for teams wanting lightweight Git hosting without the overhead of feature-heavy platforms, offering a clean alternative that emphasizes simplicity and terminal-first interaction. Organizations seeking private Git hosting with minimal resource requirements will find Soft Serve ideal, as it provides essential version control capabilities while maintaining the aesthetic and functional philosophy of terminal-based development tools.

Key Features

  • Terminal-based repository browser accessible via SSH with intuitive keyboard navigation
  • Automatic repository creation and management through the built-in TUI interface
  • Multi-protocol Git access supporting both SSH and Git protocol connections
  • Web interface for repository browsing without requiring terminal access
  • SSH key-based authentication with configurable admin access controls
  • Zero-configuration repository hosting with automatic Git hooks setup
  • Built-in syntax highlighting and file viewing in the terminal interface
  • Repository statistics and commit history visualization in the TUI

Common Use Cases

  • 1Private Git hosting for small development teams wanting lightweight infrastructure
  • 2Homelab Git server for personal projects and experimentation without enterprise overhead
  • 3Educational environments teaching Git workflows with visual terminal interfaces
  • 4Backup Git remote for existing repositories hosted on external platforms
  • 5Corporate internal Git hosting for proprietary code requiring air-gapped solutions
  • 6Development teams preferring terminal-first workflows over web-based Git interfaces
  • 7Rapid prototyping environments needing quick Git repository provisioning

Prerequisites

  • SSH public key for initial admin access (set in SOFT_SERVE_INITIAL_ADMIN_KEYS environment variable)
  • Docker and Docker Compose installed with at least 512MB available memory
  • Network access to ports 23231 (SSH), 9418 (Git), and 23232 (Web) for client connections
  • Basic familiarity with SSH key generation and terminal-based Git operations
  • Understanding of Git protocol differences between SSH and HTTPS workflows

For development & testing. Review security settings, change default credentials, and test thoroughly before production use. See Terms

docker-compose.yml

docker-compose.yml
1services:
2 soft-serve:
3 image: charmcli/soft-serve:latest
4 ports:
5 - "23231:23231"
6 - "9418:9418"
7 - "23232:23232"
8 volumes:
9 - soft_serve_data:/soft-serve
10 environment:
11 - SOFT_SERVE_INITIAL_ADMIN_KEYS=${SSH_PUBLIC_KEY}
12
13volumes:
14 soft_serve_data:

.env Template

.env
1# Soft Serve
2SSH_PUBLIC_KEY=ssh-ed25519 AAAA... your@email.com
3
4# SSH at ssh://localhost:23231
5# Git protocol at git://localhost:9418
6# Web at http://localhost:23232

Usage Notes

  1. 1SSH interface at port 23231
  2. 2Git protocol at port 9418
  3. 3Web interface at port 23232
  4. 4TUI navigation via SSH
  5. 5Add your SSH public key for admin

Quick Start

terminal
1# 1. Create the compose file
2cat > docker-compose.yml << 'EOF'
3services:
4 soft-serve:
5 image: charmcli/soft-serve:latest
6 ports:
7 - "23231:23231"
8 - "9418:9418"
9 - "23232:23232"
10 volumes:
11 - soft_serve_data:/soft-serve
12 environment:
13 - SOFT_SERVE_INITIAL_ADMIN_KEYS=${SSH_PUBLIC_KEY}
14
15volumes:
16 soft_serve_data:
17EOF
18
19# 2. Create the .env file
20cat > .env << 'EOF'
21# Soft Serve
22SSH_PUBLIC_KEY=ssh-ed25519 AAAA... your@email.com
23
24# SSH at ssh://localhost:23231
25# Git protocol at git://localhost:9418
26# Web at http://localhost:23232
27EOF
28
29# 3. Start the services
30docker compose up -d
31
32# 4. View logs
33docker compose logs -f

One-Liner

Run this command to download and set up the recipe in one step:

terminal
1curl -fsSL https://docker.recipes/api/recipes/soft-serve-git/run | bash

Troubleshooting

  • SSH connection refused on port 23231: Ensure the SSH_PUBLIC_KEY environment variable is set with a valid public key and the container has fully started
  • Permission denied when accessing repositories: Verify your SSH key matches the admin key configured in SOFT_SERVE_INITIAL_ADMIN_KEYS and check key format
  • TUI interface not displaying correctly: Update your terminal client and ensure UTF-8 encoding is enabled for proper character rendering
  • Git clone fails with protocol error: Use the correct URL format - ssh://git@hostname:23231/repo-name for SSH or git://hostname:9418/repo-name for Git protocol
  • Web interface shows 404 errors: Confirm port 23232 is accessible and not blocked by firewall rules, then restart the container if issues persist
  • Repository data lost after container restart: Check that the soft_serve_data volume is properly mounted and has correct permissions for the container user

Community Notes

Loading...
Loading notes...

Download Recipe Kit

Get all files in a ready-to-deploy package

Includes docker-compose.yml, .env template, README, and license

Ad Space