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
- Retry helper
- 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
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
.
Preloading
If you run your application on PHP 7.4 or greater then you can take advantage of preloading for an additional performance boost. The app.generate_preloader
command will generate a preloader script containing all core classes that all application will usually need in a web context.
php app/reactor app.generate_preloader
The preloader script will be generated in the app/storage/
directory by default but you can override the output path using the output-path
flag of the preloader generator.
You can also add your own or additional Mako core classes to the preloader by adding a preload.php
config file to your app/config/
directory.
<?php
return
[
app\controllers\Index::class,
mako\database\connections\MySQL::class,
];
Note that the
app.generate_preloader
command will automatically add any missing dependencies to the list of preloaded classes to ensure full linking of classes, interfaces and traits.