From be0a9dfcbd5ea62eca32f3cebb104ae39855a4f2 Mon Sep 17 00:00:00 2001 From: joshua Date: Fri, 29 Dec 2023 23:18:01 -0500 Subject: updated wiki on how to make server --- docs/server/cgit.md | 141 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 141 insertions(+) create mode 100644 docs/server/cgit.md (limited to 'docs/server/cgit.md') diff --git a/docs/server/cgit.md b/docs/server/cgit.md new file mode 100644 index 0000000..72db5ed --- /dev/null +++ b/docs/server/cgit.md @@ -0,0 +1,141 @@ +# Cgit with gitolite and caddy + +## Setup + +Install dependencies. + + # apt install cgit python-is-python3 python3-pygments python3-markdown docutils-common groff perl + +Make a git user. + + sudo adduser --system --shell /bin/bash --group --disabled-password --home /home/git git + +Allow ssh passwordless login. + + usermod -p '*' username + +## Gitolite + +Install the [gitolite](https://gitolite.com/gitolite/install.html) package from the repository directly. + +### Configuration with cgit + +Configuration of gitolite is done by modifying `$HOME/.gitolite.rc`. + +To work correctly with cgit, gitweb and cgit configuration options need to work with gitolite. + +Change: + + GIT_CONFIG_KEYS => '', + +To: + + GIT_CONFIG_KEYS => '.*', + +To have permissions work correctly, + +Change: + + UMASK => 0077, + +To: + + UMASK => 0027, + +In the `ENABLE` field, add gitweb and cgit to the list. + +### Usage + +Detailed usage of gitolite can be found [here](https://gitolite.com/gitolite/basic-admin.html) + +### Repository ignore + +After cgit is configured, cgit can be told to ignore a repo with this syntax. + + repo gitolite-admin + config cgit.ignore=1 + +### Adding Hooks to gitolite + +This [page](https://gitolite.com/gitolite/cookbook#adding-other-non-update-hooks) details how to add hooks to your repositories. + +Example hook that updates a website every git push. Make sure this directory is owned by git. + + #!/bin/sh + GIT_WORK_TREE=/desired/website/directory git checkout -f + + +## Cgit + +### Running cgit with caddy + +Install the [fcgiwrap](https://packages.debian.org/bookworm/fcgiwrap) package. + +Create a systemd service that wraps cgit with FastCGI. + + # systemctl edit --full --force cgit.service + + + + [Unit] + Description=CGI web interface to the Git SCM + After=network.target + + [Service] + Type=exec + ExecStart=fcgiwrap -f -p "/usr/lib/cgit/cgit.cgi" -s tcp:127.0.0.1:8999 + + [Install] + WantedBy=multi-user.target + + + + # systemctl start cgit + +Add cgit configuration to caddy. + + git.joshuayun.com { + handle_path /cgit-css/* { + root * /usr/share/cgit/ + file_server + } + + handle { + reverse_proxy localhost:8999 { + transport fastcgi { + env DOCUMENT_ROOT /usr/lib/cgit/ + env SCRIPT_FILENAME /usr/lib/cgit/cgit.cgi + } + } + } + } + + +## Cgit configuration + +More detailed documentation can be found on the cgitrc(5) [manual](https://linux.die.net/man/5/cgitrc). + +enable-git-config is used to allow for gitweb.* configurations in gitolite, e.g. description, owner. + + + enable-git-config=1 + +project-list sets where cgit looks for projects, this list is the one updated by gitolite + + project-list=/home/git/projects.list + +scan-path sets where the actual git repositories live + + scan-path=/home/git/repositories + +## References + +[SixFoisNeuf](https://www.sixfoisneuf.fr/posts/setting-up-cgit-with-caddy2/) Used this blog to run cgit using fcgiwrap rather than a caddy plugin. The entire cgit with caddy section was using his work. + +[Mateja Maric](https://matejamaric.com/blog/git-server/) Used this blog to help configure cgitrc, gitolite.rc + +[Luke Hsiao](https://luke.hsiao.dev/blog/cgit-caddy-gitolite/) Used the git user creation command from this blog. + +[Omar Polo (yumh)](https://www.omarpolo.com/post/cgit-gitolite.html) Used this blog to help configure cgitrc for hidden repos. + +[Bryan Brattlof](https://bryanbrattlof.com/cgit-nginx-gitolite-a-personal-git-server/) Not much used here, kept as reference. -- cgit v1.2.3