Move GLPI to a new server

Relocating a self-hosted GLPI is a bounded job when the database, files directory and key files move together and the console checks pass on the new host. This page explains what to carry, what to leave behind and where the work gets harder.

On this page

Moving GLPI to a new server without losing data or encryption keys

A GLPI move to new hardware, a new VM or a new network zone is mostly three copies: a database dump, an archive of the files directory and a copy of the config directory. The config directory holds glpi.key and glpicrypt.key, and without them the encrypted values in the database cannot be read on the new host. The effort depends on the GLPI version, the plugins installed, the PHP and database versions on both hosts, and how the web server is laid out. A clean instance with no plugins and matching PHP and MariaDB or MySQL versions is usually a small job. An instance with years of custom fields, plugins, LDAP settings and custom web server rules takes more planning and more testing before cutover.

The files archive needs care. GLPI's export procedure dumps the database with mysqldump and archives the files directory while excluding _cache, _cron, _dumps, _graphs, _lock, _log, _rss, _sessions, _tmp and _uploads, as described in the GLPI export procedure. Confirm with your own instance whether _uploads holds documents attached to tickets and assets before you exclude it, because the exclusion list is a default for that procedure and your retention needs may differ. Keep the database dump and the files archive from the same moment, and freeze writes during the copy so the two match.

On the new host, confirm that the PHP and database versions meet the prerequisites for your target GLPI version and that the web server document root points to GLPI's public directory. Before you serve users, run the console checks, including php bin/console db:update if the code version changed, and review the plugin list, since plugins are suspended after a new version is detected and must be reactivated. Check the GLPI update documentation for the exact steps for your version, and rehearse the whole move on a copy before the production cutover.

What moves cleanly and what needs a decision

This table compares each part of a self-hosted GLPI instance with what it becomes on the new host and the migration note that applies. Read it as a checklist: components marked as copied as-is need only verification, while rows about keys, web server layout and plugins need a deliberate choice before cutover.

ComponentEquivalent on the new hostMigration note
DatabaseSame engine and version family on the new server, loaded from a mysqldumpDump with mysqldump and restore before the first console run. Confirm the engine is MySQL or MariaDB supported by your target GLPI version.
Files directorySame files directory path, restored from an archiveExclude the _cache, _cron, _dumps, _graphs, _lock, _log, _rss, _sessions, _tmp and _uploads folders from the archive, then recreate them empty with correct permissions. Confirm whether you need _uploads for attachments before excluding it.
Config directory and keysConfig directory copied intact, including glpi.key and glpicrypt.keyThe keys must travel with the config. Without them, encrypted values in the database cannot be read. Store copies in your secrets process, not in the general file archive.
PluginsPlugin directory copied, then each plugin checked against the target versionSince GLPI 11.0, plugins are suspended when a new version is detected and must be reactivated after major updates. Confirm each plugin supports the target version before reactivating.
Web server vhost and document rootNew vhost pointing the document root to the public directory, with URL rewriting to index.phpDo not point the document root at the installation root. Apache, Nginx, lighttpd and IIS each need their own rewrite rules, so test routing before DNS changes.
PHP extensions and versionPHP version and extensions matched to the target GLPI releaseThe GLPI README lists PHP 8.3 or later for the current main branch, while the GLPI 11.0 docs list PHP 8.2 or later. Confirm the version for your release on the prerequisites page before building the host.
Cron and scheduled tasksCron entry or scheduler recreated on the new hostScheduled tasks do not follow the database automatically in every setup. Confirm the system cron entry exists and runs the GLPI task command on the new host.
TLS certificatesNew certificate issued for the new host name, or the existing one installedCertificates are tied to host names and private keys, which are not part of the GLPI archive. Plan renewal and the DNS cutover date together.

How the cutover runs from dump to decommission

