Hardware FixRecommendedDevice not working? Your driver may be the problemCheck updates for common hardware issues.Fix DriversHalloween DealsAmazon USHalloween week deals: useful picks before month-endAmazon US: current deals, useful picks and tech finds.Check DealsPC HealthRecommendedCrashes, freezes, slowdowns? Check your PC nowSpot repairable issues before they interrupt work.Check PC×
Skip to content
VGSources
Blog

How to Deploy a Symfony Application to Production on an Ubuntu VPS

Deploy Symfony safely on an Ubuntu VPS with versioned releases, production PHP-FPM and Nginx configuration, Doctrine migrations, cache warmup, HTTPS, supervised Messenger workers and a tested rollback plan.
Length14 min Posted Quest giverVGSources Team
Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Deploy Symfony as a repeatable release, not as a one-time file copy: verify the application’s PHP and database requirements, harden the Ubuntu VPS, install Nginx and PHP-FPM, publish versioned code, install production dependencies, configure secrets, build assets, run Doctrine migrations, warm the production cache, switch traffic only after checks pass, and supervise Messenger workers. The exact Ubuntu release, PHP package, extensions, database, TLS client and queue transport must match your application’s composer.json and Symfony branch.

What a production Symfony deployment must accomplish

A release has six application-level responsibilities: versioned code, production dependencies, environment configuration, database schema changes, front-end assets, and a usable cache. Symfony’s deployment guidance describes uploading code, installing vendor dependencies, running migrations, and clearing or warming the cache as typical release steps. Server operations add the surrounding controls: Nginx must expose only public/, PHP-FPM must execute the front controller, HTTPS must be enforced, workers must be supervised, and backups and rollback must be tested.

As an Amazon Associate I earn from qualifying purchases.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

“Deploying a Symfony application can be a complex and varied task depending on the setup and the requirements of your application.” — Symfony Documentation, How to Deploy a Symfony Application

Do not treat one command sequence as universal. Package names, PHP-FPM socket paths, required extensions, database clients, asset tooling and Messenger transports vary by Ubuntu release and by application.

#1 Best Overall
Elebase USB to USB C Adapter for iPhone 18 Pro Max,USBC Car Charger Adapter | 4Pack Type C Female to A Male Cable Converter for Apple Duo 17 16 15 14 Plus,iWatch Watch 12 11 10,iPad 9 8 Air,Airpods 5 4
  • Read Before You Buy — No Video Output: These adapters support charging and USB 2.0 data transfer, but cannot transmit video signals. Except for standard USB webcams (which use USB data only), they are not compatible with HDMI/DisplayPort cables, video-capable USB-C hubs, or docking stations with video output.
  • Convert USB-A Ports to USB-C: Designed to connect USB-C earphones, cables, flash drives, card readers, and other USB-C accessories to standard USB-A ports. Plug-and-play with no drivers or software required.
  • Aluminum Alloy Housing: Built with a sturdy aluminum alloy shell that aids in heat dissipation and protects against daily wear and scratches. Designed to maintain a stable and secure connection.
  • Compact & Travel-Friendly: The ultra-compact design allows the adapter to stay plugged into your device without blocking adjacent ports or adding bulk, reducing wear and tear on your original USB ports.
  • 12-Month Warranty: Backed by a 12-month manufacturer warranty for peace of mind. Designed to meet strict quality control standards for reliable everyday performance.

1. Record the compatibility matrix before touching the server

Open the application repository and write down the versions that must agree. The matrix is your installation specification and your rollback reference.

Component What to record Why it matters
Symfony Major/minor branch and framework bundles Supported PHP versions and deployment commands differ between branches.
PHP Required version from composer.json Ubuntu’s default PHP may be too old or too new for the lock file.
Extensions Every extension required by Composer and the application Missing extensions cause install failures or runtime errors.
Database Engine, server version and connection mode Doctrine migrations and SQL syntax depend on the engine and version.
Web server Nginx with PHP-FPM, including the FPM socket The socket path is version- and package-dependent.
Asset pipeline AssetMapper, Encore or another build system; Node version if applicable The release must compile or publish the assets the templates reference.
Messenger Transport names, worker command and retry/failure transport Asynchronous messages require a process manager and operational limits.

