Complete Guide to Open Journal Systems (OJS) Installation & Server Architecture
An end-to-end technical guide to deploying production-grade Open Journal Systems (OJS 3.3, 3.4, and 3.5). Covers Linux server provisioning, web server architecture, database tuning, outside-webroot file security, and automated backups.
Real Problem
Most academic journals fail or experience crippling downtime during peak submission deadlines because they run OJS on underpowered shared hosting stacks without proper PHP-FPM sizing, database connection pooling, or secure outside-webroot directory partitioning.
Practical Solution
Deploy an enterprise Ubuntu or AlmaLinux server with Nginx reverse proxy, tuned PHP-FPM workers, dedicated MariaDB/MySQL database tuning, isolated outside-webroot storage for submitted manuscripts, and strict file permission hardening.
Architecture Overview for Production Open Journal Systems
Open Journal Systems (OJS), developed by the Public Knowledge Project (PKP), is the world’s leading open-access scholarly publishing platform, powering over 30,000 journals globally. While standard content management systems serve static blog posts, OJS manages a complex, multi-stage state machine encompassing submission intake, double-blind peer review, copyediting, proofreading, JATS XML production, and long-term OAI-PMH metadata harvesting.
Running OJS reliably requires an architecture that separates the web tier, application runtime, database storage, and persistent file repository. A failure in any one of these components risks manuscript corruption, reviewer deanonymization, or indexing delisting by Google Scholar and Crossref.
Operating System and Base Infrastructure Selection
For mission-critical journal hosting, Ubuntu Server 22.04 LTS or 24.04 LTS provides the ideal stability balance with long-term security updates. Alternatively, enterprise Red Hat derivatives like AlmaLinux 9 or Rocky Linux 9 offer robust SELinux integration.
A standard production journal publishing 50 to 200 articles annually requires a minimum of 2 vCPUs, 4GB of RAM, and 50GB of NVMe SSD storage. High-volume university presses running multi-journal portals hosting 10+ journals should start at 4 vCPUs, 16GB RAM, and 200GB+ NVMe storage with separate object storage or NFS mounts for galleys.
Web Server Layer: Nginx vs Apache with PHP-FPM
While Apache with mod_php was historically common for legacy OJS 2.x, modern OJS 3.3, 3.4, and 3.5 run significantly faster under Nginx coupled with PHP-FPM. Nginx handles static asset delivery (CSS, JS, journal banners, author headshots) with minimal memory overhead while passing dynamic editorial requests to PHP-FPM Unix sockets.
For institutions requiring .htaccess flexibility or Apache-specific modules, Apache with mpm_event and php-fpm (via mod_proxy_fcgi) is strongly recommended over the outdated and memory-hungry mpm_prefork.
Database Architecture: MariaDB and MySQL Configuration
OJS relies heavily on relational integrity across tables like submissions, publication_settings, author_settings, and review_assignments. Using MariaDB 10.6+ or MySQL 8.0 with InnoDB is mandatory. The database must be configured with utf8mb4 character set and utf8mb4_unicode_ci collation to handle multilingual academic manuscripts containing complex mathematical symbols, Greek letters, and non-Latin character sets.
Key MySQL configuration parameters in my.cnf must include setting innodb_buffer_pool_size to 60-70% of available memory on dedicated database nodes, enabling innodb_file_per_table, and setting max_connections to handle traffic spikes during submission deadlines.
File System Partitioning and Manuscript Security
One of the most frequent security blunders in OJS deployment is setting the files_dir inside the public web directory. When files are stored inside public_html, malicious actors can execute path traversal attacks or directly download confidential pre-publication drafts.
The files repository must be created in a dedicated path such as /var/ojs_files/ with permissions set to 750 owned by the web server user (www-data or nginx). Web server configuration blocks must strictly prohibit direct HTTP access to this location.
Automated Backup Protocols and Disaster Recovery
Academic integrity hinges on data permanence. A comprehensive OJS backup strategy must perform daily dumps of the MySQL/MariaDB database, rsync replication of the outside-webroot files directory, and versioned backups of config.inc.php and custom plugins. Backups must be encrypted and pushed to offsite cloud storage (such as AWS S3 or Backblaze B2) with a 30-day retention window.
Step-by-Step Action Plan
Provision Hardened Linux Server
Deploy Ubuntu 22.04 LTS or 24.04 LTS with 4GB+ RAM, 2 vCPUs, and NVMe SSD storage with SSH key-only authentication.
Install PHP & Required Extensions
Install PHP 8.1 or 8.2 with php-fpm, php-cli, php-mysql, php-xml, php-mbstring, php-curl, php-gd, php-intl, and php-zip.
Configure MariaDB with UTF-8 Support
Create a dedicated database using utf8mb4 character set and utf8mb4_unicode_ci collation with innodb_file_per_table enabled.
Partition Files Directory Outside Webroot
Create an isolated /var/ojs_files directory outside the public web root (/var/www/html) owned by www-data with 750 permissions.
Deploy Nginx Reverse Proxy & SSL
Configure Nginx with FastCGI microcaching, HTTP/2, security headers, and Let’s Encrypt automated TLS certificate renewal.
Execute CLI Installation
Run the OJS command-line installer via php tools/install.php for reproducible, error-free database initialization.
Questions People Usually Ask
Why should OJS files_dir always be outside the public web root?
The files directory stores unpublished manuscripts, blind peer review reports, and confidential author correspondence. Placing it outside the web root prevents direct HTTP URL access, ensuring all downloads pass through OJS role-based access authorization.
What are the minimum server requirements for OJS 3.4 and 3.5?
For OJS 3.4 and 3.5, the minimum production requirements are PHP 8.1 or 8.2, MySQL 8.0 or MariaDB 10.5+, 4GB RAM, and 50GB NVMe storage. Shared hosting plans typically crash due to memory execution limits and missing exec() privileges.
Can OJS run multiple academic journals on a single installation?
Yes, OJS is built natively as a multi-tenant platform. A single codebase and database can host hundreds of individual journals with distinct domain names, editorial boards, and branding themes.
Need Enterprise OJS Server Deployment?
AcademiaTech provisions hardened, high-availability OJS server environments tailored to university research repositories and high-impact journals.