Monday, May 28, 2012

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!


Prerequisites

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/

2. Use GIT_WORK_TREE
$ mkdir /var/www/html
$ cat > hooks/post-receive
#!/bin/sh
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

Done!

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




References:

http://stackoverflow.com/questions/279169/deploy-a-project-using-git-push
http://stackoverflow.com/questions/4632749/how-to-push-to-git-on-ec2

4 comments:

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

    Hi,

    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?

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

    ReplyDelete
  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

    ReplyDelete
  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 www.indiangoldrates.com is up and running fine. Please guide me as how to connect to my server again.

    ReplyDelete