Перенос: Docker
Свой Dockerfile
Заголовок раздела «Свой Dockerfile»Укажите в looma.yaml runtime: { kind: docker, dockerfile: Dockerfile }. Так
собираются Go, Rust, Java, Ruby, PHP и всё, что площадка не собирает сама, а также
Python и Node.js с особой сборкой.
Образ собирает Kaniko без привилегий: 1 ядро, 1 ГБ памяти, до 30 минут, образ под
amd64. Интернет при сборке доступен через прокси (переменные заданы), поэтому pip,
npm, apt и go mod download работают.
Требования к образу:
- веб-процесс слушает
0.0.0.0:$PORT; - команда запуска задаётся в
processes.<имя>.cmdили вCMDобраза, еслиcmdне задан; cmdвыполняется через/bin/sh -c, поэтому в образе нуженsh;- у
scratchи distrolessshнет: возьмитеalpineилиdebian-slimлибо задайтеCMDобраза и не пишитеcmd; - без
privileged, монтирования и Docker внутри; - ничего важного не пишите на диск, он временный (Данные);
- рабочая папка берётся из
WORKDIRобраза.
Многоэтапная сборка (FROM … AS build, затем маленький образ) работает и полезна:
образ меньше, и сервис быстрее стартует после сна.
Пример для Go:
FROM golang:1.23 AS buildWORKDIR /srcCOPY go.mod go.sum ./RUN go mod downloadCOPY . .RUN CGO_ENABLED=0 go build -o /app/server ./cmd/server
FROM alpine:3.20COPY --from=build /app/server /app/serverWORKDIR /appCMD ["/app/server"]runtime: { kind: docker, dockerfile: Dockerfile }processes: web: { cmd: "/app/server", port: 8080 }docker-compose → один сервис Looma Float
Заголовок раздела «docker-compose → один сервис Looma Float»Сервис на Looma Float собирается из одного образа и запускает из него несколько процессов. Службы compose раскладываются так:
| Служба compose | На Looma Float |
|---|---|
ваш код (build: .) |
processes.web |
воркер того же кода (command: celery worker …) |
processes.worker |
планировщик (beat, cron-контейнер) |
процесс с schedule: |
postgres, pgvector, postgis |
data.postgres (postgis в списке расширений нет) |
minio |
data.bucket |
redis, rabbitmq, kafka |
замена в Postgres (Данные) |
mongo, mysql, elasticsearch |
замена: MongoDB, MySQL, поиск |
nginx, traefik, caddy, certbot |
не нужны: домен, TLS и маршрутизацию даёт шлюз, статику отдаёт сам сервис |
ollama, vllm, модели |
модели сети Looma Float (Модели) |
| вторая служба своего кода (отдельный фронтенд, отдельный API) | соберите в один образ (фронтенд соберите и отдавайте из бэкенда) или сделайте отдельным сервисом, который обращается к первому по HTTPS |
Переменные из environment: compose перенесите так:
- адреса с именами служб (
db,redis) больше не работают, вместо них подставьтеDATABASE_URL, переменные бакета и другие переменные площадки (Переменные окружения); - секреты задайте командой
looma secrets set; - остальные значения сделайте значениями по умолчанию в коде или задайте в
cmd.
Фронтенд и бэкенд в одном образе
Заголовок раздела «Фронтенд и бэкенд в одном образе»Частый случай: фронтенд на React или Vue и API в отдельных контейнерах. На Looma Float соберите фронтенд при сборке образа и отдавайте его статикой из бэкенда:
FROM node:22-slim AS webWORKDIR /webCOPY frontend/package*.json ./RUN npm ciCOPY frontend/ .RUN npm run build
FROM python:3.12-slimWORKDIR /appCOPY backend/requirements.txt .RUN pip install -r requirements.txtCOPY backend/ .COPY --from=web /web/dist ./staticАдрес API во фронтенде укажите относительным (/api/...): фронтенд и API работают на
одном домене.