DEV Community

Cover image for Composer Install or Update? Best Practices for Safely Updating Composer in Production
shirish rai
shirish rai

Posted on

Composer Install or Update? Best Practices for Safely Updating Composer in Production

When managing PHP applications especially in production Composer can be both a lifesaver and a potential pitfall. Used carelessly, it can introduce bugs or even bring your app down. This post walks you through how to safely update Composer dependencies, explains why composer update should never be used on production, and outlines the right way to manage frequent package upgrades.


🚫 Drawbacks of Running composer update on Production

One of the biggest mistakes developers make is running composer update directly on a production server.

Here’s why this is dangerous:

  • It updates all packages to the latest versions permitted by composer.json, potentially introducing breaking changes.

  • It modifies both composer.json and composer.lock, which can cause your production environment to become out of sync.

  • There’s a risk of app downtime, as new versions may cause HTTP 500 errors or other critical failures.

  • The install process is resource-intensive.

  • If the update fails midway, you could be left with a broken or inconsistent dependency state.

Other risks include:

  • Unintended package upgrades.

  • Lack of staging environment testing.

  • Skipping the standard CI/CD pipeline.

  • Possible download from untrusted sources.


✅ The Correct Approach: Use composer install on Production

When deploying code to production, always use:

composer install --no-dev --optimize-autoloader
Enter fullscreen mode Exit fullscreen mode

This command ensures a clean, performant, and safe deployment.
Let’s break down why these flags matter:


🔍 Why --no-dev Is Critical

The --no-dev flag tells Composer to skip installing packages listed under the require-dev section of composer.json. These are typically tools used only during development and testing.

Why it's important in production:

  • Avoids exposing unnecessary tools that could pose a security risk.

  • Reduces disk space and speeds up deployment.

  • Ensures a lean, minimal footprint optimized for production performance.


🚀 Why --optimize-autoloader Matters

Composer's autoloader can be optimized to improve performance by converting PSR-4/PSR-0 mappings into a class map. When you use --optimize-autoloader, it:

  • Pre-generates a class map of all classes.

  • Reduces filesystem lookups at runtime.

  • Improves request performance and boot time, especially for larger apps.


📦 Safely Updating a Specific Package

Sometimes you might need to update a frequently patched package, like aws/aws-sdk-php. In that case, follow this safer approach:

Step-by-Step Guide:

1> Create a new branch from master:

git checkout -b update-aws-sdk
Enter fullscreen mode Exit fullscreen mode

2> Run the update command locally:

composer update aws/aws-sdk-php
Enter fullscreen mode Exit fullscreen mode

This will:

  • Only update the specified package.
  • Respect version constraints in your composer.json.
  • Avoid touching unrelated dependencies.

3> Test thoroughly in your local or staging environment.
4> Commit and merge the changes back to master.
5> Deploy the updated branch to production.
6> On the production server, run:

composer install --no-dev --optimize-autoloader
Enter fullscreen mode Exit fullscreen mode

🧪 Reminder: Keep All Composer Updates in Source Control

All version upgrades should:

  • Be performed locally or in a CI/CD pipeline.
  • Be committed to source control.
  • Go through a proper deployment workflow.
  • Never originate from the production server.

Top comments (0)