This is my approach to converting a Drupal (version 8.8 or greater) site from being built with tarballs and the GUI to a Composer-based site. I use ddev for my local environment to set up containers that provide Docker, Composer, and Drush. This approach assumes some degree of comfort with the command line interface (CLI).
-
Inventory the source site for contrib modules and themes and make a list of modules and themes with versions. I use a spreadsheet for this.
-
Find modules and themes in the hierarchical directory tree in your code base.
-
Find versions by looking at the list of modules or themes in Admin panel.
-
Get machine names and versions in Admin panel on modules list and themes list on Appearance page.
-
It can be very helpful to install the upgrade status module, which will generate a report that lists your currently installed modules, their version number, and available upgrades.
-
(Do the same with custom modules and themes if you have any.)
-
-
Prepare specific materials from source site for later import:
-
Create a folder for composerize info
-
Make and download a tar.gz or zip of the files (cd to web/sites/default , then tar -zcvf files.tar.gz files)
-
Export a copy of the database (either BUM or phpMyAdmin)
-
Download a copy of settings.php and then name it old<site>settings.php
-
-
Create a new ddev Drupal project with defined directory structure using recommended-project template:
-
cd Sites
-
mkdir <project-name>
-
cd <project-name>
-
ddev config --project-type=drupal8 --docroot=web --create-docroot --mariadb-version="" --mysql-version="8.0"
-
-
Now you have an appropriate directory tree in: /Sites/project-name
-
(Until DreamHost updates their mysql from 5.7 to 8.0) create in .ddev a mysql directory and add a collation.cnf file: .ddev/mysql/collation.cnf
-
[mysqld]
-
collation-server = utf8mb4_unicode_ci
-
character-set-server = utf8mb4
-
-
Start the ddev container:
-
ddev start
-
Now you have the configured container running with ddev tools, and web access urls created (but not yet usable)
-
-
Install Drupal core using composer
-
ddev composer create "drupal/recommended-project:8.9.2" (use the correct 3 digit version to get the correct drupal core.
-
You will use the existing core modules and themes and deal with updating core later...)
-
It knows which version because you have configured the container.
-
It will ask about overwriting /web - Yes
-
-
Make sure drush is available:
-
ddev composer require "drush/drush"
-
-
Create directories in project root
-
private
-
private/BUM
-
tmp
-
config/sync
-
-
Fix new settings.php by transferring settings from source settings.php into new project settings.php:
-
$databases['default']['default']
-
$settings['hash_salt']
-
$settings['trusted_host_patterns'] (if this has been set)
-
Set path to private: $settings['file_private_path'] = $app_root . '/../private';
-
Set path to tmp: $settings[$settings['file_temp_path'] =] = $app_root . '/../tmp';
-
Set path to config/sync: $settings['config_sync_directory'] = $app_root . '/../config/sync';
-
-
Add contributed modules:
-
(Manual method: edit json file - not recommended) -
Composer method (recommended): run ddev composer require "drupal/<module-name>:<version>"
-
Can do as one command: ddev composer require drupal/module-name-1 drupal/module-name-2 drupal/module-name-3 etc
-
Use quotes
-
About versions:
-
Find composer require string by clicking version number on module page of drupal.org
-
If we do not specify a version, we will get the latest version, which could be a problem, so best to specify a version.
-
^1.0 = latest stable version at 1 or greater (generally best option to pick)
-
~1.0.0 = anything below 1.1 (~ allows only last number to increase when doing semantic numbering)
-
^1.0.0 = anything after first number that gives major version can increase, so up to 1.0.99 but NOT 2.0
-
1.x-dev = always dev
-
1.1.4 = exact version
-
Ranges can also be specified as ">" (greater than), ">=" (greater than or equal to), "<" (less than), or "<=" (less than or equal to).
-
-
Finalize this: ddev composer install
-
-
Add contributed themes:
-
(Manual method: edit json file - not recommended)
-
Composer method (recommended): run ddev composer require "drupal/<theme-name>:<version>"
-
Find composer require string by clicking on version number on Drupal.org
-
Use quotes
-
Can do as one command (see modules) or one at a time
-
Finalize this: ddev composer install
-
-
Add files with user-generated content (/web/sites/default/files)
-
Add ALL files but do not replace - ore remove - the generated files: js, php, css
-
-
Import database
-
Put exported SQL file in root of project-name
-
cd Sites/project-name
-
(ddev import-db source=dbname.sql did not work)
-
ddev import-db and then giving full path when prompted worked: /Users/pheski/Sites/project-name/file.sql
-
-
Use drush to update db and clear cache
-
ddev drush updb
-
ddev drush cr
-
-
Launch site
-
ddev launch
-
-
Now make modifications in order to upgrade core to current version (9.3.x)
-
Install and set as default a D9 compatible theme
-
Update modules
-
Update core
-
After testing and making changes/improvements it gets moved to production:
-
Export db (file.sql)
-
Create zip or tar.gz of entire project
-
Upload db file to level above production root
-
Upload and uncompress zip or tar.gz of entire project (note: drupal codebase is in project-name/web directory!
-
Export a copy of the production db 'in case'
-
Use SSH to import the new db into the production db (you DID make a backup, right?)
-
Using the DreamHost panel, redirect the server to project-name/web
-
Remove the TLDN from the old version...
-
(Note - can do this with a new production db and new project, removing the tldn from the old project so it is easy to revert.)