Skip to main content

Setting up Repo on Amazon EC2 for Git Push

Was trying to setup an instance on Amazon which I can do a git push to update the /var/www/html folder. Decided to share the steps here, so that other beginners like me can benefit too!


Setting up Amazone Instance 

This article basically covers all the steps need to fire-up an instance and set the Security Group and SSH.

Install LAMP + phpMyAdmin

Install LAMP stack is easy, but install phpMyAdmin is slightly tricky. Luckily this github gist explained the steps very well.

The only missing part that you might want to take note is the part to change the user of the html directory.
sudo chown -R ec2-user /var/www/html/

Setting up Git

Setting Up Git Repo to work with /var/www/html folder

At first I tried this solution from stackoverflow post. The method is:
  1. Copying .git folder to /var/www/html/ folder.
  2. Then use a post-update script to update the git repo.
The idea looks logical, and easy to understand, but I just couldn't get it to work.

Then I found this article, by Abhijit Menon-Sen, that magically reduces the steps to just 1 git command. So basically what you need to do is just 3 steps

On your EC2 server

1. Create a bare repository.
$ mkdir <your-repo-name>.git
$ cd <your-repo-name>.git
$ git init --bare
Initialized empty Git repository in /home/ec2-user/<your-repo-name>.git/

$ mkdir /var/www/html
$ cat > hooks/post-receive
GIT_WORK_TREE=/var/www/html git checkout -f
$ chmod +x hooks/post-receive

On your local computer.

3. Setup SSH (this is missing from the guide). If not, you might get git push fail in the next step.
ssh-add /<path-to-your-ec2-ssh-key>.pem 

4. Add Git remote and push for the first time.
$ git remote add production ssh://<your-amazon-server-address>/home/ec2-user/<your-repo-name>.git
$ git push production +master:refs/heads/master
Tips: You can setup for different environment, e.g. "testing", "beta", the same way. Just change the remote name, and push! :)

5. Subsequently, for every changes, you just need:
$ git push origin  // update your github-repo
$ git push production


It took me the whole night just to get this done. Hope this can save your time.



  1. Douglas Silvio CorreaNovember 9, 2012 at 7:20 AM


    I'm trying to use your guide, but I'm having the following problem:

    Permission denied (publickey).

    fatal: Could not read from remote repository.

    Please make sure you have the correct access rights

    and the repository exists.

    Do you have any Idea?

  2. Douglas Silvio CorreaNovember 9, 2012 at 7:20 AM

    it worked! I put in url = ssh://@/path/to/.git and it works, you can update with your guide! Thank you!

  3. Douglas Silvio CorreaNovember 9, 2012 at 7:20 AM

    No...I'm still having permission problem to perfom checkout I tried using sudo but it now working

  4. I setup a server on EC2 few days back. While I was connected to my server via Bitvise SSH my internet connection suddenly tripped yesterday. Now I am unable to login to my server. I get error no private key found. Though my website is up and running fine. Please guide me as how to connect to my server again.


Post a Comment

Popular posts from this blog

Recent activity on my Gmail just revealed that there's this app "Authorized Application (" from IP address assessing my Gmail.

The IP address is from a Amazon server (IP Lookup).

And blacklist check ( shows that the IP is clean too.

Clicking on the "Manage Account Access" didn't give any information on the application "".

After Googling, it appears that the app is Mailbox (source:!topic/gmail/9LVW_etXyTE)

To make things easy, Google should show the applications with their ID.

Backup MySQL to Azure Storage in 30 Seconds

Step 1. Disable password prompt for "mysqldump command"mysqldump: Got error: 1045: Access denied for user 'root'@'localhost' (using password: NO) when trying to connect 1. Run "vi ~/.my.cnf"
2. Add the following lines

[mysqldump]user=mysqluser password=secret
3. For Bitnami, you'll need to append the following line in "/opt/bitnami/mysql/my.cnf"

!include ~/.my.cnf
4. Try running to see if the command works.
mysqldump --all-databases > /home/bitnami/backups/db-backup.sql

Step 2(a). Install Azure-CLI Prerequisites: Installing npm.sudo apt-get update sudo apt-get install nodejs sudo apt-get install npm Note: If you facing issue while installing nodejs/npm on Ubuntu 12.04, you can refer to his article for alternative way to install, or this

Install Azure CLI.npm install azure-cl…

Generate GoDaddy SSL Certificate (.crt) for Azure Websites (.pfx)

Step 1: Getting GoDaddy SSL cert.
Let's say you have a domain name of You'll first need to generate the the .csr file for GoDaddy with the following command:

openssl req -new -newkey rsa:2048 -nodes -keyout -out

This gives you 2 files: - This is the private key - This is the Certificate Signing Request

Copy the content of file to the SSL signing authority (GoDaddy).

Once approved, GoDaddy give you back a .zip file with the following 2 files:

18f1c77f369c0b59.crt - This is your cert
gd_bundle-g2-g1.crt - This is the GoDaddy Certificate Chain

Step 2: Convert a CERT/PEM certificate to a PFX certificate
openssl pkcs12 -export -out -inkey -in 18f1c77f369c0b59.crt

Step 3: Certificate to Upload to Azure.

Step 4: Assign SSL Bindings.

Step 5: Done!