Docker image with cgit dark-mode and gitolite running on top of alpine base image
Jesus 0dab6b6f05 set upgrade iso steps | 2 years ago | |
---|---|---|
gitolite-cgit | 2 years ago | |
img | 3 years ago | |
.gitignore | 3 years ago | |
LICENSE | 3 years ago | |
README.md | 2 years ago | |
bootstrap.sh | 3 years ago | |
config.env.example | 3 years ago | |
docker-compose.yml | 3 years ago |
rusian/gitolite-cgit
is a Docker image with cgit
in dark-mode and gitolite
running on top of alpine
base image.
$ docker pull rusian/gitolite-cgit
$ docker run -e SSH_KEY="$(cat ~/.ssh/id_ed25519.pub)" -e SSH_KEY_NAME="$(whoami)" -p 22:22 -p 80:80 -p 9418:9418 -v repo:/var/lib/git/ rusian/gitolite-cgit
SSH_KEY
: Public key of gitolite adminSSH_KEY_NAME
: Name of gitolite adminCGIT_CLONE_PREFIX
: cgit clone prefix to display on each repository. For example: https://git.example.com
, the clone URL should be: ssh://git@example.com
CGIT_ROOT_TITLE
: Text printed as heading on the repository index page. Default value: "Git Repository Browser".CGIT_DESC
: Add description to cgitCGIT_SNAPSHOT
: Snapshot tarball./var/lib/git
: gitolite home folder, store all repositories like gitolite-admin
/etc/ssh/
: store all generated SSH server keyCgit webpage: http://<server_ip>/
Supported clone method:
SSH: authentication with gitolite configuration inside gitolite-admin
.
For more information, please refer to basic administration.
git clone ssh://git@<server_ip>/<repo_name>
HTTP: enable-http-clone=1
by default, which let cgit act as a dumb HTTP enpoint for git clones.
You can disable that by edit /etc/cgitrc. I may consider to add more feature, so you can set config
from docker run
or docker-compose.yml
. git push
is not supported via HTTP.
git clone http://<server_ip>/<repo_name>
GIT: git daemon
is enabled by default with upload-pack
service
(this serves git fetch-pack and git ls-remote clients), allowing anonymous
fetch, clone.
git clone git://<server_ip>/<repo_path>
$ docker pull rusian/gitolite-cgit
I create gitolite
admin with the host public key and username.
In case, you are running this on server, you need to enter
SSH_KEY and SSH_KEY_NAME into config.env
:
#
# Gitolite options
#
SSH_KEY=<your public key content>
SSH_KEY_NAME=<your gitolite name>
#
# Cgit options
#
CGIT_ROOT_TITLE=Git Repository Browser
CGIT_DESC=a fast webinterface for the git dscm
CGIT_CLONE_PREFIX=http://<YOUR-DOMAIN> ssh://git@<YOUR-DOMAIN>
CGIT_SNAPSHOT=tar.gz tar.bz2 tar.xz
For convience, I create a bootstrap.sh
script for user who use public
key and name from the host running Docker:
# change ssh_key, ssh_key_name to reflect your current setup
SSH_KEY=$(cat ~/.ssh/id_ed25519.pub)
SSH_KEY_NAME=$(whoami)
sed -i.bak \
-e "s#SSH_KEY=.*#SSH_KEY=${SSH_KEY}#g" \
-e "s#SSH_KEY_NAME=.*#SSH_KEY_NAME=${SSH_KEY_NAME}#g" \
"$(dirname "$0")/config.env"
Generate public key and private key:
sh bootstrap.sh
docker-compose.yml
:version: '3'
services:
app:
image: rusian/gitolite-cgit
container_name: gitolite-cgit
env_file: config.env
volumes:
- git:/etc/ssh
- git:/var/lib/git/
ports:
- 22:22
- 80:80
- 9418:9418
tty: true
volumes:
git:
Then power-on your container:
$ docker-compose up -d
As there are many cgit configuration, you can create cgitrc configure and map to /etc/cgitrc
# Copy cgitrc from existing container
docker cp gitolite-cgit:/etc/cgitrc .
Modify the docker-compose.yml
:
version: '3'
services:
app:
image: rusian/gitolite-cgit
container_name: gitolite-cgit
env_file: config.env
volumes:
- git:/etc/ssh
- git:/var/lib/git/
- ./cgitrc:/etc/cgitrc
ports:
- 22:22
- 80:80
- 9418:9418
tty: true
volumes:
git:
$ git clone https://c.hgit.ga/containers/gitolite-cgit-docker.git
$ cd gitolite-cgit-docker/gitolite-cgit
$ docker build --tag rusian/gitolite-cgit -f Dockerfile .
Example of gitolite-admin/conf/gitolite.conf
:
#-----------
# General
#-----------
@secret = gitolite-admin
@hiddenrepo = gitolite-admin
#-----------
# People
#-----------
@p-admin = paco
@p-team = minoru
#----------------------
# Repositories
#----------------------
repo @hiddenrepo
config cgit.ignore = 1
repo @secret
- = cgit daemon
option deny-rules = 1
repo @all
R = cgit daemon
repo gitolite-admin
RW+ = @p-admin
repo science/numeral
RW+ = @p-admin
- master develop = @p-team
- refs/tags/v[0-9] = @p-team
RW+ = @p-team
desc = "Repo paco files"
config gitweb.owner = paco
repo documents/operators
RW+ = @p-admin
- master develop = @p-team
- refs/tags/v[0-9] = @p-team
RW+ = @p-team
desc = "Repo minoru files"
config gitweb.owner = minoru
#------------------------
# Personal repositories
#------------------------
repo CREATOR/[a-zA-Z0-9].*
C = @p-admin @p-team
RW+ = CREATOR
RW+ = @p-admin
R = @all
config gitweb.owner = %GL_CREATOR