25. Деплой
Remix поддерживает множество платформ для развёртывания: от Vercel и Netlify до собственного Node.js сервера. Адаптеры делают переключение между платформами простым.
Адаптеры Remix
Заголовок раздела «Адаптеры Remix»# Node.js (по умолчанию)npm install @remix-run/node @remix-run/express
# Vercelnpm install @remix-run/vercel
# Netlifynpm install @remix-run/netlify
# Cloudflare Workersnpm install @remix-run/cloudflare @remix-run/cloudflare-workersnpm install @vercel/remiximport { vitePlugin as remix } from "@remix-run/dev";import { vercelPreset } from "@vercel/remix/vite";
export default defineConfig({ plugins: [ remix({ presets: [vercelPreset()], }), ],});vercel deploy # Автодеплой при push в mainFly.io (рекомендован командой Remix)
Заголовок раздела «Fly.io (рекомендован командой Remix)»# Установка Fly CLIcurl -L https://fly.io/install.sh | sh
# Инициализацияfly launch
# Деплойfly deploy# Dockerfile (создаётся автоматически)FROM node:20-slimWORKDIR /appCOPY package*.json ./RUN npm ci --productionCOPY build/ ./build/COPY public/ ./public/CMD ["npm", "start"]Node.js сервер
Заголовок раздела «Node.js сервер»npm run buildnpm startimport { createRequestHandler } from "@remix-run/express";import express from "express";import * as build from "./build/server/index.js";
const app = express();
app.use(express.static("build/client"));
app.all( "*", createRequestHandler({ build, mode: process.env.NODE_ENV, }));
const PORT = process.env.PORT || 3000;app.listen(PORT, () => { console.log(`Server listening on port ${PORT}`);});FROM node:20-slim AS baseWORKDIR /app
FROM base AS depsCOPY package*.json ./RUN npm ci
FROM base AS buildCOPY --from=deps /app/node_modules ./node_modulesCOPY . .RUN npm run build
FROM base AS productionENV NODE_ENV=productionCOPY --from=deps /app/node_modules ./node_modulesCOPY --from=build /app/build ./buildCOPY --from=build /app/public ./publicCOPY package.json .
CMD ["npm", "start"]Переменные окружения
Заголовок раздела «Переменные окружения»# .env (локально)DATABASE_URL="postgresql://..."SESSION_SECRET="your-secret-here"
# Vercel: Settings → Environment Variables# Fly.io:fly secrets set DATABASE_URL="postgresql://..."fly secrets set SESSION_SECRET="your-secret-here"CI/CD с GitHub Actions
Заголовок раздела «CI/CD с GitHub Actions»name: Deploy to Fly.io
on: push: branches: [main]
jobs: deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: superfly/flyctl-actions/setup-flyctl@master - run: flyctl deploy --remote-only env: FLY_API_TOKEN: ${{ secrets.FLY_API_TOKEN }}