# 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!