Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
.tmp/
.cache/
.git/
build/
node_modules/
data/
public/uploads/
.env
.env.*
9 changes: 2 additions & 7 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,6 @@ APP_KEYS="toBeModified1,toBeModified2"
API_TOKEN_SALT=tobemodified
ADMIN_JWT_SECRET=tobemodified
JWT_SECRET=tobemodified
DATABASE_HOST=localhost
DATABASE_PORT=5432
DATABASE_NAME=tobemodified
DATABASE_USERNAME=tobemodified
DATABASE_PASSWORD=tobemodified
DATABASE_SCHEMA=public
DATABASE_SSL_SELF=false
DATABASE_URL=postgres://user:password@localhost:5432/agromart_db
DATABASE_SSL=false
EXPO_ACCESS_TOKEN=tobemodified
45 changes: 45 additions & 0 deletions .github/workflows/build-push.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
name: Build and Push Docker Image

on:
push:
branches:
- main
- master

env:
REGISTRY: ghcr.io
IMAGE_NAME: ${{ github.repository }}

jobs:
build-and-push:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write

steps:
- name: Checkout código
uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0

- name: Login no Container Registry (GHCR)
uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3.7.0
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Extrair metadados para as tags da imagem
id: meta
uses: docker/metadata-action@318604b99e75e41977312d83839a89be02ca4893 # v5.9.0
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
tags: |
type=raw,value=latest

- name: Build and push da imagem
uses: docker/build-push-action@4f58ea79222b3b9dc2c8bbdd6debcef730109a75 # v6.9.0
with:
context: .
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
6 changes: 3 additions & 3 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -34,15 +34,15 @@ jobs:

steps:
- name: Checkout do Código
uses: actions/checkout@v4
uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0

- name: Configurar Node.js (18.x)
uses: actions/setup-node@v4
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
node-version: 18.x

- name: Instalar Dependências
run: npm install
run: npm ci --ignore-scripts

- name: Rodar a Build
run: npm run build --if-present
Expand Down
2 changes: 0 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,4 @@ build
# Node
############################

