Halloween DealsAmazon USHalloween week deals: useful picks before month-endAmazon US: current deals, useful picks and tech finds.Check DealsClean PCRecommendedOne scan can reveal what keeps slowing WindowsLook for cleanup and repair opportunities.Run ScanHalloween DealsAmazon USOctober picks are moving - compare before checkoutAmazon US: current deals, useful picks and tech finds.See Picks×
Skip to content
VGSources
Blog

How to Build and Run a Node.js Application with Docker on a VPS

Build a reproducible Node.js image, run it privately with Docker Compose on an Ubuntu VPS, and expose it safely through Nginx with HTTPS, health checks, backups, and rollback procedures.
Length13 min Posted Quest giverVGSources Team
Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

The reliable production pattern is to build an immutable Node.js image in CI, pull that exact image onto an Ubuntu VPS, run it with Docker Compose on an internal port, and put Nginx on the public edge for ports 80 and 443. Add a non-root runtime user, a health check, a restart policy, HTTPS, firewall rules that account for Docker’s networking, and independent backups for persistent data.

What the finished deployment looks like

Docker packages the Node.js runtime, your application code, its dependencies, configuration, and runtime requirements into a portable container image. The same image can run on a developer laptop, a CI runner, and the VPS, reducing differences between environments.

As an Amazon Associate I earn from qualifying purchases.

Free tools Windows power users keep installed

One-click scans. No signup required.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Keep the public surface small. Nginx listens on the VPS’s public interfaces at ports 80 and 443, terminates TLS, and forwards requests to Node.js on an internal address such as 127.0.0.1:3000 or a private Docker network. Do not publish the application port to the internet unless you have a specific, documented reason.

Layer Responsibility Public?
DNS Points the domain’s A and, if used, AAAA records to the VPS Public lookup
Nginx Accepts HTTP/HTTPS, terminates TLS, forwards proxy headers, and routes traffic Ports 80 and 443
Docker Compose Runs the application image, environment, volumes, health check, and restart policy No direct listener required
Node.js Serves the application and a cheap health endpoint such as /healthz Internal port 3000
Database and files Stores state in named volumes or an external managed service Never expose a database port by default

Decide the deployment boundaries before installing anything

Record the VPS characteristics

Choose a current supported Ubuntu LTS image and record its region, CPU architecture, memory, disk size, IPv4 and IPv6 addresses, and snapshot policy. Architecture matters when an image contains native Node modules: an image built for linux/amd64 will not necessarily run on an ARM VPS without a multi-platform build. Disk capacity must include the operating system, Docker’s image cache, logs, databases, uploads, and temporary build files.

#1 Best Overall
Sale
Gaoye Blue Light Blocking Glasses
  • 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.

Choose where state will live

Containers are replaceable. Databases, user uploads, generated media, and other data that must survive replacement belong in a named Docker volume or an external database/object-storage service. A volume survives container replacement, but it is not a backup: keep encrypted copies elsewhere and regularly restore them to a clean volume or staging VPS.

Choose a release identifier

Build in CI, scan the image there, and tag it with an immutable identifier such as a commit ID. The VPS should pull that exact tag. A floating latest tag makes it difficult to prove which code is running and makes rollback ambiguous.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Prepare Ubuntu securely

  1. Create a non-root administrator. Log in with the provider’s initial account, create a separate user with sudo access, and install your SSH public key for that user.
  2. Require key-based SSH. Test a second session with the new key before changing SSH settings. Keep an emergency console or provider recovery method available.
  3. Apply updates. Update the Ubuntu package index and installed packages, then reboot if the kernel or other system components require it.
  4. Set the host name and time zone. Consistent host names and timestamps make logs and incident reports easier to interpret.
  5. Decide backup destinations. Select storage outside the VPS for database dumps, encrypted volume copies, and configuration needed to recreate the service.

Do not put application secrets in shell history, a Dockerfile, a committed .env file, or an image layer. Keep runtime secrets in a protected deployment environment or a dedicated secret manager.

Install Docker Engine from Docker’s Ubuntu repository

Use Docker’s official apt-repository method for a production host. Docker describes its convenience script as intended for testing and development; it can cause unexpected major upgrades, so it is not the appropriate default for a production VPS.

  1. Follow Docker’s Ubuntu repository instructions for your Ubuntu release and architecture.
  2. Install the Engine and Compose components: docker-ce, docker-ce-cli, containerd.io, docker-buildx-plugin, and docker-compose-plugin.
  3. Check the daemon: sudo systemctl status docker.
  4. Run Docker’s verification image: sudo docker run hello-world.
  5. Confirm the client and Compose plugin versions with docker version and docker compose version.

You can add your deployment user to the docker group to avoid typing sudo, but membership is effectively root-equivalent. Use it only for trusted administrators and review that access as carefully as shell access.

Build a production Node.js image

