Halloween DealsAmazon USHalloween week deals: useful picks before month-endAmazon US: current deals, useful picks and tech finds.Check DealsPC HealthRecommendedCrashes, freezes, slowdowns? Check your PC nowSpot repairable issues before they interrupt work.Check PCHalloween 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 Self-Host Reactive Resume on a VPS

A complete VPS guide to self-hosting Reactive Resume with Docker Compose, PostgreSQL, persistent storage, reverse-proxy HTTPS, backups and troubleshooting.
Length10 min Posted Quest giverVGSources Team
Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

The dependable way to self-host Reactive Resume is a two-service Docker Compose stack on a Linux VPS: one Reactive Resume container for the web app and API, and one PostgreSQL container on a private network. Use at least 1 vCPU and 1 GB RAM; 2 GB is the practical starting point when PostgreSQL shares the VPS. Set a public HTTPS URL in APP_URL, keep DATABASE_URL and a generated AUTH_SECRET in a private .env file, persist uploads, and place the complete application behind a reverse proxy.

What the self-hosted deployment contains

Reactive Resume’s official self-hosting architecture is intentionally small. The published image runs one application container that serves both the web interface and API. A separate PostgreSQL service stores application data. Docker Compose starts and networks these services on the VPS.

As an Amazon Associate I earn from qualifying purchases.

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

The self-hosted edition has no feature difference from the cloud-hosted version, according to the project’s 2026 quickstart. You are responsible for the server, operating-system updates, database backups, storage, DNS, firewall rules, TLS certificates and upgrades.

  • Reactive Resume application: serves the browser UI and API from one container.
  • PostgreSQL: runs as a second container and should be reachable only over the private Compose network.
  • Persistent file storage: either a local directory such as ./data:/app/data or an S3-compatible object-storage backend when S3 is enabled.
  • Reverse proxy: terminates HTTPS and forwards the public hostname to the application container.

For one VPS and one application instance, Redis is not required for the core resume features. Redis becomes a requirement when you run multiple application instances and need shared rate limits, resumable streams, cancellation, notifications and view deduplication.

#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.

VPS requirements and sizing

Item Supported or recommended value Why it matters
CPU 1 vCPU minimum Meets the official minimum for a basic installation; extra CPU gives more headroom during concurrent edits, exports and database work.
Memory 1 GB minimum; 2 GB recommended with PostgreSQL on the same host Both containers, Docker and the operating system share RAM.
Disk Start with 10–20 GB for PostgreSQL and uploads The required space grows with the number of accounts, resumes, uploaded assets and backups.
Docker Engine 20.10 or newer Required by the 2026 Reactive Resume quickstart.
Docker Compose 2.0 or newer Use the modern Compose plugin with Docker Engine.
Network Public IP, DNS name and a firewall Users need a stable hostname; the firewall should expose only the services intended for the internet.

The 1 GB figure is an official minimum, not a promise that every workload will feel comfortable on it. If the VPS also hosts a reverse proxy, monitoring, backups or other applications, choose more than the minimum. Increase storage before the database or upload volume approaches the disk limit; a full filesystem can stop both PostgreSQL and the application.

Prepare the VPS before installing Reactive Resume

1. Provision a Linux server

Choose a Linux VPS with a public IPv4 or IPv6 address, then point a DNS record such as resume.example.com at that address. Create a firewall policy that allows SSH for administration and web traffic for the reverse proxy. Do not plan to expose PostgreSQL directly to the public internet.

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

Decide where the project directory will live. It must have enough room for the Compose files, PostgreSQL data, the local upload directory and temporary backup files. Restrict access to the directory because it will contain database credentials and the authentication secret.

2. Install Docker and Compose

Install Docker Engine 20.10 or newer and the Docker Compose plugin 2.0 or newer using the package instructions for your Linux distribution. Confirm the versions before deploying:

docker --version
docker compose version

If your distribution provides an older standalone docker-compose binary, use the newer docker compose plugin instead of mixing both implementations.

3. Create the project layout

Create a private directory containing the Compose definition, environment file and persistent data directory:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
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
mkdir -p ~/reactive-resume/data
cd ~/reactive-resume
touch compose.yml .env
chmod 600 .env

The exact Compose service definitions should follow the current Reactive Resume self-hosting documentation. Keep the application and PostgreSQL services on the same internal Compose network, and publish only the application port needed by your reverse proxy. Do not add a host port mapping for PostgreSQL.

Set the required environment variables

