capifony sous windows pour déploiement automatisé sous ispcp
En premier lieu il vous faudra disposer d’un cygwin (éventuellement portable
) sur votre machine, avec le package ruby (1.8) installé.
installer rubyGem est assez simple
- 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
- décompresser le tarball
tar -xvf rubygems-1.6.2.tgz
- naviguer jusqu’à l’archive décompressée
cd rubygems-*
- exécuter cette commande pour installer RubyGem
ruby setup.rb install
- 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
il est tant de configurer la capifonycation de notre projet, donc après avoir navigué jusqu’à la racine du projet exécuter la commande:
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 :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 => 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 -_-’).
task :setup, :except => { :no_release => 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(' ')} && #{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 => { :no_release => 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} && #{try_sudo} ln -s #{latest_release} #{current_path}"
end
task :start do
run "[ -d #{deploy_to}/htdocs ] && #{try_sudo} rm -rf #{deploy_to}/htdocs || true"
run "[ ! -f #{deploy_to}/htdocs ] && #{try_sudo} ln -s #{current_path}/htdocs #{deploy_to}/htdocs || true"
run "[ ! -f #{deploy_to}/symfony ] && #{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
pour ne faire gérer que le nécessaire par git éditer .gitignore
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
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 https://github.com/rande/swFunctionalTestGenerationPlugin.git plugins/swFunctionalTestGenerationPlugin
ce qui a pour conséquence de créer un fichier .gitmodules contenant
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 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
lancer la commande suivante pour le premier déploiement
lancer la commande suivante pour les suivants


