$ git push production master
To get started, install the "git-deploy" gem.gem install git-deploy
Only the person who is setting up deployment for the first time needs to install
the gem. You don't have to add it to your project's Gemfile.Which app languages/frameworks are supported?
Regardless of the fact that this tool is mostly written in Ruby, git-deploy can be useful for any kind of code that needs deploying on a remote server. The default scripts are suited for Ruby web apps, but can be edited to accommodate other frameworks.Your deployment is customized with per-project callback scripts which can be written in any language.
The assumption is that you're deploying to a single host to which you connect over SSH using public/private key authentication.
Initial setup
-
Create a git remote for where you'll push the code on your server.
The name of this remote in the examples is "production", but it can be
whatever you wish ("online", "website", or other).
git remote add production "user@example.com:/apps/mynewapp"
/apps/mynewapp
is the directory where you want your code to reside on the remote server. If the directory doesn't exist, the next step creates it.
-
Run the setup task:
git deploy setup -r "production"
/apps/mynewapp
in the above example) and install the remote git hook.
-
Run the init task:
git deploy init
deploy/
directory. You should check them in git because they are going to be executed on the server during each deploy.
-
Push the code.
git push production master
-
Login to your server and manually perform necessary one-time administrative operations. This might include:
- set up the Apache/nginx virtual host for this application;
- check your
config/database.yml
and create the production database.
Everyday deployments
If you've set your app correctly, visiting http://example.com in your browser should show it up and running.Now, subsequent deployments are done simply by pushing to the branch that is currently checked out on the remote:
git push production master
Because the deployments are performed with git, nobody else on the team needs to
install the "git-deploy" gem.On every deploy, the default
deploy/after_push
script performs the following:- updates git submodules (if there are any);
- runs
bundle install --deployment
if there is a Gemfile; - runs
rake db:migrate
if new migrations have been added; - clears cached CSS/JS assets in "public/stylesheets" and "public/javascripts";
- restarts the web application.
deploy/
directory of your app.Deployments are logged to
log/deploy.log
in your application's directory.How it works
Thegit deploy setup
command installed a post-receive
git hook in the remote
repository. This is how your code on the server is kept up to date. This script
checks out the latest version of your project from the current branch and
runs the following callback scripts:-
deploy/setup
- on first push. -
deploy/after_push
- on subsequent pushes. It in turn executes:deploy/before_restart
deploy/restart
deploy/after_restart
-
deploy/rollback
- executed forgit deploy rollback
.
git deploy init
are written in shell
script and Ruby.Extra commands
git deploy hooks
- Updates git hooks on the remote repositorygit deploy log [N=20]
- Shows last 20 lines of deploy log on the servergit deploy rerun
- Re-runs thedeploy/after_push
callback as if a git push happenedgit deploy restart
- Runs thedeploy/restart
callbackgit deploy rollback
- Undo a deploy by checking out the previous revision, runsdeploy/rollback
if exists instead ofdeploy/after_push
git deploy upload <files>
- Copy local files to the remote app
from https://github.com/mislav/git-deploy