Pin the base image deliberately

Use a versioned Node image and update it intentionally. The following example uses node:24-bookworm for the build stage and node:24-bookworm-slim for runtime. Node 24 is illustrative; select the major and minor version your application supports, test it in CI, and keep the chosen tag in source control.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
FROM node:24-bookworm AS build
WORKDIR /app

COPY package*.json ./
RUN npm ci

COPY . .
RUN npm run build

FROM node:24-bookworm-slim AS runtime
ENV NODE_ENV=production
WORKDIR /app

COPY package*.json ./
RUN npm ci --omit=dev && npm cache clean --force

COPY --from=build /app/dist ./dist

USER node
EXPOSE 3000
CMD ["node", "dist/index.js"]

The multi-stage build keeps compilers, development dependencies, and source files out of the runtime image. If your project does not produce a dist directory, change the build output and command to match it. The application must listen on 0.0.0.0 inside the container, not only on localhost, or the proxy will not be able to connect.

Rank #2
Windex Gaming Cleaning Wipes, Pre-Moistened Wipes to Instantly Clean all Gaming Gear and Electronics, Resealable Packaging for a Freshness Lock, 25 count (Pack of 1)
  • 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

Make dependency installation reproducible

npm ci requires a committed lockfile and installs the versions recorded there. The runtime stage uses npm ci --omit=dev so development packages are not included. If a native dependency needs compilation, build it in the build stage and verify that the resulting artifacts are compatible with the runtime image.

Add a .dockerignore

node_modules
npm-debug.log*
dist
.env
.env.*
logs
coverage
.git
.DS_Store

Keep local dependencies, build output, logs, credentials, and repository metadata out of the build context. A .dockerignore is not a secret-management system; it simply reduces the chance that sensitive files enter an image build.

Keep secrets out of image layers

Supply database passwords, signing keys, API tokens, and other secrets at runtime through the deployment environment or a secret manager. Do not use ARG or a copied secret file in a Dockerfile: image layers and build caches can retain those values even after a later layer deletes the file.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Run the image with Docker Compose on the VPS

Place a deployment directory on the VPS containing compose.yaml and a protected .env.production. This Compose file keeps the application off the public interface, restarts it after failures or daemon restarts, and persists application data in a named volume.

services:
  app:
    image: registry.example.com/my-node-app:${APP_TAG}
    restart: unless-stopped
    env_file:
      - .env.production
    expose:
      - "3000"
    volumes:
      - app-data:/app/data
    healthcheck:
      test: ["CMD", "node", "-e", "const http=require('http');const r=http.get('http://127.0.0.1:3000/healthz',x=>process.exit(x.statusCode===200?0:1));r.on('error',()=>process.exit(1));"]
      interval: 30s
      timeout: 5s
      retries: 3
      start_period: 20s

volumes:
  app-data:

expose documents and shares the port with other containers without publishing it on the VPS. The health check assumes that /healthz returns HTTP 200 without performing an expensive database migration or external API call. Keep that endpoint cheap enough to run frequently.

Docker documents unless-stopped as restarting a container after an exit or daemon restart while respecting an intentional manual stop. It is generally suitable for a single VPS application: a crash is restarted, but an administrator can stop the service for maintenance without it immediately returning.

Protect the environment file

Restrict ownership and permissions on .env.production, and ensure it is excluded from version control. Keep the exact environment file used by the previous release so a rollback does not accidentally combine old code with incompatible settings.

What’s actually slowing this PC down?

Pick the symptom - the matching free tool is one click away.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Rank #3
Sale
LISEN Cell Phone Stand Phone Holder for Desk, Office Decor Gadgets for Men
  • 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)

Put Nginx in front of Node.js

Install Nginx on the host and create a server block for the application’s domain. The proxy should forward the original host, client address, and protocol so the application can generate correct URLs and log the real client address.