Also record the expected application environment values, writable directories, scheduled jobs, outbound services and health-check URL. Resolve incompatibilities in development or staging before provisioning production.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

2. Prepare and harden the Ubuntu VPS

Create a deployment identity

  1. Log in with the provider’s initial account over SSH and apply security updates with the package manager appropriate to your Ubuntu release.
  2. Create a non-root user named deploy, add it to the groups needed for application files, and install an SSH public key for that account.
  3. Open a second SSH session as deploy and verify the key works before changing SSH settings.
  4. After verification, disable direct root login and password authentication in the SSH server configuration if your recovery process supports key-only access. Reload SSH and keep an already-open administrative session until the new policy is confirmed.

Restrict network access

Allow only SSH, HTTP and HTTPS at the host firewall. A typical UFW policy is:

sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable

Use your provider’s firewall as a second boundary when available. Keep a database bound to localhost or a private network when it is on the same VPS or a separate private service; do not expose its public port merely to simplify administration.

Choose the filesystem layout

Use immutable, timestamped releases rather than editing the live directory. One workable layout is:

/var/www/myapp/
├── current -> releases/20261015-120000
├── releases/
│   ├── 20261015-120000/
│   └── 20261014-180000/
└── shared/
    ├── .env.local
    ├── var/
    └── public/uploads/

Keep secrets in shared/.env.local or deployment-injected environment variables, never in Git. Link current/var to shared storage if logs, cache or generated files must survive a release. Link upload storage into current/public/uploads; uploaded files should not be lost when an old release is removed. Set ownership and permissions so the deploy user can publish files and the web-service account can write only the directories Symfony needs.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Set time and recovery basics

Enable time synchronization and choose the timezone deliberately; UTC is common for servers, but the application’s business timezone may differ. Decide where database dumps, uploaded files and server snapshots will live. A backup that remains on the same disk as the VPS is not a complete recovery plan.

3. Install Nginx, PHP-FPM, Composer and database tools

Install Nginx, the PHP-FPM package matching the PHP version in the compatibility matrix, Composer, all required PHP extensions, and the client or server components for your selected database. Ubuntu package names vary by release, so use the package repository and version that actually provide your recorded PHP version instead of copying a version-specific socket path blindly.

Rank #2
Sale
Anker USB-C Hub, 5-in-1 USB Hub for Laptops, 4K HDMI Multiport Adapter | USB C Dongle with 90W Max Power Delivery, 3×5Gbps USB A Data Ports, for MacBook, Dell, and More (Charger Not Included)
  • 5-in-1 USB-C Hub: Experience comprehensive connectivity featuring a Power Delivery input, two USB-A 2.0 ports, a USB-A 3.0 port, and an HDMI port. (Note: The USB-C power delivery input port is only for connecting an external wall charger to power your laptop and cannot power peripheral devices.)
  • 90W Pass-Through Charging: Achieve optimal charging with 90W pass-through power to your laptop, supported by a total input of 100W, with the hub reserving 10W for operational efficiency. (Note: Wall charger not included.)
  • Quick Data Transfers: Accelerate your productivity with rapid data transfers using a high-speed 5Gbps USB 3.0 port and two 480Mbps USB 2.0 ports.
  • 4K HDMI Display: Enhance your visual experience with a hub capable of delivering 4K resolution at 30Hz in both mirror and extend modes. Please note that this hub is compatible with MacBook (macOS 12 and newer), Windows 10 and 11, ChromeOS, and laptops equipped with DP Alt Mode and Power Delivery. Note: This device is not compatible with Linux.
  • What You Get: Anker USB-C Hub (5-in-1, 4K HDMI), welcome guide, 18-month warranty, and our friendly customer service.

