# A minimal Git server

This is a quick, no-nonsense guide on setting up a Git server on a VPS.
I am using Debian, but other operating systems should be easy to figure out.

## Create a user

Make a `git` user:

```
sudo adduser git
```

Switch to the `git` user:

```
sudo su -l git
```

## Configure secure access

Create a `.ssh` dir in the `git` user's home directory and make it only accessible by the `git` user:

```
mkdir ~/.ssh
chmod 700 ~/.ssh
```

Create an `authorized_keys` file in the `.ssh` folder, and make it accessible only by the `git` user:

```
touch .ssh/authorized_keys
chmod 600 `.ssh/authorized_keys`
```

Create a public/private key pair locally to authenticate a user on a machine to connect to the remote server:

```
ssh-keygen -t ed25519
```

And finally copy it into the (remote) `git` user's `.ssh/authorized_keys`, using `ssh-copy-id` or by giving the public key to the server administrator.

## Creating bare Git repositories

Create directories within git's home dir (nested paths are allowed) with the `.git` extension, for example `my-projects/my-repo.git` or just `my-repo.git`.

```
git init --bare repo.git
```

There now exists an empty Git repository on the remote server.

The remote can now be added to a local repository:

```
git remote add origin git@server:my-repo.git
git push -u origin main
```

# Connecting securely

Add an entry to your local `.ssh/config`:

```
Host myhost
    HostName        example.com
    User            git
    IdentityFile    ~/.ssh/id_ed25519
```

And connect once without Git to verify the host:

```
ssh myhost
```

---

Done!
