{"id":51053367,"url":"https://github.com/vcode-sh/vibe-wp","last_synced_at":"2026-06-22T19:03:30.294Z","repository":{"id":366032351,"uuid":"1273733580","full_name":"vcode-sh/vibe-wp","owner":"vcode-sh","description":null,"archived":false,"fork":false,"pushed_at":"2026-06-20T00:48:47.000Z","size":85040,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-20T01:14:34.822Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/vcode-sh.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"docs/security.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-06-18T20:23:55.000Z","updated_at":"2026-06-20T00:48:51.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/vcode-sh/vibe-wp","commit_stats":null,"previous_names":["vcode-sh/vibe-wp"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/vcode-sh/vibe-wp","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vcode-sh%2Fvibe-wp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vcode-sh%2Fvibe-wp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vcode-sh%2Fvibe-wp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vcode-sh%2Fvibe-wp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vcode-sh","download_url":"https://codeload.github.com/vcode-sh/vibe-wp/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vcode-sh%2Fvibe-wp/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34661709,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-22T02:00:06.391Z","response_time":106,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-06-22T19:03:29.468Z","updated_at":"2026-06-22T19:03:30.289Z","avatar_url":"https://github.com/vcode-sh.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"```\n██╗   ██╗██╗██████╗ ███████╗   ██╗    ██╗██████╗\n██║   ██║██║██╔══██╗██╔════╝   ██║    ██║██╔══██╗\n██║   ██║██║██████╔╝█████╗     ██║ █╗ ██║██████╔╝\n╚██╗ ██╔╝██║██╔══██╗██╔══╝     ██║███╗██║██╔═══╝\n ╚████╔╝ ██║██████╔╝███████╗   ╚███╔███╔╝██║\n  ╚═══╝  ╚═╝╚═════╝ ╚══════╝    ╚══╝╚══╝ ╚═╝\n\n  Managed WordPress on Docker, tuned for VPS production.\n```\n\n# vibe-wp\n\n`vibe-wp` is a modern WordPress Docker template built for a fast, modular, production-shaped local stack:\n\n- WordPress 7.0 on PHP-FPM.\n- Nginx with FastCGI page cache for anonymous traffic.\n- MariaDB LTS with rendered WordPress-oriented performance config.\n- Redis 8 object cache with a rendered performance config and the PhpRedis extension.\n- WordPress 7.0 AI plugin and default Anthropic, Google, and OpenAI connector plugins.\n- Separate runtime surfaces for uploads, plugins, themes, and MU plugins.\n- Dedicated cron worker instead of request-triggered WP-Cron.\n- Environment-aware WP-CLI, Adminer, staging refresh, and managed WordPress workflows.\n- Backup and restore with retention, plus optional off-server backups to Cloudflare R2 (via rclone) on a daily or weekly schedule; restore auto-fetches a missing backup from R2.\n\n## Quick Start\n\nIf you are not technical, start with [docs/quick-start-for-site-owners.md](docs/quick-start-for-site-owners.md). It explains local use, VPS setup, staging, backups, and safe plugin/theme updates without Docker internals.\n\nFor a new Ubuntu/Debian VPS, the guided installer is the intended path. It walks you through a new site and shows the exact plan before changing anything:\n\n```sh\ncurl -fsSL https://wp.vcode.sh/install.sh | sh\n```\n\nSee [Guided VPS Installer](#guided-vps-installer) below for what it does, the management dashboard, and headless flags.\n\nTo run the stack directly on your own machine:\n\n```sh\nmake init\nmake up\nmake install\n```\n\nOpen:\n\n- WordPress: http://localhost:8080\n- Adminer: `make tools`, then http://localhost:8081\n\nThe generated `.env` contains database passwords, Redis password, WordPress salts, and a local admin password. The admin values are printed by `make install`.\n\n`make install` also installs the baseline plugins, activates the WordPress AI connector plugins, enables Redis Object Cache, and removes Hello Dolly plus old bundled default themes.\n\n## Repository Layout\n\n```text\nbin/                 operational scripts\ncontent/uploads/     persistent media uploads\ncontent/plugins/     persistent plugins\ncontent/themes/      persistent themes\ncontent/mu-plugins/  persistent MU plugins\ndocker/nginx/        Nginx image, cache, compression, and server config\ndocker/mariadb/      MariaDB image and env-rendered database config\ndocker/redis/        Redis image and env-rendered cache config\ndocker/wordpress/    WordPress PHP-FPM image and runtime config\ndocs/                architecture, configuration, operations, research\n```\n\n## Daily Commands\n\n```sh\nmake ps\nmake logs\n./bin/vibe local logs-recent\n./bin/vibe local backups\nmake wp ARGS=\"plugin list\"\n./bin/wp user list\nmake wp-info\nmake doctor-runtime\nmake smoke\nmake cache-enable\nmake backup\nmake restore BACKUP=backups/local/\u003ctimestamp\u003e ARGS=\"--yes\"\n./bin/vibe stage refresh-from-prod --yes\n./bin/vibe stage promote-files-to-prod --yes\nmake down\n```\n\nWP-CLI runs inside the same WordPress runtime image as PHP-FPM, with the same `.env`, network, database, Redis, and `wp-content` mounts. See [docs/wp-cli.md](docs/wp-cli.md).\n\n## Configuration Philosophy\n\nThe stack is configured by `.env`, not by editing container files. The main switch points are:\n\n- `WORDPRESS_IMAGE` for the WordPress/PHP baseline.\n- `MARIADB_IMAGE` for the database LTS line.\n- `MARIADB_RUNTIME_IMAGE` for the rendered database runtime image.\n- `REDIS_IMAGE` for the Redis major line.\n- `REDIS_RUNTIME_IMAGE` for the rendered Redis runtime image.\n- PHP, PHP-FPM, Nginx, MariaDB, Redis, and WordPress constants through explicit env values.\n\nSee [docs/configuration.md](docs/configuration.md) for the complete contract, [docs/web-tier.md](docs/web-tier.md) for the Nginx performance model, [docs/mariadb.md](docs/mariadb.md) for database tuning, and [docs/redis.md](docs/redis.md) for Redis tuning.\n\n## Deployment Modes\n\n- Local/dev: `docker compose up -d --build`\n- Production volume preset: `./bin/vibe prod up`\n- Staging volume preset: `./bin/vibe stage up`\n- External MariaDB/Redis preset: `./bin/vibe external up`\n\nSee [docs/deployment.md](docs/deployment.md) and [docs/staging.md](docs/staging.md).\n\n## Guided VPS Installer\n\nFor a fresh Ubuntu/Debian VPS, the guided installer is the intended path. The public installer host is served from `wp.vcode.sh`: the one-liner downloads a versioned Linux installer binary, verifies its SHA256, and opens a guided terminal UI (a Bun + React/OpenTUI app).\n\n```sh\ncurl -fsSL https://wp.vcode.sh/install.sh | sh\n```\n\nThe installer never changes the server without first showing the exact plan for review (or you pass `--yes` for a headless run). What it does on a new site:\n\n- installs missing host packages (Docker, Caddy) unless you opt out\n- writes per-site env files with generated secrets and isolated ports, so several sites coexist on one host\n- brings the Docker stack up and runs the WordPress install\n- configures Caddy as the reverse proxy with automatic HTTPS (Let's Encrypt)\n- optionally sets up a staging site on a separate domain\n\nA site built this way has been validated live on a real VPS: HTTPS via Caddy + Let's Encrypt, WordPress 7.0, Redis Object Cache active, Nginx FastCGI cache reaching `HIT`, and multiple sites coexisting on one host.\n\n### Installer modes\n\nThe installer opens with a menu of intents:\n\n- **Create a new WordPress** — production, optional staging, isolated ports, tuned env files. This is the fully working, VPS-validated path.\n- **Manage detected site** — opens a management dashboard for an already-installed site (see below).\n- **Remove detected site** — makes a safety backup, then stops containers without deleting data.\n- **Update existing checkout** — keeps the current directory and refreshes config.\n- **Create staging only** — attaches a staging site to an existing production site.\n- **Use external database and Redis** — bring your own MariaDB and Redis; only WordPress and Nginx run in Docker. The installer collects your external database and Redis connection details, writes `env/external.env`, and drives the install via `./bin/vibe external`. VPS-validated end-to-end.\n\n### Management dashboard\n\n\"Manage detected site\" is a control panel that runs read-and-maintain operations against a detected site, each backed by a `bin/vibe` command and grouped from safest to most dangerous:\n\n- **Check on it** — check it's healthy (`smoke`), speed report (`perf-report`), what's running (`ps`), check the server (`doctor-runtime`), recent logs (`logs-recent`), double-check settings (`config`).\n- **Maintain** — back up now (`backup` — kept in a local folder with retention, and copied off-server to Cloudflare R2 when enabled), clear the cache (`cache-flush`), restart the site (`restart`).\n- **Staging** (shown when staging exists) — copy live to staging (`refresh-from-prod`), publish staging to live (`promote-files-to-prod`).\n- **Danger zone** — restore a backup (`restore`), stop the site (`down`).\n\n### Headless / non-interactive use\n\nThe installer accepts flags for scripted runs. The main ones:\n\n```text\n--domain \u003chost\u003e          Production domain (derives slug, ports, staging, title)\n--admin-email \u003cemail\u003e    WordPress admin email\n--mode \u003cmode\u003e            new-site | manage-existing | remove-existing |\n                         update-existing | staging-only | external-services\n--ext-db-host \u003chost\u003e     External MariaDB/MySQL host:port (external-services)\n--ext-db-name \u003cname\u003e     External database name\n--ext-db-user \u003cuser\u003e     External database user\n--ext-db-password \u003cpw\u003e   External database password\n--ext-redis-host \u003chost\u003e  External Redis host\n--ext-redis-port \u003cport\u003e  External Redis port\n--ext-redis-password \u003cpw\u003e External Redis password\n--staging-domain \u003chost\u003e  Staging domain (enables staging)\n--no-www                 Do not add a www. alias or require its DNS\n--no-caddy               Do not manage Caddy\n--no-host-install        Do not install missing host packages\n--install-dir \u003cpath\u003e     Install directory, default /opt/vibe-wp\n--repo \u003curl\u003e / --ref \u003cr\u003e Source repository and branch/tag\n--yes                    Run without the interactive review step\n--dry-run                Plan only, make no host changes\n--export-plan \u003cfile\u003e     Write the computed install plan to a JSON file\n--headless \u003cplan.json\u003e   Execute a previously exported plan\n--headless-json          Read a plan from stdin\n--local                  Safe local sandbox for macOS/UI testing\n--compact / --ascii      Force compact UI / avoid Unicode characters\n```\n\nSee [docs/installer.md](docs/installer.md) for current capabilities, release workflow, and deployment model.\n\nFor local macOS UI/core testing without touching a VPS:\n\n```sh\ncd installer\nbun run dev:local\n```\n\n## Research Baseline\n\nThe defaults are based on current upstream guidance as of June 18, 2026:\n\n- WordPress release archive lists 7.0 as the latest active series.\n- WordPress requirements recommend PHP 8.3+ and MariaDB 10.6+ or MySQL 8.0+.\n- WordPress 7.0 is compatible with PHP 8.5, 8.4, and 8.3 in the official compatibility matrix.\n- The official WordPress Docker image supports env-driven `wp-config.php` values and `WORDPRESS_CONFIG_EXTRA`.\n- MariaDB official images expose the `lts` line and `healthcheck.sh`.\n- Redis 8 exposes configurable memory policies and threaded I/O, while Redis Object Cache documents `WP_REDIS_*` constants and supports PhpRedis.\n\nFull notes and source links are in [docs/research.md](docs/research.md).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvcode-sh%2Fvibe-wp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvcode-sh%2Fvibe-wp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvcode-sh%2Fvibe-wp/lists"}