Как разместить Node.js и Express API в Inquir Compute
Пошаговый запуск Express API в Inquir Compute: Dockerfile, переменные, проверка HTTP, новый релиз и откат приложения.
Express-приложение может отвечать локально и не запускаться в облаке: процесс слушает другой порт, зависимость установлена только на ноутбуке или секрет попал в образ. Пройдём путь от небольшого HTTP API до релиза в Inquir Compute, который можно проверить и обновить.
Подготовьте воспроизводимую сборку
Создайте проект с ES-модулями и установите Express. Сохраните package.json и полученный package-lock.json в репозитории:
npm init -y
npm pkg set type=module
npm install express
Создайте server.js. Обработчик /healthz проверяет, что HTTP-процесс отвечает; он не доказывает работоспособность будущей базы или внешнего API.
import express from 'express';
const app = express();
app.get('/healthz', (_req, res) => res.send('ok'));
app.get('/api/hello', (_req, res) => {
res.json({ message: 'Hello from Inquir Compute' });
});
const server = app.listen(Number(process.env.PORT || 3000), '0.0.0.0');
process.on('SIGTERM', () => {
server.close(() => process.exit(0));
setTimeout(() => process.exit(1), 25_000).unref();
});
При SIGTERM сервер перестаёт принимать новые соединения и получает время на завершение текущих запросов. В примере установлен предел 25 секунд: это настройка приложения, а не обещание платформы. Закрытие пулов базы и других ресурсов нужно добавить вместе с соответствующими клиентами. Подход описан в документации Express.
Добавьте Dockerfile
FROM node:22-bookworm-slim
WORKDIR /app
ENV NODE_ENV=production
COPY package.json package-lock.json ./
RUN npm ci --omit=dev
COPY --chown=node:node server.js .
USER node
EXPOSE 3000
CMD ["node", "server.js"]
npm ci использует lock-файл. Для строгой воспроизводимости дополнительно фиксируйте digest базового образа и обновляйте его осознанно. Добавьте .env, .git и node_modules в .dockerignore; секреты задавайте через переменные приложения.
Создайте приложение в Inquir
Установите CLI и войдите по инструкции CLI. Из каталога с Dockerfile выполните:
inquir apps create express-demo --ingress public --port 3000 --health-path /healthz --drain-grace 30
inquir apps deploy express-demo --promote
inquir apps status express-demo
Команда создания выполняется один раз. deploy собирает текущий каталог, а --promote запрашивает перевод здорового релиза в production. Публичный адрес возьмите из status: приведённое имя приложения не означает заранее известный домен.
Откройте /healthz и /api/hello на выданном адресе. Затем проверьте логи:
inquir apps logs express-demo --no-follow --tail 100
Если сборка прошла, но HTTP не отвечает, сначала сверьте порт 3000, привязку 0.0.0.0 и команду запуска. EXPOSE в Dockerfile сам по себе не запускает сервер и не меняет его порт.
Выпустите вторую версию
Измените текст ответа, снова запустите inquir apps deploy express-demo --promote и убедитесь, что публичный маршрут возвращает новый текст. Для возврата к предыдущему релизу приложения используйте:
inquir apps rollback express-demo
Откат приложения не возвращает прежнее содержимое базы. Когда добавите PostgreSQL, делайте изменения схемы совместимыми с обеими версиями на период обновления. Полный сценарий есть в документации приложений, а исходники более подробного примера — в node-api.