Deploying a LiveVue app is similar to deploying a regular Phoenix app.
By default, LiveVue uses LiveVue.SSR.QuickBEAM for production SSR, which runs JavaScript
inside the BEAM — no Node.js required in production.
Need Node.js instead?
If you prefer the Node.js-based SSR, you can switch to LiveVue.SSR.NodeJS.
See Configuration for details.
This requires Node.js 24+ installed in production and NodeJS.Supervisor in your supervision tree.
General Requirements
- Standard Phoenix deployment requirements
- Build assets before deployment (requires Node.js at build time only)
- QuickBEAM hex dependency (
{:quickbeam, "~> 0.8"})
Fly.io Deployment Guide
Here's a detailed guide for deploying to Fly.io. Similar principles apply to other hosting providers.
1. Generate Dockerfile
First, generate a Phoenix release Dockerfile:
mix phx.gen.release --docker
2. Modify Dockerfile
Update the generated Dockerfile to install Node.js in the build stage only (for compiling assets):
# Build Stage
FROM hexpm/elixir:1.14.4-erlang-25.3.2-debian-bullseye-20230227-slim AS builder
# Set environment variables
...
# Install build dependencies
RUN apt-get update -y && apt-get install -y build-essential git curl \
&& apt-get clean && rm -f /var/lib/apt/lists/*_*
# Install Node.js for building assets
RUN curl -fsSL https://deb.nodesource.com/setup_24.x | bash - && apt-get install -y nodejs
# Copy application code
COPY . .
# Install npm dependencies
RUN npm install
...
# Production Stage — no Node.js needed!
FROM ${RUNNER_IMAGE}
RUN apt-get update -y && \
apt-get install -y libstdc++6 openssl libncurses5 locales ca-certificates \
&& apt-get clean && rm -f /var/lib/apt/lists/*_*
...(remaining dockerfile content)...Key points:
- Add
curlto build dependencies - Install Node.js only in the build stage for asset compilation
- No Node.js needed in the production stage — QuickBEAM handles SSR natively
3. Launch on Fly.io
Initialize your app:
fly launchConfigure database when prompted:
? Do you want to tweak these settings before proceeding? (y/N) yIn the configuration window:
- Choose "Fly Postgres" for database
- Name your database
- Consider development configuration for cost savings
- Review other settings as needed
After deployment completes, open your app:
fly apps open
Other Deployment Options
Heroku
For Heroku deployment:
- Use the Phoenix buildpack
- Add Node.js buildpack for asset compilation:
heroku buildpacks:add --index 1 heroku/nodejs
Docker
If using your own Docker setup:
- Install Node.js in the build stage for asset compilation
- Follow standard Phoenix deployment practices
- No Node.js needed at runtime — QuickBEAM runs SSR inside the BEAM
Custom Server
For bare metal or VM deployments:
- Build assets on the build machine (requires Node.js)
- Deploy the release — no Node.js needed on the production server
- Follow standard Phoenix deployment guide
Production Checklist
- [ ] Assets built (
mix assets.deploy, which also createspriv/static/server.mjs) - [ ] SSR configured properly (see Configuration)
- [ ]
LiveVue.SSR.QuickBEAMadded to supervision tree - [ ] Database configured
- [ ] Environment variables set
- [ ] SSL certificates configured (if needed)
- [ ] Production secrets generated
- [ ] Release configuration tested
Troubleshooting
Common Issues
SSR Not Working
- Check SSR configuration (see Configuration)
- Ensure server bundle exists in
priv/static/server.mjs - Verify
LiveVue.SSR.QuickBEAMis in your supervision tree
Asset Loading Issues
- Verify assets were built
- Check digest configuration
- Inspect network requests
QuickBEAM Errors
- Ensure
{:quickbeam, "~> 0.8"}is in your dependencies - Verify server bundle was built correctly
- Ensure
Next Steps
- Review FAQ for common questions
- Join our GitHub Discussions for help
- Consider contributing to LiveVue