Déployez votre application OroCRM avec Capistrano 3
⏲️ ~6 min de lecture
Publié le
par
Hadrien
Capistrano
Déploiement
OroCRM
OroCRM, on vous en a déjà parlé dans un précédent article dans lequel nous vous expliquions que nous croyons en sa capacité à être un bon CRM.
Et bien on y croit tellement qu'on a décidé de commencer à s'en servir pour nos propres besoins.
Aujourd'hui, nous allons donc voir comment déployer une application OroCRM de A à Z avec notre ami de toujours Capistrano dans sa version 3.
Récupération des sources d'OroCRM #
NDA : À l'heure où j'écris ces lignes, la version la plus récente d'OroCRM est la 1.2. Cependant je vais me baser sur la branche master car la version 1.2 d'OroCRM à pour dépendance une version bugée de l'ORM Doctrine et l'installation du CRM ne marchera donc pas (c'est un bug connu visiblement).
Placez-vous dans le répertoire qui va accueillir votre installation d'OroCRM et exécutez la commande suivante (inutile de lui demander une dernière volonté) :
curl -sL https://api.github.com/repos/orocrm/crm-application/tarball | tar -xz --strip 1
Vous devriez vous retrouver avec la structure suivante :
En local, exécutez composer install
et enlevez la ligne composer.lock
du fichier .gitignore
. Pourquoi ? Simplement parce que dans le cas contraire, à chaque déploiement, le composer install
exécuté par Capistrano recalculera toutes les bonnes versions et dépendances d'OroCRM, ce qui peut être très long. En publiant le composer.lock
dans votre dépôt, vous épargnerez à votre serveur distant de le faire.
Ensuite, on prépare notre dépôt Git :
git init git add . git commit -m "Ajout des sources d'OroCRM" git remote add origin $VOTRE_REMOTE git push -u origin master
Déploiement #
Installation de Capistrano et des outils complémentaires #
Avant de passer dans le vif du sujet et d'écrire notre recette Capistrano, nous allons d'abord préparer un Gemfile afin de pouvoir s'assurer d'avoir les bonnes dépendances et gems ruby dont nous avons besoin pour déployer OroCRM.
Commencez par installer bundler si ce n'est déjà fait : gem install bundler
.
Ensuite créez un fichier nommé Gemfile
et insérez-y le contenu suivant :
source "https://rubygems.org" gem "capistrano", group: :deployment gem "capistrano-composer", group: :deployment gem "capistrano-symfony", group: :deployment gem "highline", group: :deployment
Que trouve-t-on dans notre Gemfile
?
capistrano
, notre outil de déploiement préférécapistrano-composer
, une suite de tâches pour nous simplifier la vie aveccomposer
danscapistrano
capistrano-symfony
, une suite de tâches pour nous simplifier la vie avec Symfony 2 danscapistrano
highline
, pour éviter que les mots de passe demandés parcapistrano
ne soient affichés en clair
Ensuite, on installe tout ça : bundle install --clean --path=vendor/bundle
Configuration de Capistrano #
Commençons par initialiser notre projet Capistrano : bundle exec cap install STAGES=production
. Vous l'aurez remarqué dans notre cas, on ne fait qu'une recette pour déployer en production, mais rien de vous empêche d'avoir plus d'une cible de déploiement.
Modifiez ensuite le fichier Capfile
pour qu'il ressemble à ça :
require 'capistrano/setup' require 'capistrano/deploy' require 'capistrano/composer' require 'capistrano/symfony' Dir.glob('lib/capistrano/tasks/*.rake').each { |r| import r }
Idem pour le fichier config/deploy.rb
:
# config valid only for Capistrano 3.1 lock '3.2.1' set :application, 'OroCRM' set :repo_url, '$VOTRE_REMOTE' set :branch, 'master' set :linked_files, %w{app/config/parameters.yml} set :linked_dirs, %w{app/logs vendor} namespace :deploy do before :starting, 'composer:install_executable' before 'symfony:cache:warmup', 'symfony:assets:install' before 'symfony:cache:warmup', 'symfony:assetic:dump' before 'symfony:cache:warmup', 'oro:generate_js' before :published, 'composer:install' before 'composer:install', :composer_selfupdate do on roles(:app) do within shared_path do execute :php, 'composer.phar', 'self-update' end end end end
On continue avec config/deploy/production.rb
:
role :app, %w{user@example.com} role :web, %w{user@example.com} role :db, %w{user@example.com} set :deploy_to, '/répertoire/distant/où/déployer' SSHKit.config.command_map[:composer] = "php #{shared_path.join("composer.phar")}" set :ssh_options, { forward_agent: true, }
Enfin on créé le fichier lib/capistrano/tasks/oro.rake
:
namespace :oro do desc "Initial orocrm installation" task :install do ask :company_name, 'Company name' ask :company_short_name, 'Company short name' ask :user_name, 'User name' ask :user_email, 'User email' ask :user_firstname, 'User firstname' ask :user_lastname, 'User lastname' ask :user_password, 'User password' on roles(:app) do within release_path do execute :php, 'app/console', "--env=#{fetch(:symfony_env)}" , 'oro:install', '--full-database', '--sample-data=n', '--force', "--company-name=#{fetch(:company_name)}", "--company-short-name=#{fetch(:company_short_name)}", "--user-name=#{fetch(:user_name)}", "--user-email=#{fetch(:user_email)}", "--user-firstname=#{fetch(:user_firstname)}", "--user-lastname=#{fetch(:user_lastname)}", "--user-password=#{fetch(:user_password)}" end end end desc "Generate OroCRM specific js files" task :generate_js do on roles(:app) do within release_path do execute :php, 'app/console', 'fos:js-routing:dump', '--target=web/js/routes.js', '--quiet', '--no-interaction', "--env=#{fetch(:symfony_env)}" execute :php, 'app/console', 'oro:localization:dump', '--quiet', '--no-interaction', "--env=#{fetch(:symfony_env)}" end end end end
Ajoutons la configuration de Capistrano à notre dépôt :
git add . git commit -m "Ajout de la configuration Capistrano" git push
Maintenant exécutez la commande suivante pour créer la structure de répertoire minimum sur votre serveur de production : bundle exec cap production deploy:check:directories
Connectez-vous ensuite en ssh sur votre serveur, pour pouvoir créer le fichier parameters.yml de votre instance d'OroCRM.
mkdir -p /répertoire/distant/où/déployer/shared/app/config vim /répertoire/distant/où/déployer/shared/app/config/parameters.yml
parameters: database_host: 127.0.0.1 database_port: null database_name: null database_user: null database_password: null mailer_transport: smtp mailer_host: 127.0.0.1 mailer_port: ~ mailer_encryption: null mailer_user: null mailer_password: null websocket_host: 127.0.0.1 websocket_port: 8080 session_handler: session.handler.native_file locale: en secret: secrettoken installed: null
Renseignez dans ce fichier vos paramètres de base de données, envoi d'emails, clé secrète, etc. (pour cette partie, n'hésitez pas à consulter la doc. Symfony si besoin)
En maintenant, on déploie pour de bon !
bundle exec cap production deploy
Installation de votre application OroCRM #
Pour terminer, il ne vous qu'à lancer l'installation d'OroCRM : création de la base de données, injection d'un premier utilisateur admin, etc.
bundle exec cap production oro:install
Cette commande vous demandera des informations comme le nom de votre société ou votre utilisateur et fera le job à votre place.
(Capri) C'est fini #
Et voilà vous avez maintenant une application OroCRM fonctionnelle et il ne vous reste qu'à configurer votre apache/nginx/autre pour pouvoir commencer à vous en servir !
Cet article vous a plu ? Sachez que nous recrutons !