Skip to content

Minimal git server running in a container (docker, podman...)

License

Notifications You must be signed in to change notification settings

mcarbonne/minimal-git-server

Repository files navigation

minimal-git-server

License Tag Stars

Originally inspired by https://github.com/jkarlosb/git-server-docker

This tool lets you run a minimal git server with a basic CLI to manage repositories, all in a container based on a single configuration file.

Features

  • support multiple accounts (config.yml)
  • basic CLI to manage repositories (list/create/rename/remove/...)
  • easy to use in scripts
  • tested on docker and podman

Versioning and packaging

This tool follows semantic versioning.

Pre-built images are available on github packages:

  • ghcr.io/mcarbonne/minimal-git-server:main (main branch)
  • ghcr.io/mcarbonne/minimal-git-server:dev (dev branch)
  • ghcr.io/mcarbonne/minimal-git-server:latest: latest tagged version
  • ghcr.io/mcarbonne/minimal-git-server:x.x.x
  • ghcr.io/mcarbonne/minimal-git-server:x.x
  • ghcr.io/mcarbonne/minimal-git-server:x

For automatic updates (watchtower, podman-auto-update...), using the lastest major tag available (ghcr.io/mcarbonne/minimal-git-server:2) is recommanded to avoid breaking changes.

Minimal configuration

This container requires 3 volumes in order to work:

  • /srv/ssh to persist generated server keys
  • /srv/git to store repositories
  • /srv/config.yml to set up accounts, allowed public keys...
docker run -v .../ssh:/srv/ssh -v .../git:/srv/git -v .../config.yml:/srv/config.yml:ro \
        --name minimal-git-server -d -p 20222:22 ghcr.io/mcarbonne/minimal-git-server:2

config.yml

external_hostname: localhost
external_port: 20222
accounts:
  - user: user_a
    uid: 12345
    keys:
      - "ssh-rsa XXXXXX user_a@gmail.com"
      - "ssh-rsa XXXXXX user_a@hotmail.com"
  - user: user_b
[...]

Basic Usage

To manage your repositories, simply log in: Basic Usage

How to script ?

You can easily embed any supported command in your scripts:

$ ssh ACCOUNT@HOSTNAME -p PORT create project1/my_repo

Have a look at test.sh for more examples.