Files
2026-01-01 20:05:02 +00:00
..
2026-01-01 19:20:06 +00:00
2026-01-01 19:20:06 +00:00
2026-01-01 20:05:02 +00:00
2026-01-01 19:20:06 +00:00

WordOps Dev Panel

A lightweight internal control panel for managing WordOps WordPress sites without forcing developers onto the CLI.

What this does

  • Lists WordOps sites (hides the dev-panel site itself)
  • Create / delete sites via WordOps
  • Optional bootstrap step after site creation (wp-dev-bootstrap.sh)
  • User auth + roles:
    • admin can see/manage all sites + manage users
    • dev can only see/manage sites they created
  • SQLite-backed storage (no external DB required)
  • Password change modal + logout under a username dropdown
  • Streaming output for long-running bootstrap (WordOps output may still arrive in chunks)

Requirements

Server

  • WordOps installed and working (/usr/local/bin/wo)
  • WP-CLI installed and working (wp in PATH)
  • Nginx + PHP-FPM (Provided by WordOps)
  • SQLite support for PHP
  • Sudo privileges for www-data to run WordOps commands without password

File layout

Panel site lives at:

  • /var/www/<dev panel URL>/htdocs/index.php
  • /var/www/<dev panel URL>/htdocs/includes/db.php
  • /var/www/<dev panel URL>/htdocs/includes/functions.php
  • /var/www/<dev panel URL>/htdocs/style.css
  • /var/www/<dev panel URL>/htdocs/panel.sqlite (auto-created)

Helper scripts live at:

  • /usr/local/bin/wp-dev-bootstrap.sh
  • /usr/local/bin/wo-fix-perms.sh

Install steps

  1. Create the WordOps “panel” site

    sudo wo site create <dev panel URL> --php

    Add host entry on your workstation (or internal DNS), then confirm you can load the site.

  2. Drop in the panel files

    Copy:

    • index.php/var/www/<dev panel URL>/htdocs/index.php
    • includes/db.php/var/www/<dev panel URL>/htdocs/includes/db.php
    • includes/functions.php/var/www/<dev panel URL>/htdocs/includes/functions.php
    • style.css/var/www/<dev panel URL>/htdocs/style.css

    Make sure the web server can write the SQLite DB (the panel will create it on first load):

    sudo chown -R www-data:www-data /var/www/<dev panel URL>/htdocs

    Optional: lock down later once seeded

First login / seeding

On first load, if there are no users, the panel auto-creates an admin user with the following credentials:

Username: admin
Password: change-me

Log in and change it immediately using the user dropdown → “Change password”.

Daily workflow

Option A: (recommended) VSCode Remote - SSH

  • Devs connect via SSH to the server
  • Edit project files directly under /var/www/<site>/htdocs
  • Panel handles provisioning + bootstrap + ownership metadata
  • No need for tooling (node, php, etc) on user machines beyond VSCode + SSH

Option B: SMB shares (with SSH tunnel)

  • Export /var/www (or per-site roots) via Samba
  • Use group permissions (webdev) so edits behave identically to SSH
  • Map network drives on dev machines
  • Requires tooling (node, php, etc) on user machines for composer, Tailwind, etc

Troubleshooting

“PDOException: could not find driver”

PHP SQLite extension missing:

sudo apt install -y php-sqlite3
sudo systemctl restart php8.3-fpm || sudo systemctl restart php-fpm

WordOps fails when run as www-data

Dont run wo as www-data directly:

Correct (what the panel does):

sudo -u www-data sudo /usr/local/bin/wo site list

Incorrect:

sudo -u www-data /usr/local/bin/wo site list

Panel isnt streaming output

Bootstrap output streams (proc_open + flush)

WordOps sometimes buffers; thats normal. The panel will still show output when it arrives.

Next steps / nice-to-haves

  • “Fix perms” button in the panel post-create
  • Per-site notes (who/why) for management visibility
  • Audit log for create/delete/bootstrap actions
  • Optional “clone template site” support