first
Some checks failed
Deploy NestJS API / build-and-push-deploy (push) Failing after 19s

This commit is contained in:
2026-01-02 18:31:38 -05:00
parent 395c6de2c6
commit 7a9a40e859
6 changed files with 96 additions and 39 deletions

8
.env Normal file
View File

@@ -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)))'

View File

@@ -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 }}"

View File

@@ -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.

View File

@@ -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 \ RUN apt-get update && apt-get install -y \
apt-transport-https \
ca-certificates \
libaio1 \ libaio1 \
unzip \ unzip \
wget \ wget \
libc6 \ && mkdir -p /opt/oracle
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
# 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 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 ./ # 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
RUN npm install --legacy-peer-deps
COPY . .
CMD ["npm", "run", "start:prod"] CMD ["npm", "run", "start:prod"]

View File

@@ -1,14 +1,18 @@
version: '3.8' version: '3.8'
services: services:
vendaweb: vendaweb-api:
image: link70/vendaweb image: 172.35.0.216/library/vendaweb-api:latest
deploy:
replicas: 20
resources:
limits:
cpus: '0.5'
memory: 512M
ports: ports:
- "8065:8065" - "8065:8065"
restart: always networks:
- simplifique-network
deploy:
replicas: 4
update_config:
order: start-first
parallelism: 1
networks:
simplifique-network:
external: true

View File

@@ -1,18 +1,17 @@
import { TypeOrmModuleOptions } from '@nestjs/typeorm'; import { TypeOrmModuleOptions } from '@nestjs/typeorm';
import { ConnectionOptions } from 'typeorm'; import { ConnectionOptions } from 'typeorm';
import 'dotenv/config';
export const typeOrmConfig: TypeOrmModuleOptions = { export const typeOrmConfig: TypeOrmModuleOptions = {
type: "oracle", type: "oracle",
// host: "192.168.100.40",
// username: "LIVIA",
// password: "LIVIA",
host: "10.1.1.241", host: "10.1.1.241",
username: "SEVEN", username: process.env.DB_USERNAME || "simplifique",
password: "USR54SEV", password: process.env.DB_PASSWORD || "simplifique",
// username: "API", connectString:
// password: "E05H5KIEQV3YKDJR", 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, port: 1521,
sid: "WINT", sid: "ORCL",
synchronize: false, synchronize: false,
logging: false, logging: false,
entities: [__dirname + '/../**/*.entity.{js,ts}'], entities: [__dirname + '/../**/*.entity.{js,ts}'],
@@ -22,10 +21,13 @@ export const typeOrmConfig: TypeOrmModuleOptions = {
export const connectionOptions: ConnectionOptions = { export const connectionOptions: ConnectionOptions = {
type: "oracle", type: "oracle",
host: "10.1.1.241", host: "10.1.1.241",
username: "SEVEN", username: process.env.DB_USERNAME || "simplifique",
password: "USR54SEV", 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, port: 1521,
sid: "WINT", sid: "ORCL",
synchronize: false, synchronize: false,
logging: false, logging: false,
entities: [__dirname + '/../**/*.entity.{js,ts}'], entities: [__dirname + '/../**/*.entity.{js,ts}'],