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!


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

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

Post a Comment

Popular posts from this blog

225019099301.apps.googleusercontent.com

Recent activity on my Gmail just revealed that there's this app "Authorized Application (225019099301.apps.googleusercontent.com)" from IP address 54.235.159.144 assessing my Gmail.

The IP address is from a Amazon server ec2-54-235-159-144.compute-1.amazonaws.com. (IP Lookup).

And blacklist check (http://whatismyipaddress.com/blacklist-check) shows that the IP is clean too.

Clicking on the "Manage Account Access" didn't give any information on the application "225019099301.apps.googleusercontent.com".


After Googling, it appears that the app is Mailbox (source: http://productforums.google.com/forum/#!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 https://rtcamp.com/tutorials/nodejs/node-js-npm-install-ubuntu/, or this http://stackoverflow.com/questions/16302436/install-nodejs-on-ubuntu-12-10#comment32247107_16303380

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 my_domain.com. You'll first need to generate the the .csr file for GoDaddy with the following command:

openssl req -new -newkey rsa:2048 -nodes -keyout my_domain.com.key -out my_domain.com.csr


This gives you 2 files:
my_domain.com.key - This is the private key
my_domain.com.csr - This is the Certificate Signing Request


Copy the content of my_domain.com.csr 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 my_domain.com.pfx -inkey my_domain.com.key -in 18f1c77f369c0b59.crt


Step 3: Certificate to Upload to Azure.


Step 4: Assign SSL Bindings.




Step 5: Done!


References:

http://azure.microsoft.com/en-us/documentation/articles/web-sites-configure-ssl-certificate…