The sequence moves a self-hosted GLPI instance to a new host with a verified database, files and keys, and leaves the old host intact until the new one has proven itself. Each step closes with a check you can record before the next one starts.

  1. Inventory the current versions and plugins

    Record the GLPI version, the PHP version, the database engine and version, the web server, the installed plugins and their versions, and the cron setup on the current host. Compare these against the prerequisites in the GLPI installation docs for the target version, because the target host must match or exceed them. Plugins need their own compatibility check, since GLPI 11 suspends plugins after a new version is detected. The output is a written inventory that the cutover team signs off before any build work starts.

  2. Build the new host to the prerequisites

    Provision the new server or container host with the PHP extensions, database server and web server that the installation docs list for the chosen GLPI version. Set the web server document root to GLPI's public directory rather than the installation root, and configure URL rewriting so requests route through index.php. The check at the end of this step is a clean GLPI install page or a fresh instance that loads over HTTP on the new host, with the database server reachable from the application server only.

  3. Dump the database and archive the files

    Put the old instance into a quiet state, then dump the database with mysqldump. Archive the files directory while excluding the documented cache, cron, dumps, graphs, lock, log, RSS, session, temporary and uploads folders, following GLPI's export procedure. Copy the config directory in full, including glpi.key and glpicrypt.key, because encrypted data in the database cannot be read without them. Store the dump, archive and config copy together with checksums, and confirm they can be read back before the old host is touched again.

  4. Restore the data and run the console checks

    Restore the database, unpack the files archive and place the config directory on the new host, then point the application at the restored database. Run GLPI's console checks and, where the target version requires it, php bin/console db:update. Reactivate plugins one at a time after the update, and check each plugin's own documentation for required steps. The step is complete when the console reports no blocking errors, login works, and a sample of tickets, assets and attachments opens correctly.

  5. Test on a staging copy and run in parallel

    Run the restored instance against a staging copy of real data with a limited group of testers. Test authentication against your directories, scheduled tasks, notification email, and any inventory agents or integrations. Where the business allows, run the old and new hosts side by side for a short period so that differences surface before users depend on the new host. Agents that report to GLPI may need their server address updated, so check agent configuration and confirm that inventory arrives on the new host. The output is a signed test log with any open defects.

  6. Cut over DNS or the load balancer

    Schedule the switch in a change window and lower DNS time to live beforehand if your DNS process requires it. Repoint the DNS record or the load balancer target to the new host, then repeat the sign-in and ticket checks against the public name. Confirm that the TLS certificate, the URL in GLPI's configuration, and any SSO redirect URIs match the new address. The step closes when users reach the new instance and the old host no longer receives traffic.

  7. Keep the old host read-only for rollback

    Keep the old host running but read-only, with its database and files preserved, for a rollback window agreed in advance. Disable writes at the application or database level, and stop scheduled tasks on the old host so it does not send notifications or change data. Record any defects found in the window and decide whether the new host stands. The output is a rollback decision recorded in writing and an agreed end date for the window.

  8. Decommission the old host

    After the rollback window closes and the decision is recorded, retain a final backup of the old host according to your retention policy, then remove its DNS entries, firewall rules, monitoring and agent references. Revoke any credentials that only the old host used and update the asset record in GLPI itself so the old server is shown as retired. The step is complete when the old host has no live services, the final backup is verified, and the change ticket is closed with evidence attached.

Documented export, backup and console paths

GLPI's Help Center describes an export procedure for a local instance that dumps the database with mysqldump and archives the files directory. The archive excludes folders that hold regenerable or transient data, so the copy stays smaller and avoids carrying stale sessions into the new host. Treat the procedure as the starting point for your own runbook, not a complete migration plan, because it does not cover the web server, PHP settings, certificates or scheduled tasks on the destination.

  • Database dump: Run mysqldump against the GLPI database while the application is quiet, and store the output with a checksum.
  • Files archive: Archive the files directory and exclude _cache, _cron, _dumps, _graphs, _lock, _log, _rss, _sessions, _tmp and _uploads as the procedure lists. Confirm each excluded folder against your version, because _uploads holds documents attached to tickets and assets.
  • Excluded folders: Excluded folders are rebuilt by GLPI or are transient, but _uploads is not transient, so it needs its own copy if you use it.
  • Quiet window: Plan the dump and archive for a period when no one is creating tickets or running inventory.
  • Source version: Record the exact GLPI version on the source host so the destination can be installed at the same version first.

