Documentation

Everything you need to go from a blank VPS to a live WordPress site.

Requirements

Before installing pressctl, make sure you have:

  1. Linux or macOS on your local machine
  2. Ansible 2.14+ installed (pip install ansible or brew install ansible)
  3. A fresh Ubuntu 24.04 server with root SSH access — DigitalOcean, Hetzner, AWS, Linode, or any VPS provider

Installation

Install pressctl with a single command:

curl -fsSL https://raw.githubusercontent.com/shariffff/pressctl/main/install.sh | bash

What this does:

  1. Downloads the press binary from the pressctl GitHub repository
  2. Copies the Ansible playbooks to ~/.pressctl/ansible/
  3. Makes the press command available in your terminal

No repository cloning, no manual build steps. One command and you're ready.

Provision a Server

press server provision

This is the main command that sets up everything your server needs to host WordPress. You can also just run press and choose option 1 from the quick actions menu.

pressctl will ask you a few questions:

  1. Server name — a label for your reference (e.g. production)
  2. IP address — your server's public IP
  3. SSH user — defaults to root (press Enter to accept)
  4. SSH port — defaults to 22
  5. SSH private key — defaults to ~/.ssh/id_rsa

Pre-flight checks:

  • SSH connectivity — verifies pressctl can reach your server
  • Port conflicts — checks that ports 80, 443, and 3306 are free. If Apache, Caddy, or MySQL are already installed, pressctl warns you before proceeding

What gets installed:

  • Nginx from the official repository
  • PHP 8.3 with optimized FPM pools
  • MariaDB with secure defaults
  • Redis for object caching
  • Let's Encrypt via Certbot
  • UFW firewall (ports 22, 80, 443 only)
  • Fail2ban for brute-force protection
  • SSH hardening

Provisioning takes about 5–10 minutes. When complete, you'll see a success message with the generated MySQL password (also saved in your config file).

Important: At this stage, pressctl only prepares the server. No WordPress site exists yet — site-specific features like isolated Linux users and per-site PHP-FPM pools happen when you create a site.

List Servers

press server list

Shows all servers in your pressctl inventory with their status, IP, and site count.

press server list --json

Use --json for machine-readable output, useful for scripts and automation.

Server Health Check

press server health-check

Tests SSH connectivity to a server. Select from the list or pass the name directly: press server health-check myserver.

Create a WordPress Site

press site create

Creates a new WordPress site on a provisioned server. pressctl will prompt you for:

  1. Target server — choose which provisioned server to use
  2. Primary domain — e.g. yoursite.com
  3. WordPress admin username
  4. WordPress admin email
  5. Password — let pressctl generate a secure one, or set your own

What happens for each site:

  • A dedicated Linux user is created for the site
  • A separate PHP-FPM pool runs under that user
  • An isolated database is created with its own credentials
  • File permissions are locked down — sites can't read each other's files
  • Nginx is configured with the site's domain
  • WordPress is installed via WP-CLI
  • A cron job is set up for wp-cron
Make sure to save the admin credentials shown after site creation. They're stored in your local config file at ~/.pressctl/pressctl.yaml.

List Sites

press site list

Displays all sites across all servers with their domains and status.

Delete a Site

press site delete

Removes a WordPress site and all its associated resources (database, Linux user, Nginx config, files, PHP-FPM pool). You'll be asked to confirm before anything is deleted.

Add a Domain

press domain add

Attaches a domain to an existing WordPress site. pressctl will prompt for the server, the site, and the new domain name.

Make sure the domain's DNS A record points to your server's IP address before adding it. If DNS isn't configured, SSL certificate issuance will fail in the next step.

Enable SSL

press domain ssl

Issues a free SSL certificate for your domain using Let's Encrypt, making your site accessible over HTTPS. The certificate auto-renews via Certbot's systemd timer.

Configuration

press config show

Displays your current pressctl configuration — servers, sites, domains, and global settings. Read-only, safe to run anytime.

press config validate

Checks your configuration for errors and missing required values.

press config edit

Opens the config file in your default editor. The config lives at ~/.pressctl/pressctl.yaml.

Technology Stack

Every provisioned server runs this exact stack:

ComponentDetails
OSUbuntu 24.04 LTS
Web ServerNginx (official repo)
PHP8.3 (ondrej/php PPA)
DatabaseMariaDB
CacheRedis
SSLLet's Encrypt (Certbot)
FirewallUFW (ports 22, 80, 443)
SecurityFail2ban + SSH hardening

All Commands

Quick reference for every press command:

CommandDescription
pressQuick actions menu
press server provisionAdd and provision a new server
press server listList all servers
press server health-checkTest server connectivity
press server updateUpdate server configuration
press server removeRemove from inventory
press site createCreate a WordPress site
press site listList all sites
press site deleteDelete a site
press domain addAdd domain to a site
press domain removeRemove a domain
press domain sslIssue SSL certificate
press config showShow current configuration
press config validateValidate configuration
press config editEdit config in your editor
press versionShow version info

Need help? Open an issue on GitHub.