capifony sous windows pour déploiement automatisé sous ispcp


En premier lieu il vous faudra disposer d’un cygwin (éventuellement portable icon wink capifony sous windows pour déploiement automatisé sous ispcp ) sur votre machine, avec le package ruby (1.8) installé.

installer rubyGem est assez simple

  1. télécharger le tarball RubyGems  à partir Ruby Forge

    wget <a href="http://rubyforge.org/projects/rubygems/">http://rubyforge.org/frs/download.php/74445/rubygems-1.6.2.tgz </a>

    à remplacer par le numéro de la version courant bien entendu

  2. décompresser le tarball
     tar -xvf rubygems-1.6.2.tgz
  3. naviguer jusqu’à l’archive décompressée
     cd rubygems-*
  4. exécuter cette commande pour installer RubyGem
    ruby setup.rb install
  5. Et celle ci pour mettre à jour
    gem update --system

Capifony s’installe donc maintenant simplement via la commande gem qui va gérer les dépendances et donc installer automatiquement Capistrano. Il suffit d’exécuter la commande

sudo gem install capifony

il est tant de configurer la capifonycation de notre projet, donc après avoir navigué jusqu’à la racine du projet exécuter la commande:

capifony .

qui crée un fichier Capfile à la racine du projet et un fichier deploy.rb dans le répertoire config du projet. voici le mien agrémenté de quelques commentaires

set :application, "myapp.org"
set :domain,      "mygit.org"
set :deploy_to,   "/var/www/virtual/myapp.org"

set :shared_children,   %w(log htdocs/uploads)   #par défaut ispcp alias le répertoire htdocs (et non web)
set :use_sudo, true    #obligatoire pour l'hébergement ispcp car le user de déploiement n'a pas à priori les droits d'écriture sur le répertoire associé au domaine ou sous domaine
set :group_writable, false

set :git_enable_submodules, 1

set :repository, "git://git.cerdi.org/registration/health_registration.git"
set :scm,         :git

role :web,        domain                         # Your HTTP server, Apache/etc
role :app,        domain                         # This may be the same as your `Web` server
role :db,         domain, :primary =&gt; true       # This is where Rails migrations will run

set  :keep_releases,  3

ssh_options[:forward_agent] = true

Je précise également que l’utilisateur est authentifié par clé RSA. Ce qui m’évite de saisir

Attendu que l’utilisateur utilisé (authentifié par clé RSA) pour le déploiement n’est pas l’utilisateur qui possède les répertoires, j’ai opté pour un utilisateur sudoer, seulement l’option use_sudo n’a pas suffit et j’ai du reprendre les commandes suivantes, à la suite de deploy.rb, en partant du code trouver /usr/lib/ruby/gems/1.8/gems/capifony-0.4.3/lib/capifony.rb (première fois que je voyais du ruby -_-’).

namespace :deploy do

task :setup, :except =&gt; { :no_release =&gt; true } do
dirs = [deploy_to, releases_path, shared_path]
dirs += shared_children.map { |d| File.join(shared_path, d) }
run "#{try_sudo} mkdir -p #{dirs.join(' ')} &amp;&amp; #{try_sudo} chmod g+w #{dirs.join(' ')}"
#add for case where deploy user is not owner
dirs = [releases_path, shared_path]
run "#{try_sudo} chown -R #{user_deploy}:#{group_deploy} #{dirs.join(' ')}"
end

task :symlink, :except =&gt; { :no_release =&gt; true } do
on_rollback do
if previous_release
run "#{try_sudo} rm -f #{current_path}; #{try_sudo} ln -s #{previous_release} #{current_path}; true"
else
logger.important "no previous release to rollback to, rollback of symlink skipped"
end
end
run "#{try_sudo} rm -f #{current_path} &amp;&amp; #{try_sudo} ln -s #{latest_release} #{current_path}"
end

task :start do
run "[ -d #{deploy_to}/htdocs ] &amp;&amp; #{try_sudo} rm -rf #{deploy_to}/htdocs || true"
run "[ ! -f #{deploy_to}/htdocs ] &amp;&amp; #{try_sudo} ln -s #{current_path}/htdocs #{deploy_to}/htdocs || true"
run "[ ! -f #{deploy_to}/symfony ] &amp;&amp; #{try_sudo} ln -s #{current_path}/symfony #{deploy_to}/symfony || true"
dirs = [releases_path, shared_path]
run "#{try_sudo} chown -R #{user_deploy}:#{group_deploy} #{dirs.join(' ')}"
run "#{try_sudo} chmod -R g+w #{dirs.join(' ')}"
run "#{try_sudo} chown -h #{user_deploy}:#{group_deploy} #{current_path} #{deploy_to}/htdocs"
end

task :share_childs do
if shared_children
shared_children.each do |link|
run "mkdir -p #{shared_path}/#{link}"
run "#{try_sudo} chmod -R g+w #{shared_path}/#{link}"
run "if [ -d #{release_path}/#{link} ] ; then rm -rf #{release_path}/#{link}; fi"
run "ln -nfs #{shared_path}/#{link} #{release_path}/#{link}"
end
end

if shared_files
shared_files.each do |link|
link_dir = File.dirname("#{shared_path}/#{link}")
run "mkdir -p #{link_dir}"
run "#{try_sudo} chmod -R g+w #{link_dir}"
run "touch #{shared_path}/#{link}"
run "ln -nfs #{shared_path}/#{link} #{release_path}/#{link}"
end
end
end
end

Si ce n’est pas déjà fait, faites gérer votre projet par git

git init

pour ne faire gérer que le nécessaire par  git  éditer .gitignore

web/sf*
web/uploads/*
cache/*
plugins/.*
log/*
config/databases.yml
mkmf.log
.rsync*
backups/*

pour intégrer symfony en tant que librairie externe il vous faudra supprimer le répertoire lib/vendor/symfony s’il existe ou crééer lib/vendor s’il n’existe pas

mkdir -p lib/vendor

ensuite il suffit de déclarer la librairie symfony comme un sous modules au niveau de git, et faire de même pour tous les plugins qui sont verisonnés avec git

git submodule add http://github.com/vjousse/symfony-1.4.git lib/vendor/symfony
git submodule add https://github.com/rande/swFunctionalTestGenerationPlugin.git plugins/swFunctionalTestGenerationPlugin

ce qui a pour conséquence de créer un fichier .gitmodules contenant

[submodule "lib/vendor/symfony"]
path = lib/vendor/symfony
url = http://github.com/vjousse/symfony-1.4.git
[submodule "plugins/swFunctionalTestGenerationPlugin"]
path = plugins/swFunctionalTestGenerationPlugin
url = https://github.com/rande/swFunctionalTestGenerationPlugin.git

il s’agit ensuite de committer le projet , sur un serveur distant

git add .
git commit -a -m 'commit entire project' #commit en local
git remote add origin git@git.cerdi.org:registration/health_registration.git  #défini un serveur git distant
git push origin master #répercutre le modifs sur le serveur git distant

maintenant que notre projet est gité avec ces sous modules, il ne reste qu’à

lancer la commande suivante pour finir de configurer le déploiement

cap deploy:setup

lancer la commande suivante pour le premier déploiement

cap deploy:cold

lancer la commande suivante pour les suivants

cap deploy:start
Posted by: mazenovi on 13 avril 2011 @ 12 h 35 min
Filed under: bricolage,dev,libre

Pas de commentaire »

Pas encore de commentaire.

Flux RSS des commentaires de cet article. TrackBack URL

Laisser un commentaire