Check that the dump restores into a test database and that the archive unpacks with the expected folder structure before you decommission the old host.

Why the keys and the database must move as a pair

The database and the key files must move together, because GLPI stores some sensitive values in encrypted form and the key files are what decrypt them. The config directory holds glpi.key and glpicrypt.key, and the GLPI update procedure treats both as part of the backup set alongside the database and files. A database restored onto the new host without the matching keys can start cleanly and still leave stored credentials, such as external authentication or mail settings, unreadable. Copy the keys from the same moment as the dump, and keep the old host's copies until the new instance has been verified.

Order matters. Stop or quiet user activity, take the mysqldump of the database, archive the files directory with the cache and session folders excluded, and copy the config directory in the same window. A dump taken while technicians are creating tickets, updating assets or running automatic actions can capture rows that reference records written after the files archive was made, so the database and files disagree. Restore the database, place the files and config directory, point the web server at the public directory, then run the console checks before any user signs in. Confirm the exact database and web server versions against the GLPI installation prerequisites for your target release.

Plan a short verification pass before cutover. Log in as an administrator, open a sample of recent tickets and assets, test one configured credential or integration, and confirm that the scheduled tasks and notification queue behave on the new host. If a stored secret fails while everything else looks healthy, the keys are the first thing to compare against the source. Ask your DeployOpen contact or your own platform team to record the file checksums of the keys before and after the move, so the check is a comparison, not a guess.

What drives the effort of a GLPI server move

This table lists the factors that change how much work a GLPI server move takes and which ones recur after go-live. Use it to see which answers you need before asking for a fixed-scope quote, since a move with a large database, many plugins and a version change is a different job from a plain copy to a matching host. The main takeaway is that the version and plugin answers matter more than raw file size.

DriverWhy it changes effortWhat to confirm or request in writing
Database size and engineDump, transfer and restore time grow with data volume. The docs require MySQL 8.0 or MariaDB 10.6 or later for GLPI 11.0, so an older engine adds a prerequisite step.Current engine and version, database size, and whether the target engine matches or differs from the source
Files directory volumeThe archive excludes cache, session and temporary folders, but uploaded documents and generated files can still be large and slow to transfer.Size of the files directory after exclusions, and the transfer method and window
Plugin count and complexityEach plugin must be checked on the new host. Since GLPI 11.0, plugins are suspended when a new version is detected and need reactivation after major updates.Full plugin list with versions, custom or third-party plugins, and who tests each one
Web server and reverse proxy layoutCustom vhosts, rewrite rules, load balancers and proxy headers must be rebuilt so the document root points to the public directory.Current web server, proxy chain, vhost files and any custom rewrite rules
PHP version changeThe target PHP version must meet the GLPI release requirements, and extensions must be installed and tested before the database is loaded.Current and target PHP versions and enabled extensions
Docker image on the targetA containerized target changes where the files, config and keys live, and how volumes and the database connection are configured.Whether the target is Docker or Linux, volume mapping and secret handling
TLS and DNS changesNew certificates, hostname changes and cutover records affect login, agent connections and any SSO redirect URLs.Hostname plan, certificate source, DNS TTL plan and SSO or CAS redirect URIs to update
Inventory agent endpointsAgents and any scripts pointing at the old server must be repointed. Large fleets need a staged change, and some endpoints may be missed.Agent count, how agents are configured and deployed, and the list of systems that call GLPI
Downtime windowA short window needs a tested dump and restore and a rehearsed rollback. A longer window allows a staged or parallel check.Acceptable outage window, cutover approach, and the rollback point defined in advance
Combined GLPI 11 or 12 upgradeMoving and upgrading in one step adds database update work, plugin reactivation and new prerequisites on top of the move.Target GLPI version, whether the upgrade is separate or combined, and the plugin compatibility review
Ongoing key and backup handling (recurring)The config directory must carry glpi.key and glpicrypt.key so encrypted data stays readable. Backups must be repeated after each later move or update.Key custody, backup schedule and who restores and verifies backups after go-live

What usually goes wrong during a GLPI server move

