Skip to content

Latest commit

 

History

History
445 lines (347 loc) · 31.4 KB

readme.md

File metadata and controls

445 lines (347 loc) · 31.4 KB

SlickStack [ss] - "Alpha ss4a"

SlickStack is a free LEMP stack automation script written in Bash designed to enhance and simplify WordPress provisioning, performance, and security.

NEW! SlickStack websites now receive an "A" grade from SecurityHeaders.com for HTTP headers...

NEW! SlickStack is now "HTTPS Only" and includes our popular Force HTTPS mu-plugin...

NEW! SlickStack now includes a Redis-based object-cache.php by default...

➞ Browse the SlickStack public mirrors: http://mirrors.slickstack.io

➞ Need more help? $40 SlickStack setup service (includes CloudFlare, DNS records, free SSL, and site migration)

Abstract

Most of modern computing history can be traced back to one thing: Unix. Indeed, one of the only things about web servers that hasn't changed much in several decades is the Unix shell (Bash) command language. Keeping the same pragmatism and simplicity in mind that inspired LittleBizzy's managed hosting, SlickStack [ss] is coded entirely in Bash.

While there are clear benefits to programming languages like Python or Ruby, provisioning a server with WordPress isn't very complicated, and every Linux server comes with shell built into it. Plus, let's not forget what happens when typical web agencies rely on advanced dependencies like Ansible... yikes! Onward, then...

Compatibility

SlickStack [ss] works best on VPS servers with KVM virtualization that have at least 2GB RAM from quality network providers such as DigitalOcean, Linode, Vultr, and Amazon Lightsail. The underlying LEMP stack configuration is meant specifically for single-site WordPress installations, and does not support Multisite installations. SlickStack [ss] supports WordPress, WooCommerce, bbPress, and BuddyPress "out of the box" with optimized settings that scale.

Last updated: May 7, 2019

Note: WP-CLI is now functional, although many commands might conflict with SlickStack so be careful. Also, Monit is installed, but is currently non-functional. Git is installed, but is not really tested yet.

LEMP Module Current Version What does SlickStack [ss] customize?
Ubuntu 18.04 (LTS) crontab + gai.conf + sshd_config + sudoers
Nginx (Extras) 1.15.8 nginx.conf + server block
FastCGI Cache 1.15.8 fastcgi-cache.conf
OpenSSL 1.1.0g default config
MySQL 5.7.25 default config (will be customized slightly in future)
PHP-FPM 7.2.17 php.ini + php-fpm.conf + www.conf
Zend/OPcache 3.2.0/7.2.17 (same as above)
WordPress 5.1.1 optional wplite pre-optimized configuration (adds custom mu-plugins)
WP-CLI 2.1.0 default config
Redis 4.0.9 redis.conf
Monit 5.25.1 monitrc
Git 2.17.1 default config
UFW Firewall 0.36 ufw + ufw.conf + user-rules
ClamAV 0.100.x freshclam.conf

Default Ports: 80 (HTTP), 443 (HTTPS), 6969 (SSH)

Installation

Because it’s written purely in Bash (Unix shell), SlickStack [ss] has no dependencies and works on any Ubuntu Linux machine. Unlike heavier provisioning tools like EasyEngine or Ansible, there are no third party languages required such as Python or Docker, meaning a lighter and simpler approach to launching WordPress servers.

The below installation steps assume that you've already spun up a dedicated Ubuntu Linux VPS server (KVM) with at least 2GB RAM memory and that you are now logged in via SSH:

  1. sudo mkdir /var/www/ && sudo chown root:root /var/www/ && sudo chmod 755 /var/www/

  2. sudo nano /var/www/ss-config configure as desired

  3. cd /var/www/ && sudo wget -O ss slick.fyi && sudo chmod 755 ss && sudo bash ss

  4. sudo reboot

NOTE: SlickStack [ss] requires CloudFlare to be activated on your domain before SSL (HTTPS) will be recognized as a fully secure and CA-signed domain, because of its integration with OpenSSL. See below FAQ for more information.

