iTechGuides is reader-supported. When you buy through links on our site, we may earn an affiliate commission. As an Amazon Associate I earn from qualifying purchases. Learn more
Antihost offers managed WordPress hosting with free migration, one-click staging and a 14-day free trial.
Run WooCommerce as two persistent services: a WordPress container and a private MySQL or MariaDB container on the same Docker Compose network. Put the web service behind HTTPS, store WordPress files and the database on named volumes, keep production settings in an override file, and back up both wp-content and the database. The steps below turn that design into a maintainable VPS deployment.
What the deployment looks like
A Docker Compose WooCommerce installation is not a single container. WordPress supplies the application and web server, while MySQL or MariaDB stores products, orders, customers, settings, posts, and pages. Compose creates a private network so WordPress can reach the database by its service name, normally db, without exposing the database to the internet.
Crashes, No Sound, or Screen Glitches?
Random freezes, missing sound and display glitches usually trace back to one bad driver. Find and replace yours safely.Free scan · under a minutePC Slower Than It Used to Be?
A free scan shows the junk files, broken settings and background clutter dragging Windows down - then fixes them in one click.Free scan · Windows 10 & 11Persistent volumes are essential. The WordPress volume holds the application files, themes, plugins, uploaded media, and especially wp-content. The database volume holds WooCommerce data that does not exist in a WordPress XML export. If either volume is discarded, the site is not recoverable from the running containers alone.
The official Docker WordPress example uses this two-service pattern and starts it with docker compose up -d. A VPS adds production responsibilities: firewall rules, TLS, secrets, update discipline, monitoring, and tested restores.
#1 Best Overall
- Powerful Turbo Fan:CAGIWIRU Electric Air Duster have reached speed up to 130000RPM,Can efficient remove dust and debris.With LED light and Three Adjustable Speed to meet with different cleaning tasks.
- With Attached USB C Fasting Charging cable.Charing 3 hours,Enjoy up to 240 minutes of use on the lowest setting, For third speed can use for 25mins.with four charging options to meet with your needs.
- Wide Application:Upgraded attached 5 different nozzles,making it suitable for a variety of scenes, such as car,pet, pc, keyboards, and other electronic devices. It also serves for office and home clean duster.
- Handy Design & Portable:Cordless air duster electric nozzle is Light weight and small size, design and comfortable to hold and space saving, convenient to carry around. You can put it in your room or inside the car without taking up space.
- Warranty & Support: Our Electric air duster comes with 5 years warranty and 24/7 customer service. During this period, if you have any questions,pls kindly feel free to contact us.
Check requirements before creating containers
WooCommerce’s current published requirements (2026) are the minimum compatibility target for this deployment:
- WordPress 6.9 or newer.
- PHP 8.3 or newer.
- MySQL 8.0 or newer, or MariaDB 10.6 or newer.
- HTTPS for the complete store.
- A WordPress memory limit of at least 256 MB.
- Apache or Nginx is recommended as the web server.
These are software requirements, not a universal VPS size. The authoritative material does not publish a CPU, RAM, storage, traffic, or monthly-cost recommendation that applies to every store. Select resources according to catalog size, checkout traffic, scheduled jobs, image processing, and other workloads, then monitor CPU, memory, disk space, database health, and response times. Increase resources before the host begins swapping or running out of disk.
Prepare the host
- Choose a supported Linux VPS and install Docker Engine plus the Docker Compose plugin from the distribution or Docker’s supported installation method.
- Create a non-root deployment account and grant it the Docker permissions it needs. Use root only for host administration.
- Create a project directory such as
/srv/woocommerce, owned by the deployment account. - Point a DNS A and, where applicable, AAAA record for the store hostname at the VPS address. Wait for the record to resolve before requesting a certificate.
- Allow only SSH and web traffic through the host firewall. Do not open TCP 3306 to the public internet.
- Check the PHP version included by the WordPress image, and check the database image against the WooCommerce requirements before the first production deployment.
Create the Compose application and database
Use a base file that describes the application consistently across development and production. Pin image tags after validating them in staging instead of relying on an unexamined latest tag. The following example uses the Apache-based WordPress image and MySQL 8.0; substitute a compatible MariaDB 10.6-or-newer image if that better fits your operations.
services:
db:
image: mysql:8.0
environment:
MYSQL_DATABASE: woocommerce
MYSQL_USER: wcuser
MYSQL_PASSWORD_FILE: /run/secrets/db_password
MYSQL_ROOT_PASSWORD_FILE: /run/secrets/db_root_password
secrets:
- db_password
- db_root_password
volumes:
- db_data:/var/lib/mysql
networks:
- backend
healthcheck:
test: ['CMD-SHELL', 'mysqladmin ping -h localhost -u root -p"$$(cat /run/secrets/db_root_password)"']
interval: 10s
timeout: 5s
retries: 12
wordpress:
image: wordpress:6.9-apache
depends_on:
db:
condition: service_healthy
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_NAME: woocommerce
WORDPRESS_DB_USER: wcuser
WORDPRESS_DB_PASSWORD_FILE: /run/secrets/db_password
WORDPRESS_CONFIG_EXTRA: |
define('WP_MEMORY_LIMIT', '256M');
secrets:
- db_password
volumes:
- wp_data:/var/www/html
expose:
- '80'
networks:
- backend
volumes:
wp_data:
db_data:
networks:
backend:
driver: bridge
secrets:
db_password:
file: ./secrets/db_password.txt
db_root_password:
file: ./secrets/db_root_password.txt
Save this as compose.yaml. The db service has no ports declaration, so MySQL is reachable only from the Compose network. WordPress exposes port 80 to another container or a host-side proxy, but does not yet bind a public host port.
Create the secret files
- From the project directory, run
mkdir -p secrets && chmod 700 secrets. - Generate two long, unrelated passwords and place one in
secrets/db_password.txtand the other insecrets/db_root_password.txt. - Run
chmod 600 secrets/*.txtand ensure the files are excluded from version control. - Keep an encrypted copy of the credentials in your password-management system. Losing the database password can prevent administration even when the data volume is intact.
The official WordPress image documents _FILE environment-variable variants, allowing Compose to read credentials from mounted secret files instead of putting plaintext passwords in the YAML file. If your chosen image or Compose implementation does not support a particular _FILE variable, verify that behavior before deployment and use an equivalent protected secret mechanism.
Rank #2
- Screen Cleaner is Your Screen’s New Bestfriend! - EVEO is proud to present a screen cleaner that’s perfectly suited for your TV. Meet your new screen cleaner, computer screen cleaner, laptop cleaner, iPad cleaner, Macbook,tv cleaner or any other electronic device. Our screen cleaner spray and wipe along with the included plush microfiber cloth, easily removes dust, fingerprints & other smudges on the screen’s surface. Clean effectively for a streak-free screen
- Gentle on your Screens - Our screen cleaner spray and wipes is compatible to be used even for the most sensitive LCD, LED, CRT, and OLED screens in proper use. Be at ease knowing that this product is compatible with all the major brands: LG, SONY, Samsung, Sharp, iPad, iPhone, Android screens, Kindle, PC monitors - we’ve got you covered! Can be used as LCD screen cleaner, tv cleaner, smart tv screen cleaner, and more
- Premium Super Soft Plush Microfiber Cloth - Included in this efficient screen cleaning kit. This screen cleaner spray and wipe has our signature plush microfiber cloth specially designed to comply with screens and monitors and leave them streak-free. Has been shown to effectively absorbs stubborn stains, zero streaks, and no fiber shedding. Always use this together with our screen cleaner for the best results
- Easy-to-Use Screen Cleaner Kit + microfiber cleaning cloth - The EVEO Screen Cleaning Kit will easily be your new favorite tool when it comes to taking care of the things you love most, quick and easy solution for a streak-free screen. Simply screw on the sprayer gun on the screen cleaner bottle. Spray the cleaning liquid onto the microfiber cloth, then wipe the screen until desired cleanliness & shine is achieved.
- Quality Screen Care Kit Worth Purchasing - Enjoy a convenient Screen Cleaner anytime, anywhere you need it. Your satisfaction is our top priority. We stand behind the quality of our products and that’s why, you shouldn’t be worrying at all. We manufacture the Best Screen Cleaner. and can be used for laptop cleaning kit, laptop screen cleaner, tv screen cleaner for smart tv. MacBook screen cleaner, monitor cleaner or screen cleaner spray for electronic devices with microfiber cleaning cloth
Why the volumes and network matter
wp_data: keeps WordPress core files, themes, plugins, uploads, and configuration when the container is recreated.db_data: keeps MySQL’s data directory when the database container is replaced.backend: provides private service-to-service connectivity. WordPress connects todb:3306, not to a public IP address.- Health check: prevents WordPress initialization from racing the first database startup. A first database initialization can take longer than later restarts.
Separate production settings with an override file
Keep development defaults and production policy separate. Docker documents layering a base file with a production file and starting the merged configuration with:
docker compose -f compose.yaml -f compose.production.yaml up -d
Create compose.production.yaml like this:
services:
db:
restart: unless-stopped
logging:
options:
max-size: 10m
max-file: '5'
wordpress:
restart: unless-stopped
ports:
- '127.0.0.1:8080:80'
logging:
options:
max-size: 10m
max-file: '5'
This binds WordPress only to the VPS loopback address. A host-level Nginx, Apache, Caddy, Traefik, or another supported reverse proxy can then forward requests to 127.0.0.1:8080 while owning ports 80 and 443. Do not add a public database binding to either file.
Use the override for production-only restart behavior, host bindings, logging limits, and any proxy or monitoring service. Review the merged result before starting it:
docker compose -f compose.yaml -f compose.production.yaml config
Record the exact WordPress, PHP, and database tags you approve. The official image guidance recommends rebuilding and redeploying regularly for security updates; schedule update reviews rather than silently following a moving tag.
Start WordPress and install WooCommerce
- From the project directory, start the stack with
docker compose -f compose.yaml -f compose.production.yaml up -d. - Check startup state with
docker compose psand inspect messages withdocker compose logs -f wordpress db. Initial database and WordPress setup can take a couple of minutes. - Open the hostname through the reverse proxy once DNS and TLS are configured, or temporarily use the loopback proxy path from the VPS for an isolated check.
- Complete the WordPress installer. Use the final site hostname rather than a temporary IP wherever possible.
- In WordPress administration, install and activate WooCommerce, complete store and tax settings, configure permalinks, and create a test product.
- After HTTPS is active, set both WordPress Address (URL) and Site Address (URL) to the final
https://address. Clear caches after changing them. - Keep payment credentials in the payment gateway’s secure configuration. Do not commit API keys or webhook secrets to Compose files.
Before accepting an order, test product display, cart behavior, account creation, checkout, order email, refunds, scheduled actions, webhooks, and the payment provider’s callback path.
Rank #3
- 【Large size】:Measuring 800 x 300 mm/ 31. 5×12 inches, which is wider and taller than others. Large mouse pad can perfectly fit your keyboard and mouse of any size, and there is also ample space for peripherals such as phones, tablets, etc.
- 【LED backlight mouse pad】:Blade Hawks RGB mouse pad provides 7 static modes and 7 dynamic modes will give you the options you are looking for. Power-off memory function remembers the last lighting mode you selected. The super glow fiber Chroma will give you a colorful gaming setup that you want.
- 【Anti-slip rubber base】:Made from Natural rubber, this gaming mousepad will firmly grip your desktop, allowing you to enjoy the ultimate precision in the games you are most passionate about. It also comes with a texture that enhances this ability even further.
- 【Smooth and waterproof surface】: Micro-textured cloth surface, for extremely precise mouse control and a smooth movement. When liquid splashes on the gaming mouse pad, it forms water droplets and slides down. Will not delay your work or gameplay.
- 【Plug and play】: This mouse and keyboard pad is powered by USB, plug and play, no driver required. One button control light modes. Press one time to change the lighting mode, press twice to change the brightness, press and hold about 3 seconds turn ON/OFF.
Put the store behind HTTPS
Terminate TLS at Nginx, Apache, Caddy, Traefik, or another maintained reverse proxy. WooCommerce recommends running the entire store over HTTPS because checkout, account, and payment endpoints carry sensitive information, and most payment gateways require SSL.
Configure the proxy boundary
- Forward requests for the store hostname to
127.0.0.1:8080(or to the WordPress service on the same Docker network when the proxy is also containerized). - Redirect every HTTP request to HTTPS.
- Pass the original
Hostheader and the client IP headers used by your proxy. - Pass the original protocol so WordPress can distinguish HTTPS from an internal HTTP hop.
- Renew certificates automatically and monitor renewal failures.
Make WordPress recognize forwarded HTTPS
When TLS ends at the proxy, the connection from the proxy to Apache may still be HTTP. Add the following logic to wp-config.php before WordPress loads, or inject the equivalent through your controlled configuration mechanism:
if ( isset( $_SERVER['HTTP_X_FORWARDED_PROTO'] ) && 'https' == $_SERVER['HTTP_X_FORWARDED_PROTO'] ) {
$_SERVER['HTTPS'] = 'on';
}
After enabling the certificate, verify that WordPress Address and Site Address both use https://, then clear page and object caches. Test administrator login, cart, checkout, account pages, image URLs, REST requests, webhooks, and payment callbacks. A missing forwarded-protocol setting commonly causes redirect loops, mixed-content warnings, or payment callbacks that appear to arrive over HTTP.
Apache image or PHP-FPM image?
| Choice | What you operate | Important boundary |
|---|---|---|
| Apache-based WordPress image | WordPress and Apache in one application container; a proxy can forward ordinary HTTP. | Simpler initial topology and fewer moving parts. |
| PHP-FPM WordPress image | WordPress PHP workers plus a separate Nginx or Apache reverse proxy speaking FastCGI. | The official image documentation warns that FPM is not safe to expose directly; provide a correctly configured FastCGI proxy. |
Choose based on operational ownership, observability, configuration familiarity, and update process rather than an assumed universal performance advantage.
Do these 3 things before closing this tab:
1Scan for outdated or missing drivers - takes under a minute2Clear out junk files and repair common Windows errors3Fix the driver behind crashes, sound loss and screen glitchesBack up files and the database
A running container is not a backup. WooCommerce stores content in two places: the wp-content directory (themes, extensions, and uploaded media) and the database (products, orders, posts, pages, settings, and other tables). A WordPress XML export does not capture the complete WooCommerce store.
Rank #4
- 【Softer and More Comfortable】Vaydeer wrist rest has unique diamond pattern, which is the combination of softness and aesthetics. The materials of wrist rest are improved into higher quality memory foam and covered with silky smooth lycra. The computer wrist rest makes you as comfortable and cushiony as like rest your wrists on clouds.
- 【Ergonomic Wrist Saver】The wrist rests for keyboard and mouse comes with a 17.32×3.15×0.83 inch keyboard wrist pad and a 5.94×3.15×0.83 inch mouse wrist support. Based on ergonomic design, the unique concave shape is the perfect fit for your wrist joints. The wrist rest pad fits most computer keyboards and laptops, improve hand and wrist posture, release your wrist and arm stress.
- 【Non-Slip Rubber Bottom】Featuring an anti-skid silicone base on the bottom, this wrist keyboard support stays firmly in place on your desk, preventing the padding from sliding around, ensuring stable and consistent wrist support during extended computer sessions.
- 【Better Experience & Pain Relief】Our keyboard arm rest is beneficial to alleviate the soreness caused by direct contact and friction between your arm and a hard desk surface, reducing the risk of wrist fatigue or carpal tunnel. The soft texture of memory foam can evenly distribute the pressure around your wrists and provide good support with just enough give.
- 【Helpful in Multiple Scenarios】Whether you're working, studying, writing, typing, gaming, this keyboard and mouse rest combo is an essential accessory to add comfort and support to your hands and wrists. It’s also a great gift for men, women, family, friend, coworker, gamer, teacher, etc.
Export the database
Run a logical dump from the database service and write it outside the container:
mkdir -p backups
docker compose exec -T db sh -c 'exec mysqldump -u"$MYSQL_USER" -p"$MYSQL_PASSWORD" "$MYSQL_DATABASE"' > backups/db-$(date +%F-%H%M).sql
Restrict the backup directory permissions and encrypt copies before sending them off the VPS. If your image exposes only the secret-file variables, run the dump with the credentials read from the corresponding secret files or use a dedicated backup account with the minimum required privileges.
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 →Archive WordPress files
Identify the actual volume name with docker volume ls, then archive at least wp-content to a host directory:
mkdir -p backups
docker run --rm
-v yourproject_wp_data:/data:ro
-v "$PWD/backups":/backup
alpine tar czf /backup/wp-content-$(date +%F-%H%M).tgz -C /data wp-content
Replace yourproject_wp_data with the volume name shown on your VPS. A full volume archive can also be useful for disaster recovery, but a database dump remains valuable because it can be inspected and restored independently.
Retention and restore testing
- Automate database dumps and off-host file copies; do not rely on a manual reminder.
- Keep multiple restore points, including a recent point and older points that predate accidental deletion.
- Store at least one encrypted copy away from the VPS so a host failure or ransomware event does not destroy every copy.
- Perform a restore drill in a separate Compose project. Confirm that products, orders, media, login, checkout, scheduled actions, and payment callbacks work.
WooCommerce documentation names Jetpack VaultPress Backup as an automated option with scheduled backups, activity logs, and one-click restores. Check its current service availability and terms before adopting it; whichever method you choose, verify that both database and file restoration are covered.
Best Value
- 【No Drill Mounted】Cable management tray can be assembled in as little as 3 minutes or less-simply. Side clips easily clampe the edge of desk, pass through the holes on the sides, and secure excess cables with baskets. Desk cable management supports inward or outward installation to meet your needs in different scenarios, and provides you with great convenience when collecting and organizing wires.
- 【Rubber Pad Protects Desk】Wire organizer under desk built-in soft rubber pads on the clamp protect your desk from scratches, so you will not damage your furniture or office.
- 【Sturdy and Beautiful】Cord management under desk is made of high-quality carbon steel and holds about 15 lbs. The wire basket has 2 holes on each side of the tray to enable your cables to pass freely. Cable baskets are suitable for desk thickness use from 0.4" to 2.4".
- 【Space Saving & Keep Organized】Desk cable management tray holds all your power cords, outlet strips, USB hubs and computer transformers hidden from your feet, and the data cables will not enter the vacuum cleaner to keep your desk clean and tidy. Desk wire organizer is also suitable for use in the kitchen and outdoors.
- 【Reduce Safety Risks】Cable tray under desk keeps all plugs away from your kids, no more worry about tripping. Using 2 holes wire tray saves extra space, helps you easily cabling and wire protection. The mesh design is not easy to accumulate dust, but avoids safety accidents caused by messy wires.
Restore safely
- Provision a separate project or maintenance window and record the target image tags.
- Stop or isolate WordPress while restoring so requests cannot write new data during the operation.
- Restore the file archive into the WordPress volume, preserving ownership and permissions.
- Import the SQL dump, for example with
cat backups/db-2026-10-14-1200.sql | docker compose exec -T db sh -c 'mysql -u"$MYSQL_USER" -p"$MYSQL_PASSWORD" "$MYSQL_DATABASE"'. - Start WordPress, clear caches, and test the storefront and administration before directing DNS or the proxy to the restored instance.
Operate, update, and roll back the stack
Useful Compose commands
docker compose psshows service state and published ports.docker compose logs -f wordpressfollows application logs; replace the service name to inspect the database.docker compose tophelps identify processes inside a service.docker compose configrenders the merged configuration, useful for checking ports, secrets, and environment values.
For a targeted redeploy, Docker documents rebuilding a service and recreating it with commands such as:
Free tools Windows power users keep installed
One-click scans. No signup required.
docker compose build web
docker compose up --no-deps -d web
Use your actual service name, such as wordpress, instead of web. Rebuilding one service without its dependency can reduce disruption, but only when the changed image is compatible with the running database and other services.
Safe update procedure
- Take a fresh database dump and file backup.
- Record the current image tags, Compose files, secret locations, and proxy configuration.
- Pull and test the new WordPress, PHP, database, plugin, or theme versions in staging.
- Schedule a maintenance window and communicate possible checkout interruption.
- Deploy the approved tags and watch logs, health checks, disk usage, and memory.
- Verify login, catalog search, cart, checkout, email, scheduled actions, webhooks, payment callbacks, and refunds.
- Keep the prior image tags and the tested database restore procedure available until the new release is accepted.
Never use docker compose down --volumes as a routine restart. The official WordPress example states that docker compose down stops and removes containers while preserving the database volume, whereas docker compose down --volumes removes that volume. Use the latter only when intentionally destroying the environment and after verifying that a restore is available.
Choose the implementation pattern deliberately
| Decision | Option A | Option B | How to decide |
|---|---|---|---|
| Web container | Apache-based WordPress image | PHP-FPM WordPress image plus Nginx or Apache | Prefer the simpler Apache path when you want fewer services; choose FPM when your team already operates FastCGI and needs that separation. |
| Database | MySQL 8.0 or newer | MariaDB 10.6 or newer | Use the engine your plugins and maintenance tooling support, and test upgrades against the exact version. |
| TLS location | Dedicated host or containerized reverse proxy | TLS directly in the web container | A dedicated proxy centralizes certificates, redirects, headers, and multiple services; direct termination can be simpler for a single host but leaves more responsibilities in the application container. |
| Compose layout | One file for every environment | Base file plus production override | The layered approach keeps production ports, restart policy, logging, and host bindings explicit without changing development defaults. |
| Backups | Self-managed dumps and volume copies | WooCommerce-aware managed backup service | Self-management offers control but requires scheduling and restore drills; a managed service can provide automation and activity history, subject to its current terms and coverage. |
| Hosting responsibility | Self-managed VPS | WooCommerce hosting partner or agency | A VPS gives control over Docker and the operating system; a partner may be preferable when you cannot own patching, monitoring, backups, or incident response. |
Compare operational ownership, security boundaries, observability, update process, and recovery time. No published source establishes a universal throughput or cost advantage for one pattern.
Troubleshoot common failures
WordPress cannot connect to MySQL
- Confirm both services are on the same Compose network.
- Use
db:3306as the host, notlocalhostor the VPS address. - Check that database name, username, and password files match on both services.
- Inspect
docker compose logs dbfor failed initialization or an existing volume created with different credentials. - Wait for the health check during first startup; a healthy database may take a couple of minutes to initialize.
Redirect loops or mixed content appear after enabling TLS
- Verify the proxy sends the original protocol header.
- Add the forwarded-protocol handling in
wp-config.php. - Set both WordPress URLs to the HTTPS hostname and clear caches.
- Check that the proxy is not alternately redirecting between an internal HTTP address and the public HTTPS address.
Checkout or payment callbacks fail
- Confirm the entire checkout and account paths are reachable over HTTPS.
- Check webhook and callback URLs for the final hostname and scheme.
- Review proxy timeouts, request-body limits, and application logs.
- Repeat a test order after every proxy or certificate change.
The site lost data after maintenance
Check whether docker compose down --volumes was used. That command removes the database volume. Stop further writes, locate the latest off-host SQL and file backups, and restore into a separate project before attempting to return the site to service.
Quick wins for a faster PC:
Fix the driver behind crashes, sound loss and screen glitchesFind Drivers →Repair Windows errors before they cause bigger problemsFix Now →Scan for outdated or missing drivers - takes under a minuteDriver Scan →Production checklist
- WordPress, PHP, and MySQL or MariaDB meet WooCommerce’s current minimum versions.
- WordPress memory limit is at least 256 MB.
- Database has no public port binding.
- Only required SSH and web ports are open on the VPS firewall.
- Secrets are stored in protected files or an equivalent secret manager and excluded from source control.
- Production override defines deliberate restart, logging, and host-binding behavior.
- TLS redirects HTTP to HTTPS, and forwarded protocol handling is configured.
- WordPress and Site Address use the final HTTPS hostname.
- Both
wp-contentand the database are backed up off-host. - A restore drill has succeeded on a separate Compose project.
- Update records include image tags, Compose configuration, rollback images, and a maintenance window.
- Checkout, email, scheduled actions, webhooks, and payment callbacks have been tested after deployment.
Bottom line
A dependable WooCommerce VPS deployment is a small, explicit system: WordPress and MySQL or MariaDB communicate over a private Compose network, named volumes preserve state, a reverse proxy provides HTTPS, and a production override makes operational policy visible. Treat backups, upgrades, and restore testing as part of the application rather than optional Docker housekeeping, and the stack remains understandable when a container, certificate, plugin, or host needs attention.
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.

