From 87b99c4988b0e321789f96daffb03bddad0124fb Mon Sep 17 00:00:00 2001 From: rfhferreira <rfhferreira@inf.ufpr.br> Date: Tue, 20 May 2025 10:36:00 -0300 Subject: [PATCH] Issue #70: ADD production docker --- .dockerignore | 3 +++ Dockerfile | 30 ++++++++++++++++++++++++++++++ README.md | 19 ++++++++++++++++++- bun.lockb | Bin 175722 -> 176814 bytes docker-compose.yml | 17 +++++++++++++++++ package.json | 2 +- 6 files changed, 69 insertions(+), 2 deletions(-) create mode 100644 .dockerignore create mode 100644 Dockerfile diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..c1f34c8 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,3 @@ +node_modules/ +Dockerfile +docker-compose.yml diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..d8f482e --- /dev/null +++ b/Dockerfile @@ -0,0 +1,30 @@ +# Stage 1: builder (instala dependências e compila TS) +FROM oven/bun:1.2.13-alpine AS builder +WORKDIR /app + +# Copia arquivos de dependências do Bun antes do código para aproveitar cache +COPY package.json bun.lockb bunfig.toml ./ +RUN bun install --frozen-lockfile --production + +# Copia todo o código-fonte e executa o build do projeto +COPY . . + +# Stage 2: runtime (imagem final leve) +FROM oven/bun:1.2.13-alpine AS runtime +WORKDIR /app + +# Definir modo de produção (opcional, dependendo do app) +ENV NODE_ENV=production + +# Copia só o código compilado e as dependências de produção do builder +COPY --from=builder /app /app + +# Expõe a porta padrão da API (Hono geralmente usa 3000) +EXPOSE 3000 + +# Usa o usuário não-root fornecido pelo Bun para executar +USER bun + +# Inicia a aplicação +ENTRYPOINT ["bun", "run", "src/index.ts"] + diff --git a/README.md b/README.md index 9ade0d3..5886091 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,4 @@ + ## Running for dev @@ -7,6 +8,8 @@ 2. Install bun https://bun.sh/docs/installation +2.1. Be sure you got a version that's above 1.2.13. + 3. To install dependencies: ```sh bun install @@ -15,11 +18,12 @@ 4. Get the container up and running: ```sh - docker compose up + docker compose --profile test up ``` 5. set dev db ``` + bun db:generate bun db:migrate bun db:seed ``` @@ -31,3 +35,16 @@ ``` 7. open http://localhost:3000 + +## Running for production + +1. Make a copy of .env.example to .env + ```mv .env.example .env``` + +2. Set env vars in .env + +3. Get the container up and running: + ```docker compose --profile prod up --build -d``` + +4. Server is now running in http://localhost:3000 + diff --git a/bun.lockb b/bun.lockb index c6fab67ceda4fd6f25551f4c2a416322ac7ac6ae..906ed9a589feee5e8d64813de80e168671ea1644 100755 GIT binary patch delta 33694 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 delta 32823 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 S5aafVYE1l$+v7Eu{JQ|XTvi<b diff --git a/docker-compose.yml b/docker-compose.yml index 54f8f92..a41b083 100755 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -12,9 +12,26 @@ services: - apex_network volumes: - postgres_data:/var/lib/postgresql/data + profiles: + - test # Banco só é ativado com --profile test + + app: + image: oven/bun:1.2.13 + build: + context: . + dockerfile: Dockerfile + ports: + - "3000:3000" + env_file: + - .env + networks: + - apex_network + profiles: + - prod # Backend só é ativado com --profile prod volumes: postgres_data: networks: apex_network: + diff --git a/package.json b/package.json index dc6c791..d632f91 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "db:migrate": "cross-env DB_MIGRATING=true bun run src/db/migrate.ts", "db:seed": "cross-env DB_SEEDING=true bun run src/db/seed.ts", "db:studio": "drizzle-kit studio", - "route:test": "bun db:seed && bun test" + "route:test": "bun db:seed && bun test", }, "dependencies": { "@aws-sdk/client-s3": "^3.750.0", -- GitLab