Skip to content

How it's made

Duc Dao edited this page Aug 17, 2017 · 6 revisions

How it's made

Create a Ruby project

bundle init

Install Capistrano

First, add Capistrano gem to the Gemfile:

group :development do
    gem "capistrano","~> 3.8"
end

Then, capify a project:

bundle install --path vendor/bundle
bundle exec cap install

Add Magento 2 Capistrano gem and other useful gem:

gem 'capistrano-magento2'
gem 'capistrano-composer'
gem 'capistrano-upload-config'
gem 'capistrano-file-permissions'

Add require gem to Capfile:

require 'capistrano/composer'
require 'capistrano/upload-config'
require 'capistrano/file-permissions'

# Load Magento deployment tasks
require 'capistrano/magento2/deploy'

Finally, install gem added above:

bundle install --path vendor/bundle

Create Customize Task

Create a customize task file named magento2.rake in lib\capistrano\tasks folder with simple content like that:

namespace :magento2 do

  desc "Restart PHP FPM"
  task :restart_php_fpm do
    on roles(:all), in: :sequence, wait: 1 do
      execute :sudo, 'service php7.0-fpm restart'
    end
  end

end

Add link files and link dirs

Open config/deploy.rb, then add codes below:

set :linked_files, [
 'app/etc/env.php',
 'pub/.htaccess'
]
set :linked_dirs, [
 'pub/media',
 'var'
]
set :config_files, %w{app/etc/env.php pub/.htaccess}
# push link files after check them exist.
before 'deploy:check:linked_files', 'config:push'

Then, create app/etc/env.production.php and pub/.htaccess.production inside deploy repository.

Composer Authorize

set :magento_auth_public_key, 'MAGENTO_USERNAME'
set :magento_auth_private_key, 'MAGENTO_PASSWORD'

Magento Setting

set :magento_deploy_setup_role, :all
set :magento_deploy_cache_shared, true
set :magento_deploy_languages, ['en_US']
set :magento_deploy_themes, []
set :magento_deploy_composer, true
set :magento_deploy_production, true
set :magento_deploy_maintenance, true
set :magento_deploy_confirm, []

set :magento_deploy_chmod_d, '0755'
set :magento_deploy_chmod_f, '0644'
set :magento_deploy_chmod_x, ['bin/magento']
set :file_permissions_roles, :all
set :file_permissions_paths, ["pub/static", "var"]
set :file_permissions_users, ["SERVER_USER"] 
set :file_permissions_groups, ["SERVER_GROUP"]
set :file_permissions_chmod_mode, "0777"
before "deploy:updated", "deploy:set_permissions:acl"

Add Custom Task

before 'magento:deploy:verify', 'magento2:copy_config'
after 'magento:maintenance:disable', 'magento2:restart_php_fpm'

For staging site:

after 'magento:setup:static-content:deploy', 'magento2:add_adminer'