Skip to content

Guide d'installation : Déploiement en Production

André Marvell IKOUNGA edited this page Jun 20, 2015 · 2 revisions

Guide d'installation : Déploiement sur un serveur

Ce guide d'installation vous guidera dans le déploiement de l'application sur un serveur de production, de préférence un serveur dédié ou un serveur mutualisé avec un accès SSH.

Prérequis

Ce tutoriel suppose que :

  • Vous avez les droits d'accès en SSH sur le serveur
  • Vous avez un nom domaine, ou une adresse IP qui pointe vers le dossier qui contiendra le projet
  • Vous avez bien entendu déjà réalisé un fork du projet et qu'il est disponible sur votre machine locale

1. Installation & Mise en place de Capifony

Pour pouvoir déployer l'application sur les serveurs de production afin qu’elle soit disponible à l’ensemble des internautes, nous utiliserons l'outil Capifony.

Capifony

Capifony est un outil destiné à l'industrialisation des déploiements d'applications sur des serveurs distants via SSH. Capifony nous permet donc de gérer très facilement le déploiement de notre application Symfony.

  • Tout d'abord installez Capifony
gem install capifony
  • Ensuite placez vous à la racine du dossier qui contient le projet forké et initialisez capifony. Cette manip créera un fichier Capfile à la racine du projet et un fichier deploy.rb dans le dossier config.
cd chemin/vers/le/projet
capifony .

2. Déploiement

  • Modifiez le fichier deploy.rb, en vous basant sur les exemples donnés ici, en fonction :
  • de votre stratégie de déploiement (Serveur de prod et prépod etc...)
  • de vos besoins spécifiques ()

Voici un exemple de fichier deploy.rb se basant sur ma configuration qui est une stratégie de déploiement sur un seul serveur de prod, passant par GitHub.

set :application, "MealSquare"
set :domain, "nom de domaine ou IP"                                        # Le SSH de destination
set :deploy_to, "/var/www/mealsquare"                                      # Le dossier sur le serveur 
set :app_path, "app"
set :web_path, "web"
set :user, "mealsquare"
set :upload_path, web_path + "/uploads" 

set :repository, "git@github.com:AndreMarvell/MealSquare.git" 
set :branch, "master" 
set :scm, :git 
set :deploy_via, :rsync_with_remote_cache 

set :model_manager, "doctrine"                                              # ORM

role :web, domain
role :app, domain, :primary => true

# Nous utilisons sudo pour régler les permissions via la methode :chown
# préférez l’utilisation des ACLs si c’est disponible sur votre serveur

set :use_sudo, true
set :keep_releases, 3                                                       # Le nombre de releases à garder après un déploiement réussi

## Symfony2
set :shared_files, ["app/config/parameters.yml"]                            # Les fichiers à conserver entre chaque déploiement
set :shared_children, [app_path + "/logs", web_path + "/uploads" ,"vendor"] # Idem, mais pour les dossiers
set :use_composer, true
set :update_vendors, true                                                   # Il est conseillé de laisser a false et de ne pas faire de ‘composer update’ directement sur la prod
#set :composer_options, "--verbose --prefer-dist"                           # Permet de spécifier des paramètres supplémentaires à composer, inutile dans notre cas
set :writable_dirs, ["app/cache", "app/logs"]                               # Application des droits nécessaires en écriture sur les dossiers
set :webserver_user, "www-data"                                             # L’utilisateur de votre serveur web (Apache, nginx, etc.)
set :permission_method, :chown                                              # Dans le cas où vous n’avez pas les ACLs, ne pas oublier de mettre :use_sudo à true
set :use_set_permissions, true
set :dump_assetic_assets, true                                              # dumper les assets

# Pour permettre le deploiement de app_dev.php
#set :clear_controllers, false

#default_run_options[:pty] = true                                           # Si vous avez cette erreur : no tty present and no askpass program specified, alors décommentez
#ssh_options[:forward_agent] = true                                         # Idem que ci-dessus
ssh_options[:port]          = "votre port ssh ici, si différent du port 22"

# Permet d’avoir le détail des logs de capistrano, plus facile à débugger si vous rencontrer des erreurs
logger.level = Logger::MAX_LEVEL

before "symfony:cache:warmup", "symfony:doctrine:schema:update"
after "deploy", "deploy:cleanup"

# Et enfin, si jamais vous rencontrez des erreurs de permissions, vous pouvez rajouter ces lignes suivantes :
after "deploy:finalize_update" do
run "sudo chown -R mealsquare:www-data #{latest_release}"
run "sudo chmod -R 777 #{latest_release}/#{cache_path}"
run "sudo chmod -R 777 #{latest_release}/#{log_path}"
run "sudo chmod -R 777 #{latest_release}/#{upload_path}"
end
  • Une fois le fichier configurer, lancer un setup du serveur
cap deploy:setup

PS: Cette partie est assez complexe à mettre en oeuvre, n'hésitez pas à me contacter au moindre problème blocant

  • Et là le projet est prêt à être déployé
cap deploy

NB: Pour plus d'informations sur Capifony, visitez le site officiel : Capifony.org