Skip to content

Server Requirements

Martijn Gastkemper edited this page Feb 12, 2020 · 21 revisions

Garp 3 Hosting Server requirements

PHP

  • PHP 7.1 works, but security support stopped december 2019
  • PHP 7.2 works, but has security support until 30 nov 2020
  • PHP 7.3 preferred version
  • PHP 7.4 support has been added, but it's in beta
  • PHP 8.0 not supported

PHP Extensions (minimal)

  • ctype
  • dom
  • gd library (default)
  • mbstring
  • memcached
  • pcre
  • PDO
  • pdo_mysql
  • Reflection
  • session
  • SPL
  • zip

PHP Extensions (preferred)

PHP extensions Not strictly required, but highly recommended for performance and functionality reasons.

  • APC
  • curl
  • hash
  • iconv
  • json
  • posix
  • SimpleXML
  • zlib

Other PHP requirements

  • fopen wrappers must be enabled.
  • The same PHP version has to be available on the command line.

Test PHP settings

To test the installed PHP extensions for the CLI run php -m.

To test in the webserver context create a file index.php in the document root of the webserver. Open the url to your webserver to get the list with available PHP extensions:

<?php
print_r(get_loaded_extensions());
?>

To test CLI and webserver use the same PHP version run php --version on the CLI. And replace the content of the previously created file and reload the page. The PHP version used by the webserver will be shown.

<?php
phpinfo();
?>

Afterwards, please make sure there is no publicly available file that calls phpinfo(), since this is considered a security risk.

Database

A minimum version of MySQL 5.7 or MariaDB 10.2, with:

  • an account with full permissions except GRANT
  • a separate production and a staging database
  • Optional but preferred: global setting default_week_format = 3.

MySQL configuration

Configuration:

[mysqld]
sql_mode=NO_ENGINE_SUBSTITUTION,NO_AUTO_CREATE_USER,STRICT_ALL_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ZERO_IN_DATE,NO_ZERO_DATE
skip-external-locking
explicit_defaults_for_timestamp = 1

For production: database- and username: <projectname>_p

For staging: database- and username: <projectname>_s

Due to MySQL restrictions can be shortened.

Test the configuration

Run mysql --version to check the installed version of MySQL or MariaDB.

To test the values of the required configuration execute this query:

SHOW variables WHERE variable_name IN ('sql_mode', 'skip-external-locking', 'explicit_defaults_for_timestamp')

To execute it from the CLI add the query to this command: mysql -e "{THE QUERY}".

Other variables could be checked by adjusting the strings between the brackets.

Web server (f.i. Apache)

  • With a folder /public as webroot, within a writable folder
  • with mod_rewrite module enabled (or equivalent)
  • with mod_setenvif module enabled
  • ability to call mod_rewrite commands from .htaccess files

Testing

To list the active Apache module run apachectl -M or httpd -M on the CLI.

Other packages / services

  • Memcache
  • Git client on CLI
  • Communication with GitHub: run ssh -T git@github.com to test it.
  • SSH access, with write permissions in a folder which contains the /public webroot.

On permissions / file ownership: If the webserver php user (f.i. apache) differs from the ssh user, one user should be able to modify and delete files that were created by the other user, and vice versa. This should function without any manual actions, for instance through a shared group or with an extension such as suphp.

  • cronjob and at (Unix scheduling daemon) support
  • nl_NL + en_US locales installed
  • vim, or at least vi editor

Domains

In addition to the production server there needs to be a staging environment. This does not need to be a separate physical server or vps, but there needs to be a staging.example.com url (where example.com is the url of the live / production site) which points to a vhost which is separated from the production environment. A separate SSH-user for the staging environment is preferred.

Diskspace

  • Approx. 300 MB for platform- and application code
  • Uploaded images × 2 (for scaling)
  • Media and documents

Required: Total space x2 (for production + staging server)

Memory

We heavily prefer being able to set max_execution_time and memory_limit from PHP. If we are not able to do that but if the situation will still require more working memory, we will request an increase.

SSH

  • SSH account with access to at least 1 level above webroot.
  • SSH user needs to have access to MySQL, Git, PHP as well as the software requirements as listed above.
  • We heavily prefer public key authentication over a user / password setup.
  • We need SSH access from the webserver to github.com, so please keep port 22 open to at least this domain.

We also need to be able to view logs, especially error logs. Normally this would consist of the correct disk permissions on the logs directory.

Separate vhost for staging environment

staging.<domain>

This staging vhost needs to point to a different disk location than the production vhost. Same or different server instance.

Clone this wiki locally