Before migrating from Drupal 7 to Backdrop, we recommend to read through the official documentation page on Upgrading from Drupal 7 and it's sub-sections:
There is also very nice slideshow available on https://backdrop-ops.github.io/slides/upgrade.html.
For complete upgrade instructions, please see the documentation on Upgrading from Drupal 7 on the API site.
There are few nuances to add if you are developing using AltaGrade Developer Stack for Backdrop:
1. Prepare Drupal 7 website for migration
Turn of all the contributed modules on your Drupal 7 website and dump its database with drush sql-dump > db.sql command. Compress the files directory and the database dump and place them in the /var/www/drupal7 directory of your Backdrop development setup (see step 2). That's all you need to take from your Drupal 7 website.
2. Create a new Backdrop website
Create a new Backdrop website using the AltaGrade Developer Stack for Backdrop, switch into service's container shell running the fin bash command and empty the website's database:
brush sql-drop -y
3. Copy the files directory and the database
Copy the files directory and the database dump-file to your Backdrop codebase and import the database.
rm -rf /var/www/docroot/files
mv /var/www/drupal7/* /var/www/docroot
cd /var/www/docroot
brush sql-cli < db.sql
rm -f db.sql
4. Create a temporary symlink
Create a temporary symlink to be able to run the upgrade script:
mkdir /var/www/docroot/sites/default
ln -s /var/www/docroot/files /var/www/docroot/sites/default
5. Open access to update script
Set the $settings['update_free_access'] option in settings.php file to TRUE by running the following one-liner:
sed -i -e "s@$settings\['update_free_access'\] = FALSE;@$settings\['update_free_access'\] = TRUE;@" /var/www/docroot/settings.php
If didn't work, then just do the replacement manually with nano editor:
nano /var/www/docroot/settings.php
then press CTRL+x, then y and exit nano.
6. Run the update script
Open https://backdrop.docksal/update.php in your browser and proceed with the update.
7. Change the file system path
After the upgrade script completes, login to your new Backdrop website using the one-time login URL generated with the brush uli command, go to https://backdrop.docksal/admin/config/media/file-system and update the Public file system path setting to files.
8. Clean the database and remove the symlink
This step is optional and not required if you decide to leave the temporary symlink created on step 4 forever. In that case, your Backdrop site will be serving all the links to files directory created on your old Drupal 7 website using the symlink.
However, if you would like to get rid of the symlink, then you need to find all the occurrences of sites/default/files in database and replace them all with just files. Usually, the following database tables might contain the old Drupal 7 style links:
field_data_body
field_revision_body
field_data_comment_body
field_revision_comment_body
files
locales_source
menu_router
Since each of the above database tables may have multiple columns containing occurrences of sites/default/files, you need to find all of them (for example, using the phpMyAdmin interface located at http://pma.YourBackdropSite.docksal) and run the UPDATE db_table SET db_column = REPLACE(db_column, 'sites/default/files', 'files').
Alternatively, you can just fire up the following brush commands on the command line:
brush sql-query "UPDATE field_data_body SET body_value = REPLACE(body_value, 'sites/default/files', 'files')"
brush sql-query "UPDATE field_data_body SET body_summary = REPLACE(body_summary, 'sites/default/files', 'files')"
brush sql-query "UPDATE field_revision_body SET body_value = REPLACE(body_value, 'sites/default/files', 'files')"
brush sql-query "UPDATE field_revision_body SET body_summary = REPLACE(body_summary, 'sites/default/files', 'files')"
brush sql-query "UPDATE field_data_comment_body SET comment_body_value = REPLACE(comment_body_value, 'sites/default/files', 'files')"
brush sql-query "UPDATE field_revision_comment_body SET comment_body_value = REPLACE(comment_body_value, 'sites/default/files', 'files')"
brush sql-query "UPDATE files SET filepath = REPLACE(filepath, 'sites/default/files', 'files')"
brush sql-query "UPDATE locales_source SET location = REPLACE(location, 'sites/default/files', 'files')"
brush sql-query "UPDATE menu_router SET path = REPLACE(path, 'sites/default/files', 'files')"
Now, finally you can delete the symlink:
rm -rf /var/www/docroot/sites/default/files
We value your opinion. Please add your feedback.