After installation, identify the FPM socket, for example with:

ls /run/php/

You may see a name such as php8.3-fpm.sock; use the exact installed name in Nginx. Check the runtime and loaded modules before deployment:

What’s actually slowing this PC down?

Pick the symptom - the matching free tool is one click away.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
php -v
php -m
composer --version
sudo systemctl status nginx
sudo systemctl status php8.3-fpm

Replace php8.3-fpm with the service installed on your VPS. A successful command-line PHP check does not prove that PHP-FPM uses the same binary or configuration, so inspect the FPM service as well.

4. Publish a versioned Symfony release

Fetch code without exposing an incomplete tree

Build the release in a new directory, never inside the directory Nginx currently serves. Fetch a tagged commit or upload an immutable artifact, then record its commit ID and build time. Keep the previous release until the new one has passed verification.

cd /var/www/myapp/releases
mkdir 20261015-120000
cd 20261015-120000
git clone --depth 1 --branch production [email protected]:team/myapp.git .

The repository address above is illustrative; use your actual source host and a read-only deployment credential. If your deployment system already creates an artifact, copy that artifact instead of running Git on the VPS.

Install production dependencies

Provide production environment variables before Composer scripts execute, then install from the lock file:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
export APP_ENV=prod
export APP_DEBUG=0
composer install --no-dev --optimize-autoloader --no-interaction

Use the project’s documented Composer scripts and platform requirements. Do not run a dependency update on the production server: resolve and review dependency changes before creating the release. If Composer reports a missing extension, install the extension that the matrix specifies and repeat the check.

Link shared state and set permissions

Create the shared environment file with mode readable only by the deployment and service accounts that need it. Link shared writable directories into the release:

Rank #3
Sale
Anker USB C Hub, 7in1 Multi-Port USB Adapter, 4K@60Hz USBC to HDMI Splitter | 85W Max PD, 2 USB 3.0 & 1 USBC Data Ports, SD/TF Card Reader, for Laptops/Mac and Other Type C Devices (Charger Not Included)
  • Sleek 7-in-1 USB-C Hub: Features an HDMI port, two USB-A 3.0 ports, and a USB-C data port, each providing 5Gbps transfer speeds. It also includes a USB-C PD input port for charging up to 100W and dual SD and TF card slots, all in a compact design.
  • Flawless 4K@60Hz Video with HDMI: Delivers exceptional clarity and smoothness with its 4K@60Hz HDMI port, making it ideal for high-definition presentations and entertainment. (Note: Only the HDMI port supports video projection; the USB-C port is for data transfer only.)
  • Double Up on Efficiency: The two USB-A 3.0 ports and a USB-C port support a fast 5Gbps data rate, significantly boosting your transfer speeds and improving productivity.
  • Fast and Reliable 85W Charging: Offers high-capacity, speedy charging for laptops up to 85W, so you spend less time tethered to an outlet and more time being productive.
  • What You Get: Anker USB-C Hub (7-in-1), welcome guide, 18-month warranty, and our friendly customer service.
ln -s /var/www/myapp/shared/.env.local /var/www/myapp/releases/20261015-120000/.env.local
rm -rf /var/www/myapp/releases/20261015-120000/var
ln -s /var/www/myapp/shared/var /var/www/myapp/releases/20261015-120000/var
mkdir -p /var/www/myapp/shared/public/uploads
ln -s /var/www/myapp/shared/public/uploads /var/www/myapp/releases/20261015-120000/public/uploads

Adjust paths to the application’s actual writable directories. Never make the entire project writable by Nginx; broad permissions can expose source, configuration or cache contents.

5. Configure production environment and secrets

