Run WooCommerce on a VPS as two persistent services: a WordPress container for the application and a separate MySQL 8.0+ or MariaDB 10.6+ container for store data. Connect them on a private Compose network, store both data sets in named volumes, expose only the web entry point, and terminate HTTPS at a reverse proxy. Use a production override file, pinned image tags, tested backups, and a restore procedure before accepting orders.
Antihost offers managed WordPress hosting with free migration, one-click staging and a 14-day free trial.
The current WooCommerce baseline is WordPress 6.9 or newer, PHP 8.3 or newer, MySQL 8.0 or newer (or MariaDB 10.6 or newer), HTTPS, and at least 256 MB of WordPress memory. The exact CPU, RAM, storage and monthly VPS cost depend on catalog size, traffic, background jobs and media; monitor the workload instead of relying on a universal server size.
As an Amazon Associate I earn from qualifying purchases.
What the Docker Compose architecture looks like
Compose gives the VPS a repeatable definition for the containers, network, volumes and environment. A practical WooCommerce deployment has these boundaries:
- WordPress service: the official WordPress image, PHP and the web server. WooCommerce runs as a WordPress plugin in this container.
- Database service: MySQL 8.0+ or a compatible MariaDB 10.6+ release. Orders, products, settings, posts and pages live here.
- Private network: WordPress reaches the database by its Compose service name, such as
db:3306. The database has no public port. - Persistent volumes: one volume for
/var/www/html(includingwp-content) and one for/var/lib/mysql. - HTTPS entry point: Nginx, Apache, Caddy, Traefik or another reverse proxy accepts ports 80 and 443 and forwards requests to WordPress.
A container can be replaced; a volume must survive that replacement. Treat the volumes and database dumps as the business data, not the running containers.
#1 Best Overall
- BLUE LIGHT BLOCKING GLASSES: Our blue light glasses for women boast UV400 protection, blocking harmful blue rays from computer screens. With these bluelight glasses women, you can enjoy gaming, reading, or watching TV with no worries of eye strain.
- EYE RELIEF: Our blue light glasses are engineered to reduce blurry vision or strain caused by prolonged screen time. These womens blue light glasses aid in better sleep by preventing blue light from disrupting your natural sleep cycle, helping you fall asleep faster and enjoy a more restful night's sleep, making them the perfect christmas present.
- COMFORTABLE: Crafted from durable material, our trendy blue light glasses for woman or blue light glasses men ensure long-lasting comfort. The high-transmittance lenses accessories, gamer gifts for men, help keep your eyes relaxed. Perfect stocking stuffers, gifts for gamers men, christmas gifts for men, halloween costumes.
- LIGHTWEIGHT: These clear blue light glasses feature a lightweight frame, meaning they’ll stay comfy for long-term wear. Perfect as blue blockers glasses for women or mens blue light glasses, these non-prescription fake glasses for men can be worn throughout the day. The blue light blocking glasses women feature polycarbonate HD lenses, which are anti-reflective and restore true color.
- WORRY-FREE PURCHASE: If you experience any issues, our support team is ready to assist you quickly. These are the perfect costume glasses for cosplay dressing up.
Requirements to check before deployment
Confirm the host and software versions before creating the store. WooCommerce’s current published requirements are:
| Component | Minimum or recommendation | Why it matters |
|---|---|---|
| WordPress | 6.9+ | Provides the supported application and security baseline. |
| PHP | 8.3+ | Matches the current WooCommerce support target and the image variant you select. |
| Database | MySQL 8.0+ or MariaDB 10.6+ | Stores WooCommerce orders, products, settings and WordPress content. |
| Transport | HTTPS for the complete store | Protects login, account, checkout and payment traffic; most gateways require SSL. |
| WordPress memory | At least 256 MB | Leaves room for WooCommerce, the theme, extensions and scheduled actions. |
| Web server | Apache or Nginx recommended | Supplies the HTTP or FastCGI layer in front of PHP. |
Choose a supported Linux VPS, install Docker Engine and the Compose plugin, create a non-root deployment account, and point DNS A and/or AAAA records at the server. Allow SSH and the web ports in the firewall; do not open the database port. There is no defensible one-size-fits-all CPU, RAM or storage figure: a small catalog with light traffic and a media-heavy store have different needs. Watch memory, CPU, disk space, database growth, PHP workers and response times after launch.
The Tool Desk
Outbyte PC Repair FREEClear out junk files and repair common Windows errorsFree Scan →Outbyte Driver Updater FREEFix the driver behind crashes, sound loss and screen glitchesFind Drivers →Create the Compose project
Make a directory owned by the deployment account and keep the Compose files and backup directory outside the public document root:
mkdir -p ~/woocommerce-stack/backups
cd ~/woocommerce-stack
The following base file demonstrates the required relationship. The image tags are examples to validate in staging; record the exact tags that you approve rather than silently following latest.
services:
wordpress:
image: wordpress:6.9-php8.3-apache
depends_on:
db:
condition: service_healthy
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_NAME: ${WORDPRESS_DB_NAME}
WORDPRESS_DB_USER: ${WORDPRESS_DB_USER}
WORDPRESS_DB_PASSWORD: ${WORDPRESS_DB_PASSWORD}
volumes:
- wordpress_data:/var/www/html
networks:
- app_net
db:
image: mysql:8.0
environment:
MYSQL_DATABASE: ${WORDPRESS_DB_NAME}
MYSQL_USER: ${WORDPRESS_DB_USER}
MYSQL_PASSWORD: ${WORDPRESS_DB_PASSWORD}
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
volumes:
- db_data:/var/lib/mysql
networks:
- app_net
healthcheck:
test: ["CMD-SHELL", "mysqladmin ping -h localhost -u root -p$$MYSQL_ROOT_PASSWORD"]
interval: 10s
timeout: 5s
retries: 12
volumes:
wordpress_data:
db_data:
networks:
app_net:
driver: bridge
Create a file readable only by the deployment account for the values referenced above:
Rank #2
- WINDEX GAMING WIPES: effortlessly clean all your gaming gear and gaming electronics in one easy step with our new Windex Gaming Wipes
- AMMONIA FREE: our ammonia-free formula is safe to use on all of your favorite gaming equipment like consoles, headsets, controllers, screens, keyboards, and more
- PRE-MOISTENED WIPES: each wipe instantly removes dust, dirt, and stubborn smudges and fingerprints leaving a streak-free shine
- ANTI-STATIC: great for cleaning and wiping down your gaming gear and electronics leaving behind no visible residue
- COMPACT RESEALABLE PACKAGE: store your pack of Windex Gaming Wipes anywhere in your home for whenever a quick and easy wipedown is needed
cat > .env <<'EOF'
WORDPRESS_DB_NAME=store
WORDPRESS_DB_USER=store_user
WORDPRESS_DB_PASSWORD=use-a-long-random-password
MYSQL_ROOT_PASSWORD=use-a-different-long-random-password
EOF
chmod 600 .env
Do not commit this file to a public repository. For stronger secret handling, the official WordPress image supports _FILE environment-variable variants, allowing values such as WORDPRESS_DB_PASSWORD_FILE to be read from mounted secret files instead of placing the password directly in Compose environment values.
The example uses Apache in the WordPress image, so HTTP requests can be forwarded to port 80. If you choose a wordpress:<version>-fpm image, add a reverse proxy that speaks FastCGI. An FPM container is not a complete HTTP server and must not be exposed directly to the internet.
Keep production settings in an override file
Use a base file for reusable service definitions and a second file for production bindings and policies. This keeps a development configuration from accidentally becoming the public configuration. For example:
services:
wordpress:
restart: unless-stopped
ports:
- "127.0.0.1:8080:80"
logging:
driver: json-file
options:
max-size: "10m"
max-file: "5"
db:
restart: unless-stopped
Save that as compose.production.yaml. If your reverse proxy is itself a Compose service, omit the host port on WordPress and attach the proxy to app_net; publish only the proxy’s 80 and 443 ports. Start the merged configuration explicitly:
docker compose -f compose.yaml -f compose.production.yaml up -d
Inspect the merged result before deployment:
docker compose -f compose.yaml -f compose.production.yaml config
Pin and record WordPress, PHP and database tags after testing an upgrade in staging. Review image updates regularly and rebuild or redeploy for security fixes. A pinned tag improves repeatability; it does not remove the need to schedule updates.
Quick wins for a faster PC:
Scan for outdated or missing drivers - takes under a minuteDriver Scan →Clear out junk files and repair common Windows errorsFree Scan →Rank #3
- Ergonomic & Adjustable Design: Fight "text neck" and improve your posture. Designed for comfort, it offers an adjustable height (7.1in-8.5in) (1.4in adjustable range) and angle (5°-85°) Please note: cell phone stand is only 9 inches tall—the length of a standard pencil
- Without blocking subtitles Perfect for office desk Tiktok Face Time Zoom video—this is the ultimate kitchen desk essential for phones! Perfect viewing experience while reducing neck back strain, A must-have for gamers streamers desk, and anyone who values both style and support!
- Sleek & Stable Design fits Otterbox Case: Say goodbye to bent cables, tangles, and tip-overs! LISEN’s stylish adjustable desk phone holder features a built-in charging hole and smart cable management, keeping your phone secure and your workspace clutter-free cool gadgets for men
- ANTI-SLIP DESIGN free hands: The under 10.00 items easy gadgets back and the bottom of this kitchen essentials for women are fully covered by anti-skid silicone, which LISEN stand up desk decor can provide maximum protection device from any scratches and slides
- Your Perfect Viewing Companion:If your product arrives damaged or breaks within 365 days, reach out to LISEN for a quick and hassle-free solution. Struggling with assembly, like tightening the screw? We’ve got your back! Your experience matters to us. (Product including: phone Holder stand*1, screw*1, hexagon screwdriver*1, specification*1)
Start WordPress and install WooCommerce
- From the project directory, run
docker compose up -d(or the two-file production command). The first initialization can take a couple of minutes while the database creates its files. - Check readiness with
docker compose psand inspect startup output withdocker compose logs -f wordpress db. Wait for the database health check to pass. - Open the domain or temporary HTTP endpoint in a browser and complete the WordPress installer.
- In WordPress administration, install and activate WooCommerce, complete the store settings, choose a permalink structure, and create a test product.
- After TLS is active, set both WordPress Address (URL) and Site Address (URL) to the final
https://domain. Do not leave a production store using an IP address or an HTTP URL. - Configure payment credentials in the gateway’s protected settings. Never put live keys in a committed Compose file or an image layer.
Raise the WordPress memory limit explicitly if the image and host allow it. In wp-config.php, before the line that says WordPress editing should stop, add:
define( 'WP_MEMORY_LIMIT', '256M' );
Verify the effective value in the site’s health information or with the relevant administration screen; a PHP container limit that is lower than the WordPress setting will still cap execution.
Put the store behind HTTPS
Terminate TLS at a maintained reverse proxy. The proxy obtains and renews the certificate, redirects HTTP to HTTPS, and forwards requests to the WordPress service. The entire store should use HTTPS because login, account, checkout and payment endpoints carry sensitive information and most payment gateways require SSL.
Proxy forwarding requirements
- Forward the original
Hostheader so WordPress generates links for the public domain. - Forward the client address through the proxy’s standard
X-Forwarded-Forchain. - Forward the original protocol as
X-Forwarded-Proto: httpsfor TLS requests. - Set a sensible upload body limit and read timeout for product media and checkout requests.
- Do not forward the database port or an FPM listener to the public interface.
When TLS ends at the proxy, WordPress must recognize the forwarded protocol. Add this check to wp-config.php before WordPress loads:
Recommended Free Tools
if ( isset( $_SERVER['HTTP_X_FORWARDED_PROTO'] ) && 'https' == $_SERVER['HTTP_X_FORWARDED_PROTO'] ) {
$_SERVER['HTTPS'] = 'on';
}
Once the certificate works, redirect HTTP to HTTPS at the proxy, update both WordPress URLs, clear page and object caches, and test an administrator login, cart, checkout, account pages, webhooks and payment callbacks. A missing forwarded-protocol setting commonly causes redirect loops, mixed-content warnings or a checkout that switches back to HTTP.
Rank #4
- Easy Installation: Our gaming lights have been designed to enhance your entertainment experience. Simply position the led light bar next to your TV or game console to create a game room environment with ease. They come with USB power and a 60 inch cord for direct mounting and mobility
- Audio Syncing & Extensive Mode: The built-in high-sensitivity music sensor allows you to sync the TV led lights to your favorite music. Lights react and move to the beat of music, film and game audio, creating an incredible immersive sound and light experience – and all without the need for an additional hub. You can choose from 64+ patterns, including strobe, illusion, jump, energy, gradient, running, chasing, fluttering mode etc. Each mode can be applied to different scenes
- 64+ Chasing IC+RGB & W Effect: The independent control design of IC+RGB and white all-in-one multifunctional rgbw led bar lights monitor backlight allows you to easily switch the led lights for desk between IC+RGB and white to enjoy a variety of lighting effects, you can choose white lighting mode with high brightness for better illumination when working, etc. Choose IC+RGB lighting mode when you need to create an entertaining atmosphere for the light show, 16 million colours of Color changing rgb light bar let you dance to the beat and create a dynamic party atmosphere
- Dynamic and Dimmable Lights: 1%-full brightness free brightness adjustment gives you the flexibility to adjust dimmable led light bar for room decorations or a variety of occasions
- USB Powered: USB light bars for room can be powered by powernank, usb charger, TV, Monitor, laptop PC mainframe, making behind TV led lighting bar easy to install in any location.TV led lights are powered by the TV usb interface / PC mainframe, can be turned on/off synchronously with TV / PC
Choose the web and database arrangement deliberately
| Choice | Advantages | Operational obligations |
|---|---|---|
| Apache-based WordPress image | Simple HTTP path; the image serves WordPress directly. | Patch Apache and PHP through image updates; keep it behind the TLS proxy. |
| PHP-FPM WordPress image plus reverse proxy | Separates HTTP handling from PHP and fits an existing proxy tier. | Configure FastCGI correctly; never expose the FPM listener as a public web port. |
| MySQL 8.0+ | Meets the current WooCommerce database requirement and has a straightforward official image. | Protect the root credential, monitor disk growth, and test version upgrades. |
| MariaDB 10.6+ | Supported alternative when your operations team already standardizes on MariaDB. | Validate plugin compatibility and the exact image tag before production migration. |
| Proxy on the VPS host | Only the proxy binds host ports; Compose services remain private. | Maintain proxy configuration, certificate renewal and firewall rules outside Compose. |
| Proxy as a Compose service | All routing configuration is versioned with the stack. | Attach it to the application network and publish only ports 80 and 443. |
There is no universal performance winner between these arrangements. Compare the amount of configuration you can maintain, the update path, logging and metrics, the security boundary, and how quickly you can restore a known-good stack.
Back up both WordPress files and the database
A running container is not a backup. WooCommerce data is split between the wp-content directory and the database. The database contains products, orders, settings and other WooCommerce tables; a WordPress XML export does not capture that complete store state.
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
Export the database
Make the backup directory private, then stream a consistent SQL dump from the database container:
mkdir -p backups
chmod 700 backups
docker compose exec -T db sh -c 'exec mysqldump -u"$MYSQL_USER" -p"$MYSQL_PASSWORD" "$MYSQL_DATABASE"' > "backups/db-$(date -u +%Y%m%dT%H%M%SZ).sql"
Compress large dumps and encrypt them before sending them off the VPS. Keep the root password separate from the application backup process; the application user needs only the database privileges it requires.
Copy the WordPress volume
Find the actual volume name with docker volume ls. Compose commonly prefixes it with the project name. Stop writes briefly for the most conservative file snapshot, or at least copy during a quiet period:
Best Value
- Compatible with Wide Screens - To ensure compatibility with the dual monitor mount, your each monitor must meet three conditions at the same time: First, computer screens size range: 13 to 32 inches. Second, screen weight range: 4.4 to 19.8 lbs. Third, the back of the monitor screen must have VESA mounting holes with a pitch of 75x75mm or 100x100mm.
- Regarding the compatibility with desks - Your desk must meet three conditions at the same time: First, desk material: Only wooden desks are recommended, plastic or glass desks cannot be used. Second, desk thickness range: 0.59" - 3.54". Third, the bottom of the desk should not have any cross beams or panels, as this will interfere with installation. We recommend carefully checking that your desk and monitors meets all above conditions before purchasing.
- Dual C-Clamp Hold - Worried your dual monitors might wobble or slip? Our upgraded base uses a larger platform plus a dual C-clamp structure to lock the dual monitor arm firmly to your desk. Each arm safely keeps your screens steady while you type, click and game—no shaking, no sliding, just a clean and secure setup you can trust every day. It also provides Grommet Mounting installation choice, both options ensure stable and secure fixation for your 0.59" - 3.54" desk.
- Full-Motion Adjustment For Comfortable View - Pull the screen closer when you’re deep in a spreadsheet, push it back to watch videos, or rotate to portrait for coding — moving everything smoothly with just one hand. The monitor stand offers +85°/-50° tilt, ±90° swivel and 360° rotation. Raise your monitor up to 15.75″ to support a healthy sitting posture. Whether you’re working from home, gaming through the night, or switching between video calls and documents, getting the screens to your natural line of sight helps relieve neck, shoulder and back strain so you can stay focused longer with less fatigue.
- Keep Your Desk Organized: By lifting both screens off the desktop, this dual monitor stand opens up valuable space for your keyboard, notebook, docking station or a simple, clutter-free work area. Built-in cable management guides wires along the arms, keeping cords out of sight and out of the way. Enjoy a tidy, modern workstation that looks as good as it feels to use.
docker compose stop wordpress
docker run --rm
-v woocommerce-stack_wordpress_data:/data:ro
-v "$PWD/backups":/backup
alpine tar czf /backup/wp-content-$(date -u +%Y%m%dT%H%M%SZ).tar.gz -C /data wp-content
docker compose start wordpress
Adjust the volume name to the one shown on your VPS. Include the rest of /var/www/html if you have customized core files, but wp-content is the essential themes, extensions and uploads directory in a normal image deployment.
Retain and restore-test backups
- Keep several dated database and file restore points, including at least one copy off the VPS.
- Encrypt backups in transit and at rest and restrict access to the backup location.
- Record the Compose files and image tags alongside each backup so a restore has a known runtime.
- On a separate VPS or project, create fresh volumes, import the SQL dump, unpack
wp-content, and verify login, product pages, orders and checkout. - Measure how long the restore takes; that duration is more useful than simply having a backup job that reports success.
A WooCommerce-aware managed backup service can automate schedules, activity logs and one-click restores, but verify its current availability, retention, storage location and restore scope before relying on it. You remain responsible for confirming that the database and files restore together.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Operate the stack without destroying data
Inspect status and logs
docker compose ps
docker compose logs --tail=200 wordpress
docker compose logs --tail=200 db
docker stats
Look for database connection errors, exhausted memory, full disks, PHP fatal errors and repeated restarts. Add centralized log collection when one VPS is no longer sufficient; do not depend on an endlessly growing local JSON log.
Redeploy one service
For a targeted image or configuration change, rebuild and recreate only the affected service:
docker compose build wordpress
docker compose up --no-deps -d wordpress
Replace wordpress with the service you actually changed. Check the merged configuration and logs after recreation, then exercise checkout before declaring the deployment healthy.
Do these 3 things before closing this tab:
1Clear out junk files and repair common Windows errors2Scan for outdated or missing drivers - takes under a minute3Repair Windows errors before they cause bigger problemsUnderstand shutdown commands
docker compose down removes containers and the Compose network but leaves named volumes intact. The form docker compose down --volumes also removes the declared volumes, including the database volume in this design. Never use the latter as a routine restart; it can erase the store.
Upgrade WordPress, PHP, plugins and the database safely
- Take a fresh SQL dump and a fresh
wp-contentarchive. - Record the current image tags, Compose files, environment names and proxy configuration.
- Clone the stack into staging and restore a recent backup.
- Test the new WordPress, PHP, database, plugin or theme version in staging, including scheduled actions, email, webhooks and payment callbacks.
- Schedule a maintenance window, announce any checkout interruption, and deploy the pinned versions.
- Verify homepage, product search, cart, checkout, account pages, administrator login, order creation, emails, cron jobs and gateway callbacks.
- Keep the previous image tags and a tested database restore procedure available until the new version has operated normally.
Do not combine an untested database major-version migration, PHP change and several plugin upgrades in one opaque step. Smaller, reversible changes make a failed deployment diagnosable.
Security and reliability checklist
- Use a non-root SSH account, key authentication, a host firewall and a restricted administrative path.
- Publish only the reverse proxy’s 80/443 ports (and SSH as required); never publish MySQL or MariaDB.
- Use unique, long database passwords and file permissions that keep
.envand backup archives private. - Pin image tags, review security updates, and rebuild images on a planned cadence.
- Keep WordPress, PHP, WooCommerce, themes and extensions supported and remove unused plugins.
- Set the WordPress memory limit to at least 256 MB and watch the container’s actual memory ceiling.
- Use HTTPS everywhere, enable HTTP-to-HTTPS redirects, and validate proxy headers.
- Monitor disk space for database files, uploads, backups and Docker’s image cache.
- Test restores on a separate Compose project instead of assuming a successful dump is a usable recovery.
- Document who can deploy, who can access production data, and how to disable checkout during an incident.
Troubleshoot common first-launch failures
| Symptom | Likely cause | Checks and fix |
|---|---|---|
| WordPress says it cannot connect to the database | Wrong credentials, database not ready, or an incorrect host name. | Confirm WORDPRESS_DB_HOST is db:3306, compare the four database variables, inspect docker compose logs db, and wait for the health check. |
| The browser shows a redirect loop after enabling TLS | WordPress does not trust the proxy’s HTTPS indication. | Forward X-Forwarded-Proto: https, add the HTTP_X_FORWARDED_PROTO check, set both site URLs to HTTPS, and clear caches. |
| Checkout contains mixed-content warnings | An old HTTP site URL, asset URL or hard-coded extension setting remains. | Confirm both WordPress URLs, update extension settings, clear caches, and inspect generated asset links in the browser. |
| Uploads fail or large products time out | Proxy body-size/timeouts, PHP limits or insufficient memory. | Raise limits deliberately at the proxy and PHP layers, verify at least 256 MB WordPress memory, and check container and host memory. |
| Orders disappear after a restart | The database volume was removed or the stack points at a new project volume. | Check docker volume ls, avoid down --volumes, confirm the Compose project name, and restore the database backup if necessary. |
| FPM returns gateway errors | The proxy is speaking HTTP to an FPM listener or using the wrong socket/network. | Configure FastCGI parameters and the correct service address, or use the Apache image when you need a simpler HTTP path. |
| Containers restart repeatedly | Invalid environment values, an unsupported image combination, a full disk or an out-of-memory kill. | Read service logs, run docker inspect, check disk and memory, and roll back to the last tested image tags. |
When a single VPS is no longer the right boundary
Compose on one server is a practical starting point because the application, database and proxy are explicit and easy to reproduce. Reconsider the design when recovery objectives, traffic patterns, compliance requirements or team size exceed what one host can safely provide. Options include moving the database to a managed service, adding a second application node behind a load balancer, placing media and backups in separate storage, or engaging an experienced WooCommerce implementation partner. Evaluate operational ownership, observability, update procedures, security boundaries and recovery time—not an advertised performance number.
Quick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.
Free tools Windows power users keep installed
One-click scans. No signup required.




