Hey r/selfhosted, get ready to craft your story like never before!
I’m thrilled to announce that Reactive Resume has just launched its latest version, and it’s a game-changer in the resume-building space (at least, I’d like to think so).
Here’s a glimpse of some of the new features:
- A sleek, polished user interface that makes navigation a breeze.
- Faster PDF generation to get your resume out there quicker.
- Integration with OpenAI for smarter assistance.
- Brand new, highly customisable templates to fit your unique style.
- Comprehensive documentation with user-friendly guides.
- Enhanced security with two-factor authentication.
- Available in multiple languages, contributed by the community.
- Quality of life features such as locking resumes, adding personal notes to resumes, tracking views and downloads on your public resume etc.
The best part? It’s 100% free, forever! No ads, no user tracking, just pure resume-building bliss. Plus, for the tech-savvy, it’s also open-source on GitHub and self-hostable through Docker, something special just for this community.
Ready to give it a spin?
You can visit the website on https://rxresu.me, sure. But you’re on r/selfhosted, so you’re probably more interested in the “how to host it myself” part of the launch. The link to the repository is right here: https://github.com/AmruthPillai/Reactive-Resume/
Self-hosting Reactive Resume is super simple, compared to the nightmare it was in earlier versions having to ensure multiple services are communicating alright. You can check the GitHub repo (under tools/compose
for many docker compose examples of how the project could be set up).
I’m excited to see how you make the most of it!
/u/AmruthPillai - hoping you can help unblock me on one thing. Running ReactiveResume via Portainer using the following docker compose script. Everything works fine, except PDF generation - which doesn’t seem to do “anything”. Nothing ever downloads, no separate window opens. The solution is awesome btw - I’m excited to get this working - just need to figure out the PDF part.
​
version: “3.8”
# In this Docker Compose example, it assumes that you maintain a reverse proxy externally (or chose not to).
# The only two exposed ports here are from minio (:9000) and the app itself (:3000).
# If these ports are changed, ensure that the env vars passed to the app are also changed accordingly.
Docker Compose:
services:
# Storage (for image uploads)
minio:
image: minio/minio
restart: unless-stopped
command: server /data
ports:
- 9000:9000
volumes:
- $DOCKERDIR/appdata/resume/minio_data:/data
environment:
MINIO_ROOT_USER: minioadmin
MINIO_ROOT_PASSWORD: 7FgkUNXE3YZe3PrE7U
# Chrome Browser (for printing and previews)
chrome:
image: browserless/chrome:1.61.0-puppeteer-21.4.1
restart: unless-stopped
environment:
TOKEN: chrome_token
EXIT_ON_HEALTH_FAILURE: true
PRE_REQUEST_HEALTH_CHECK: true
# Redis (for cache & server session management)
redis:
image: redis:alpine
restart: unless-stopped
command: redis-server --requirepass password
app:
image: amruthpillai/reactive-resume:latest
restart: unless-stopped
ports:
- 3000:3000
depends_on:
- minio
- redis
- chrome
environment:
# – Environment Variables –
PORT: 3000
NODE_ENV: production
# – URLs –
PUBLIC_URL: $PUBLIC_URL
STORAGE_URL: $STORAGE_URL
# – Printer (Chrome) –
CHROME_TOKEN: chrome_token
CHROME_URL: ws://chrome:3000
# – Database (Postgres) –
DATABASE_URL: postgresql://$POSTGRES_USER:$POSTGRES_PASSWORD@192.168.4.3:32781/postgres?schema=public
# – Auth –
ACCESS_TOKEN_SECRET: PcaDMKAu.x8@iCTaB-
REFRESH_TOKEN_SECRET: yjXiGQkKNcVgE*DUvt
# – Emails –
MAIL_FROM: resume@myurl.com
SMTP_URL: smtp://mysmptname:atz_nqf!cyfg@outbound.mailhop.org:587
# – Storage (Minio) –
STORAGE_ENDPOINT: minio
STORAGE_PORT: 9000
STORAGE_REGION: us-east-1 # Optional
STORAGE_BUCKET: default
STORAGE_ACCESS_KEY: minioadmin
STORAGE_SECRET_KEY: 7FgkUNAr8eb33E7U
STORAGE_USE_SSL: false
# – Cache (Redis) –
REDIS_URL: redis://default:password@redis:6379
# – Email (Optional) –
# DISABLE_EMAIL_AUTH: true
# VITE_DISABLE_SIGNUPS: true
volumes:
minio_data:
postgres_data:
​
ENVIRONMENTAL VARIABLES
​
NODE_ENV=development
PORT=3000
__DEV__CLIENT_PORT=5173 # Only used in development
__DEV__CLIENT_URL=http://localhost:5173 # Only used in development
__DEV__ARTBOARD_PORT=6173 # Only used in development
__DEV__ARTBOARD_URL=http://localhost:6173 # Only used in development
PUBLIC_URL=http://resume.themyurl.com
STORAGE_URL=http://resume.themyurl.com/default # default is the bucket name specified in the STORAGE_BUCKET variable
POSTGRES_PORT=32781
POSTGRES_DB=postgres
POSTGRES_USER=myuser
POSTGRES_PASSWORD=mFQp2QCmypasswordDT@2
DATABASE_URL=postgresql://myuser:Thmypassword6@localhost:5432/postgres?schema=public
ACCESS_TOKEN_SECRET=access_token_secret
REFRESH_TOKEN_SECRET=refresh_token_secret
CHROME_PORT=8080
CHROME_TOKEN=chrome_token
CHROME_URL=ws://resume.themyurl.com:8080
MAIL_FROM=noreply@localhost
STORAGE_ENDPOINT=resume.themyurl.com
STORAGE_PORT=9000
STORAGE_REGION=us-east-1
STORAGE_BUCKET=default
STORAGE_ACCESS_KEY=minioadmin
STORAGE_SECRET_KEY=minioadmin
STORAGE_USE_SSL=false
REDIS_URL=redis://default:password@localhost:6379
CROWDIN_PROJECT_ID=
CROWDIN_PERSONAL_TOKEN=
PUID=1000
PGID=1000
TZ=“America/Vancouver”
DOCKERDIR=“/nfs/docker”
DATADIR=“/nfs/data”