package-lock.json
yarn-lock.json
config.ini
61 changes: 61 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
# Estágio 1: Build
FROM node:18 AS build
# Installing libvips-dev for sharp Compatibility
RUN apt-get update && apt-get install -y --no-install-recommends \
autoconf \
automake \
bash \
build-essential \
gcc \
libpng-dev \
libvips-dev \
nasm \
zlib1g-dev && \
rm -rf /var/lib/apt/lists/*
ARG NODE_ENV=production
ENV NODE_ENV=${NODE_ENV}

WORKDIR /opt/
COPY package.json package-lock.json* yarn.lock* ./
RUN npm ci --ignore-scripts

WORKDIR /opt/app
COPY . .
RUN npm run build

# Estágio 2: Produção
FROM node:18-alpine3.18 AS production
# Installing libvips-dev for sharp Compatibility on Alpine
RUN apk update && apk add --no-cache \
autoconf \
automake \
bash \
build-base \
gcc \
libpng-dev \
nasm \
vips-dev \
zlib-dev
ARG NODE_ENV=production
ENV NODE_ENV=${NODE_ENV}

WORKDIR /opt/
COPY --from=build /opt/package.json ./
COPY --from=build /opt/package-lock.json* ./
COPY --from=build /opt/yarn.lock* ./
RUN npm ci --only=production --ignore-scripts

WORKDIR /opt/app
COPY --from=build --chown=node:node /opt/app/build ./build
COPY --from=build --chown=node:node /opt/app/config ./config
COPY --from=build --chown=node:node /opt/app/src ./src
COPY --from=build --chown=node:node /opt/app/public ./public
RUN mkdir -p /opt/app/public/uploads && chown -R node:node /opt/app
COPY --from=build --chown=node:node /opt/app/package.json ./package.json

ENV PATH=/opt/node_modules/.bin:$PATH

USER node

EXPOSE 1337
CMD ["npm", "run", "start"]
164 changes: 64 additions & 100 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,140 +4,104 @@

# 🌱 API

## Como acessar o painel de adminstração do Strapi
Acesse a rota ``/admim`` no seu navegador.<br>
Por exemplo, se estiver rodando o strapi no localhost na porta 1337, acesse: <br>
``http//localhost:1337/admin``

## Funcionalidades
- Criação de conta de usuário e Autenticação;
- Gerenciar lojas;
- Gerenciar assinantes;
- Gerenciar cestas;
- Gerenciar endereços;
- Gerenciar extratos;
- Gerenciar planos;
- Gerenciar produtos avulsos;
- Notificar usuários;
Esta é a API Backend do projeto AgroMart, construída sobre o [Strapi](https://github.com/strapi/strapi).

---
## Como implantar o projeto no Heroku
### Pré requesitos
- Repositório clonado em um computador local
- Conta com cartão de credito no [Heroku](https://dashboard.heroku.com/)

## Passo a passo
A arquitetura do projeto foi reformulada para seguir estritamente o padrão **12-Factor App**, sendo distribuída como uma **Imagem Docker (Container as a Service - CaaS)**. Todo o processo de build e publicação de imagens está automatizado via CI/CD.

1. Preencha o arquivo `config.ini` com suas informações. Exemplo:
## 🚀 Como funciona a Implantação (CaaS)

```
[heroku]
api_key = api-key-do-heroku

[csa]
nome_csa = laranja-secreta
responsavel_csa = laranja
email = laranja.secreta@gmail.com
```
A implantação não depende mais de scripts locais ou passos manuais. Toda vez que um commit for aprovado e inserido na branch `master` ou `main`, o GitHub Actions irá:
1. Montar a imagem Docker da aplicação (utilizando a estratégia *Multi-stage Build* para gerar um contêiner leve e seguro).
2. Fazer o *push* automático da versão compilada para o **GitHub Container Registry (GHCR)**.

2. Execute o arquivo `deploy.exe` ao clicar no arquivo com o botão direito e `Abrir`:
### Variáveis de Ambiente Obrigatórias (Produção)
Para rodar a imagem gerada no seu provedor de nuvem (Google Cloud Run, AWS Fargate, Render, etc), você deve injetar obrigatoriamente as seguintes variáveis de ambiente no serviço:

![image](https://user-images.githubusercontent.com/31159235/234134157-8782839a-4595-4619-9565-477aef97c232.png)
- `DATABASE_URL`: String de conexão completa com o banco (ex: `postgres://user:password@host:5432/agromart_db`)
- `APP_KEYS`: Chaves separadas por vírgula para cookies/sessão
- `API_TOKEN_SALT`: Salt de segurança da API
- `ADMIN_JWT_SECRET`: Secret do JWT do painel administrativo
- `JWT_SECRET`: Secret do JWT de usuários

---
## Como executar o projeto localmente

### :rocket: Principais Tecnologias Utilizadas
## 💻 Como executar o projeto localmente (DevEx)

- [Node.js](https://nodejs.org/en/)
- [Strapi](https://github.com/strapi/strapi)

### Pré requesitos do sistema
Para executar que o projeto seja executado localmente, são necessárias algumas configurações:
- [node.js](https://nodejs.org/en/) entre as versões ">=10.16.0 <=14.x.x"
- [yarn](https://yarnpkg.com/getting-started/install)
- [Docker](https://docs.docker.com/engine/installation/) e [Docker Compose](https://docs.docker.com/compose/install/) para execuçaão banco de dados **Postgres**
### Pré-requisitos
- [Node.js](https://nodejs.org/en/) (Versão recomendada: >=18.x)
- [NPM](https://www.npmjs.com/) ou [Yarn](https://yarnpkg.com/)
- [Docker](https://docs.docker.com/engine/installation/) e [Docker Compose](https://docs.docker.com/compose/install/)

### Passo a passo
Clone o repositorio:

```
git clone https://github.com/AgroMart/api.git
```

Acesse a pasta do projeto:

```
cd api
```

Instale as dependências:

```
npm run build
# ou
yarn build
```

Crie e inicie o container de serviço do banco de dados:

```
docker-compose up
```

Inicie CMS (Strapi) do projeto:

```
npm run develop
# ou
yarn develop
```

Se necessário rode observando o front-end, recomenda-se usar quando estiver alterando plugin

```
1. **Clone o repositório:**
```bash
git clone https://github.com/AgroMart/api.git
cd api
```

2. **Inicie o Banco de Dados Local (PostgreSQL):**
Suba o banco localmente usando o Docker Compose. Não é necessário configurar o `.env` para esta etapa.
```bash
docker-compose up -d
```

3. **Configure as Variáveis de Ambiente Locais:**
Copie o arquivo de exemplo e edite se necessário (por padrão, a `DATABASE_URL` no `.env.example` já aponta para o container do Docker Compose recém-criado).
```bash
cp .env.example .env
```

4. **Instale as dependências:**
```bash
npm install
# ou
yarn install
```

5. **Inicie o servidor de desenvolvimento (Strapi):**
```bash
npm run develop
# ou
yarn develop
```

Se necessário rodar observando o front-end administrativo (útil ao desenvolver plugins):
```bash
npm run develop -- --watch-admin
```

Error: The server does not support SSL connections

Para consertar esse erro localmente, no arquivo `api/config/database.js` altere a conexão para:
### Acessando o Painel
Após o servidor iniciar, acesse o painel administrativo em: `http://localhost:1337/admin`

```
13. ssl: false,
```
---
### Como executar os testes de integração

Crie e inicie o container de serviço do banco de dados:
## 🧪 Como executar os testes de integração

```
docker-compose -f docker-compose.dev.yml up
```

Execute os testes:
O banco de dados de testes agora compartilha o mesmo fluxo do ambiente de desenvolvimento. Certifique-se de que o container do Postgres esteja rodando (`docker-compose up -d`) e execute:

```
```bash
npm test
# ou
yarn test
```

---
## Cliente Mobile

Os dados são providos para o nosso próprio aplicativo disponível em https://github.com/AgroMart/mobile-client
## 📱 Cliente Mobile

Os dados são providos para o nosso próprio aplicativo disponível em: [AgroMart/mobile-client](https://github.com/AgroMart/mobile-client)

---

## Como Contribuir
## 🤝 Como Contribuir

- Se você for um colaborador externo, dê um fork no projeto.
- Crie sua branch e envie seu código nela.
- Faça um pull request da sua branch para a devel.
- Faça um pull request da sua branch para a `master`.

---

## Licença:
## 📄 Licença

Esse projeto utiliza a licença GNU GENERAL PUBLIC LICENSE. Para mais informações [clique aqui](https://github.com/AgroMart/api/blob/master/LICENSE)
Esse projeto utiliza a licença GNU GENERAL PUBLIC LICENSE. Para mais informações [clique aqui](LICENSE).
3 changes: 0 additions & 3 deletions auto-config.txt

This file was deleted.

7 changes: 0 additions & 7 deletions config.ini

This file was deleted.

Loading