I've been exploring the workflow tools on the pantheon.io platform. This post describes our adventures in getting Drupal8/CiviCRM to work on Pantheon. If you have a pantheon.io account and if you have set up terminus https://pantheon.io/docs/terminus to interact with your pantheon projects then you should be able to follow along!
If you're not on Pantheon the steps are a little easier! First install Drupal - e.g.:
composer create-project drupal/recommended-project:^8.9 myd8site.local
These follow these docs https://docs.civicrm.org/installation/en/latest/drupal8/ for the CiviCRM installation instructions.
1. Install the Drupal8/CiviCRM locally or on another server that you have command line access to
a) Create a designated directory, set your site_name to your project name (my project here is called citius88 -> the url is going to be citius88.ca) . Optional: hook it up to your organization account (if you have one on pantheon.io) and set your favourite region!
mkdir citius88 cd citius88 export PANTHEON_SITE_NAME="citius88" terminus site:create $PANTHEON_SITE_NAME 'citius88.ca' empty --org 'Semper IT inc' --region 'Canada' git clone https://github.com/pantheon-systems/example-drops-8-composer.git $PANTHEON_SITE_NAME cd $PANTHEON_SITE_NAME export PANTHEON_SITE_GIT_URL="$(terminus connection:info $PANTHEON_SITE_NAME.dev --field=git_url)" git remote set-url origin $PANTHEON_SITE_GIT_URL
Head on over to your pantheon dashboard and you should see your new project! The following steps are required to get it up and functional:
b) Back in the shell on your local workspace: the next step is to remove the Continuous Integration bits. Delete the following directories and files:
rm -rf scripts/github rm -rf scripts/gitlab rm -rf .circleci rm -rf .ci rm -rf tests rm bitbucket-pipelines.yml rm build-providers.json rm .gitlab-ci.yml
c) Modify composer.json:
Remove all dependencies in the require-dev section.
Update the scripts section to remove the lint, code-sniff, and unit-test lines.
d) Modify pantheon.yml
Remove the following section:
workflows: sync_code: after: - type: webphp description: Push changes back to GitHub if needed script: private/scripts/quicksilver/quicksilver-pushback/push-back-to-github.php
e) Prepare for CiviCRM install
In composer.json -> update the requirement for minimum stability to:
f) Pull in CiviCRM! I'm using CiviCRM version 5.24.6 in this example - replace these digits with your favourite CiviCRM version. You can even use dev-master! When trying to composer require everything at once composer complained about memory_limit. I ended up having to set the php memory_limit to 3G! Here I'll describe the steps that work if you have less memory_limit to work with.
composer require civicrm/civicrm-core:5.24.6 --no-update composer update --with-all-dependencies composer require civicrm/civicrm-packages:5.24.6 --no-update composer update --with-all-dependencies composer require civicrm/civicrm-drupal-8:5.24.6 --no-update composer update --with-all-dependencies composer require civicrm/civicrm-asset-plugin:~1.0.1 --no-update composer update --with-all-dependencies composer civicrm:publish # not sure this is needed composer install
g) It's time to beam this up to Pantheon
composer run-script --no-dev prepare-for-pantheon # this .gitignore file includes bower_components which when excluded results in interesting meltdown menus mv vendor/civicrm/civicrm-core/.gitignore vendor/civicrm/civicrm-core/dontgitignore # or something more elegant: find -name .gitignore -delete git status terminus connection:set $PANTHEON_SITE_NAME.dev git git add . git commit -m 'Drupal8, CiviCRM and dependencies' git push --force
h) It's time to install Drupal!
terminus connection:set $PANTHEON_SITE_NAME.dev sftp terminus drush $PANTHEON_SITE_NAME.dev -- site-install -y Installation complete. User name: admin User password: XXXXXX # visit your dev site - log in with the credentials above or create yourself a drush uli at any time: terminus drush $PANTHEON_SITE_NAME.dev -- uli
i) And now CiviCRM! Because the /sites/default directory is not writable on pantheon after installing Drupal -> we followed this workaround.
terminus connection:set $PANTHEON_SITE_NAME.dev sftp terminus connection:info $PANTHEON_SITE_NAME.dev sftp -o Port=2222 dev.[connection:info].drush.in # you can also find your SFTP connection info on your pantheon dashboard -> Connect with SFTP -> Username@Host sftp> cd /srv/bindings/ sftp> ls # note your project's hash stfp>cd [hash]/code/web/sites sftp> chmod 777 default # install CiviCRM Core and CiviCRM Theme via GUI sftp> chmod 755 default
j) Visit your Drupal8/CiviCRM site! You'll likely need to clear the usual CiviCRM caches and possibly Drupal caches as well.
2. Setting up a local development environment for your pantheon site.
To bring your local site to live and have the ability to easily pull code, database or files - you can do so by using Lando. Below is a list of the specific tools I use:
- Docker Desktop on Mac: https://docs.docker.com/docker-for-mac/install/
- PhpStorm: https://www.jetbrains.com/phpstorm/
- Lando: https://docs.lando.dev/config/pantheon.html
- Xdebug with PhpStorm and Lando: https://www.drupaleasy.com/blogs/ultimike/2018/01/setting-xdebug-lando-and-phpstorm
Because you'll be switching environments between pantheon and lando the civicrm.settings.php and civicrm.settings.inc files from the original roundearth projects are super handy!
Thusfar, the only small edits I made to the civicrm.settings.inc are:
- $civicrm_paths['civicrm.root']['url'] = '/libraries/civicrm/'; + $civicrm_paths['civicrm.root']['url'] = '/libraries/civicrm/core/'; - $civicrm_setting['URL Preferences']['customCSSURL'] = '/libraries/civicrm/tools/extensions/org.civicrm.shoreditch/css/custom-civicrm.css';