There are plenty of scripts in the internet, some of them even open source, that helps us to install WordPress automatically in a (single) server. Bitnami is the most popular among them. However, none of them met my requirements. I have some design considerations, security requirements and performance checklists. Since none of the existing tools met all my principles, I started developing my own tool to set up a (single) WordPress site in a (tiny) server.
Here are my goals in mind when developing such a tool…
Generic Goals
- In sync with WordPress philosophy of “decision, not options”.
Performance Checklist
- Redis for object cache (memcached as an alternative / backup)
- WP Super Cache as full page cache (with Batcache as an alternative / backup)
- No Apache (long live Apache!)
- PHP 7.x
- Nginx
- Varnish (planned, but no ETA)
- Why Varnish: to quickly deploy geo-distributed nodes
Security Considerations
- only ports 80, 443, and port for SSH are open
- no phoning home
- no external dependencies (such as third-party repositories)
- automatic security updates (with an option to update everything)
- disable password authentication for root
- Nginx (possibly with Naxsi WAF when h2 issue is resolved)
- umask 027 or 077
- ACL integration
- weekly logwatch (if email is supplied)
Implementation Details
- agent-less
- random username (like GoDaddy generates)
- no extra / third-party packages
- automatic restart of MySQL (and Varnish) upon failure
- automatic backup of site (files and DB) to AWS S3
- Integrated wp-cli
- Support for version control (git, hg)
- Composer support
Web Interface
- Based on OpulencePHP or similar framework
- LetsEncrypt support (the famous 1-click installation of SSL)
- Backups download and restoration!
Progress
As you may have guessed, there is a huge work involved. Fortunately, I have started going in the right direction due to somewhat clear goals to back me up.
Please check it out in its Github repo… https://github.com/pothi/wp-in-a-box
What’s developed so far is enough for my current needs. I wouldn’t want to spend too much time on this project, if there are no takers. So, I am awaiting some feedback from early adopters. If you are one of them, please comment here on what you think of its various goals. You may also give a thumbs up by staring it in Github. If you used it and if you notice any issue/s, please feel free to open an issue in Github. All feedback is welcomed!
A huge thanks for Mail-In-A-Box for the inspiration!