set :application, "Radiant CMS" set :repository, "http://svn.caenim.com/tags/066" set :user, "deploy" #--use root for stack:tasks set :deploy_to, "/home/deploy/radiant" set :port, "22" set :deploy_via, "export" role :app, "example.com" role :web, "example.com" role :db, "example.com", :primary => true namespace(:stack) do desc "Installs server software. This calls 'aptitude' to download and install a base set of server applications and their dependencies. Should be run with 'set :user, “root”'." task :setup, :roles => :web do run "aptitude -y update" run "aptitude -y full-upgrade" run "aptitude -y install bison build-essential flex libmysqlclient15-dev libmysql-ruby libssl-dev monit mysql-client ruby-full libzlib-ruby nginx subversion subversion-tools" run "cd /usr/local/src && wget http://rubyforge.org/frs/download.php/35283/rubygems-1.1.1.tgz && tar xzvf rubygems-1.1.1.tgz && cd rubygems-1.1.1 && ruby setup.rb && ln -s /usr/bin/gem1.8 /usr/bin/gem" end task :after_setup, :roles => :web do run "cd /usr/local/src && wget http://www.tildeslash.com/monit/dist/monit-4.10.1.tar.gz && tar xzvf monit-4.10.1.tar.gz && cd monit-4.10.1 && ./configure && make && make install && ln /etc/monit/monitrc /usr/local/etc/monitrc" run "gem install mongrel_cluster mysql radiant" run "aptitude -y update" run "aptitude -y full-upgrade" end desc "Configures server software. This uses pre-made configuration files hosted on the internet to configure the server software. You will need to run 'cap stack:setup' before this task. Should be run with 'set :user, “root”'." task :configure, :roles => :web do run "wget http://svn.caenim.com/tags/710-config/nginx.conf && wget http://svn.caenim.com/tags/710-config/mongrels.conf && wget http://svn.caenim.com/tags/710-config/assets.conf && wget http://svn.caenim.com/tags/710-config/radiant.conf && wget http://svn.caenim.com/tags/710-config/monitrc && wget http://svn.caenim.com/tags/710-config/mongrels && wget http://svn.caenim.com/tags/710-config/mysql && wget http://svn.caenim.com/tags/710-config/nginx && wget http://svn.caenim.com/tags/710-config/ssh && wget http://svn.caenim.com/tags/710-config/system && wget http://svn.caenim.com/tags/710-config/my.cnf && wget http://svn.caenim.com/tags/710-config/monit && wget http://svn.caenim.com/tags/710-config/firewall.sh" run "mv /etc/nginx/nginx.conf /etc/nginx/nginx.conf-old && mv nginx.conf /etc/nginx/nginx.conf" run "mv mongrels.conf /etc/nginx/mongrels.conf" run "mv assets.conf /etc/nginx/assets.conf" run "mv radiant.conf /etc/nginx/sites-available/radiant.conf && ln -s /etc/nginx/sites-available/radiant.conf /etc/nginx/sites-enabled/radiant.conf && rm /etc/nginx/sites-enabled/default" run "mv /etc/monit/monitrc /etc/monit/monitrc-old && mv monitrc /etc/monit/monitrc" run "mkdir /etc/monit.d && mv mongrels /etc/monit.d/mongrels && mv mysql /etc/monit.d/mysql && mv nginx /etc/monit.d/nginx && mv ssh /etc/monit.d/ssh && mv system /etc/monit.d/system" run "mv /etc/mysql/my.cnf /etc/mysql/my.cnf-old && mv my.cnf /etc/mysql/my.cnf" run "sed -e 's/startup=0/startup=1/g' -i /etc/default/monit" run "update-rc.d -f monit remove && mv /etc/init.d/monit /etc/init.d/monit-old && mv monit /etc/init.d/monit && chmod +x /etc/init.d/monit && update-rc.d monit defaults" run "chmod +x firewall.sh && /bin/bash firewall.sh" end task :after_configure, :roles => :web do run "mv /home/deploy/database.yml #{deploy_to}/shared/system/database.yml" run "/etc/init.d/nginx stop" run "/etc/init.d/mysql stop" run "/etc/init.d/monit restart" run "monit reload" end end namespace(:deploy) do task :start, :roles => :app do start_mongrels end task :stop, :roles => :app do stop_mongrels end task :restart, :roles => :app do restart_mongrels end desc "Install Shards extension." task :shards, :roles => :app do symlink run "rake production --rakefile #{deploy_to}/current/Rakefile radiant:extensions:shards:migrate #{deploy_to}" end task :before_shards, :roles => :app do update_code end task :after_shards, :roles => :app do restart end end namespace(:control) do desc "Start nginx" task :start_nginx, :roles => :web do sudo "/etc/init.d/nginx start" end desc "Stop nginx" task :stop_nginx, :roles => :web do sudo "/etc/init.d/nginx stop" end desc "Restart nginx" task :restart_nginx, :roles => :web do sudo "/etc/init.d/nginx restart" end desc "Reload nginx" task :start_nginx, :roles => :web do sudo "/etc/init.d/nginx force-reload" end desc "Start monit" task :start_monit, :roles => :web do sudo "/etc/init.d/monit start" end desc "Stop monit" task :stop_monit, :roles => :web do sudo "/etc/init.d/monit stop" end desc "Restart monit" task :restart_monit, :roles => :web do sudo "/etc/init.d/monit restart" end desc "Start mysql" task :start_mysql, :roles => :web do sudo "/etc/init.d/mysql start" end desc "Stop mysql" task :stop_mysql, :roles => :web do sudo "/etc/init.d/mysql stop" end desc "Restart mysql" task :restart_mysql, :roles => :web do sudo "/etc/init.d/mysql restart" end end namespace(:monitor) do desc "Watch the logs. Uses sudo for access to mysql logs." task :logs, :roles => :web do sudo "tail -f /var/log/nginx/*.log /home/deploy/radiant/shared/log/*.log /var/log/mysql/mysql-slow.log /var/log/mysql.log" end desc "Check status" task :status, :roles => :web do sudo "monit status" end desc "Check memory" task :ram, :roles => :web do run "free -m" end end desc "Start Mongrel cluster." task :start_mongrels, :roles => :app do run "/usr/bin/mongrel_rails cluster::start -C #{deploy_to}/current/config/mongrel_cluster.yml --clean" end desc "Stop Mongrel cluster." task :stop_mongrels, :roles => :app do run "/usr/bin/mongrel_rails cluster::stop -C #{deploy_to}/current/config/mongrel_cluster.yml --clean" end desc "Restart Mongrel cluster." task :restart_mongrels, :roles => :app do run "/usr/bin/mongrel_rails cluster::restart -C #{deploy_to}/current/config/mongrel_cluster.yml --clean" end task :after_symlink, :roles => :app do run "ln #{deploy_to}/shared/system/database.yml #{deploy_to}/current/config/database.yml" end task :after_start, :roles => :app do run "chmod 666 #{deploy_to}/shared/log/production.log" end task :after_restart, :roles => :app do run "chmod 666 #{deploy_to}/shared/log/production.log" end