Put deployment settings in .env, not in a publicly readable Compose file or a shell history. Three values are central:

  • APP_URL: the final public origin, including the scheme. For an HTTPS deployment use a value such as https://resume.example.com, not the private container address.
  • DATABASE_URL: a PostgreSQL connection string that uses the Compose service name (for example, postgres) or another private address reachable from the application container. It must include the database user, password, host, port and database name required by your PostgreSQL service.
  • AUTH_SECRET: a long random value used to protect authentication. Generate one on the VPS with:
openssl rand -hex 32

Copy the command’s output into AUTH_SECRET. Keep the same secret when restarting or upgrading an existing installation; replacing it can invalidate authentication data. Never commit .env to a public repository or paste its contents into support requests.

A conceptual environment file looks like this, with your own database credentials and hostname:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
APP_URL=https://resume.example.com
DATABASE_URL=postgresql://USER:PASSWORD@postgres:5432/DBNAME
AUTH_SECRET=generated-hex-value

The PostgreSQL username, password and database name in that example must match the values configured for the PostgreSQL service in your Compose file. Use a password that is unique to this installation.

Configure storage and PostgreSQL safely

Keep PostgreSQL private

Reactive Resume needs the application container to reach PostgreSQL, but internet users do not. Compose’s private network provides that boundary when you omit a PostgreSQL ports mapping. A database service with no published host port is still available to the application by its service name, while scanners on the public IP cannot connect to it directly.

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)

Back up PostgreSQL separately from the VPS filesystem. A snapshot of a running disk is not a substitute for a tested logical database restore.

Persist uploaded files

If S3 storage is disabled, mount a durable host directory into the application at /app/data, commonly as ./data:/app/data. Without that mount, files written inside the container can disappear when the container is recreated. Include the data directory in your backup plan.

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

S3-compatible storage is an alternative when you prefer object storage for uploads or need storage independent of the VPS. Whichever option you choose, verify that a newly uploaded image or attachment remains available after an application restart.

Start the Compose stack

  1. Review compose.yml and .env. Confirm that DATABASE_URL points to the PostgreSQL service name or another reachable private address, and that APP_URL is the hostname users will actually open.
  2. Start both services in detached mode:
docker compose up -d
  1. Watch the application log while the first boot runs:
docker compose logs -f reactive-resume
  1. Wait for PostgreSQL to accept connections, for the automatic database migrations to finish and for the application health check to become healthy. The server runs migrations on every start before it serves traffic.
  2. From the VPS (or an equivalent network context), check the health endpoint:
curl http://127.0.0.1:3000/api/health
  1. Open the public HTTPS hostname only after the reverse proxy is forwarding to the healthy application container.

The application may take longer on its first start while images are downloaded and PostgreSQL initializes. Do not repeatedly restart it during migration; inspect the logs first if startup appears stuck.

Put Reactive Resume behind HTTPS

Use a reverse proxy in front of the application rather than exposing the container directly as the public service. Configure DNS and a certificate for the final hostname, then forward the complete application to the container’s HTTP listener. The proxy must pass more than the landing page:

  • Web application routes and API requests
  • Uploaded files
  • Fonts and other static assets
  • Public resume-sharing pages

Set APP_URL to the external HTTPS origin even though the proxy talks to the container over an internal HTTP connection. A mismatch, such as using http://127.0.0.1:3000 in APP_URL, can produce incorrect links, insecure redirects or authentication failures.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
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

After the certificate is active, test the whole user journey rather than only the home page:

  • Register a new account and sign in.
  • Create and edit a resume, including a public share link.
  • Upload an image or other supported asset, refresh the page and verify it remains visible.
  • Export a PDF from the browser.
  • Open the site from a second device or private browser window to confirm that HTTPS, cookies and public pages work through the proxy.

PDF generation: Browserless is no longer part of a new setup

Starting with Reactive Resume v5.1.0, PDF generation runs entirely in the browser through @react-pdf/renderer. New deployments therefore do not need a headless-browser service. Remove obsolete PRINTER_* and BROWSERLESS_* variables instead of carrying old examples into a current Compose file.

This change also alters troubleshooting: a failed PDF export should first be investigated in the browser and through the reverse proxy, not by adding a Browserless container. The VPS still needs enough memory for the application and browser tab performing the export.

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.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Backups, upgrades and routine operations

Back up both kinds of data

A usable backup covers PostgreSQL and uploaded files. Schedule database dumps or an equivalent PostgreSQL backup, copy the local data directory when local storage is enabled, and retain copies outside the VPS. If you use S3-compatible storage, include the bucket and its configuration in the recovery plan.

Periodically create a test instance or temporary restore and verify that users, resumes, public links and uploaded assets are present. A backup that has never been restored is only an assumption.

Upgrade the application image

