This gist assumes:
- you have a local git repo
- with an online remote repository (github / bitbucket etc)
- and a cloud server (Rackspace cloud / Amazon EC2 etc)
- your (PHP, Java, Perl, RoR, JSP) scripts are served from /var/www/html/
- your webpages are executed by apache
- apache's home directory is /var/www/
- (this describes a pretty standard apache setup on Redhat / Ubuntu / CentOS / Amazon AMI etc)
- deploy.php
- other scripts yet to be written
git add deploy.php
git commit -m 'Added the git deployment script'
git push -u origin master
After you've installed git, make sure it's a relatively new version - old scripts quickly become problematic as github / bitbucket / whatever will have the latests and greatest, if you don't have a recent version you'll need to figure out how to upgrade it :-)
git --version
# Add a nice repo
rpm -Uvh http://repo.webtatic.com/yum/centos/5/latest.rpm
# Install git
yum install --enablerepo=webtatic git-all
sudo yum install git-core
# Setup
git config --global user.name "Server"
git config --global user.email "[email protected]"
sudo mkdir /var/www/.ssh
sudo chown -R apache:apache /var/www/.ssh/
sudo -Hu apache ssh-keygen -t rsa # choose "no passphrase"
sudo cat /var/www/.ssh/id_rsa.pub
- https://github.com/you/yourapp/admin/keys
- Paste the deploy key you generated on the EC2 machine
##Set up service hook in github
- https://github.com/oodavid/1DayLater/admin/hooks
- Select the Post-Receive URL service hook
- Enter the URL to your update script - http://example.com/github.php
- Click Update Settings
cd /var/www/
sudo chown -R apache:apache html
sudo -Hu apache git clone [email protected]:you/yourapp.git html
Now you're ready to go :-)
- At this point you should be able to push to github and your site will automatically pull down code from github
- You can manually trigger a pull by hitting http://example.com/github.php in your browser etc (you'll see the output too)
- It would be trivial to setup another repo on your EC2 box for different branches (develop, release-candidate etc) - repeat most of the steps but checkout a branch after pulling the repo down