[{"data":1,"prerenderedAt":160},["ShallowReactive",2],{"seo-verification":3,"blog-self-host-reactive-resume-on-a-vps-build-and-share-your-cvs-ma-en":6,"promo-bar-likely":159},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-self-host-reactive-resume-on-a-vps-build-and-share-your-cvs-ma-en",{"id":9,"slug":10,"slugs":11,"title":15,"excerpt":16,"readTime":17,"views":18,"isPinned":19,"noindex":19,"publishedAt":20,"updatedAt":21,"category":22,"categories":27,"featuredImage":29,"bgImage":30,"posterImage":31,"relatedSolution":32,"intro":35,"sections":36,"ctaTitle":94,"ctaBody":95,"ctaButton":96,"ctaUrl":97,"relatedPosts":98},233,"self-host-reactive-resume-on-a-vps-build-and-share-your-cvs",{"fr":12,"en":10,"ar":13,"es":14},"self-host-reactive-resume-vps","استضافة-reactive-resume-على-vps-أنشئ-سيرك-الذاتية-وشاركها","autoalojar-reactive-resume-en-un-vps","Self-Host Reactive Resume on a VPS: Build and Share Your CVs","Deploy Reactive Resume on your VPS — the open-source resume builder with client-side PDF export, no Chrome or Browserless required. MIT, 42k+ stars, v5.3.0.",7,1,false,"2026-08-07T00:00:00+00:00","2026-11-04T16:30:26+00:00",{"id":17,"name":23,"slug":24,"color":25,"icon":26},"Self-hosting","self-hosting","bg-indigo-500\u002F10 text-indigo-400","cloud",[28],{"id":17,"name":23,"slug":24,"color":25,"icon":26},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Fself-host-reactive-resume-vps-poster.svg",{"categorySlug":33,"appSlug":34},"collaboration-productivity","reactive-resume","Reactive Resume is an open-source (MIT) resume builder with over 42,000 GitHub stars. Since v5.1.0, it generates PDFs entirely in the browser — no server-side print service required. The result: two lightweight containers are enough for a full instance, and a 1 GB RAM VPS can host your resume tool without compromise.",[37,41,53,56,78,81,85,88,91],{"type":38,"title":39,"body":40},"h2","Why self-host a resume builder","SaaS resume tools monetise your career history, limit template access or charge for PDF downloads. Self-hosting Reactive Resume inverts the model: your resumes, photos and exports stay in a Docker volume on your VPS, exportable at any time via the UI or REST API, and shareable under your own domain. No template limits, no watermarks, no subscription dependency.\n\nSelf-hosting also gives you full control over the sensitive data a resume contains — personal contact details, employment history, skills. This data never transits through or is stored by a third party.",{"type":42,"title":43,"items":44},"ul","What you get with a self-hosted Reactive Resume",[45,46,47,48,49,50,51,52],"Browser-based drag-and-drop visual editor — no app to install, works on any device.","Professionally designed ATS-friendly templates — multiple layouts for different industries and experience levels.","Client-side PDF export since v5.1.0 — no Chrome, Puppeteer or Browserless server-side.","Public resume URL — share your profile on a readable, always-updated link.","Multiple resumes per account — maintain separate CVs for different roles or languages.","REST API — create and export resumes programmatically for HR tool integration.","Local storage — uploads (photos, portfolio images) written to a Docker volume, no S3 needed.","Optional OAuth authentication — connect a GitHub or Google account by adding the corresponding API keys to the configuration.",{"type":38,"title":54,"body":55},"Requirements","A ServOrbit VPS with Ubuntu 24.04 and at least 1 GB RAM. The Node.js application idles around 300 MB and PostgreSQL 16 adds 100–200 MB — a 1 GB VPS handles a personal or small-team deployment comfortably.\n\nDocker and Docker Compose are provisioned automatically by AWX at deploy time. A domain name is required: Reactive Resume anchors its authentication URL (`APP_URL`) at first start and cannot function behind a bare IP address.\n\nIf you plan to enable email-based account verification, an outgoing SMTP server is recommended. Without SMTP, the verification link is printed to Docker logs — practical for solo use, less suitable if you open access to other users.",{"type":57,"title":58,"steps":59},"steps","Deploy Reactive Resume on your VPS",[60,63,66,69,72,75],{"title":61,"body":62},"Choose your domain before deploying","Reactive Resume embeds `APP_URL` in authentication tokens and OAuth callbacks at first start — changing the domain afterwards breaks all sessions and requires deleting the PostgreSQL volume. Create your DNS A record (e.g. `cv.yourdomain.com`) and wait for propagation before deploying.",{"title":64,"body":65},"One-click deploy from the ServOrbit Marketplace","Open your ServOrbit control panel, go to Marketplace → Collaboration & Productivity → Reactive Resume, enter your domain and click Deploy. AWX installs Docker, generates a random auth secret, configures nginx with Let's Encrypt TLS and starts both containers (app + PostgreSQL) in under two minutes.",{"title":67,"body":68},"Create your account and verify your email","Navigate to `https:\u002F\u002Fcv.yourdomain.com` and click Sign Up to create your account with email and password. Without SMTP configured, the verification link is printed to the Docker logs: `docker compose logs reactive-resume | grep verify`. Click the link to activate your account.",{"title":70,"body":71},"Create your first resume","Click the + button to create a new resume. Choose a template from the library, fill in your sections (Summary, Experience, Education, Skills) in the left panel and preview in real time on the right. Click Download to export a PDF — generation is fully client-side, no waiting for a print server.",{"title":73,"body":74},"Share your resume publicly","In the resume settings, toggle Public Resume ON. Reactive Resume generates a shareable URL — `https:\u002F\u002Fcv.yourdomain.com\u002Fr\u002Fyour-name` — that always serves the latest version of your document. Share this link in job applications instead of attaching a static PDF that you'd have to resend after every update.",{"title":76,"body":77},"Configure OAuth authentication (optional)","To allow sign-in via GitHub or Google, add the corresponding environment variables to your deployment configuration: `GITHUB_CLIENT_ID`, `GITHUB_CLIENT_SECRET`, `GOOGLE_CLIENT_ID`, `GOOGLE_CLIENT_SECRET`. Then restart the containers with `docker compose restart`. The social login buttons appear automatically on the sign-in page as soon as the variables are present.",{"type":38,"title":79,"body":80},"The v5.1.0 shift: client-side PDF, no print server","Before v5.0, Reactive Resume depended on Browserless or a headless Chromium instance to generate PDFs server-side — adding 700 MB to 1 GB of RAM overhead and a dependency to maintain. Since v5.1.0, PDF generation is handled by `@react-pdf\u002Frenderer`, a JavaScript library running directly in the user's browser. The server only receives a document-save request — no Chrome, no Puppeteer, no print service required. This is what reduces the minimal stack to two lightweight containers.",{"type":82,"title":83,"body":84},"tip","Keep your auth secret safe","The ServOrbit deployment automatically generates a random value for `SECRET_KEY`. Never reuse a predictable value or share one between multiple instances. If you suspect a compromise, regenerate this key and restart the containers: all active sessions will be invalidated, forcing users to sign in again — this is the expected behaviour.",{"type":38,"title":86,"body":87},"Use the REST API to automate your exports","Reactive Resume exposes a full REST API, accessible at `\u002Fapi\u002Fv3`. You can create resumes, update them and trigger PDF exports programmatically — useful for integrating resume generation into an HR workflow or an automated application pipeline.\n\nTo authenticate, retrieve a JWT token via `POST \u002Fapi\u002Fv3\u002Fauth\u002Flogin` with your credentials. Then pass this token in the `Authorization: Bearer \u003Ctoken>` header of each request.\n\nExample — list your resumes:\n\n```bash\ncurl -s -H \"Authorization: Bearer \u003Cyour-token>\" \\\n  https:\u002F\u002Fcv.yourdomain.com\u002Fapi\u002Fv3\u002Fresume | jq '.[].title'\n```\n\nFull API documentation is available in the official repository.",{"type":38,"title":89,"body":90},"Backup and data portability","Two Docker volumes hold the entire instance: `reactive_resume_db` for the PostgreSQL database (accounts, resumes, settings) and `reactive_resume_data` for uploaded files (profile photos, portfolio images). Minimal backup:\n\n```bash\ndocker run --rm \\\n  -v reactive_resume_db:\u002Fdata \\\n  -v $(pwd):\u002Fbackup \\\n  alpine tar czf \u002Fbackup\u002Fdb.tar.gz \u002Fdata\n```\n\nFor a direct SQL export: `docker exec db pg_dump -U postgres postgres > backup.sql`\n\nRestore by mounting the volume on a fresh PostgreSQL container configured with the same public URL. Schedule these backups with a daily cron or use your VPS volume snapshot service for automatic coverage.",{"type":38,"title":92,"body":93},"Troubleshooting common errors","**Incorrect `APP_URL` after a domain change.** Symptom: OAuth callbacks fail or the verification link points to the old domain. Fix: update `APP_URL` in the configuration, then delete the PostgreSQL volume (`docker volume rm reactive_resume_db`) and restart. All data will be lost — plan this step before creating production accounts.\n\n**App container restarting in a loop.** Check the logs with `docker compose logs reactive-resume`. The most common error is a refused PostgreSQL connection (`Connection refused to db:5432`): the app container starts before PostgreSQL is ready. Wait 30 seconds and run `docker compose up -d` again.\n\n**PDF generated with incorrect layout.** PDF rendering is handled client-side by `@react-pdf\u002Frenderer` and depends on your browser's rendering engine. If the output looks off, try a different browser (recent Chrome or Firefox). Old browsers or extensions that alter fonts can affect rendering.\n\n**`secretOrPrivateKey must have a value` error at startup.** The `SECRET_KEY` variable is missing from the configuration. Add it with a random value of at least 32 characters: `openssl rand -hex 32` generates a suitable value.\n\n**Public resume URL returning 404.** Check that the resume is marked as public in its settings. If it is, check your nginx configuration: the `location \u002Fr\u002F` block must proxy to the Next.js frontend, not to the API.","Deploy Reactive Resume on your own server","Self-host Reactive Resume on a ServOrbit VPS — open source, no subscription, all your CV data on your own infrastructure.","Deploy Reactive Resume","\u002Fapplications\u002Fcollaboration-productivity\u002Freactive-resume",[99,121,140],{"id":100,"slug":101,"slugs":102,"title":106,"excerpt":107,"readTime":108,"views":18,"isPinned":19,"noindex":19,"publishedAt":109,"updatedAt":21,"category":110,"categories":116,"featuredImage":29,"bgImage":30,"posterImage":118,"relatedSolution":119},193,"self-host-penpot-open-source-figma-alternative-on-your-vps",{"fr":103,"en":101,"ar":104,"es":105},"self-host-penpot-vps","استضافة-penpot-على-vps-بديل-figma-مفتوح-المصدر","alojar-penpot-en-un-vps","Self-host Penpot: open-source Figma alternative on your VPS","Deploy Penpot on a ServOrbit VPS for a full collaborative design tool — vector prototyping, components, developer handoff — no Figma subscription, no third-party data.",12,"2026-07-27T00:00:00+00:00",{"id":111,"name":112,"slug":113,"color":114,"icon":115},4,"Development","developpement","bg-warning\u002F10 text-warning","dev",[117],{"id":111,"name":112,"slug":113,"color":114,"icon":115},"\u002Fblog\u002Fcovers\u002Fself-host-penpot-vps-poster.svg",{"categorySlug":33,"appSlug":120},"penpot",{"id":122,"slug":123,"slugs":124,"title":128,"excerpt":129,"readTime":130,"views":131,"isPinned":19,"noindex":19,"publishedAt":132,"updatedAt":133,"category":134,"categories":135,"featuredImage":29,"bgImage":30,"posterImage":137,"relatedSolution":138},181,"self-host-docuseal-on-a-vps-open-source-e-signature-for-teams",{"fr":125,"en":123,"ar":126,"es":127},"self-host-docuseal-vps","استضافة-docuseal-على-vps-توقيع-إلكتروني-مفتوح-المصدر-للفرق","alojar-docuseal-en-un-vps","Self-Host DocuSeal on a VPS: Open-Source E-Signature for Teams","Deploy DocuSeal on your VPS — open-source e-signature with drag-and-drop PDF templates, multi-party signing and a full audit trail. No per-document fees.",6,2,"2026-07-16T00:00:00+00:00","2026-10-20T23:18:06+00:00",{"id":17,"name":23,"slug":24,"color":25,"icon":26},[136],{"id":17,"name":23,"slug":24,"color":25,"icon":26},"\u002Fblog\u002Fcovers\u002Fself-host-docuseal-vps-poster.svg",{"categorySlug":33,"appSlug":139},"docuseal",{"id":141,"slug":142,"slugs":143,"title":147,"excerpt":148,"readTime":149,"views":18,"isPinned":19,"noindex":19,"publishedAt":150,"updatedAt":151,"category":152,"categories":153,"featuredImage":29,"bgImage":30,"posterImage":155,"relatedSolution":156},46,"deploy-a-nextjs-application-on-a-vps",{"fr":144,"en":142,"ar":145,"es":146},"deployer-nextjs-vps","نشر-تطبيق-nextjs-على-vps","desplegar-nextjs-en-un-vps","Deploy a Next.js Application on a VPS","Deploy Next.js on a VPS: Node.js, PM2, Nginx, SSL, and SSR. A complete guide for developers and agencies who want to self-host.",13,"2026-05-05T00:00:00+00:00","2026-11-04T16:30:25+00:00",{"id":111,"name":112,"slug":113,"color":114,"icon":115},[154],{"id":111,"name":112,"slug":113,"color":114,"icon":115},"\u002Fblog\u002Fcovers\u002Fdeployer-nextjs-vps-poster.svg",{"categorySlug":157,"appSlug":158},"development","nextjs-stack",true,1794270493094]