This gist assumes:
- you have an online remote repository (github / bitbucket etc.)
- you have a local git repo
- and a cloud server (Rackspace cloud / Amazon EC2 etc)
- your (PHP) scripts are served from /var/www/html/
- your webpages are executed by Apache
- the Apache user is named
www-data
(may beapache
on other systems) - apache's home directory is /var/www/
Here we add the deployment script and push it to the origin, the deployment script runs git commands to PULL from the origin thus updating your server
See deploy.php
git add deploy.php
git commit -m 'Added the git deployment script'
git push -u origin master
Here we install and setup git on the server, we also create an SSH key so the server can talk to the origin without using passwords etc
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
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
Here we add the SSH key to the origin to allow your server to talk without passwords. In the case of GitHub we also setup a post-receive hook which will automatically call the deploy URL thus triggering a PULL request from the server to the origin
- https://github.com/settings/ssh
- Create a new key
- Paste the deploy key you generated on the server
- https://github.com/oodavid/server.com/admin/hooks
- Select the Post-Receive URL service hook
- Enter the URL to your deployment script - http://server.com/deploy.php
- Click Update Settings
- https://bitbucket.org/account/ssh-keys/
- Create a new key
- Paste the deploy key you generated on the server
- Go to: Repo > Admin > Services
- Select "POST"
- Add the URL to your deployment script - http://server.com/deploy.php
- Save
Here we clone the origin repo into a chmodded /var/www/html folder
sudo chown -R www-data:www-data /var/www/html
sudo -Hu www-data git clone [email protected]:you/server.git /var/www/html
Now you're ready to go :-)
- Navigate the the deployment script to trigger a pull and see the output:
- http://server.com/deploy.php
- this is useful for debugging too ;-)
- When you push to GitHub your site will automatically ping the above url (and pull your code)
- When you push to Bitbucket you will need to manually ping the above url
- https://gist.github.com/1809044 who in turn referenced
Hi,
Thanks for this great script. However it doesnt seem to work for elastic cluster when the number of similar servers change.
What is the best practice in this case?