Best practices for Magento Deployment

19,305

Solution 1

I recommend using git over SVN. Easier branching and merging means that all of these points will go more smoothly for you.

Applying upgrades: Do this in dev. Make a branch (this is where git really shines), apply the patch files or even better, unpack a new Magento version and point it to your old database. No extensions yet. Open the admin in the new Magento installation an hope for the best. Upgrading between minor versions probably won't be a problem. You will probably have to reindex after all the new stuff installs. Do a commit once this is stable, then gradually bring into the branch your extensions and themes, make any code adjustments, then doing a commit after each step proves stable.

Environment-dependent files: .htaccess and app/etc/local.xml. I do a separate version for each: local.dev.xml, htaccess-dev local.staging.xml, htaccess-staging local.production.xml, htaccess-production

...and then make softlinks to them for each environment:

ln -s htaccess-dev .htaccess
cd app/etc/
ln -s local.dev.xml local.xml

and so on.

Restricting access to certain developers: I don't do this. However, you can develop a deploy strategy in git that lets a release manager decide what goes in and what doesn't.

Managing database changes: That's the trickiest part. We just use mysqldump from production, and have some ready-made "env-setup.sql" files for each environment. Something like this (your ids may vary):

UPDATE core_config_data SET value='http://magento.dev/' WHERE config_id IN (3,4);

I usually add some more instructions that will change payment gateways over to test environments, change outgoing emails, etc. Most of these you will find in core_config_data.

Remember that modules will usually make their own changes to the db, so applying a well-made module usually takes care of itself. In any case, never apply untested changes to prod, always do "rehearsals" on local and staging environments.

You can get the CMS (pages and static blocks) data out of the database by dumping and loading just the cms_* tables from whatever environment development was done on.

Good luck!

Solution 2

I use the same best practices as of any web app while developing magento. I also religiously avoid making any changes to the core files (many documents on the magento wiki ask you to modify core files).

Solution 3

You can avoid the DB-Manipulation (in german): http://blog.tudock.de/startseite/beitrag/2010/09/17/deployment-prozess-eines-magento-shops.html

Solution 4

After a lot of trial and error, we've come up with a workflow that suits us well:

http://www.dhmedia.com.au/blog/perfect-magento-workflow-using-git

Includes database management, all code under source control (with Git), deployments, staging and development sites, multiple developers, multiple environments, etc...

Hope this helps someone!

Share:
19,305
S.D.
Author by

S.D.

I am #SOreadytohelp

Updated on June 19, 2022

Comments

  • S.D.
    S.D. almost 2 years

    I am looking setting up a deployment process for a highly customized Magento site, and was wondering how other people do this.

    I will be setting up dev, UAT and prod environments. All the Magento files will be in source control (SVN). At this stage, I can't see any requirements for changing the DB, so the 3 databases will be manually maintained.

    Specifically,

    • How do you apply Magento upgrades? (Individually in each env, or on dev then roll out, or just give up on upgrades?)
    • What files/folders do leave alone in each environment (e.g. magento/app/etc/local.xml)
    • Do you restrict developers to editing specific files/folders?
    • Do you restrict theme designers to editing specific files/folders?
    • How do you manage database changes?

    Theme Designer Files/Folders

    Designers can restricted to editing the following folders-

    app/design/frontend/your_interface/your_theme/layout/
    app/design/frontend/your_interface/your_theme/template/
    app/design/frontend/your_interface/your_theme/locale/
    skin/frontend/your_interface/your_theme/
    

    Extension Developer Files/Folders

    Extension developers can edit the following folders/files-

    /app/code/local
    /app/etc/modules/<Namespace>_<Module>.xml
    

    Database environment management

    As the store's base URL is stored in the database, you cannot just copy databases between environments. Options include-