[{"data":1,"prerenderedAt":175},["ShallowReactive",2],{"seo-verification":3,"blog-host-wordpress-on-your-own-vps-ma-en":6,"promo-bar-likely":174},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-host-wordpress-on-your-own-vps-ma-en",{"id":9,"slug":10,"slugs":11,"title":15,"excerpt":16,"readTime":17,"views":18,"isPinned":19,"noindex":19,"publishedAt":20,"updatedAt":21,"category":22,"categories":27,"featuredImage":29,"bgImage":30,"posterImage":31,"relatedSolution":32,"intro":34,"sections":35,"ctaTitle":114,"ctaBody":115,"ctaButton":116,"ctaUrl":117,"relatedPosts":118},73,"host-wordpress-on-your-own-vps",{"fr":12,"en":10,"ar":13,"es":14},"heberger-wordpress","استضافة-wordpress-على-خادم-vps-الخاص-بك","alojar-wordpress-en-un-vps","Host WordPress on your own VPS","Host WordPress on your VPS for maximum performance and control: Docker, MariaDB, caching, reverse proxy and SSL.",7,0,false,"2026-04-08T00:00:00+00:00","2026-11-09T20:55:18+00:00",{"id":17,"name":23,"slug":24,"color":25,"icon":26},"Self-hosting","self-hosting","bg-indigo-500\u002F10 text-indigo-400","cloud",[28],{"id":17,"name":23,"slug":24,"color":25,"icon":26},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Fheberger-wordpress-poster.svg",{"categorySlug":24,"appSlug":33},"wordpress","WordPress powers more than 40% of the web, but shared hosting throttles its performance. On a dedicated VPS with Docker, you get speed, isolation and total freedom of configuration. Here is a robust, secure and fast deployment.",[36,40,50,53,78,81,84,108,111],{"type":37,"title":38,"body":39},"h2","Why self-host WordPress on a VPS","Shared hosting splits CPU, RAM and even the database with hundreds of other sites: your speed depends on your neighbors, and SSH access or fine server configuration are often locked down. A VPS gives you resources allocated to your machine, full control of PHP-FPM, the web server, the object cache (Redis) and the page cache. For an agency managing several client sites, it also means the ability to isolate everything in containers on a single machine, with backups and deployments under control, where shared hosting imposes its limits and its extra costs.",{"type":41,"title":42,"items":43},"ul","The gains of a WordPress on VPS",[44,45,46,47,48,49],"CPU\u002FRAM allocated to your machine: fewer slowdowns caused by neighbors","Full control of PHP-FPM, the web server and extensions","Redis object cache and page cache for response times cut in half","Full SSH\u002FWP-CLI access to automate maintenance and deployments","Per-container isolation: several client sites on a single VPS","Backups and security rules defined by you, without a per-site surcharge",{"type":37,"title":51,"body":52},"Realistic prerequisites","A 2 vCPU \u002F 2 GB RAM VPS comfortably handles a WordPress site with moderate traffic; move up to 4 GB with Redis, WooCommerce or several sites. You need Docker + Compose, a MariaDB or MySQL database, ideally Redis for the object cache, and a `yourdomain.com` domain with its SSL certificate. Plan for a bit of PHP tuning (`upload_max_filesize`, `memory_limit`) depending on your media and extensions.",{"type":54,"title":55,"steps":56},"steps","Step-by-step deployment",[57,60,63,66,69,72,75],{"title":58,"body":59},"Compose WordPress, MariaDB and Redis","In `docker-compose.yml`, declare `wordpress:php8.3-fpm` or `wordpress:apache`, a `mariadb:11` service and `redis:alpine`. Persist `wp-content` and the database in named volumes, on an internal Docker network.",{"title":61,"body":62},"Fill in the database and secrets","Pass `WORDPRESS_DB_*` and strong passwords via environment variables. Add the security keys (salts) generated from the official WordPress API in `WORDPRESS_CONFIG_EXTRA`.",{"title":64,"body":65},"Launch and install WordPress","Start with `docker compose up -d` then open your domain for the installation wizard. Better: automate it via WP-CLI (`wp core install`) for reproducible deployments from one site to the next.",{"title":67,"body":68},"Set up the reverse proxy and SSL","Configure Nginx\u002FCaddy in HTTPS in front of WordPress. Adjust `client_max_body_size` for uploads, enable gzip\u002Fbrotli compression and caching of static assets (images, CSS, JS) with long `Cache-Control` headers.",{"title":70,"body":71},"Enable the Redis object cache","Install an object cache plugin (e.g. Redis Object Cache), point it to the `redis` service, and enable it: repeated database queries are served from memory, greatly relieving MariaDB.",{"title":73,"body":74},"Harden and back up","Disable file editing in the admin (`DISALLOW_FILE_EDIT`), limit login attempts, and schedule a nightly backup of `wp-content` + SQL dump to remote object storage.",{"title":76,"body":77},"Logging in for the first time","Open the site URL: WordPress starts its five-minute installation — language, site title, then the creation of YOUR administrator username with the password and e-mail address of your choice. Finish it without delay; an unfinished installation is there for the taking by the first visitor.",{"type":79,"body":80},"tip","For performance that rivals the fastest managed platforms, add a full page cache upstream of PHP: a plugin generating static HTML files served directly by Nginx (via `try_files`), or a FastCGI cache module. Your public pages then no longer touch PHP or MariaDB at all, which lets a modest VPS absorb thousands of simultaneous visitors, while keeping the back office and the cart (WooCommerce) excluded from the cache.",{"type":37,"title":82,"body":83},"PHP alert of 21 Oct 2026 (PHP2Shell): updating WordPress does not fix PHP","On 21 October 2026 the PHP project shipped security releases for two remote code execution flaws, CVE-2026-109618 and CVE-2026-109619. The fix lives in PHP itself: the patched versions are 8.5.12, 8.4.27, 8.3.36 and 8.2.35. Your WordPress can therefore be fully up to date (core, themes, plugins) while still running on a vulnerable PHP, because the WordPress update screen never touches the interpreter. With the stack from this article, PHP lives inside the `wordpress` Docker image: until you pull an image rebuilt on a patched version and recreate the container, the flaw stays open. For the details of both flaws, read the article php2shell-cve-2026-109618-109619-mettre-a-jour-php; for rebuilding images, php2shell-docker-wordpress-reconstruire-images-php.",{"type":54,"title":85,"steps":86},"Check, then fix, in five moves",[87,90,93,96,99,102,105],{"title":88,"body":89},"Read the PHP version actually being served","The most reliable place is WordPress itself: Tools > Site Health > Info > Server shows the PHP version executing your pages. On a VPS without Docker, be wary of `php -v`: it queries the command-line binary, which can be a different version from PHP-FPM, the one serving your visitors. Ask the service itself with `php-fpm -v` (or `php-fpm8.3 -v` on Debian and Ubuntu).",{"title":91,"body":92},"Check the version inside the container","With Docker, run `docker compose exec wordpress php -v`: the image ships a single PHP, so this result holds for the container's FPM or mod_php. Compare it to the patched versions above, staying on the same branch (8.3.x must reach 8.3.36, not 8.4.27).",{"title":94,"body":95},"Pull the updated image","Run `docker compose pull && docker compose up -d`. The pull downloads the latest image published for your tag (for example `wordpress:php8.3-fpm`), and `up -d` recreates the container on it. Your named volumes keep `wp-content` and the database. If `php -v` still shows an old version, the patched image is not yet published for that tag: check back later, or move to another PHP branch if your site supports it.",{"title":97,"body":98},"Restart PHP-FPM","Updating a package or files does not change the code already loaded by running processes. On a classic server, restart the service with `systemctl restart php8.3-fpm` (adapt the version number); with Docker, recreating the container is enough, otherwise `docker compose restart wordpress`. A plain reload is less reliable than a restart when you need every worker renewed.",{"title":100,"body":101},"Look for signs of exploitation","An update closes the door; it does not tell you whether someone already walked in. Go through the Nginx or Apache access and error logs (`docker compose logs --since 72h wordpress` with Docker) looking for PHP-FPM worker crashes, repeated out-of-memory messages and unusual high-volume requests. Inside `wp-content`, list recently modified `.php` files with `find wp-content -name '*.php' -mtime -7`, especially under `uploads`, where no script should live. At the slightest doubt, restore from a clean backup and change passwords and salts.",{"title":103,"body":104},"Automate the check with WP-CLI and cron","Note that `wp --info` reports the command-line PHP version, not the PHP-FPM one: keep it for scripts, not for judging web exposure. Instead, schedule a weekly cron job that runs `docker compose pull`, then compares the output of `docker compose exec wordpress php -v` with the expected version and emails you on any mismatch. That way the next PHP security alert no longer depends on your memory.",{"title":106,"body":107},"Verify again","Reopen Site Health and rerun `php -v` in the container: both must show a patched version. Write the date in your maintenance log, and repeat the routine for every new PHP security release.",{"type":79,"title":109,"body":110},"Partial mitigation, not a fix","For CVE-2026-109619, the PHP advisory says to disable `session.upload_progress.enabled` in `php.ini` or the FPM pool, then restart all workers; `ini_set()` and `.user.ini` are not enough. This reduces exposure while you schedule the update, but only updating PHP truly fixes both flaws.",{"type":79,"title":112,"body":113},"The official documentation","For advanced configuration and options specific to the tool, refer to the \u003Ca href=\"https:\u002F\u002Fwordpress.org\u002Fdocumentation\" target=\"_blank\" rel=\"noopener noreferrer\">official WordPress documentation\u003C\u002Fa>. This guide covers going live on a VPS; the vendor's docs remain the reference for fine-tuning, major upgrades and specific use cases.","Fast WordPress, on your VPS","The ServOrbit Cloud VPS gives you resources stated per plan, SSD storage and Docker for a WordPress far faster than shared hosting. Optimized Redis + cache template included.","Speed up my WordPress","\u002Fvps-cloud",[119,138,156],{"id":120,"slug":121,"slugs":122,"title":126,"excerpt":127,"readTime":128,"views":129,"isPinned":19,"noindex":19,"publishedAt":130,"updatedAt":131,"category":132,"categories":133,"featuredImage":29,"bgImage":30,"posterImage":135,"relatedSolution":136},71,"hosting-nextcloud-on-your-own-vps",{"fr":123,"en":121,"ar":124,"es":125},"heberger-nextcloud","استضافة-nextcloud-على-خادمك-الـvps-الخاص","alojar-nextcloud-en-su-propio-vps","Self-Host Nextcloud on VPS: NC 35, PHP 8.3 and MariaDB 11 Guide","Host Nextcloud on a VPS: Docker Compose, Redis, MariaDB backup, uploads over 40 GB behind Cloudflare and an alternative to Office 2021.",20,1,"2026-04-10T00:00:00+00:00","2026-11-08T16:32:50+00:00",{"id":17,"name":23,"slug":24,"color":25,"icon":26},[134],{"id":17,"name":23,"slug":24,"color":25,"icon":26},"\u002Fblog\u002Fcovers\u002Fheberger-nextcloud-poster.svg",{"categorySlug":24,"appSlug":137},"nextcloud",{"id":139,"slug":140,"slugs":141,"title":145,"excerpt":146,"readTime":147,"views":129,"isPinned":19,"noindex":19,"publishedAt":148,"updatedAt":149,"category":150,"categories":151,"featuredImage":29,"bgImage":30,"posterImage":153,"relatedSolution":154},72,"hosting-ghost-on-your-own-vps",{"fr":142,"en":140,"ar":143,"es":144},"heberger-ghost","استضافة-ghost-على-خادمك-الـvps-الخاص","alojar-ghost-en-un-vps","Hosting Ghost on your own VPS: complete 2026 guide","Deploy Ghost v6 on your VPS with Caddy, MySQL, Ghost CLI and Stripe Tax: installation, TLS reverse proxy, updates and troubleshooting common startup errors.",10,"2026-04-09T00:00:00+00:00","2026-11-04T16:30:25+00:00",{"id":17,"name":23,"slug":24,"color":25,"icon":26},[152],{"id":17,"name":23,"slug":24,"color":25,"icon":26},"\u002Fblog\u002Fcovers\u002Fheberger-ghost-poster.svg",{"categorySlug":24,"appSlug":155},"ghost",{"id":157,"slug":158,"slugs":159,"title":163,"excerpt":164,"readTime":165,"views":129,"isPinned":19,"noindex":19,"publishedAt":166,"updatedAt":131,"category":167,"categories":168,"featuredImage":29,"bgImage":30,"posterImage":170,"relatedSolution":171},74,"host-gitea-on-your-own-vps",{"fr":160,"en":158,"ar":161,"es":162},"heberger-gitea","استضافة-gitea-على-خادم-vps-الخاص-بك","alojar-gitea-en-un-vps","Host Gitea on your own VPS in 2026","Deploy Gitea 1.25 on a VPS with Docker and SSL. Full guide: Gitea Actions CI\u002FCD, Gitea vs Forgejo v16 comparison, daily administration, SSH and HTTPS troubleshooting.",13,"2026-04-07T00:00:00+00:00",{"id":17,"name":23,"slug":24,"color":25,"icon":26},[169],{"id":17,"name":23,"slug":24,"color":25,"icon":26},"\u002Fblog\u002Fcovers\u002Fheberger-gitea-poster.svg",{"categorySlug":172,"appSlug":173},"development","gitea",true,1794270414980]