Fala pessoal! lembra do meu projeto portfólio que estou desenvolvendo? Hoje resolvi conteinerizar ele utilizando o Docker e orquestrando com o Docker Compose.
separei em 2 containes diferentes:
- Frontend (React/Vite)
- Backend (Node.js/TypeScript)
e configurei da seguinte maneira:
Frontend:
Dockerfile
FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 5173
ENV HOST=0.0.0.0
ENV PORT=5173
CMD ["npm", "run", "dev"]
Backend:
Dockerfile
FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3001
CMD ["npx", "ts-node", "src/app.ts"]
E na orquestração, fiz da seguinte maneira para que o frontend dependa do backend:
docker-compose.yml
version: '3.8'
services:
frontend:
build:
context: ./frontend
dockerfile: Dockerfile
ports:
- "5173:5173"
volumes:
- ./frontend:/app
- /app/node_modules
environment:
- NODE_ENV=development
depends_on:
- backend
backend:
build:
context: ./backend
dockerfile: Dockerfile
ports:
- "3001:3001"
volumes:
- ./backend:/app
- /app/node_modules
environment:
- NODE_ENV=development
env_file:
- ./backend/.env
depends_on:
- postgres
postgres:
image: postgres:16-alpine
ports:
- "5434:5432"
environment:
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_DB: ${POSTGRES_DB}
volumes:
- postgres_data:/var/lib/postgresql/data
- ./postgres-init:/docker-entrypoint-initdb.d
Agora para rodar o meu projeto é só rodar o docker-compose up
. Ficou mais fácil de configurar e o ambiente mais consistente!