Symfony reads configuration from the environment and project configuration files. Keep database URLs, application secrets, mail credentials, API tokens and signing keys outside the repository. A production environment must set APP_ENV=prod and APP_DEBUG=0 for console commands as well as web requests.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Check that the deployment account and PHP-FPM receive the same values. A shell export affects only that shell; PHP-FPM receives variables from its service or pool configuration, the environment file mechanism used by the application, or a secrets manager. After changing secrets, restart or reload the service that reads them and clear the cache when configuration is compiled into it.

Do not print secrets while debugging. To inspect effective configuration, use safe checks such as whether a required variable is present, whether the database connection succeeds, and whether a cache directory is writable.

6. Build assets, migrate the database and warm the cache

Compile the application’s assets

Choose the command that matches the project. AssetMapper applications commonly publish mapped assets with a Symfony console command; Encore or another bundler generally requires the Node version declared by the project, npm ci, and its production build script. Do not run both pipelines unless the application uses both.

# Example for a Node-based build
npm ci
npm run build

Keep generated files in the release artifact or in the shared location expected by the application. Verify that templates reference the generated filenames and that Nginx can read them.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Run Doctrine migrations as an explicit release operation

Deploy code that is compatible with the database’s current schema, then migrate deliberately:

APP_ENV=prod APP_DEBUG=0 php bin/console doctrine:migrations:migrate --no-interaction

Review the migration plan before applying it in a critical system. Observe execution time, locks and application errors. A migration that removes a column or changes data may not be reversible even if the migration tool has a down method; take a verified backup and design backward-compatible releases when a rollback may be needed.

Rank #4
Sale
UGREEN USB to USB C Adapter Combo 4-Pack, 10Gbps USB C Converter Space Gray | Data transfer & Fast charging for MacBook, iPhone 17/16/15, iPad, Samsung Galaxy, Apple Watch
  • Dual Converters, Infinite Potential:Includes 2× USB C male to USB A female adapters and 2× USB A male to USB C female adapters. Perfect for a wide range of uses—tablets with Bluetooth keyboards, expand USB ports on macbook, and more. Two different converters for all your daily needs
  • Next-Level 10Gbps & 3A Charging: No more slow 480Mbps, this usb to usb c adapter has a transfer speed of up to 10Gbps, allowing you to do more transferring in less time. This usb adapter fits both USB A and USB C charger, supporting up to 3A fast charging
  • Upgraded Exquisite Craftsmanship: With an aluminum alloy housing and metal connector, the usbc to usb adapter is extremely durable and sturdy. Rigorously tested to withstand more than 10,000 times of plugging and unplugging, ensuring long-lasting performance
  • Broad Compatible: The usb c to usb adapter widely supports all USB C/ USB A devices like laptops, tablets, cellphones, car chargers, and phone chargers. Such as compatible with MacBook Pro/Air 2023/2022, Thunderbolt 4/3 Devices,Apple MagSafe Watch 9/8/7/SE/Ultra, iPad Pro 2022/2021, Samsung Galaxy S23/S20/S10, and iPhone 17/16/15 Pro. Plug and play
  • Please Note: To reach 10Gbps speed, keep the cable under 3.3 ft. For USB A Male to USB C adapters, try flipping the USB C connector. USB C Male to USB A adapters support bidirectional 10Gbps transfer within 3.3 ft

If a migration fails, stop the release. Do not switch the active symlink while the new code expects a schema change that did not complete. Resolve the database error or restore according to the tested recovery procedure, then rerun only after confirming the database state.

Clear and warm Symfony’s production cache

APP_ENV=prod APP_DEBUG=0 php bin/console cache:clear --no-warmup
APP_ENV=prod APP_DEBUG=0 php bin/console cache:warmup

Run these commands from the release directory with the same environment and permissions used by production. Cache warmup must be able to read configuration, connect to services that are required at compile time and write to var/. Treat a warmup failure as a failed release.

7. Configure Nginx and PHP-FPM safely

Nginx’s document root must be the release’s public/ directory, not the project root. Only files intended for browsers belong below public/. Keep .env, src/, config/, vendor/ and deployment metadata outside the document root.

