Server Optimization
APCu
This is a data storing mechanism. It is a rebuild of APC for php7.x+
To install just run this:
sudo apt-get install php-apcu
OpCache
This is a opcode storing mechanism.
These settings are for php7.x. In your php-fpm/php.ini just replace the opcache code with the following:
[opcache] ; Determines if Zend OPCache is enabled opcache.enable=1 ; Determines if Zend OPCache is enabled for the CLI version of PHP opcache.enable_cli=0 ; The OPcache shared memory storage size. opcache.memory_consumption=128 ; The amount of memory for interned strings in Mbytes. opcache.interned_strings_buffer=8 ; The maximum number of keys (scripts) in the OPcache hash table. ; Only numbers between 200 and 100000 are allowed. opcache.max_accelerated_files=32531 ; The maximum percentage of "wasted" memory until a restart is scheduled. opcache.max_wasted_percentage=5 ; When this directive is enabled, the OPcache appends the current working ; directory to the script key, thus eliminating possible collisions between ; files with the same name (basename). Disabling the directive improves ; performance, but may break existing applications. opcache.use_cwd=1 ; When disabled, you must reset the OPcache manually or restart the ; webserver for changes to the filesystem to take effect. opcache.validate_timestamps=1 ; How often (in seconds) to check file timestamps for changes to the shared ; memory storage allocation. ("1" means validate once per second, but only ; once per request. "0" means always validate) opcache.revalidate_freq=2 ; Enables or disables file search in include_path optimization opcache.revalidate_path=0 ; If disabled, all PHPDoc comments are dropped from the code to reduce the ; size of the optimized code. opcache.save_comments=1 ; If enabled, a fast shutdown sequence is used for the accelerated code opcache.fast_shutdown=1 ; Allow file existence override (file_exists, etc.) performance feature. opcache.enable_file_override=0 ; A bitmask, where each bit enables or disables the appropriate OPcache ; passes opcache.optimization_level=0x7FFFBFFF opcache.inherited_hack=1 opcache.dups_fix=0 ; The location of the OPcache blacklist file (wildcards allowed). ; Each OPcache blacklist file is a text file that holds the names of files ; that should not be accelerated. The file format is to add each filename ; to a new line. The filename may be a full path or just a file prefix ; (i.e., /var/www/x blacklists all the files and directories in /var/www ; that start with 'x'). Line starting with a ; are ignored (comments). ;opcache.blacklist_filename= ; Allows exclusion of large files from being cached. By default all files ; are cached. opcache.max_file_size=0 ; Check the cache checksum each N requests. ; The default value of "0" means that the checks are disabled. opcache.consistency_checks=0 ; How long to wait (in seconds) for a scheduled restart to begin if the cache ; is not being accessed. opcache.force_restart_timeout=180 ; OPcache error_log file name. Empty string assumes "stderr". opcache.error_log= ; All OPcache errors go to the Web server log. ; By default, only fatal errors (level 0) or errors (level 1) are logged. ; You can also enable warnings (level 2), info messages (level 3) or ; debug messages (level 4). opcache.log_verbosity_level=1 ; Preferred Shared Memory back-end. Leave empty and let the system decide. ;opcache.preferred_memory_model= ; Protect the shared memory from unexpected writing during script execution. ; Useful for internal debugging only. opcache.protect_memory=0 ; Allows calling OPcache API functions only from PHP scripts which path is ; started from specified string. The default "" means no restriction ;opcache.restrict_api= ; Mapping base of shared memory segments (for Windows only). All the PHP ; processes have to map shared memory into the same address space. This ; directive allows to manually fix the "Unable to reattach to base address" ; errors. ;opcache.mmap_base= ; Enables and sets the second level cache directory. ; It should improve performance when SHM memory is full, at server restart or ; SHM reset. The default "" disables file based caching. ;opcache.file_cache= ; Enables or disables opcode caching in shared memory. opcache.file_cache_only=0 ; Enables or disables checksum validation when script loaded from file cache. opcache.file_cache_consistency_checks=1 ; Implies opcache.file_cache_only=1 for a certain process that failed to ; reattach to the shared memory (for Windows only). Explicitly enabled file ; cache is required. ;opcache.file_cache_fallback=1 ; Enables or disables copying of PHP code (text segment) into HUGE PAGES. ; This should improve performance, but requires appropriate OS configuration. opcache.huge_code_pages=0 ; Validate cached file permissions. ; opcache.validate_permission=0 ; Prevent name collisions in chroot'ed environment. ; opcache.validate_root=0 opcache.file_update_protection=2 opcache.lockfile_path=/tmp
Redis
Redis is an open source Database, in-memory data structure store.
Being by installing the following:
sudo apt-get install redis-server php-redis
Edit the Redis config with this:
sudo nano /etc/redis/redis.conf
Search for the bind command and add your IP to the end of it:
bind 127.0.0.1 YOUR_IP_ADDRESS
Add this at the end of the file
maxmemory 256mb maxmemory-policy allkeys-lru
Open your php.ini, find and replace the following line with:
session.save_handler = redis
In the php.ini also uncomment and replace this line:
session.save_path = "tcp://YOUR_IP_ADDRESS:6379"
- Drupal 8
- Grab the Redis module, enable it on your instance
Make sure the Redis module is enabled before you add these settings into your settings.php in, it will cause a WSOD if you don't
// Redis Settings $settings['redis.connection']['interface'] = 'PhpRedis'; $settings['redis.connection']['host'] = '127.0.0.1'; $settings['cache']['default'] = 'cache.backend.redis'; $settings['cache']['bins']['bootstrap'] = 'cache.backend.chainedfast'; $settings['cache']['bins']['discovery'] = 'cache.backend.chainedfast'; $settings['cache']['bins']['config'] = 'cache.backend.chainedfast'; $settings['container_yamls'][] = 'modules/contrib/redis/example.services.yml';
- Wordpress
- Install the WP Redis plugin
Create a file wp-content/object-cache.php and put this in it:
- Verify by going to wp-admin/plugins.php?plugin_status=dropins , you should see the object-cache.php file in there.
Varnish
Varnish is an HTTP accelerator designed for content-heavy dynamic web sites.
Run these commands
sudo apt-get install apt-transport-https curl http://repo.varnish-cache.org/debian/GPG-key.txt | sudo apt-key add - sudo sh -c 'echo "deb https://repo.varnish-cache.org/ubuntu/ trusty varnish-4.0" >> /etc/apt/sources.list.d/varnish-cache.list' sudo apt-get update sudo apt-get install varnish
Now edit the varnish setup
sudo nano /etc/default/varnish
- Change the line DAEMON_OPTS="-a :6081 \
- to DAEMON_OPTS="-a :80 \
- to DAEMON_OPTS="-a :80 \
- Change the line DAEMON_OPTS="-a :6081 \
LEMP + Drupal
Edit the default vcl
sudo nano /etc/varnish/default.vcl
- Copy this file into it: https://gist.github.com/labboy0276/cae7f121e1abe2321926cdf699702cd0
- Copy this file into it: https://gist.github.com/labboy0276/cae7f121e1abe2321926cdf699702cd0
Edit your hosts file
sudo nano /etc/nginx/sites-available/drupal
- Change the listen port from 80 to 8008
- Change the listen port from 80 to 8008
LEMP + Wordpress
Edit the default vcl
sudo nano /etc/varnish/default.vcl
- Copy this file into it: https://gist.github.com/labboy0276/51a4f12e7db556133824baee7e060cc6
- Copy this file into it: https://gist.github.com/labboy0276/51a4f12e7db556133824baee7e060cc6
Edit your hosts file
sudo nano /etc/nginx/sites-available/digitalocean
- Change the listen port from 80 to 8008
- LAMP + Wordpress
Edit the default vcl
sudo nano /etc/varnish/default.vcl
- Copy this file into it: https://gist.github.com/labboy0276/4ab90d2f1a3b1b4c82942048cc3ed1d1
- Copy this file into it: https://gist.github.com/labboy0276/4ab90d2f1a3b1b4c82942048cc3ed1d1
Edit the config:
sudo nano /etc/apache2/ports.conf
Change the Listen port to 8008
Edit your hosts file:
sudo nano /etc/apache2/sites-available/000-default.conf
- Change the listen port from 80 to 8008
- reboot the server