176 lines
5.2 KiB
Markdown
176 lines
5.2 KiB
Markdown
---
|
|
title: "Set Up A GitWeb Server"
|
|
blurb: "Set up a VPS with a simple, web-based code repository visualizer using
|
|
Lighttpd and GitWeb."
|
|
...
|
|
## Introduction
|
|
|
|
Git comes with a CGI script called GitWeb, a simple web-based visualizer.
|
|
Today we will set up a virtual server on DigitalOcean that will use GitWeb to
|
|
visualize a Git repository.
|
|
|
|
## 1. Create a DigitalOcean droplet
|
|
|
|
Create a new droplet from the DigitalOcean dashboard. For now, we go with the
|
|
smallest virtual server currently available. We also add an SSH key so we can
|
|
authenticate without a password.
|
|
|
|

|
|
|
|
## 2. Log in to the droplet remotely
|
|
|
|
After the droplet is created, we can see its IP address on the dashboard. We
|
|
use this IP address to log in to our virtual server:
|
|
|
|
$ ssh root@XX.XX.XXX.XXX
|
|
|
|
## 3. Silence locale warnings
|
|
|
|
After successfully logging in, one of the messages we are greeted with is a
|
|
warning about the locale.
|
|
|
|
-bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)
|
|
|
|
We can make this annoying message go away by creating a locale file manually:
|
|
|
|
# localedef -i en_US -f UTF-8 en_US.UTF-8
|
|
|
|
## 4. Add a user account to administer the Git repositories
|
|
|
|
Next, we create a user account that will administer the git repositories, so we
|
|
don't always have to do it as `root`.
|
|
|
|
# adduser git --disabled-password
|
|
|
|
We have to add our SSH key to the `git` user's `authorized_keys` file.
|
|
|
|
# su git
|
|
$ cd
|
|
$ mkdir .ssh && chmod 700 .ssh
|
|
$ touch .ssh/authorized_keys && chmod 600 .ssh/authorized_keys
|
|
$ exit
|
|
# cat ~/.ssh/authorized_keys >> /home/git/.ssh/authorized_keys
|
|
|
|
## 5. Install necessary packages
|
|
|
|
Lighttpd is the default web server that GitWeb tries to use if available. For
|
|
simplicity, that's what we'll use.
|
|
|
|
# apt-get update
|
|
# apt-get install git lighttpd gitweb
|
|
|
|
## 6. Configure Lighttpd
|
|
|
|
We will need to make some changes to Lighttpd's config file.
|
|
|
|
# nano /etc/lighttpd/lighttpd.conf
|
|
|
|
1. Update the value for `server.document-root`:
|
|
|
|
`server.document-root = "/usr/share/gitweb"`
|
|
|
|
2. Add `index.cgi` to `index-file.names`:
|
|
|
|
`index-file.names = ( "index.php", "index.html", "index.cgi" )`
|
|
|
|
## 7. Enable Lighttpd modules
|
|
|
|
Since GitWeb uses CGI, we will have to enable Lighttpd's CGI module. We will
|
|
also need the setenv module. First we need to configure them.
|
|
|
|
# nano /etc/lighttpd/conf-available/05-setenv.conf
|
|
|
|
Add the following line:
|
|
|
|
::: filename-for-code-block
|
|
`/etc/lighttpd/conf-available/05-setenv.conf`
|
|
:::
|
|
|
|
...
|
|
setenv.add-environment = ( "PATH" => env.PATH, "GITWEB_CONFIG" => env.GITWEB_CONFIG )
|
|
|
|
Next, edit the CGI module config file.
|
|
|
|
# nano /etc/lighttpd/conf-available/10-cgi.conf
|
|
|
|
Add:
|
|
|
|
::: filename-for-code-block
|
|
`/etc/lighttpd/conf-available/10-cgi.conf`
|
|
:::
|
|
|
|
...
|
|
cgi.assign = (
|
|
".cgi" => ""
|
|
)
|
|
|
|
Once that's done, enable `mod_cgi` and `mod_setenv` with:
|
|
|
|
# lighty-enable-mod cgi setenv
|
|
# service lighttpd force-reload
|
|
|
|
## 8. Edit the Lighttpd service init files
|
|
|
|
We need to edit the Lighttpd service startup files to define the
|
|
`GITWEB_CONFIG` environment variable that we used in the previous step.
|
|
|
|
# systemctl edit lighttpd.service
|
|
|
|
This will start up an editor and create an `override.conf` file. Add the
|
|
following two lines:
|
|
|
|
::: filename-for-code-block
|
|
`/etc/systemd/system/lighttpd.service.d/override.conf`
|
|
:::
|
|
|
|
[Service]
|
|
Environment="GITWEB_CONFIG=./gitweb_config.perl"
|
|
|
|
Then, save the file and exit the editor. To finish, we need to run these two
|
|
commands:
|
|
|
|
# systemctl daemon-reload
|
|
# service lighttpd restart
|
|
|
|
## 9. Upload a Git repository
|
|
|
|
We are now ready to upload a Git respository we wish to visualize with our
|
|
server. First, lets transfer ownership of the respository directory to our user
|
|
`git` we created earlier.
|
|
|
|
# chown git /var/lib/git/
|
|
# chgrp git /var/lib/git/
|
|
|
|
Now we can log out of the server with `exit`. On our local machine, we clone a
|
|
`bare` copy of the repo we want to upload.
|
|
|
|
$ git clone --bare my_project my_project.git
|
|
|
|
Now we can upload this bare repo to our server.
|
|
|
|
$ scp -r my_project.git git@XX.XX.XXX.XXX:/var/lib/git
|
|
|
|
We can tell Git to automatically add group write permissions to our repo with:
|
|
|
|
$ ssh git@XX.XX.XXX.XXX
|
|
$ cd /var/lib/git/my_project.git
|
|
$ git init --bare --shared
|
|
|
|
## 10. Visit the GitWeb server
|
|
|
|
When we visit the server's IP address with our browser, `http://XX.XX.XXX.XXX`,
|
|
we should see a GitWeb `projects` page. We can now explore our project's code
|
|
with our web browser.
|
|
|
|

|
|
|
|
## Resources
|
|
|
|
Here is a list of the resources that were used to figure out how to accomplish
|
|
the task in this post.
|
|
|
|
- [Git Documentation Book - Chapter 4: Git on the Server](https://git-scm.com/book/en/v2/Git-on-the-Server-The-Protocols)
|
|
- [Lighttpd Configuration Tutorial](https://redmine.lighttpd.net/projects/lighttpd/wiki/TutorialConfiguration)
|
|
- [LinuxQuestions.org - Perl CGI:Can't locate CGI.pm](https://www.linuxquestions.org/questions/programming-9/perl-cgi-can%27t-locate-cgi-pm-330706/)
|
|
- [Nicketa's GitHub Gist - LC_CTYPE.md](https://gist.github.com/nicks9188/a19f39d62780055a68c22b89a9799c25)
|