This representative server block routes non-file requests to Symfony and allows only internal execution of the front controller:

server {
    listen 80;
    server_name example.com;
    root /var/www/myapp/current/public;
    index index.php;

    location / {
        try_files $uri /index.php$is_args$args;
    }

    location ~ ^/index.php(/|$) {
        internal;
        include fastcgi_params;
        fastcgi_pass unix:/run/php/php8.3-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        fastcgi_param DOCUMENT_ROOT $realpath_root;
    }

    location ~ .php$ {
        return 404;
    }

    location ~ /. {
        deny all;
    }
}

Replace the domain, path and socket with your values. The internal directive prevents a browser from requesting /index.php directly while still allowing Nginx’s internal rewrite to execute it. The final PHP location returns 404 for any other PHP file, preventing accidental execution of scripts placed in upload directories.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Test and reload without dropping existing connections:

sudo nginx -t
sudo systemctl reload nginx
sudo systemctl reload php8.3-fpm

Use the installed FPM service name. Review Nginx and FPM error logs immediately after the reload.

8. Switch the active release only after checks pass

Run release commands from the new directory, verify its files, and then make the cutover atomic:

Best Value
Sale
Anker USB C Hub, 5-in-1 USBC to HDMI Splitter with 4K Display | 85W Max PD, 1 Powered USB-C 5Gbps & 2 Powered USB-A 3.0 5Gbps Data Ports, for MacBook Pro, MacBook Air, Dell and More (Black)
  • 5-in-1 Connectivity: Equipped with a 4K HDMI port, a 5 Gbps USB-C data port, two 5 Gbps USB-A ports, and a USB C 100W PD-IN port. Note: The USB C 100W PD-IN port supports only charging and does not support data transfer devices such as headphones or speakers.
  • Powerful Pass-Through Charging: Supports up to 85W pass-through charging so you can power up your laptop while you use the hub. Note: Pass-through charging requires a charger (not included). Note: To achieve full power for iPad, we recommend using a 45W wall charger.
  • Transfer Files in Seconds: Move files to and from your laptop at speeds of up to 5 Gbps via the USB-C and USB-A data ports. Note: The USB C 5Gbps Data port does not support video output.
  • HD Display: Connect to the HDMI port to stream or mirror content to an external monitor in resolutions of up to 4K@30Hz. Note: The USB-C ports do not support video output.
  • What You Get: Anker 332 USB-C Hub (5-in-1), welcome guide, our worry-free 18-month warranty, and friendly customer service.
ln -sfn /var/www/myapp/releases/20261015-120000 /var/www/myapp/current
sudo systemctl reload nginx

An atomic symlink change prevents users from seeing a half-copied tree. If you use a load balancer or multiple VPS instances, drain one instance, deploy and check it, then continue to the next. Keep the previous release path recorded so a rollback is a single, known operation.

Free tools Windows power users keep installed

One-click scans. No signup required.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

9. Enable HTTPS and verify the application

Obtain and renew a certificate

Point DNS records at the VPS, ensure ports 80 and 443 reach Nginx, and use a maintained ACME client. For an Nginx-managed certificate, Certbot is one possible implementation:

sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d example.com
sudo certbot renew --dry-run

Package names and the preferred ACME client depend on your Ubuntu release and policy. Confirm the client’s renewal timer or scheduled job, and keep a documented renewal test. Configure HTTP to redirect to HTTPS after certificate issuance, while allowing the ACME challenge method required by your client.

Run a post-deploy checklist

  • Open the home page and a representative authenticated route over HTTPS.
  • Confirm the response contains production settings and no debug toolbar or stack trace.
  • Exercise a database-backed read and, in a safe account, a write.
  • Verify cache writes, session storage, uploaded-file handling and generated assets.
  • Test outbound mail, webhooks and API integrations with non-destructive requests.
  • Call the application’s health endpoint, if one exists, and check its dependency policy.
  • Inspect Nginx, PHP-FPM and Symfony logs for 4xx, 5xx, authentication and database errors.
  • Confirm the certificate chain, hostname and renewal schedule.

