How to Deploy Remix to Fly.io: Step-by-Step Guide
To deploy a
Remix app to Fly.io, first install the Fly CLI and create a Fly app with fly launch. Then configure your Dockerfile or use Fly's Node.js builder, and deploy with fly deploy to run your Remix app in the cloud.Syntax
Deploying Remix to Fly.io involves these main commands and files:
fly launch: Initializes your Fly.io app and creates config files.fly deploy: Uploads and deploys your app to Fly.io servers.Dockerfile: Defines how your Remix app is built and run in Fly.io's environment.fly.toml: Configuration file generated by Fly CLI to set app settings.
bash
fly launch fly deploy # Dockerfile example snippet FROM node:18-alpine WORKDIR /app COPY package.json package-lock.json ./ RUN npm install COPY . . RUN npm run build CMD ["npm", "start"]
Example
This example shows how to deploy a Remix app using Fly.io with a Dockerfile.
It demonstrates creating the Fly app, writing a Dockerfile, and deploying.
bash
# 1. Install Fly CLI and login curl -L https://fly.io/install.sh | sh fly auth login # 2. Initialize Fly app fly launch --name remix-app --no-deploy # 3. Create Dockerfile in your Remix project root # Dockerfile content: FROM node:18-alpine WORKDIR /app COPY package.json package-lock.json ./ RUN npm install COPY . . RUN npm run build EXPOSE 3000 CMD ["npm", "start"] # 4. Deploy your app fly deploy # 5. Open your deployed app fly open
Output
==> Creating app remix-app
==> Creating fly.toml
==> No deploy flag set, skipping deploy
# After running fly deploy:
==> Building image
==> Pushing image
==> Releasing image
App deployed
# fly open opens your app URL in browser
Common Pitfalls
Common mistakes when deploying Remix to Fly.io include:
- Not creating or misconfiguring the
Dockerfile, causing build failures. - Forgetting to expose the correct port (usually 3000) in the Dockerfile.
- Skipping
fly launchor not setting the app name, leading to deployment errors. - Not running
npm run buildbefore starting the app, so Remix server code is missing.
Always check Fly.io logs with fly logs to debug deployment issues.
dockerfile
### Wrong Dockerfile example (missing build step and port) FROM node:18-alpine WORKDIR /app COPY . . CMD ["npm", "start"] ### Correct Dockerfile example FROM node:18-alpine WORKDIR /app COPY package.json package-lock.json ./ RUN npm install COPY . . RUN npm run build EXPOSE 3000 CMD ["npm", "start"]
Quick Reference
Summary tips for deploying Remix to Fly.io:
- Use
fly launchonce to create config files. - Write a Dockerfile that installs dependencies, builds Remix, and exposes port 3000.
- Deploy with
fly deployand check logs withfly logs. - Ensure your Remix app listens on the port Fly.io expects (usually 3000).
- Use
fly opento open your live app in a browser.
Key Takeaways
Run
fly launch to initialize your Fly.io app before deploying.Create a Dockerfile that installs dependencies, builds your Remix app, and exposes port 3000.
Use
fly deploy to upload and start your Remix app on Fly.io.Check deployment logs with
fly logs to troubleshoot issues.Ensure your Remix app listens on the correct port for Fly.io to route traffic properly.