Most GLPI moves fail in small, predictable places: a missing key file, a copied cache folder, or a web server still pointing at the old path. Each risk below is easy to prevent with a check run before cutover, and each one shows up later as a symptom that is harder to trace back to the move.

Missing key files

Without glpi.key and glpicrypt.key in the config directory, the new host cannot decrypt the encrypted data in the restored database, such as stored credentials and secrets. The database restores cleanly, so the failure appears later as unreadable fields or broken integrations. Copy the entire config directory with the database and files, and confirm both key files exist with the same content on the new host before the first login.

Copying cache and session folders

The _cache and _sessions folders hold generated data and login state tied to the old host. Carrying them over can serve stale translations or dashboards, and it can keep users logged in against a host that no longer exists. Exclude _cache, _sessions, _tmp, _lock and the other excluded folders from the archive, then let GLPI rebuild them on first use.

Document root left at the installation root

GLPI must be served from its public directory, with URL rewriting routing requests through index.php. If the new web server points at the installation root, configuration and source files become reachable over HTTP, and the application routes break. Set the document root to the public directory on the new host and test a deep link, not only the home page, before users are redirected.

Dumps taken during writes

A database dump taken while GLPI is processing tickets, inventory or notifications can capture an inconsistent state, with a ticket saved but its history missing. Stop the web server or put users in a maintenance window, pause cron and agent check-ins, then dump. Compare the file and database snapshots taken at the same time, so the two halves of the instance match.

Plugins suspended after version change

Since GLPI 11.0, plugins are suspended when a new version is detected and must be reactivated after major updates. A move that also changes the GLPI version can leave plugin-driven forms, workflows and integrations switched off on day one. Record the plugin list and versions before the move, and plan to reactivate and test each plugin on the new host.

Old endpoints still pointing to the host

Cron jobs, GLPI Agent configurations, LDAP or SSO callback URLs, and email connectors often store the old hostname or run from the old server. Inventory keeps arriving at the retired host, notifications stop, and SSO logins fail with redirect errors. Make a list of every endpoint and scheduled task that references the old host, update each one, and keep the old server read-only until the list is clear.

Questions teams ask before moving GLPI

How much does it cost to move GLPI to a new server?

The cost depends on the size of the database and files directory, how many systems connect to GLPI, whether the new host is built from scratch, and how much testing the change window requires. Most of the effort sits in planning, a rehearsal on a staging host, the cutover itself and checks afterward. No public price applies to this work. Ask for a fixed-scope quote based on a written list of hosts, data volumes, integrations to repoint (such as LDAP, mail and inventory agents) and the number of rehearsals you want. Ask which items are one-time and whether any ongoing support is included or optional.

How long does a GLPI server move take?

The duration is set less by the copy itself than by the change window you can use, the time needed to rehearse on staging, and the number of systems that must be repointed. The database dump and file archive scale with data volume, so measure both on your current host before planning. Agree the window and the rollback point in writing before work starts, and confirm which services must stay available during cutover. Your scope document should state the timeline once those inputs are known.

What does my team need to provide for a GLPI move?

Plan to provide the following before work starts:

  • Administrative access to the current GLPI host, database and web server, with the ability to stop services
  • Access to the new host, including its operating system, PHP and database versions, and network paths
  • A change window approved by the owners of tickets, inventory and integrations
  • A staging host that mirrors production closely enough to rehearse the move
  • A copy of the config directory with glpi.key and glpicrypt.key, stored securely
  • Contacts for LDAP, mail, DNS and any agent or monitoring systems that point to GLPI
Can our own team move GLPI without a partner?

Yes, if you have people who can manage a Linux web server, PHP, a MySQL or MariaDB database and file permissions. The GLPI documentation describes the export and update steps, but the work still requires judgment about cache and session folders, key files, web server document root and post-move console checks. A partner is useful when the team lacks that experience, when the window is tight, or when many integrations must be verified. Compare the internal effort against a fixed-scope quote, and confirm who owns the rollback decision.

Should we combine a GLPI version upgrade with the server move?

