aboutsummaryrefslogtreecommitdiff
path: root/services/docker/git-server
diff options
context:
space:
mode:
Diffstat (limited to 'services/docker/git-server')
-rw-r--r--services/docker/git-server/Dockerfile11
-rw-r--r--services/docker/git-server/git-auth.conf3
-rw-r--r--services/docker/git-server/git-lighttpd.conf44
-rwxr-xr-xservices/docker/git-server/lighttpd-wrapper.bash8
4 files changed, 66 insertions, 0 deletions
diff --git a/services/docker/git-server/Dockerfile b/services/docker/git-server/Dockerfile
new file mode 100644
index 0000000..8a671d7
--- /dev/null
+++ b/services/docker/git-server/Dockerfile
@@ -0,0 +1,11 @@
+FROM debian:latest
+RUN apt-get update && apt-get install -y \
+ git cgit lighttpd apache2-utils python3-pygments python3-markdown \
+ tar gzip bzip2 zip unzip tini && \
+ rm -rf /var/lib/apt/lists/*
+
+ADD git-lighttpd.conf git-auth.conf /app/
+ADD --chmod=755 lighttpd-wrapper.bash /app/
+
+VOLUME [ "/git" ]
+CMD [ "tini", "--", "/app/lighttpd-wrapper.bash" ]
diff --git a/services/docker/git-server/git-auth.conf b/services/docker/git-server/git-auth.conf
new file mode 100644
index 0000000..1acb316
--- /dev/null
+++ b/services/docker/git-server/git-auth.conf
@@ -0,0 +1,3 @@
+auth.backend = "htpasswd"
+auth.backend.htpasswd.userfile = "/git/private/user-info"
+auth.require = ( "" => ("method" => "basic", "realm" => "Git Access", "require" => "valid-user") )
diff --git a/services/docker/git-server/git-lighttpd.conf b/services/docker/git-server/git-lighttpd.conf
new file mode 100644
index 0000000..ba8e592
--- /dev/null
+++ b/services/docker/git-server/git-lighttpd.conf
@@ -0,0 +1,44 @@
+server.modules += ("mod_accesslog")
+server.modules += ("mod_auth", "mod_authn_file", "mod_access")
+server.modules += ("mod_setenv", "mod_cgi", "mod_alias")
+
+server.document-root = "/var/www/html/"
+accesslog.filename = "/dev/fd/3"
+
+$HTTP["url"] =^ "/git" {
+ mimetype.assign = ( ".css" => "text/css" )
+
+ $HTTP["url"] =^ "/git/private" {
+ url.access-deny = ("")
+ }
+ else $HTTP["url"] =~ "^/git/.*/(HEAD|info/refs|objects/info/[^/]+|git-(upload|receive)-pack)$" {
+ $HTTP["querystring"] =~ "service=git-receive-pack" {
+ include "git-auth.conf"
+ }
+ $HTTP["url"] =~ "^/git/.*/git-receive-pack$" {
+ include "git-auth.conf"
+ }
+ alias.url += ( "/git" => "/usr/lib/git-core/git-http-backend" )
+ setenv.add-environment = (
+ "GIT_PROJECT_ROOT" => "/git",
+ "GIT_HTTP_EXPORT_ALL" => ""
+ )
+ cgi.assign = ("" => "")
+ }
+ else $HTTP["url"] =~ "^/git/.*/((objects/[0-9a-f]{2}/[0-9a-f]{38})|(pack/pack-[0-9a-f]{40}.(pack|idx)))$" {
+ alias.url += (
+ "/git" => "/git",
+ )
+ }
+ else $HTTP["url"] =^ "/git/static" {
+ alias.url += (
+ "/git/static" => "/usr/share/cgit",
+ )
+ }
+ else {
+ alias.url += (
+ "/git" => "/usr/lib/cgit/cgit.cgi",
+ )
+ cgi.assign = ("" => "")
+ }
+}
diff --git a/services/docker/git-server/lighttpd-wrapper.bash b/services/docker/git-server/lighttpd-wrapper.bash
new file mode 100755
index 0000000..06dc78f
--- /dev/null
+++ b/services/docker/git-server/lighttpd-wrapper.bash
@@ -0,0 +1,8 @@
+#!/usr/bin/bash
+
+set -e
+
+touch -a /git/private/user-info
+
+exec 3>&1
+exec lighttpd -D -f /app/git-lighttpd.conf