Skip to main content

How To Set Up a Private Git Server on a VPS

Introduction

This tutorial will show you how to set up a fully fledged Git server using SSH keys for authentication. It will not have a web interface, this will just cover getting Git installed and your access to it set up. We’ll use the host «git.droplet.com» in place of the domain you will use for your VPS.
This can be a great option if you want to keep your code private while you work. While open-souce tends to be the status quo, there are some times when you don’t want to have your code freely available. An example would be if you are developing a mobile app, especially a paid one. Keep in mind this code can be read by anyone if they know the URL address to use for a clone, but that is only if they know it.
There is one major concern for many and that is a web interface to your repositories. GitHub accomplishes this amazingly well. There are applications that you can install such as Gitosis,GitList, and Goblet. We don’t go over those in this tutorial, but if you rely heavily on a graphic interface then you may want to look over those and think about installing one of them as soon as you done installing your Git server.

 Create the SSH Key Pair

First, we need to generate a SSH key pair. If you are using Mac or Linux, you can simply issue the following command in a terminal, but replace the email address with your own:
ssh-keygen -C "youremail@mailprovider.com"
Generating public/private rsa key pair.
Enter file in which to save the key (/home/flynn/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again: 
Your identification has been saved in foo_rsa.
Your public key has been saved in foo_rsa.pub.
The key fingerprint is:
ab:cd:ef:01:23:45:67:89:0a:bc:de:f0:12:34:56:78 flynn@en.com
The key's randomart image is:
+--[ RSA 2048]----+
|    o+-+  ..     |
|  E o            |
|   . ++.o..      |
|    o o H .      |
|   . .   =       |
|    . =o.o=      |
| o .             |
|  .              |
|     = o  .      |
+-----------------+
I highly recommend putting a password on the key files, it is one more layer of security and has a very minimal impact. If you are using Windows based operating system, there are tools available to generate key pairs, such as PuTTY Gen, though it does come with a disclaimer that you need to check with your local laws before using it as some countries have banned it’s use. If that isn’t the case, you may log into your VPS, create the key pair, and download both id_rsa and id_rsa.pub for your use.
Next, the VPS will need a user specifically for Git. Most people will simply create a user called «Git», and that is what we’ll do for this tutorial but feel free to name this user whatever you’d like.

Setup a Git User and Install Git on your VPS

Log into your VPS, and gain root*:
su -
*Some people feel uncomfortable using root in this manner. If your VPS is set up to use sudo, then do so.
Add the Unix user (not necessarily Git user names) to handle the repositories:
useradd git
Then give your Git user a password:
passwd git
Now it’s as easy as:
  • CentOS/Fedora: yum install git
  • Ubuntu/Debian: apt-get install git

Add your SSH Key to the Access List

At this point, you’ll want to be logged in as the Git user. If you haven’t already logged in to that user, use this command to switch to it:
su git
Now you need to upload your id_rsa.pub file to your Git user’s home directory. Once you have done that, we need let the SSH daemon know what SSH keys to accept. This is done using the authorized keys file, and it resides in the dot folder «ssh». To create this, input:
mkdir ~/.ssh && touch ~/.ssh/authorized_keys
Note: Using the double ‘&’ in your command chains them, so it tells the system to execute the first command and then the second. Using the ’tilde’ at the beginning of the path will tell the system to use your home directory, so ‘~’ becomes /home/git/ to your VPS.
We are going to use the ‘cat’ command, which will take the contents of a file and return them to the command line. We then use the ‘>>’ modifier to do something with that output rather than just print it in your console. Be careful with this, as a single ‘>’ will overwrite all the contents of the second file you specify. A double ‘>’ will append it, so make sure you know what you want to do and in most cases it will be easier to just use «>>» so that you can always delete what you append rather than looking to restore what you mashed over.
Each line in this file is an entry for a key that you wish to have access to this account. To add the key that you just uploaded, type the following, replacing :
cat .ssh/id_rsa.pub | ssh user@123.45.56.78 "cat >> ~/.ssh/authorized_keys"
Now you can see the key there if you use cat on the authorized key file:
cat ~/.ssh/authorized_keys
If you want to add others to your access list, they simply need to give you their id_rsa.pub key and you append it to the authorized keys file.

Setup a Local Repository

This is a pretty simple process, you just call the Git command and initialize a bare repository in whichever directory you’d like. Let’s say I want to use «My Project» as the project title. When creating the folder, I’d use all lower case, replace any spaces with hyphens, and append «.git» to the name. So «My Project» becomes «my-project.git».
To create that folder as an empty Git repository:
git init --bare my-project.git
Thats it! You now have a Git repository set up on your VPS. Let’s move on to how to use it with your local computer.

Using your Git Server from your Local Computer

On Linux or Mac OS, you need to change the remote origin to your newly created server. If you already have a local repo that you want to push to the server, change the remote using this command:
git remote set-url origin git@git.droplet.com:my-project.git
If this is a new repository you are setting up, use this:
git init && git remote add origin git@git.droplet.com:my-project.git
Now you may add, push, pull, and even clone away knowing that your code is only accessible to yourself.
But what if you want a few trusted people to have access to this server and you want to keep things simple by sorting them by the names of your users? A simple and effective way to do that is to create a folder named after each person, so in the home folder for your Git user list, input:
mkdir user1 user2
Now when you specify the remote repository, it would look like this:
git remote add origin git@git.droplet.com:user1/user-project.git

Comments

  1. thanks for sharing,this is very helpful for set up of vps server in git.

    ReplyDelete

Post a Comment

Popular posts from this blog

Solaris. remove unusable scsi lun

Solaris remove unusable or failing scsi lun 1. The removed devices show up as drive not available in the output of the format command: # format Searching for disks...done ................      255. c1t50000974082CCD5Cd249 <drive not available>           /pci@3,700000/SUNW,qlc@0/fp@0,0/ssd@w50000974082ccd5c,f9 ................      529. c3t50000974082CCD58d249 <drive not available>           /pci@7,700000/SUNW,qlc@0/fp@0,0/ssd@w50000974082ccd58,f9 2. After the LUNs are unmapped Solaris displays the devices as either unusable or failing. # cfgadm -al -o show_SCSI_LUN | grep -i unusable # # cfgadm -al -o show_SCSI_LUN | grep -i failing c1::50000974082ccd5c,249       disk         connected    configured   failing c3::50000974082ccd58,249 ...

memory error detect XSCF uboot

If you see something like this when you poweron you server: memory error detect 80000008, address 000002d0 data 55555555 -> fbefaaaa capture_data hi fbefaaaa lo deadbeef ecc 1b1b capture_attributes 01113001 address 000002d0 memory error detect 80000008, address 000002d4 data aaaaaaaa -> deadbeef capture_data hi fbefaaaa lo deadbeef ecc 1b1b capture_attributes 01113001 address 000002d4 memXSCF uboot  01070000  (Feb  8 2008 - 11:12:19) XSCF uboot  01070000  (Feb  8 2008 - 11:12:19) SCF board boot factor = 7180     DDR Real size: 256 MB     DDR: 224 MB Than your XSCF card is broked. Replace it with new one. After that it will ask you for enter chassis number - located at front of the server XSCF promt to enter your chasses number ( is a S/N of your server ): Please input the chassis serial number : XXXXXXX 1:PANEL Please select the number : 1 Restoring data from PANEL to XSCF#0. Please wait for se...

SPARC OBP cheatsheet

Boot PROM Basics Boot PROM(programmable read only memory): It is a firmware (also known as the monitor program) provides: 1. basic hardware testing & initialization before booting. 2. contains a user interface that provide access to many important functions. 3. enables the system to boot from wide range of devices. It controls the system operation before the kernel becomes available. It provides a user interface and firmware utility commands known as FORTH command set. These commands include the boot commands, the diagnostic commands & the commands for modifying the default configuration. Command to determine the version of the Open Boot PROM on the system: # /usr/platform/'uname -m'/sbin/prtdiag -v (output omitted) System PROM revisions: ---------------------- OBP 4.16.4 2004/12/18 05:21 Sun Blade 1500 (Silver) OBDIAG 4.16.4.2004/12/18 05:21 # prtconf -v OBP 4.16.4 2004/12/18 05:21 Open Boot Architectures Standards: It is based on IEEE standard #1275, accord...