From 7a9a40e8595545661c54cd6e6c55850efcba3437 Mon Sep 17 00:00:00 2001 From: simplifique Date: Fri, 2 Jan 2026 18:31:38 -0500 Subject: [PATCH] first --- .env | 8 ++++++ .gitea/workflows/deploy-api.yaml | 28 +++++++++++++++++++ .gitea/workflows/rollback.md | 7 +++++ Dockerfile | 46 +++++++++++++++++++------------- docker-compose.yml | 22 ++++++++------- src/configs/typeorm.config.ts | 24 +++++++++-------- 6 files changed, 96 insertions(+), 39 deletions(-) create mode 100644 .env create mode 100644 .gitea/workflows/deploy-api.yaml create mode 100644 .gitea/workflows/rollback.md diff --git a/.env b/.env new file mode 100644 index 0000000..461822b --- /dev/null +++ b/.env @@ -0,0 +1,8 @@ +ORACLE_CLIENT_PATH='/usr/lib/oracle/21/client64/lib' + + +####ORACLE +PORT='8065' +DB_USERNAME='simplifique' +DB_PASSWORD='simplifique' +DB_CONNECT_STRING='(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=172.35.0.250)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=ORCL)))' diff --git a/.gitea/workflows/deploy-api.yaml b/.gitea/workflows/deploy-api.yaml new file mode 100644 index 0000000..68a53b7 --- /dev/null +++ b/.gitea/workflows/deploy-api.yaml @@ -0,0 +1,28 @@ +name: Deploy NestJS API +on: [push] + +jobs: + build-and-push-deploy: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Login no Harbor + run: | + echo "${{ secrets.HARBOR_PASSWORD }}" | docker login 172.35.0.216 -u ${{ secrets.HARBOR_USERNAME }} --password-stdin + + - name: Build e Push + run: | + # Usando o SHA do commit para manter o histórico no Harbor + TAG=${{ gitea.sha }} + docker build -t 172.35.0.216/library/vendaweb-api:$TAG . + docker tag 172.35.0.216/library/vendaweb-api:$TAG 172.35.0.216/library/vendaweb-api:latest + + docker push 172.35.0.216/library/vendaweb-api:$TAG + docker push 172.35.0.216/library/vendaweb-api:latest + + - name: Notificar Portainer via Webhook + run: | + # O Webhook avisa o Portainer para puxar a nova imagem imediatamente + curl -X POST "${{ secrets.PORTAINER_WEBHOOK_URL }}" \ No newline at end of file diff --git a/.gitea/workflows/rollback.md b/.gitea/workflows/rollback.md new file mode 100644 index 0000000..74f0df8 --- /dev/null +++ b/.gitea/workflows/rollback.md @@ -0,0 +1,7 @@ +O Rollback via Git (Mais Seguro) + +No Gitea, faça um git revert no commit que deu erro. + +Dê o git push. + +O Portainer detectará a mudança e atualizará o serviço para a versão estável de forma oficial. \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index 8212c4d..59bc96b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,32 +1,40 @@ -FROM node:16 +# Estágio 1: Build +FROM node:16-slim AS builder +WORKDIR /app +COPY package*.json ./ +RUN npm install --legacy-peer-deps +COPY . . +RUN npm run build +FROM node:16-slim + +# Instalar dependências do Oracle RUN apt-get update && apt-get install -y \ - apt-transport-https \ - ca-certificates \ libaio1 \ unzip \ wget \ - libc6 \ - libncurses5 && \ - mkdir -p /opt/oracle && \ - wget https://download.oracle.com/otn_software/linux/instantclient/instantclient-basic-linuxx64.zip -O /opt/oracle/instantclient-basic-linuxx64.zip && \ - unzip /opt/oracle/instantclient-basic-linuxx64.zip -d /opt/oracle && \ - rm /opt/oracle/instantclient-basic-linuxx64.zip && \ - ln -s /opt/oracle/instantclient_* /opt/oracle/instantclient && \ - echo "/opt/oracle/instantclient" > /etc/ld.so.conf.d/oracle-instantclient.conf && \ - ldconfig + && mkdir -p /opt/oracle +# Instalar Oracle Instant Client +RUN wget https://download.oracle.com/otn_software/linux/instantclient/instantclient-basic-linuxx64.zip -O /opt/oracle/client.zip && \ + unzip /opt/oracle/client.zip -d /opt/oracle && \ + rm /opt/oracle/client.zip && \ + ln -s /opt/oracle/instantclient_* /opt/oracle/instantclient + +# Configurar o sistema para encontrar as bibliotecas do Oracle +ENV LD_LIBRARY_PATH=/opt/oracle/instantclient +RUN echo "/opt/oracle/instantclient" > /etc/ld.so.conf.d/oracle-instantclient.conf && ldconfig WORKDIR /app +# Copiar apenas o necessário do estágio anterior +COPY --from=builder /app/dist ./dist +COPY --from=builder /app/package*.json ./ +COPY --from=builder /app/node_modules ./node_modules -COPY package*.json ./ - - -RUN npm install --legacy-peer-deps - -COPY . . - +# Variáveis de ambiente padrão para o driver oracledb +ENV OCI_LIB_DIR=/opt/oracle/instantclient +ENV OCI_INC_DIR=/opt/oracle/instantclient/sdk/include CMD ["npm", "run", "start:prod"] \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index 6aa3eac..661cdbb 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,14 +1,18 @@ version: '3.8' services: - vendaweb: - image: link70/vendaweb - deploy: - replicas: 20 - resources: - limits: - cpus: '0.5' - memory: 512M + vendaweb-api: + image: 172.35.0.216/library/vendaweb-api:latest ports: - "8065:8065" - restart: always \ No newline at end of file + networks: + - simplifique-network + deploy: + replicas: 4 + update_config: + order: start-first + parallelism: 1 + +networks: + simplifique-network: + external: true \ No newline at end of file diff --git a/src/configs/typeorm.config.ts b/src/configs/typeorm.config.ts index 3b30a6b..0862157 100644 --- a/src/configs/typeorm.config.ts +++ b/src/configs/typeorm.config.ts @@ -1,18 +1,17 @@ import { TypeOrmModuleOptions } from '@nestjs/typeorm'; import { ConnectionOptions } from 'typeorm'; +import 'dotenv/config'; export const typeOrmConfig: TypeOrmModuleOptions = { type: "oracle", - // host: "192.168.100.40", - // username: "LIVIA", - // password: "LIVIA", host: "10.1.1.241", - username: "SEVEN", - password: "USR54SEV", - // username: "API", - // password: "E05H5KIEQV3YKDJR", + username: process.env.DB_USERNAME || "simplifique", + password: process.env.DB_PASSWORD || "simplifique", + connectString: + process.env.DB_CONNECT_STRING || + '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=172.35.0.250)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=ORCL)))', port: 1521, - sid: "WINT", + sid: "ORCL", synchronize: false, logging: false, entities: [__dirname + '/../**/*.entity.{js,ts}'], @@ -22,10 +21,13 @@ export const typeOrmConfig: TypeOrmModuleOptions = { export const connectionOptions: ConnectionOptions = { type: "oracle", host: "10.1.1.241", - username: "SEVEN", - password: "USR54SEV", + username: process.env.DB_USERNAME || "simplifique", + password: process.env.DB_PASSWORD || "simplifique", + connectString: + process.env.DB_CONNECT_STRING || + '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=172.35.0.250)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=ORCL)))', port: 1521, - sid: "WINT", + sid: "ORCL", synchronize: false, logging: false, entities: [__dirname + '/../**/*.entity.{js,ts}'],