-
Notifications
You must be signed in to change notification settings - Fork 0
Home
Xbot-me edited this page Jun 23, 2026
·
3 revisions
PulseDeploy is a modular Bash automation toolkit for spinning up production-ready Linux servers in minutes β on any major VPS provider or AWS EC2.
This wiki covers everything from quick installation to advanced per-module usage, troubleshooting, and contribution guides.
| Page | Description |
|---|---|
| Home | You are here |
| Installation | How to clone and run PulseDeploy |
| Supported OS & Distros | Ubuntu, Debian, Amazon Linux, Rocky Linux |
| Stacks | LEMP, LAMP, Node.js setup details |
| Services | Redis, Docker, Firewall, Certbot, Swap, PHP Tuning |
| AWS EC2 Guide | EC2-specific setup, Security Groups, IMDSv2 |
| Troubleshooting | Common errors and fixes |
| Changelog | Version history |
| Flags & Non-Interactive Mode | CLI flags, env vars, AWS user-data, cloud-init |
git clone https://github.com/Xbot-me/PulseDeploy.git
cd PulseDeploy
chmod +x bootstrap.sh scripts/**/*.sh
sudo bash bootstrap.shThe interactive wizard will:
- Auto-detect your OS and version
- Ask which stack to install (LEMP / LAMP / Node.js / skip)
- Let you toggle optional services
- Show a full summary before making any changes
| Stack | Components |
|---|---|
| LEMP | Nginx + PHP-FPM (8.1/8.2/8.3) + MySQL |
| LAMP | Apache + PHP (8.1/8.2/8.3) + MySQL |
| Node.js | Node LTS + PM2 + Nginx reverse proxy |
| Service | What it does |
|---|---|
| Firewall | UFW (Debian/Ubuntu) or firewalld (RHEL/Amazon Linux) + fail2ban |
| Redis | Caching layer β Unix socket or TCP, auto-sized maxmemory |
| Docker | Docker Engine + Compose v2, log rotation, weekly prune cron |
| Certbot | Let's Encrypt SSL with auto-renewal cron |
| Swap | Auto-sized swap file based on detected RAM, swappiness=10 |
| PHP Tuning | PHP-FPM pool tuning, OPcache JIT, php.ini hardening |
| Distro | Versions | Notes |
|---|---|---|
| Ubuntu | 20.04, 22.04, 24.04 | Full support |
| Debian | 11 (Bullseye), 12 (Bookworm) | Full support |
| Amazon Linux | 2, 2023 | AWS-aware β IMDSv2 + Security Group hints |
| CentOS / Rocky / AlmaLinux | 8, 9 | SELinux-aware, Remi repo for PHP |
Every install includes hardened defaults out of the box:
-
server_tokens off/ServerTokens Prodβ hides server version from HTTP headers - Blocked access to
.env,.git,.sql,.log,.bak,.shfiles via web server rules - HTTP security headers on every request (
X-Frame-Options,X-Content-Type-Options,Referrer-Policy) - fail2ban β SSH banned after 3 failed attempts for 24 hours
-
MySQL β root password auto-generated, saved to
/root/.my.cnf(chmod 600), test DB removed -
PHP β
expose_php = Off, memory and upload limits set for production
PulseDeploy/
βββ bootstrap.sh # Main wizard entry point
βββ scripts/
β βββ os/ # Per-distro package/firewall abstractions
β β βββ ubuntu.sh
β β βββ debian.sh
β β βββ amazon_linux.sh
β β βββ centos_rocky.sh
β βββ stacks/ # Stack installers
β β βββ lemp.sh
β β βββ lamp.sh
β β βββ node.sh
β βββ services/ # Optional service installers
β βββ firewall.sh
β βββ redis.sh
β βββ docker.sh
β βββ certbot.sh
β βββ swap.sh
β βββ php_tune.sh
βββ config/
β βββ nginx/default.conf # Production Nginx template
β βββ apache/vhost.conf # Production Apache vhost
βββ .github/
βββ workflows/ci.yml # ShellCheck + config validation CI
βββ ISSUE_TEMPLATE/ # Bug report & feature request forms
βββ PULL_REQUEST_TEMPLATE.md
Every module is independently sourceable β no need to run the full wizard on an existing server:
# Tune PHP-FPM only
source scripts/os/ubuntu.sh
source scripts/services/php_tune.sh
tune_php_fpm
# Install Docker only
source scripts/os/ubuntu.sh
source scripts/services/docker.sh
install_docker
# Set up Redis only
source scripts/os/debian.sh
source scripts/services/redis.sh
install_redisAfter running PulseDeploy, make sure to:
- Delete
/var/www/html/info.php(PHP test page β exposed by default after install) - Run
certbot --nginx -d yourdomain.comto issue SSL - Point your domain DNS A record to your server IP
- Check fail2ban:
fail2ban-client status sshd - Check firewall:
ufw statusorfirewall-cmd --list-all - Test Redis:
redis-cli pingβ should returnPONG - On AWS: verify ports 80/443/22 are open in your Security Group
-
--non-interactiveflag for cloud-init / AWS user-data bootstrapping - WordPress fast-deploy module (LEMP + WP-CLI + config)
-
healthcheck.shβ audit an existing server's services and config - PostgreSQL stack option
- Notification on install complete (Slack / email)
See CONTRIBUTING.md for the full guide.
Short version:
- Fork the repo
- Create a branch:
feat/your-featureorfix/your-fix - Run
shellcheck -xon any.shfiles you changed - Open a PR using the provided template
MIT β free to use, fork, and adapt.
Built by @Xbot-me Β·
build it Β· break it Β· fix it Β· automate it