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:
- Copying .git folder to /var/www/html/ folder.
- 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
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.
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>.gitTips: You can setup for different environment, e.g. "testing", "beta", the same way. Just change the remote name, and push! :)
$ git push production +master:refs/heads/master
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.