10. Keep Symfony Messenger workers alive

If the application uses asynchronous Messenger transports, a web request only enqueues a message; a separate consumer must process it. Run consumers under Supervisor or systemd, not in an SSH shell or an ad-hoc background process.

Supervisor example

[program:myapp-messenger]
command=/usr/bin/php /var/www/myapp/current/bin/console messenger:consume async --time-limit=3600 --memory-limit=256M --no-interaction
directory=/var/www/myapp/current
user=www-data
numprocs=2
autostart=true
autorestart=true
stopasgroup=true
killasgroup=true
stdout_logfile=/var/log/myapp-messenger.log
stderr_logfile=/var/log/myapp-messenger-error.log

Use the PHP binary and transport name installed by your application. The one-hour time limit and 256 MB memory limit are example bounds, not universal tuning values; measure queue latency and memory usage, then set limits that allow a message to finish while forcing periodic recycling. Configure Supervisor, reread its files and restart the program after validation.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

systemd alternative

[Unit]
Description=MyApp Symfony Messenger consumer
After=network.target

[Service]
User=www-data
WorkingDirectory=/var/www/myapp/current
ExecStart=/usr/bin/php bin/console messenger:consume async --time-limit=3600 --memory-limit=256M --no-interaction
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

Save the unit under the systemd service directory, run a daemon reload, enable it at boot and start it. Set environment variables through the unit or the same shared configuration mechanism used by PHP-FPM.

Restart workers during a release

  1. Stop accepting new work briefly or deploy the backward-compatible code first.
  2. Ask workers to finish their current message and stop gracefully with Symfony’s worker-stop command.
  3. Build, migrate and warm the new release.
  4. Switch the current symlink.
  5. Restart or reload the process manager so workers execute the new code.
  6. Inspect queue depth, failed messages and worker logs.

Keep message handlers compatible with both the old and new schema during a rolling deployment. A worker killed mid-message may trigger a retry, so handlers should be idempotent where practical.

11. Operate the VPS after deployment

Centralize and retain Nginx access/error logs, PHP-FPM logs, Symfony application logs and worker output. Monitor the signals that reveal user impact or an approaching failure:

  • Disk space and inode use, especially under var/, logs and uploads.
  • Memory, CPU and load, including PHP-FPM process saturation.
  • HTTP status rates, latency and failed health checks.
  • Database connectivity, connection exhaustion and backup success.
  • Messenger queue depth, processing age, retries and failed-message count.
  • Certificate expiry and renewal job status.

Back up the database and uploaded files on a schedule appropriate to their recovery-point objective, store copies outside the VPS, and periodically restore a backup in a non-production environment. Document the active release ID, migration version, environment source, worker configuration and the person authorized to roll back.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

12. Roll back without guessing

Rollback is a decision tree, not merely a Git checkout.

  1. Identify whether the fault is code, configuration, an asset build, a worker or a database migration.
  2. Stop or drain workers if they could consume messages with incompatible code.
  3. If the database schema remains compatible, point current back to the last known-good release and reload Nginx/PHP-FPM as required.
  4. If a migration changed or removed data, do not blindly run a down migration. Restore or repair from the verified database recovery plan, preserving evidence and checking application consistency.
  5. Restart workers on the known-good release, inspect failed messages and verify the health checklist.
  6. Record the incident and the exact release, migration and configuration state that caused it.

Test this procedure in staging before production depends on it. Versioned releases make code rollback fast; they cannot automatically undo irreversible data changes.

Deployment approaches compared

