Getting started
Routing and controllers
Command line
Databases (SQL)
Databases (NoSQL)
Security
Packages
Learn more
- Array helper
- Caching
- Collections
- Command bus
- Date and time
- Events
- File system
- HTML helper
- Humanizer
- Image manipulation
- Internationalization
- Logging
- Number helper
- Pagination
- Sessions
- String helper
- URL builder
- UUID helper
- Validation
- Views
Official packages
Deployment
Mako works well with all major webservers but we suggest using Nginx along with php-fpm for optimal performance.
Server configuration
Nginx
Basic Nginx configuration that you can build upon:
server
{
listen 80;
server_name example.org;
root /srv/www/mako/htdocs/public;
index index.php;
access_log /srv/www/mako/logs/access.log;
error_log /srv/www/mako/logs/error.log;
location /
{
try_files $uri $uri/ /index.php?$query_string;
}
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
location ~* \.php$
{
try_files $uri =404;
include fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
You can also use php-fpm over a unix socket instead of tcp. Just make sure that the rlimit_files value is lower or equal to the file descriptor limit at the OS level.
Optimize Composer autoloading
You should consider running the following command as part of your deployment process as it will generate an optimized class autoloader.
composer dump-autoload --optimize --no-dev --classmap-authoritative
Configure PHP for performance
OPcache
You should make sure that your production server has the OPcache extension installed and enabled. OPcache will improve PHP performance by storing your application as compiled bytecode in shared memory, thereby removing the need for PHP to load and parse scripts on each request.
The following OPcache settings have been known to work well with a Mako application in production:
opcache.memory_consumption=256
opcache.interned_strings_buffer=16
opcache.max_accelerated_files=20000
opcache.validate_timestamps=0
opcache.fast_shutdown=1
Cachetool can be used to check the OPcache status. This is useful if you want to see if you need to tweak some of the configuration values.
Note that setting
validate_timestamps
to0
tells OPcache to never check PHP files for changes. This is great for performance but it means that you'll have to clear the bytecode cache after each deployment to ensure that your files are recompiled.This can be done by reloading or restarting the php-fpm process, by calling
opcache_reset()
(this must be done via php-fpm and not php-cli) or by usingcachetool
.