server {
    listen 80;
    listen [::]:80;
    server_name example.com www.example.com;

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_http_version 1.1;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

The exact upstream address depends on your network design. If Nginx runs on the host, publishing the application only to loopback is safer than binding it to every interface. If Nginx runs in a dedicated proxy container, put both services on a private Docker network and use the Compose service name as the upstream.

Configure the Node framework to trust the proxy only in the way its documentation specifies. Trusting arbitrary forwarded headers can allow clients to spoof scheme or address information when the proxy boundary is not enforced.

Point DNS to the VPS and enable HTTPS

Verify DNS first

Create the domain’s A record for the VPS IPv4 address and an AAAA record only when IPv6 is configured and reachable. Confirm that both names resolve to the intended machine before requesting a certificate. An incorrect AAAA record can make some users reach a different or unreachable server even when IPv4 works.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Run Certbot’s Nginx integration

  1. SSH to the VPS with the administrator account.
  2. Install Certbot using the documented installation method for your Ubuntu system; the current Nginx instructions recommend the snap package.
  3. Run sudo certbot --nginx and select the domain names configured in Nginx.
  4. Allow Certbot to install the certificate and the HTTPS server-block changes it proposes.
  5. Test the renewal process with sudo certbot renew --dry-run.

Keep DNS-provider credentials secret. Credentials that can change DNS records may be sufficient to take over a site, so use a narrowly scoped token when automated DNS validation is required and protect its storage.

After certificate issuance, test both HTTP behavior and HTTPS behavior. Decide whether HTTP should redirect to HTTPS, and verify that WebSocket or long-lived connections receive the proxy settings required by your application.

Apply firewall rules that account for Docker

At the host edge, allow SSH only from trusted addresses where practical, and allow HTTP and HTTPS. Do not allow database ports, development servers, or the Node port to the internet.

Rank #4
Ledagic IC+RGBW USB Powered Led Light Bar with App & Remote Control, 2 Pack
  • 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
  • Permit SSH from the administrator network or VPN rather than the entire internet when feasible.
  • Permit TCP 80 and 443 for the Nginx edge.
  • Keep application, database, cache, and metrics ports private.
  • Configure both IPv4 and IPv6 intentionally; an unfiltered IPv6 listener defeats an IPv4-only firewall plan.

Docker warns that published container ports can bypass uncomplicated firewall (ufw) or firewalld expectations because Docker installs its own packet-filtering rules. Review Docker’s documented iptables/ip6tables approach and use the DOCKER-USER chain for policies that must be applied before Docker’s forwarding rules. Verify from an external network that only the intended ports answer and that the application cannot be reached by bypassing Nginx.

Deploy an immutable release

Build and publish in CI

  1. Run tests and the production build in CI.
  2. Build the image for the VPS architecture, or publish a multi-platform manifest when more than one architecture is supported.
  3. Scan the image and fail the release according to your vulnerability policy.
  4. Tag the image with the commit ID or another immutable release identifier.
  5. Push that tag to your registry.

Pull and start on the VPS

  1. Set APP_TAG in the protected deployment environment to the new immutable tag.
  2. Authenticate the VPS to the registry without embedding credentials in the Compose file.
  3. Pull the exact image with docker compose pull app.
  4. Start or replace the service with docker compose up -d.
  5. Inspect status with docker compose ps and recent output with docker compose logs --tail=200 app.
  6. Wait for the health check to pass, then request https://example.com/healthz and a representative API or page through the domain.

Keep the previous image tag and its compatible environment configuration. A rollback should be a controlled change of APP_TAG followed by docker compose up -d, not a rebuild from an uncertain working tree.

Handle migrations safely

Do not hide destructive database migrations in a container startup command that may run repeatedly after a crash. Use an explicit, reviewed migration step, make migrations backward-compatible when old and new application versions overlap, and take a verified backup before an irreversible change.

Persist and back up application data

Docker volumes live outside a container’s writable layer, so replacing a container does not remove the volume. Mount the volume at the path the application actually writes to, such as /app/data, and confirm the container user can read and write it.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
  • Databases: Prefer database-aware dumps or the provider’s backup facility over copying live database files.
  • Uploads: Copy files to storage outside the VPS when durability and recovery time matter.
  • Volume snapshots: Copy them off-host, encrypt them, and retain versions according to your recovery requirements.
  • Configuration: Back up Compose files, Nginx configuration, certificate renewal configuration, and a documented list of required secrets without exposing the secret values.
  • Restore drills: Periodically restore to a clean volume or staging VPS and verify that the application can start and serve real data.

A VPS snapshot is useful for rapid recovery but is not an independent backup if it remains in the same failure domain. Test that you can recover without relying on the original machine.

Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Operate the service after launch

Check startup and reboot behavior

Docker’s daemon starts at boot on a standard Engine installation, and the Compose service’s restart policy brings the container back after a daemon restart. Reboot during a maintenance window and verify that Nginx, Docker, the application, and the health endpoint recover in the expected order.

Observe logs without filling the disk

Use docker compose logs --tail=200 app for immediate inspection and configure Docker log rotation or an external log collector. Monitor disk usage, because an otherwise healthy container can become unavailable when the host filesystem fills with unbounded logs or image layers.

Best Value
Sale
HUANUO FlowLift™ Dual Monitor Stand, Fully Adjustable Gaming Monitor Desk Mount for 13–32″ Computer Screens, Full Motion VESA 75x75/100x100 with C-Clamp & Grommet Base, Each Arm Holds 4.4 to 19.8 lbs
  • 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.

Update deliberately

Review Ubuntu, Docker, Nginx, Node base-image, and application updates separately. Build and test a new image, deploy its immutable tag, watch health checks and error rates, and retain the previous tag until the release has passed its observation period. Do not let an unattended update silently replace the Node runtime with an untested major version.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Test the restart policy

In a maintenance window, force a controlled container exit and confirm that unless-stopped restarts it. Then manually stop the service and confirm it remains stopped until you explicitly start it again. Record the results as part of the runbook rather than assuming the policy works.

Choose between common implementation options

Decision Option A Option B Use the second option when
Image build Single-stage image: simpler Dockerfile and faster to understand Multi-stage image: smaller runtime and fewer build tools You want reduced runtime contents, lower transfer size, or a clearer production boundary
Public edge Nginx on the host Dedicated proxy container You need the proxy versioned and isolated with the application, and you can manage its network and certificate storage safely
State Named VPS volumes Managed database or object storage Durability, automated backups, or lower recovery burden outweigh local simplicity
Release Build on the VPS Build in CI and pull from a registry Reproducibility, faster rollback, and separation of build credentials are priorities
Supervision Docker restart policy External service manager orchestrating Docker You need host-level dependency ordering, advanced health-driven actions, or multi-service orchestration beyond Compose

For a single application on one VPS, host Nginx, a registry-built image, Compose, a private application port, and an explicit backup plan are usually the least surprising arrangement. A proxy container or external supervisor can be valid, but each adds another failure boundary and another configuration set to maintain.

Verification checklist before calling the deployment complete

  • docker version and docker compose version show the expected installations.
  • sudo docker run hello-world succeeded during host setup.
  • The running image uses the intended Node version and starts as the non-root node user.
  • NODE_ENV=production is present in the runtime container.
  • The health endpoint passes from inside the container and through the HTTPS domain.
  • Only the intended SSH, HTTP, and HTTPS ports are reachable externally; no database or Node port is public.
  • DNS A and AAAA records, when both are used, resolve to reachable addresses on this VPS.
  • sudo certbot renew --dry-run succeeds.
  • A controlled container exit demonstrates the selected restart policy, while a manual stop stays stopped when unless-stopped is configured.
  • A recent database or file backup restores successfully to a clean volume or staging VPS.
  • The previous image tag and compatible environment configuration are available for rollback.

Troubleshoot the failures that appear most often

Nginx returns 502 Bad Gateway

Check docker compose ps, the application logs, and whether Node is listening on 0.0.0.0:3000 inside the container. Confirm that Nginx’s upstream address matches the network design: host Nginx cannot reach an unexposed container port, while a proxy container should use the Compose service name rather than the host loopback address.

The container exits immediately

Read docker compose logs --tail=200 app. Common causes are a wrong CMD, a missing build artifact, a failed production dependency install, an invalid environment variable, or a migration that fails at startup. Run the image interactively with a temporary shell only for diagnosis; fix the image or configuration rather than editing a running container.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

The health check is unhealthy

Execute the health command inside the container and request /healthz locally. Ensure the endpoint returns 200 quickly, does not depend on an unavailable hostname, and is not protected by authentication intended for user traffic. If startup legitimately takes longer, adjust start_period based on observed behavior rather than disabling the check.

HTTPS validation fails

Verify DNS from outside the VPS, confirm port 80 is reachable for the selected validation method, check that Nginx’s server_name matches the requested domain, and inspect IPv6 routing if an AAAA record exists. Run the renewal dry run again after correcting the underlying DNS or firewall issue.

Data disappeared after a redeploy

Inspect the Compose volume name and mount path, and verify that the new image writes to the mounted directory rather than a different path in its writable layer. Do not remove volumes during cleanup until you have identified their contents and confirmed a restorable backup.

What success looks like

A successful deployment has one reproducible image, one documented release identifier, and a clear path from DNS to Nginx to the private Node process. The host is administered by a non-root user, the runtime does not contain development tools or secrets, HTTPS renewal is tested, Docker’s firewall interaction is understood, and state can be restored independently of the VPS. Those properties matter more than a particular Node major version or a clever Compose file: they make the service predictable to deploy, recover, and update.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

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.

Leave a Reply

Your email address will not be published. Required fields are marked *

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

More quests from Patch Notes

  1. How to Set Up a RedM (RDR2) Server in 2026: License Key, txAdmin and server.cfg, Step by StepBlog11min
  2. Best RedM (RDR2) Server Hosting in 2026: Comparing Four Hosts on Slots, Memory and PriceBlog10min
  3. How to Host a Mindustry Server in 2026: server-release.jar, Port 6567 and the Commands That MatterBlog7min
Recommended PC Tool
Recommended PC Tool
Crashes, No Sound, or Screen Glitches?Free driver scan
PC Slower Than It Used to Be?Free scan - under a minute

Two free Windows tools

One Free Minute Could Fix That PC

Before you go - each of these free tools takes about a minute and tackles what quietly slows a Windows PC down.

Special offer. View Outbyte info, uninstall instructions, EULA, and Privacy Policy.