Before an upgrade, make a fresh database backup and read the release notes for the target version. Pull the published image and recreate the application service with Compose. The project documents the Docker Hub image amruthpillai/reactive-resume:latest and also publishes an image through GitHub Container Registry.

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.
docker compose pull
docker compose up -d

Watch the logs after recreation because migrations run during startup. Keep the previous image reference and a current database backup until you have confirmed login, editing, uploads and PDF export on the new version.

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

Use a remote Docker host when administration is separated

Docker supports directing the Compose client at a remote Docker Engine with the DOCKER_HOST, DOCKER_TLS_VERIFY and DOCKER_CERT_PATH environment variables. This can keep deployment commands on a controlled administration machine while the containers run on the VPS. Protect the TLS certificates and restrict access to the remote Docker API; access to that API is effectively control of the host.

When a single VPS is enough—and when to add Redis

Single application instance

One application container plus one PostgreSQL service is the simplest supported arrangement. It avoids cross-instance coordination and is appropriate for a personal site, a small team or a modest public installation. Keep the database private and make sure the VPS has the recommended 2 GB of RAM when both services share it.

Multiple application instances

Horizontal scaling requires shared Redis and a deployment namespace, according to the project documentation. Those shared services coordinate rate limits, resumable streams, cancellation, notifications and view deduplication. Multiple containers without shared coordination can behave inconsistently, so do not add replicas merely because the proxy supports load balancing.

Deployment choices to decide before you build

Decision Practical choice for a first deployment Use the alternative when
PostgreSQL location PostgreSQL container on the same private Compose network You already operate a managed PostgreSQL service and can provide a private, reliable connection.
Upload storage Persistent local mount such as ./data:/app/data You need storage independent of the VPS or already operate S3-compatible object storage.
Application count One instance, with no Redis Traffic and availability requirements justify multiple instances and shared Redis.
Administration Run Compose on the VPS A controlled deployment machine should manage a remote Docker host through Docker’s TLS environment variables.
HTTPS One reverse proxy for the complete application You have an existing proxy platform that can forward the API, uploads, fonts and assets as well as the web pages.

Infrastructure pricing depends on provider, region, storage type and backup policy; the Reactive Resume documentation establishes resource requirements but does not set a universal monthly cost. Compare offers using RAM and CPU headroom, disk growth, managed-database fees, backup automation, restore testing, TLS operations and whether you need Redis for more than one application instance.

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

Troubleshooting checklist

The application container exits during startup

Inspect the full log:

docker compose logs -f reactive-resume

The most common documented causes are an invalid DATABASE_URL or failure to reach PostgreSQL. Check the service name, credentials, database name, network membership and PostgreSQL startup state. Correct the environment file, then recreate the service with Compose. Because migrations run before traffic is served, a migration error also causes the container to exit.

The health endpoint does not respond

Run curl http://127.0.0.1:3000/api/health on the VPS. If it fails locally, troubleshoot the container and its logs before changing the reverse proxy. If it succeeds locally but the public hostname fails, inspect proxy upstream settings, firewall rules, DNS and the certificate.

Uploads disappear after a restart

Verify that the application service mounts a host directory at /app/data when S3 is disabled. Check that the host path exists, is writable by the container and is included in backups. Recreating a container without a persistent mount removes files stored only in the container layer.

The page loads but actions or shared resumes fail

Confirm that the proxy forwards API requests, public routes and uploaded assets—not just the root HTML page. Recheck APP_URL for the exact HTTPS hostname and repeat the registration, editing, sharing and upload tests from a private browser window.

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

Final go-live checklist

  • VPS has at least 1 vCPU and 1 GB RAM; 2 GB RAM is selected when PostgreSQL shares the host.
  • Docker Engine is 20.10 or newer and Docker Compose is 2.0 or newer.
  • DNS points to the VPS and the firewall does not expose PostgreSQL.
  • APP_URL is the final public HTTPS origin.
  • DATABASE_URL reaches PostgreSQL over the private network.
  • AUTH_SECRET was generated with openssl rand -hex 32 and stored privately.
  • Local uploads use a persistent ./data:/app/data mount, or S3-compatible storage is configured.
  • Health checks pass and migrations complete before public traffic is enabled.
  • The reverse proxy forwards the web app, API, uploads, fonts and assets.
  • Registration, login, editing, public sharing, uploads and PDF export have all been tested through HTTPS.
  • PostgreSQL and file backups run on a schedule, and a restoration test has succeeded.
  • Old PRINTER_* and BROWSERLESS_* variables are absent on v5.1.0 and later installations.

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 *

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.

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
Windows Errors? Fix Them Before They SpreadFree repair scan

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.