aboutsummaryrefslogtreecommitdiffstats
path: root/README.md
diff options
context:
space:
mode:
Diffstat (limited to 'README.md')
-rw-r--r--README.md156
1 files changed, 156 insertions, 0 deletions
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..5e640ef
--- /dev/null
+++ b/README.md
@@ -0,0 +1,156 @@
+# gitolite-cgit based on alpine image
+
+## What is this image?
+
+[`rusian/gitolite-cgit`](https://hub.docker.com/repository/docker/rusian/gitolite-cgit) is a Docker image with `cgit` in dark-mode and `gitolite` running on top of `alpine` base image.
+
+![cgit](img/cgit.png)
+
+## Usage
+
+1. Pull the image
+
+```console
+$ docker pull rusian/gitolite-cgit
+```
+
+2. Run the image with provided environment:
+
+```console
+$ docker run -e SSH_KEY="$(cat ~/.ssh/id_rsa.pub)" -e SSH_KEY_NAME="$(whoami)" -p 22:22 -p 80:80 -p 9418:9418 -v repo:/var/lib/git/ rusian/gitolite-cgit
+```
+
+### Environment
+
+- `SSH_KEY`: Public key of gitolite admin
+- `SSH_KEY_NAME`: Name of gitolite admin
+- `CGIT_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".
+### Exposed ports
+
+- Port 22: for SSH clone
+- Port 80: for cgit webpage running on Nginx
+- Port 9418: for git daemon protocol
+
+### Volume
+
+- `/var/lib/git`: gitolite home folder, store all repositories, `gitolite-admin` repo, ...
+- `/etc/ssh/`: store all generated SSH server key
+
+### How to interact with git server
+
+Cgit webpage: `http://<server_ip>/`
+
+Supported clone method:
+- SSH: authentication with gitolite configuration inside `gitolite-admin`. For more information, pls refer to [basic administration](https://gitolite.com/gitolite/basic-admin.html). Syntax: `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 at this moment. Syntax: `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. Syntax: `git clone git://<server_ip>/<repo_path>`
+
+## Docker-compose
+
+1. Pull the image:
+
+```console
+$ docker pull rusian/gitolite-cgit
+```
+
+2. Create environment file
+
+In this repo, 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_CLONE_PREFIX=<cgit clone prefix like: ssh://git@foo.org git://foo.org >
+CGIT_ROOT_TITLE=Git Repository Browser
+```
+
+For convience, I create a script for user who use the public key and name from the host running Docker:
+
+```bash
+# change ssh_key, ssh_key_name to reflect your current setup
+SSH_KEY=$(cat ~/.ssh/id_rsa.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"
+```
+
+3. Create `docker-compose.yml`:
+
+```yml
+version: '3'
+
+services:
+ app:
+ image: rusian/gitolite-cgit
+ container_name: gitolite-cgit
+ env_file: config.env
+ volumes:
+ - git:/var/lib/git/
+ ports:
+ - 22:22
+ - 80:80
+ - 9418:9418
+ tty: true
+volumes:
+ git:
+```
+Then power-on your container:
+
+```console
+$ docker-compose up -d
+```
+
+### Customize cgit configuration
+
+As there are many cgit configuration, you can create cgitrc configure and map to `/etc/cgitrc`
+
+```bash
+# Copy cgitrc from existing container
+docker cp gitolite-cgit:/etc/cgitrc .
+```
+
+Modify the `docker-compose.yml`:
+
+```yml
+version: '3'
+
+services:
+ app:
+ image: rusian/gitolite-cgit
+ container_name: gitolite-cgit
+ env_file: config.env
+ volumes:
+ - git:/var/lib/git/
+ - ./cgitrc:/etc/cgitrc
+ ports:
+ - 22:22
+ - 80:80
+ - 9418:9418
+ tty: true
+volumes:
+ git:
+```
+
+## Build docker image
+
+```console
+$ git clone https://git.sr.ht/~heckyel/docker-gitolite-cgit
+```
+
+```console
+$ cd docker-gitolite-cgit
+```
+
+```console
+$ docker build --tag rusian/gitolite-cgit -f Dockerfile .
+```