git-server-docker-stagit

git-server-with-stagit
git clone git://git.andersuno.nu/git-server-docker-stagit.git
Log | Files | Refs | README

commit dd2b5933c1cecc03e0a4c141b19daad540e4f637
parent bea544918100fd8ec9c70ecc1ff2b55689eee320
Author: anders <anders@noreply.gitea.andersuno.nu>
Date:   Sat, 22 Oct 2022 21:10:18 +0200

readme (#1)

The new and improved README

Co-authored-by: Anders <anders@desk.andersuno.nu>

Diffstat:
MREADME.md | 85++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------------
1 file changed, 56 insertions(+), 29 deletions(-)

diff --git a/README.md b/README.md @@ -5,8 +5,7 @@ - [git-server-docker-stagit](#git-server-docker-stagit) - [Description](#description) - - [Main repo](#main-repo) - - [Gitlab mirror](#gitlab-mirror) + - [Mirrors](#mirrors) - [Credits](#credits) - [Prerequisites](#prerequisites) - [Necessary customization](#necessary-customization) @@ -16,11 +15,12 @@ - [Usage](#usage) - [Run the container](#run-the-container) - [Check that container works with your SSH key](#check-that-container-works-with-your-ssh-key) + - [Adding persistence to repo and html storage](#adding-persistence-to-repo-and-html-storage) - [Create a new repo](#create-a-new-repo) - [Clone your new empty repo and start working in it](#clone-your-new-empty-repo-and-start-working-in-it) - [Upload existing repo into the new empty repo](#upload-existing-repo-into-the-new-empty-repo) - - [Adding persistence to repo and html storage](#adding-persistence-to-repo-and-html-storage) - [Adding web frontend](#adding-web-frontend) + - [Adding git daemon](#adding-git-daemon) - [K8S TODO](#k8s-todo) <!-- markdown-toc end --> @@ -29,15 +29,13 @@ A lightweight Git Server Docker image built with stagit running Alpine Linux. Stagit produces static html with every push to a repo. -A web server container can then be configured to mount that same storage and serve the html. -Anonymous read-only cloning is enabled via the git daemon on port 9418. +A web server container can be added to serve that html. +A git daemon container can be added to enable anonymous read-only cloning. -### Main repo +## Mirrors [https://git.andersuno.nu/git-server-docker-stagit/log.html](https://git.andersuno.nu/git-server-docker-stagit/log.html "git.andersuno.nu") -### Gitlab mirror - [https://gitlab.com/andersuno/git-server-docker-stagit](https://gitlab.com/andersuno/git-server-docker-stagit "gitlab.com") ## Credits @@ -54,19 +52,26 @@ Forked from jkarlosb [GitHub](https://github.com/jkarlosb/git-server-docker) and ### Optional customization +* Url line can be deleted entirely if daemon container is not used +* Both url and owner lines can be deleted entirely if web server container is not used + * Line 3 + 9 ./git-shell-commands/new-repo can also be deleted if web server container is not used * Modify contents of ./resources * Modify ./sshd_config (Allowing password or root authentication **not** recommended) -* Turn off anonymous read-only cloning ### SSH keys * Your SSH public key(s) need to be mounted in the container at /git-server/keys/ * Create folder ./keys and copy your id_ed25519.pub or other public key(s) into it +``` sh +mkdir ./keys +cp $HOME/.ssh/id_ed25519.pub ./keys/ +``` + ### Building your image ``` sh -docker build -t <registry>/<image-name>:<tag> . +docker build -t localhost/git-server:test ./server_context ``` ## Usage @@ -76,13 +81,15 @@ docker build -t <registry>/<image-name>:<tag> . Binding to localhost:2222 with keys volume mounted for SSH access. ``` sh -$ docker run -d -p 2222:22 -v ./keys:/git-server/keys <registry>/<image-name>:<tag> +docker run -d -p 2222:22 -v ./keys:/git-server/keys localhost/git-server:test ``` ### Check that container works with your SSH key ``` sh -$ ssh git@<ip-docker-server> -p 2222 +ssh git@localhost -p 2222 +``` +``` ... Welcome to git-server-docker! You've successfully authenticated, but I do not @@ -90,47 +97,67 @@ provide interactive shell access. ... ``` +### Adding persistence to repo and html storage + +For persistence two more volumes need to be mounted. + +``` sh +mkdir ./{repos,public-html} +docker run -d -p 2222:22 -v ./keys:/git-server/keys \ +-v ./repos:/git-server/repos -v ./public-html:/git-server/public-html \ +localhost/git-server:test +``` + ### Create a new repo ``` sh -$ ssh git@<ip-docker-server> -p 2222 new-repo <repo-name> <repo-description> +ssh git@localhost -p 2222 new-repo testname testdescription ``` ### Clone your new empty repo and start working in it ``` sh -$ git clone ssh://git@<ip-docker-server>:2222/git-server/repos/<repo-name>.git +git clone ssh://git@localhost:2222/git-server/repos/testname.git ``` ### Upload existing repo into the new empty repo ``` sh -$ git remote add <remote-name> ssh://git@<ip-docker-server>:2222/git-server/repos/<repo-name>.git -$ git push <remote-name> <branch name> +git remote add origin ssh://git@localhost:2222/git-server/repos/testname.git +git push origin master ``` -* Remote name: often **origin** -* Branch name: often **master** or **main** +### Adding web frontend -### Adding persistence to repo and html storage +To serve the stagit generated html, start another container that mounts the +same public-html volume as the git-server, into the correct path. +Here I am using nginx from dockerhub binding to localhost:8080. -For persistence two more volumes need to be mounted. +``` sh +docker run -d -p 8080:80 -v ./public-html:/usr/share/nginx/html nginx:stable-alpine +``` + +### Adding git daemon + +To enable anonymous read-only cloning, build the image from +daemon_context and mount your repos folder when you run the container. +The git protocol uses port 9418. ``` sh -$ mkdir ./{repos,public-html} -$ docker run -d -p 2222:22 -v ./keys:/git-server/keys \ --v ./repos:/git-server/repos -v ./public-html:/git-server/public-html \ -<registry>/<image-name>:<tag> +docker build -t localhost/git-daemon:test ./daemon_context ``` -### Adding web frontend +``` sh +docker run -d -p 9418:9418 -v ./repos:/git-server/repos localhost/git-daemon:test +``` -To serve the stagit generated html, start another container that mounts the -same public-html volume as the git-server, into the correct path. -Here I am using nginx from dockerhub binding to localhost:8080. +Clone your previously created testrepo. The git daemon is configured to use +/git-server/repos as its root, so that part can be left out here. +Note that this is anonymous, unauthenticated and read only so you cannot push to +the repo, only pull. And so can anyone with your url. ``` sh -$ docker run -d -p 8080:80 -v ./public-html:/usr/share/nginx/html nginx:stable-alpine +git clone git://localhost/testname.git ``` ## K8S TODO