Usually not, because combining the two changes makes failures harder to isolate. Moving the server first on the same version gives you a known-good baseline to verify. A version upgrade later means running the update procedure, which requires its own backups and may suspend plugins until they are reactivated. If the upgrade is required on the new host, plan it as a separate step with its own rehearsal. Ask your provider to explain how the plan sequences the move and any upgrade, and what each stage must prove before the next begins.

How does rollback work if the new GLPI server fails?

Rollback depends on keeping the original host intact until the new one is verified. Before cutover, take a database dump and an archive of the files directory, and keep the config directory with its keys. If checks fail, stop writes on the new host, restore the original DNS or load balancer target, and confirm that users can sign in and that the database has no unexpected changes. Agree the point after which rollback is no longer simple, such as when users have created tickets on the new host, and document how that data would be reconciled.

What checks should run on the new GLPI host after the move?

Run the GLPI console checks on the new host to confirm that the database connection, file permissions and configuration load correctly. Then verify sign-in through each authentication method in use, check that scheduled tasks run, confirm that the web server serves only the public directory, and test email notifications and inventory agent connections. Confirm that the glpi.key and glpicrypt.key values match the originals, since encrypted data depends on them. Ask for a written verification checklist as part of the scope.

Official GLPI sources for the move

Before you dump a database or copy a single file, read the official procedures for the move and the version you are running. The GLPI Help Center page on exporting the local database and files describes the dump and archive steps this topic summarizes, and it is the first read for the export itself. Use it to confirm the exact exclusions for the files directory and the current mysqldump options before you script anything, because a procedure written for one release can drift from the next.

The GLPI installation docs update page covers what happens after the files are in place on the new host. It lists the backups that must exist first, including the config directory with glpi.key and glpicrypt.key, and it explains the php bin/console db:update step. Read the section on plugins as well: since GLPI 11.0, plugins are suspended when a new version is detected, so plan to reactivate them deliberately rather than assuming they will carry over unchanged.

The GLPI installation docs prerequisites page sets the target host baseline. Compare the PHP version, the MySQL or MariaDB version and the web server requirements against the new server before you copy anything, and confirm the document root must point to GLPI's public directory with URL rewriting in place. Check these against the release you will run on the new host, since the supported versions differ between GLPI 10 and GLPI 11 and the requirements can change in later releases.

How DeployOpen scopes and delivers a GLPI server move

DeployOpen plans and carries out GLPI server moves inside infrastructure you control, from the written scope through to a documented handover. We treat the database, files directory and config directory with keys as one set that must arrive together and be checked on the new host.

How we scope

  • Inventory the source host, PHP and database versions, web server layout and plugins currently installed
  • Confirm the target host, network path, storage and the GLPI version that will run after the move
  • Agree in writing which directories, keys and plugin reactivation steps are in and out of scope
  • Record a rollback point and the cutover window with your team before any work starts

How we build

  • Dump the database and archive the files directory, excluding cache, session, temporary and log folders
  • Carry the config directory with glpi.key and glpicrypt.key so encrypted data stays readable on the new host
  • Point the web server document root at the public directory and confirm URL rewriting routes through index.php
  • Run the console checks on the new host and test logins, plugins and scheduled tasks on a staging copy first

How we hand over

  • Deliver a runbook listing each archive, checksum, configuration change and console check performed
  • Document the cutover order, rollback steps and the people who approve each stage of the move
  • Walk your administrators through post-move checks, including plugin status and notification queue health
  • Hand over the final scope record so future upgrades start from a known, documented state

How we support

  • Fixed-scope engagements are agreed in writing, with deliverables and timelines set before work starts
  • Ongoing support, upgrades and continuous testing are available as a retainer after the move
  • Ask any partner to confirm how they will handle keys, session data and backup retention for your environment
  • Ask for a quote built from the written scope, since DeployOpen does not publish a price list

Talk to our team.

Tell us what you're working on, whether it's a deployment, an audit, a security test or a cyber range. You'll speak with an engineer who can help you scope it.

  • 30-minute call: free, with no obligation.
  • NDA on request: we can sign before you share details.
  • Clear next steps: a scope and plan after the call.