From this point forward, you can manage your SlickStack [ss] server by simply using the sudo bash command on any one of the included ss scripts located within the /var/www/ directory, as needed. However, in most cases there shouldn't be any need for much hands-on management as the server will intelligently run various cron jobs which connect to this GitHub repo (or whichever fork of this repo that your team has setup... be sure to modify all wget sources).

You can also safely re-install SlickStack [ss] using sudo bash ss-install without causing any conflicts or data loss; the installation process is completely idempotent.

Structure

After completing the installation steps above, your /var/www/ directory should look exactly as below. Keep in mind that you should never directly modify the crontab on any SlickStack [ss] server, nor should you modify any of the files appearing below with the exception of ss-config (this does not apply to "WordPress" files found under /var/www/html/)...

/var/www/0-crontab
/var/www/1-cron-often
/var/www/2-cron-regular
/var/www/3-cron-hourly
/var/www/4-cron-quarter-daily
/var/www/5-cron-half-daily
/var/www/6-cron-daily
/var/www/7-cron-weekly
/var/www/8-cron-monthly
/var/www/9-cron-sometimes
/var/www/cache/
/var/www/html/
/var/www/logs/
/var/www/ss-check
/var/www/ss-clean
/var/www/ss-config
/var/www/ss-config-sample
/var/www/ss-dump
/var/www/ss-install
/var/www/ss-muplugs
/var/www/ss-perms
/var/www/ss-update
/var/www/ss-worker
/var/www/wp.sql

...likewise, your /var/www/html/ (WordPress) directory should look like this:

/var/www/html/wp-admin/
/var/www/html/wp-content/
/var/www/html/wp-includes/
/var/www/html/wp-...

Must Use Plugins (WPLite Boilerplate)

If you choose to deploy a SlickStack [ss] server using our free WPLite boilerplate, the installation process will include several Must Use plugins inside your WordPress structure. If you do not wish for these Must Use plugins to be installed, and want a default "vanilla" WordPress installation, choose "wordpress" instead of "wplite" when setting up your ss-config file during the SlickStack setup process:

  • Autoloader: Enables standard WordPress plugins contained in a folder to be placed in the mu-plugins directory and loaded prior to others (forked from Bedrock).
  • Clear Caches: The easiest way to clear caches including WordPress cache, PHP Opcache, Nginx cache, Transient cache, Varnish cache, and object cache (e.g. Redis).
  • CloudFlare: Easily connect your WordPress website to free optimization features from CloudFlare, including one-click options to purge cache and enable dev mode.
  • Custom Functions: Enables the ability to input custom WordPress functions such as filters in a centralized place to avoid the dependence on a theme functions.php file.
  • Dashboard Cleanup: Cleans up the WP Admin backend by disabling various bloat features including nag notices, Automattic spam, and other outdated and pointless items.
  • Delete Expired Transients: Deletes all expired transients upon activation and on a daily basis thereafter via WP-Cron to maintain a cleaner database and improve performance.
  • Disable Attachment Pages: Completely disables media attachment pages which then become 404 errors to avoid thin content SEO issues and better guard against snoopers and bots.
  • Disable Embeds: Disables both external and internal embedding functions to avoid slow page render, instability and SEO issues, and to improve overall loading speed.
  • Disable Emojis: Completely disables both the old and new versions of WordPress emojis, removes the corresponding javascript calls, and improves page loading times.
  • Disable Empty Trash: Completely disables the automatic trash empty for WordPress posts, custom posts, pages, and comments to avoid data loss and encourage manual emptying.
  • Disable Gutenberg: Completely disables the Gutenberg block editor and enables the classic WordPress post editor (TinyMCE aka WYSIWYG) for lighter coding and simplicity.
  • Disable Image Compression: Completely disables all JPEG compression in WordPress including image uploads, thumbnails, and image editing tools, thus retaining original quality.
  • Disable Post Via Email: Completely disables and hides the Post Via Email feature included in WordPress core for stronger security and to simplify the backend settings page.
  • Disable XML-RPC: Completely disables all XML-RPC related functions in WordPress including pingbacks and trackbacks, and helps prevent attacks on the xmlrpc.php file.
  • Error Log Monitor:
  • Force Strong Hashing: Forces all user passwords generated by WordPress to be hashed using Bcrypt, the most secure and popular PHP hashing algorithm currently available.
  • Header Cleanup: Cleans up most of the unnecessary junk meta included by default in the WordPress header including generator, RSD, shortlink, previous and next, etc.
  • Index Autoload: Adds an index to the autoload in wp_options table and verifies it exists on a daily basis (using WP Cron), resulting in a more efficient database.
  • Limit Heartbeat: Limits the Heartbeat API in WordPress to certain areas of the site (and a longer pulse interval) to reduce AJAX queries and improve resource usage.
  • Minify HTML: Tactfully minifies HTML output and markup to remove line breaks, whitespace, comments, and other code bloat to cleanup source code and improve speed.
  • Plugin Blacklist: Allows web hosts, agencies, or other WordPress site managers to disallow a custom list of plugins from being activated for security or other reasons.
  • Remove Query Strings: Removes all query strings from static resources meaning that proxy servers and beyond can better cache your site content (plus, better SEO scores).
  • Server Status: Useful statistics about the server OS, CPU, RAM, load average, memory usage, IP address, hostname, timezone, disk space, PHP, MySQL, caches, etc.
  • SFTP Details: Displays a small Dashboard widget to remind logged-in Admin users of their server SFTP login information for easy reference (uses defined constants).
  • Virtual Robotstxt: Replaces the default virtual robots.txt generated by WordPress with an editable one, and deletes any physical robots.txt file that may already exist.
  • XXX Notices: Occasional notices designed to appear in the WP Admin Dashboard that mention important changes regarding the SlickStack environment (white-labeled).

