How to upgrade OJS step by step
Step 1Record the current OJS and server environment
Sign in as Site Administrator and review Administration → System Information. Record the full OJS build number, PHP version, database engine and version, operating environment, active journals, installed languages, theme, enabled plugins, custom code, scheduled tasks, email method, files directory location, and disk usage.
This inventory is the baseline for compatibility decisions and post-upgrade testing. Save screenshots or an export of important settings instead of relying on memory.
Step 2Choose the target release and confirm the upgrade path
Download OJS only from PKP's official release page. Read the target package's docs/README, docs/UPGRADE, release notes, and new config.TEMPLATE.inc.php. Check whether an intermediate release is required for your current version.
Review required plugins in the PKP Plugin Gallery or their official repositories. A plugin or custom theme that works on the current journal may not work on the target release.
Step 3Create a protected staging copy
Copy the production database, OJS files directory, public directory, code, and configuration to a separate staging environment. Point staging to copied data—never to the live database or live private files. Prevent public indexing with authentication or a noindex response, and prevent staging from emailing real users.
Run the entire upgrade on staging first. Record its duration, warnings, errors, manual fixes, and the final validation result. Production should repeat an already-tested procedure.
Step 4Create complete, synchronized, and verified backups
Take a fresh backup immediately before the production upgrade. A recoverable OJS backup normally includes:
- Database export
- Private
files_dir contents - Public directory and uploaded images
- Current application code
config.inc.php- Custom plugins, themes, and locale changes
- Web server and scheduled-task notes
- A tested restoration procedure
Keep the database and files from the same point in time. Verify that the backup files exist, have sensible sizes, can be read, and can be restored in staging.
Step 5Prepare the target server and clean OJS codebase
Confirm the target package's PHP, database, extension, web server, and command-line requirements. Correct resource limits, file permissions, storage space, and paths before starting.
Prepare a clean directory from the official OJS package. Do not unpack the new release over the old application directory. Bring across the required public content and site-specific assets deliberately. Keep the private files directory outside the web-accessible application directory.
Step 6Merge configuration and compatible extensions carefully
Do not blindly replace the new configuration template with an old file. Compare the previous config.inc.php with the target release's config.TEMPLATE.inc.php, preserve necessary database and path values, and account for new, renamed, or removed settings.
Install only target-compatible plugin and theme releases. Reapply custom code as reviewed changes rather than copying entire old core directories into the new package.
Step 7Put production in maintenance mode and run the CLI upgrade
Notify the editorial team, stop new submissions and edits, take the final synchronized backup, and make the production site unavailable to normal users. From the target OJS application directory, run the preflight check with the command-line PHP version intended for the upgrade:
php tools/upgrade.php check
Resolve errors before continuing. When the staging procedure and preflight result are acceptable, run:
php tools/upgrade.php upgrade
Capture the complete command output. Do not close the terminal or interrupt a running database migration because the browser appears idle.
Step 8Verify the upgraded journal before reopening it
A successful command is the beginning of validation, not the end. Test the administrator dashboard and each active journal. Compare record counts and inspect representative old and recent issues.
- Homepage, archives, issue, and article pages
- PDF and supplementary-file downloads
- Administrator, editor, author, and reviewer login
- Submission and editorial workflow
- SMTP email and password reset
- Theme, navigation, blocks, and languages
- Plugins and scheduled tasks
- Search, OAI-PMH, DOI, ORCID, and exports
Review PHP, web server, database, OJS, and scheduled-task logs. Create a new post-upgrade backup only after validation is complete.