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 :

Répertoire après extraction de l'archive OroCRM

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 ?

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.

Installation d'OroCRM par Capistrano

(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 !

OroCRM est installé !

Cet article vous a plu ? Sachez que nous recrutons !

← Accueil