Defined Constants

The included Must Use plugins that SlickStack [ss] bundles as part of a so-called wplite boilerplate support the following defined constants (add these to the Custom Functions file under /wp-content/functions.php and customize as desired):

/* Plugin Meta */
define('AUTOMATIC_UPDATE_PLUGINS', false); // default = false (only supported by LittleBizzy plugins)
define('DISABLE_NAG_NOTICES', true); // default = true (only supported by LittleBizzy plugins)

/* Clear Caches Functions */
define('CLEAR_CACHES', true); // default = true
define('CLEAR_CACHES_NGINX', true); // default = true
define('CLEAR_CACHES_NGINX_PATH', '/var/www/cache'); // default = /var/www/cache
define('CLEAR_CACHES_OBJECT', true); // default = true
define('CLEAR_CACHES_OPCACHE', true); // default = true

/* CloudFlare Functions */
define('CLOUDFLARE', true); // default = true
define('CLOUDFLARE_API_EMAIL', '[email protected]'); // *must be unique*
define('CLOUDFLARE_API_KEY', '123456789'); // *must be unique*

/* Custom Functions Functions */
define('CUSTOM_FUNCTIONS', true); // default = true

/* Dashboard Cleanup Functions */
define('DASHBOARD_CLEANUP, true); // default = true
define('DASHBOARD_CLEANUP_ADD_PLUGIN_TABS', true); // default = true
define('DASHBOARD_CLEANUP_EVENTS_AND_NEWS', true); // default = true
define('DASHBOARD_CLEANUP_LINK_MANAGER_MENU', true); // default = true
define('DASHBOARD_CLEANUP_QUICK_DRAFT', true); // default = true
define('DASHBOARD_CLEANUP_THANKS_FOOTER', true); // default = true
define('DASHBOARD_CLEANUP_WELCOME_TO_WORDPRESS', true); // default = true
define('DASHBOARD_CLEANUP_WOOCOMMERCE_CONNECT_STORE', true); // default = true
define('DASHBOARD_CLEANUP_WOOCOMMERCE_PRODUCTS_BLOCK', true); // default = true
define('DASHBOARD_CLEANUP_WP_ORG_SHORTCUT_LINKS', true); // default = true

/* Delete Expired Transients Functions */
define('DELETE_EXPIRED_TRANSIENTS', true); // default = true
define('DELETE_EXPIRED_TRANSIENTS_HOURS', '6'); // default = 6
define('DELETE_EXPIRED_TRANSIENTS_MAX_EXECUTION_TIME', '10'); // default = 10
define('DELETE_EXPIRED_TRANSIENTS_MAX_BATCH_RECORDS', '50'); // default = 50

/* Disable Attachment Pages Functions */
define('DISABLE_ATTACHMENT_PAGES', true); // default = true

/* Disable Embeds Functions */
define('DISABLE_EMBEDS', true); // default = true
define('DISABLE_EMBEDS_ALLOWED_SOURCES', 'twitter,facebook,youtube,soundcloud,etc'); // default = none

/* Disable Emojis Functions */
define('DISABLE_EMOJIS', true); // default = true

/* Disable Empty Trash Functions */
define('DISABLE_EMPTY_TRASH', true); // default = true

/* Disable Gutenberg Functions */
define('DISABLE_GUTENBERG', true); // default = true

/* Disable Image Compression Functions */
define('DISABLE_IMAGE_COMPRESSION', true); // default = true

/* Disable jQuery Migrate Functions */
define('DISABLE_JQUERY_MIGRATE', true); // default = true

/* Disable Post Via Email Functions */
define('DISABLE_POST_VIA_EMAIL', true); // default = true

/* Disable XML-RPC Functions */
define('DISABLE_XML_RPC', true); // default = true

/* Force HTTPS Functions */
define('FORCE_HTTPS', true); // default = true
define('FORCE_HTTPS_EXTERNAL_LINKS', false); // default = false
define('FORCE_HTTPS_EXTERNAL_RESOURCES', true); // default = true
define('FORCE_HTTPS_INTERNAL_LINKS', true); // default = true
define('FORCE_HTTPS_INTERNAL_RESOURCES', true); // default = true

/* Force Strong Hashing Functions */
define('FORCE_STRONG_HASHING', true); // default = true

/* Header Cleanup Functions */
define('HEADER_CLEANUP', true); // default = true

/* Index Autoload Functions */
define('INDEX_AUTOLOAD', true); // default = true
define('INDEX_AUTOLOAD_REGENERATE', false); // default = false

/* Limit Heartbeat Functions */
define('LIMIT_HEARTBEAT', true); // default = true
define('LIMIT_HEARTBEAT_DISABLE_DASHBOARD', false); // default = false
define('LIMIT_HEARTBEAT_DISABLE_EDITOR', false); // default = false
define('LIMIT_HEARTBEAT_DISABLE_FRONTEND', true); // default = true
define('LIMIT_HEARTBEAT_INTERVAL_DASHBOARD', 600); // default = 600
define('LIMIT_HEARTBEAT_INTERVAL_EDITOR', 30); // default = 30
define('LIMIT_HEARTBEAT_INTERVAL_FRONTEND', 300); // default = 300

/* Minify HTML Functions */
define('MINIFY_HTML', true); // default = true
define('MINIFY_HTML_INLINE_STYLES', true); // default = true
define('MINIFY_HTML_INLINE_STYLES_COMMENTS', true); // default = true
define('MINIFY_HTML_REMOVE_COMMENTS', true); // default = true
define('MINIFY_HTML_REMOVE_CONDITIONALS', true); // default = true
define('MINIFY_HTML_REMOVE_EXTRA_SPACING', true); // default = true
define('MINIFY_HTML_REMOVE_HTML5_SELF_CLOSING', false); // default = false
define('MINIFY_HTML_REMOVE_LINE_BREAKS', true); // default = true
define('MINIFY_HTML_INLINE_SCRIPTS', false); // default = false
define('MINIFY_HTML_INLINE_SCRIPTS_COMMENTS', false); // default = false
define('MINIFY_HTML_UTF8_SUPPORT', true); // default = true

/* Plugin Blacklist Functions */
define('PLUGIN_BLACKLIST', true); // default = true

/* Remove Query Strings Functions */
define('REMOVE_QUERY_STRINGS', true); // default = true
define('REMOVE_QUERY_STRINGS_ARGS', 'v,ver,version'); // default = v,ver,version

/* Server Status Functions */
define('SERVER_STATUS', true); // default = true
define('SERVER_STATUS_DISPLAY', 'widefat'); // default = none

/* SFTP Details Functions */
define('SFTP_DETAILS', true); // default = true
define('SFTP_DETAILS_SERVER', '123.123.123.123'); // *must be unique*
define('SFTP_DETAILS_USER', 'username'); // *must be unique*
define('SFTP_DETAILS_PASSWORD', 'password'); // *must be unique*
define('SFTP_DETAILS_PORT', '6969'); // default = 6969
define('SFTP_DETAILS_ROOT_DIR', '/var/www'); // default = /var/www
define('SFTP_DETAILS_PUBLIC_DIR', '/var/www/html'); // default = /var/www/html

/* Virtual Robots.txt Functions */
define('VIRTUAL_ROBOTSTXT', true); // default = true

Philosophy

Outside of the so-called Application Layer, so much of the way computers and servers now work has been moved away from in-house teams and specialists and onto "the cloud" that terms like DevOps have become standard among recruiters, companies, and developers alike. Modern web development trends have begun to revolve entirely around concepts such as automation, APIs, cloud services, and beyond — a phenomenon we might refer to as Web 3.0.

While this shift is exciting, there is now a massive and growing disconnect between these emerging technologies and the humans that are expected to implement or benefit from them. Typical small business owners (SMBs), along with independent agencies or freelancers, now face a virtually impossible learning curve if they wish to maintain not only a competitive "webdev" edge, but even to keep up with basic standards in website performance and security.

While Silicon Valley "gurus" and corporations pump out new SaaS services (or incredibly complex Configuration Management tools like Ansible) on a daily basis, the typical small business website is still trying to figure out how to make their contact forms work correctly. The "legacy" shared web hosting monopolies — think EIG or GoDaddy — also have little motivation to education their audience, as perpetuating confusion seems to be a core pillar of their business model.

Thus, before the likes of Google and Amazon and Shopify and Wix take over the entire web and turn it into Wall Street-backed website builders that feed into their private ecosystems, SlickStack hopes to bridge the knowledge gap between emerging technology and old-school web development to empower SMBs to achieve top notch website performance and security by offering a "controlled" LEMP-stack environment with limited options that is perfectly suited to the world's most popular open-source CMS: WordPress.

Comparison

| ... | SlickStack | EasyEngine | ServerPilot | Runcloud | Ansible | Puppet | Salt | Chef | Trellis | AnsiPress | VVV | VCCW | Centminmod | VPSSIM | |:---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:| | 100% Free | Yes | Yes | No | No | | Dependencies | None | Python | Ruby | Python | Python | Python | Ansible | Ansible | Vagrant | Vagrant | (Unix) | (Unix) | | Direct Management | Yes | Yes | No | No | | Shell Commands | Yes | No | No | No | No | No | No | No | No | No | Yes | Yes | | WordPress Focus | Yes | No | No | No | No | Yes | Yes | No | Yes | Yes | No | Yes | | Single Site Focus | Yes | N/A | No | No | N/A | N/A | No | | Email APIs | Yes | N/A | N/A | N/A | No | No | No | No | No | No | | Monitoring | Monit | N/A | None | None | None | None | None | | | | | | | | | |

Others: Moss.sh, Webinoly, VestaCP, OneInStack, OpenResty, ServerPilot, RunCloud

FAQ

Can I use your technical SEO features on non-SlickStack sites?

Yes, you can. If you or your client has a WordPress website on a web host somewhere and can't move it to a SlickStack server for the time being, you can still make use of all our mu-plugins (micro plugins) that are included in SlickStack by simply installing them one-by-one. Or you can install "less" plugins by installing the "parent" plugins instead, such as Speed Demon, SEO Genius, Security Guard.

Why do you use OpenSSL instead of Let's Encrypt?

This is largely a decision that is based on LittleBizzy's web hosting approach, which requires our clients to be behind CloudFlare. As the fastest DNS resolver in the world, it simply doesn't make any sense right now NOT to use CloudFlare, especially since its completely free. By using OpenSSL, which is included in Ubuntu Linux, it means easier installation and configuration, and it never expires either. In contrast, Let's Encrypt is much more complicated to setup and maintain, and their certificates expire constantly after 90 days, meaning your server management software must constantly renew it and manage it. There is really no point in our view to introduce more potential conflicts and failures into SlickStack, when OpenSSL pairs perfectly with CloudFlare's free SSL network, soon to be the largest SSL provider in the world. By using self-signed certs, SlickStack [ss] also avoids the potential of Man-In-The-Middle attacks, meaning even stronger security. This decision might change in the future, but for now we will only be supporting OpenSSL self-signed certicates and assuming an integration with CloudFlare.

What is the complete list of Nginx modules that are installed?

nginx -V
nginx version: nginx/1.15.8
built with OpenSSL 1.1.0g  2 Nov 2017
TLS SNI support enabled
configure arguments: --with-cc-opt='-g -O2 -fdebug-prefix-map=/build/nginx-hFnDHF/nginx-1.15.8=. -fstack-protector-strong -Wformat -Werror=format-security -fPIC -Wdate-time -D_FORTIFY_SOURCE=2' --with-ld-opt='-Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,now -fPIC' --prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid --modules-path=/usr/lib/nginx/modules --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-compat --with-debug --with-pcre-jit --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-http_auth_request_module --with-http_v2_module --with-http_dav_module --with-http_slice_module --with-threads --with-http_addition_module --with-http_flv_module --with-http_geoip_module=dynamic --with-http_gunzip_module --with-http_gzip_static_module --with-http_image_filter_module=dynamic --with-http_mp4_module --with-http_perl_module=dynamic --with-http_random_index_module --with-http_secure_link_module --with-http_sub_module --with-http_xslt_module=dynamic --with-mail=dynamic --with-mail_ssl_module --with-stream=dynamic --with-stream_ssl_module --with-stream_ssl_preread_module --add-dynamic-module=/build/nginx-hFnDHF/nginx-1.15.8/debian/modules/http-headers-more-filter --add-dynamic-module=/build/nginx-hFnDHF/nginx-1.15.8/debian/modules/http-auth-pam --add-dynamic-module=/build/nginx-hFnDHF/nginx-1.15.8/debian/modules/http-cache-purge --add-dynamic-module=/build/nginx-hFnDHF/nginx-1.15.8/debian/modules/http-dav-ext --add-dynamic-module=/build/nginx-hFnDHF/nginx-1.15.8/debian/modules/http-ndk --add-dynamic-module=/build/nginx-hFnDHF/nginx-1.15.8/debian/modules/http-echo --add-dynamic-module=/build/nginx-hFnDHF/nginx-1.15.8/debian/modules/http-fancyindex --add-dynamic-module=/build/nginx-hFnDHF/nginx-1.15.8/debian/modules/nchan --add-dynamic-module=/build/nginx-hFnDHF/nginx-1.15.8/debian/modules/http-lua --add-dynamic-module=/build/nginx-hFnDHF/nginx-1.15.8/debian/modules/rtmp --add-dynamic-module=/build/nginx-hFnDHF/nginx-1.15.8/debian/modules/http-uploadprogress --add-dynamic-module=/build/nginx-hFnDHF/nginx-1.15.8/debian/modules/http-upstream-fair --add-dynamic-module=/build/nginx-hFnDHF/nginx-1.15.8/debian/modules/http-subs-filter

What is the complete list of Nginx packages installed?

dpkg --get-selections | grep -i nginx
libnginx-mod-http-auth-pam                      install
libnginx-mod-http-cache-purge                   install
libnginx-mod-http-dav-ext                       install
libnginx-mod-http-echo                          install
libnginx-mod-http-fancyindex                    install
libnginx-mod-http-geoip                         install
libnginx-mod-http-headers-more-filter           install
libnginx-mod-http-image-filter                  install
libnginx-mod-http-lua                           install
libnginx-mod-http-ndk                           install
libnginx-mod-http-perl                          install
libnginx-mod-http-subs-filter                   install
libnginx-mod-http-uploadprogress                install
libnginx-mod-http-upstream-fair                 install
libnginx-mod-http-xslt-filter                   install
libnginx-mod-mail                               install
libnginx-mod-nchan                              install
libnginx-mod-stream                             install
nginx-common                                    install
nginx-extras                                    install

What is the complete list of PHP-FPM modules installed?

php -m
[PHP Modules]
bcmath
calendar
Core
ctype
curl
date
dom
exif
fileinfo
filter
ftp
gd
gettext
hash
iconv
igbinary
json
libxml
mbstring
mysqli
mysqlnd
openssl
pcntl
pcre
PDO
pdo_mysql
Phar
posix
readline
redis
Reflection
session
shmop
SimpleXML
soap
sockets
sodium
SPL
standard
sysvmsg
sysvsem
sysvshm
tokenizer
wddx
xml
xmlreader
xmlwriter
xsl
Zend OPcache
zip
zlib

[Zend Modules]
Zend OPcache

What is the complete list of PHP-FPM packages installed?

dpkg --get-selections | grep -i php
php-common                                      install
php-igbinary                                    install
php-redis                                       install
php7.2                                          install
php7.2-bcmath                                   install
php7.2-cli                                      install
php7.2-common                                   install
php7.2-curl                                     install
php7.2-fpm                                      install
php7.2-gd                                       install
php7.2-json                                     install
php7.2-mbstring                                 install
php7.2-mysql                                    install
php7.2-opcache                                  install
php7.2-readline                                 install
php7.2-soap                                     install
php7.2-xml                                      install
php7.2-zip                                      install

Why don't use you env-vars (environment variables)?

Teams who use GitHub repos to develop their sites (e.g. dev/stage/production branches) have started using env-vars with systems like Roots Trellis so that their entire codebase can be safely open-source. However, this requires defining the env-vars within the server stack (hidden from public root) so it's not so friendly for many agencies. Since our goal is to support "typical" agencies with mostly frontend knowledge, we felt that reflecting the WordPress setup was a simpler approach and so if using SlickStack there will be two config files (ss-config and wp-config.php)

But shouldn't configs be outside the public root?

There's lots of "should" and theorizing in computer programming, but one reason for the success of WordPress is its pragmatism and user-friendliness. There's plenty to criticize about WordPress from the perspective of things like "12-factor apps" but let's remember that WordPress was around before many of these guidelines and even after better approaches have been founded, WordPress is still the king of CMS software for a reason.

Why ss-config-sample and not ss-config-example?

Because we aim to mirror WordPress Core as much as possible. Because the misnomer has existed in WordPress since the beginning, the WP Core team has no intention of changing it.

Why don't you use TMPFS or similar?

For stability reasons, we don't use any tpmfs (memory-based storage) for caching or otherwise, as it introduces more instability, possible data loss, and doesn't necessarily improve performance. What people people don't realize is Linux already uses tmpfs for its own purposes, and already stores many "requests" in RAM. Best to let the operating system do its thing, and we optimize the software packages installed.

Thanks

Ref

Keywords

slickstack, slick stack, nginx auto installer, optimize lemp stack, best wordpress stack, lemp install script, trellis wordpress, easy engine, lemp auto installer, nginx install script, stackscript