Approach Release safety Operational complexity Downtime behavior Worker handling Recovery
In-place SSH edits Low: users can observe a partially changed tree Low initially, high during incidents Often requires a maintenance window or restart Manual stop and restart; limits are easy to forget Depends on an untested copy or Git checkout
Versioned directories with an active symlink High for code: validation precedes an atomic cutover Moderate; requires shared-state and cleanup rules Usually no application downtime for a single instance Process manager restart after the symlink switch Fast code reversal; migrations still need a plan
Scripted CI/CD or deployment tool High when it builds, checks and promotes immutable artifacts Higher setup, lower repetition cost Can use health-checked or rolling cutovers Worker draining, limits and restarts can be codified Release metadata and automated checks improve repeatability
Managed database and separate file storage Separates application failure from VPS disk failure More services and access policies to operate Database or storage maintenance can be isolated Workers still require a process manager Provider snapshots complement, but do not replace, tested restores

Common failures and precise fixes

Symptom Likely cause Checks and fix
502 Bad Gateway FPM service stopped or wrong socket Check the FPM service status, confirm the socket under /run/php/, update fastcgi_pass, test and reload Nginx.
404 for every Symfony route Wrong document root or missing front-controller fallback Root Nginx at current/public and verify try_files $uri /index.php$is_args$args.
Direct PHP files download or execute Overly broad PHP location Allow only the internal index.php location and return 404 for other PHP paths.
Cache warmup cannot write Shared var/ ownership or symlink permissions Check the effective PHP-FPM user, directory ownership and free disk space; do not make the whole project world-writable.
Composer platform error PHP version or extension mismatch Compare composer.json requirements with CLI and FPM versions, install the required extension or select a supported PHP package.
Migration fails or locks tables Incompatible SQL, insufficient privileges or production data size Stop the cutover, inspect the migration and database logs, restore the backup if needed, and redesign for a compatible rollout.
Workers repeatedly restart Fatal handler error, memory exhaustion or invalid environment Read worker stderr and Symfony logs, run the same command as the service user, correct configuration, then tune time and memory limits.
Assets are missing after cutover Build omitted, wrong public path or shared upload link absent Run the project’s asset build, inspect generated files under public/, and verify Nginx can read them.
HTTPS renewal fails Port blocked, DNS mismatch or ACME timer disabled Run the client’s dry-run renewal, inspect its logs and firewall, and confirm the renewal timer is enabled.

Release checklist

  • Compatibility matrix reviewed against the application’s lock file and Symfony branch.
  • Non-root SSH access tested; firewall exposes only required ports.
  • PHP-FPM socket, extensions, Composer and database connectivity verified.
  • New release built outside the active directory with production dependencies.
  • Secrets supplied outside Git and APP_ENV=prod, APP_DEBUG=0 confirmed.
  • Assets compiled, migrations reviewed and run, cache cleared and warmed.
  • Nginx root points to public/; direct non-front-controller PHP access denied.
  • HTTPS certificate issued, redirected and renewal dry-run successful.
  • Health, authenticated, database, cache, upload, mail and integration checks passed.
  • Messenger workers supervised, bounded by time or memory, and restarted on the new release.
  • Logs, metrics, backups and rollback instructions are available to the on-call operator.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

Leave a Reply

Your email address will not be published. Required fields are marked *

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

More quests from Patch Notes

  1. How to Set Up a RedM (RDR2) Server in 2026: License Key, txAdmin and server.cfg, Step by StepBlog11min
  2. Best RedM (RDR2) Server Hosting in 2026: Comparing Four Hosts on Slots, Memory and PriceBlog10min
  3. How to Host a Mindustry Server in 2026: server-release.jar, Port 6567 and the Commands That MatterBlog7min
Recommended PC Tool
Recommended PC Tool
PC Slower Than It Used to Be?Free scan - under a minute
Outdated Drivers Are Slowing You DownFree scan - exact matches

Two free Windows tools

One Free Minute Could Fix That PC

Before you go - each of these free tools takes about a minute and tackles what quietly slows a Windows PC down.

Special offer. View Outbyte info, uninstall instructions, EULA, and Privacy Policy.