Created
November 21, 2013 11:15
-
-
Save ryanray/7579912 to your computer and use it in GitHub Desktop.
I couldn't find a quick example of how to deploy a node.js app using Capistrano 3. This gist assumes you are using Capistrano 3, Upstart, Forever, ssh/forward agent, and an unprivileged user named 'deploy'. Hopefully this simple setup will help to get you started.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# config/deploy.rb | |
# probably a lot of ways to improve this... | |
set :application, 'my_app' | |
set :repo_url, '[email protected]:USERNAME/my_app.git' | |
# should set up a deploy user | |
set :user, 'deploy' | |
set :deploy_to, '/var/www/my_app' | |
set :scm, :git | |
set :format, :pretty | |
set :log_level, :debug | |
set :pty, true | |
set :keep_releases, 5 | |
namespace :deploy do | |
#TODO: Add stop task in upstart | |
desc "Stop Forever" | |
task :started do | |
on roles(:app) do | |
execute "forever stopall" | |
end | |
end | |
desc "Install node modules non-globally" | |
task :npm_install do | |
on roles(:app) do | |
execute "cd #{current_path} && npm install" | |
end | |
end | |
desc 'Restart application' | |
task :restart do | |
on roles(:app), in: :sequence, wait: 5 do | |
# This assumes you are using upstart to startup your application | |
# - be sure that your upstart script runs as the 'deploy' user | |
execute "sudo start node-upstart-script", raise_on_non_zero_exit: false | |
end | |
end | |
before :restart, 'deploy:npm_install' | |
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# /etc/init/node-upstart-script.conf | |
description "myapp" | |
author "Your Name <[email protected]>" | |
start on (local-filesystems and net-device-up IFACE=eth0) | |
stop on shutdown | |
script | |
export HOME=/home/deploy | |
export NODE_ENV=production | |
cd /var/www/my_app/current/ | |
exec sudo -u deploy forever start -l "/var/log/node/my_app.log" -a app.js >> /var/log/node/my_app.log 2>&1 | |
end script |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# config/deploy/production.rb | |
set :stage, :production | |
server '127.0.0.1', user: 'deploy', roles: %w{web app}, my_property: :my_value | |
server '127.0.0.1', | |
user: 'deploy', | |
roles: %w{web app}, | |
ssh_options: { | |
# user: 'user_name', # overrides user setting above | |
# keys: %w(~/.ssh/id_rsa), | |
forward_agent: true, | |
auth_methods: %w(publickey password), | |
#password: 'use a key instead' | |
} |
okay i fixed it....
When no precess is running, it couldn't stop any process.
@hmontazeri how you fixed it? I want to know how you are catching if forever stop returns error or success.
OP your code will not work on latest capistrano version as :restart task does not gets executed by default aymore.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Hi, im getting an error:
cap aborted!
SSHKit::Runner::ExecuteError: Exception while executing on host XX:XX:XX:XX forever stopall exit status: 1
can you help on this one?