Разрабатываем с друзьями приложение, которое близится к завершению (надеюсь).
Перед деплоем на каком-то удалённом сервере возник вопрос — как это всё организовать по-умному?
Захотела сделать всё с помощью докера. Бэкенд написан на Nest.js, база данных MongoDB.
Оказалось, не всё так сложно, как я думала изначально
🐳 Что я сделала:
➖Создала в корневой папке проекта Dockerfile - он описывает, как собрать образ нашего приложения.
#############
# The Build Stage
#############
FROM node:20-alpine AS build
WORKDIR /app
COPY package*.json .
RUN npm install
COPY . .
RUN npm run build
#############
# The Production Stage
#############
FROM node:20-alpine AS prod
WORKDIR /app
COPY package*.json .
RUN npm install --only=production
COPY --from=build /app/dist ./dist
ENV PORT=3000
EXPOSE ${PORT}
CMD ["npm", "run", "start:prod"]
➖ Также создала docker-compose.yml - он управляет несколькими контейнерами.
version: '3.8'
services:
backend:
build: .
container_name: nest_backend
ports:
- "3000:3000"
depends_on:
- mongodb
environment:
- MONGO_URI=<your-mongo-uri>
- SECRET_ACCESS=<your-access-secret>
- SECRET_REFRESH=<your-refresh-secret>
restart: unless-stopped
mongodb:
image: mongo:6
container_name: mongo_db
ports:
- "27017:27017"
volumes:
- mongo_data:/data/db
restart: unless-stopped
volumes:
mongo_data:
📌 Чувствительные переменные лучше хранить в .env. Здесь — просто заглушки для примера.
Сборка и запуск контейнера
docker-compose up --build -d
Локально все работает!
Осталось теперь организовать это все на удаленном сервере.
Изначально была идея воспользоваться бесплатным сервисами, например Railway, но там не вышло. Были ошибки с базой данных 😢
Возможно разберусь с ними, либо буду смотреть на другие варианты
Как будут результаты, расскажу более подробнее!