From 759f35654b3ddbb79a6f9cfce8602ec9a8bc8b26 Mon Sep 17 00:00:00 2001 From: hector Date: Tue, 10 Feb 2026 16:10:27 +0100 Subject: [PATCH] Created deployment --- deployment/develop/docker/Dockerfile | 10 ++ deployment/develop/docker/docker-compose.yaml | 86 ++++++++++++++++ deployment/develop/docker/rebuild.sh | 9 ++ deployment/develop/jenkinsfile.groovy | 98 +++++++++++++++++++ package.json | 2 +- packages/sim-entrada-eventos/package.json | 2 +- packages/sim-objenious-cron/package.json | 2 +- packages/sim-shared/package.json | 2 +- 8 files changed, 207 insertions(+), 4 deletions(-) create mode 100644 deployment/develop/docker/Dockerfile create mode 100644 deployment/develop/docker/docker-compose.yaml create mode 100644 deployment/develop/docker/rebuild.sh create mode 100644 deployment/develop/jenkinsfile.groovy diff --git a/deployment/develop/docker/Dockerfile b/deployment/develop/docker/Dockerfile new file mode 100644 index 0000000..9186e9e --- /dev/null +++ b/deployment/develop/docker/Dockerfile @@ -0,0 +1,10 @@ +# --- Release image --- +FROM node:22-alpine AS release +ARG PORT +WORKDIR /home/node/app +COPY ./src ./src +COPY ./package.json ./ +COPY ./package-lock.json ./ +RUN npm ci +EXPOSE $PORT +ENTRYPOINT ["node", "src/apps/index.js"] diff --git a/deployment/develop/docker/docker-compose.yaml b/deployment/develop/docker/docker-compose.yaml new file mode 100644 index 0000000..d9cbe23 --- /dev/null +++ b/deployment/develop/docker/docker-compose.yaml @@ -0,0 +1,86 @@ +name: sim-eventos +networks: + savefamily: + external: true + proxy: + external: true + +services: + rabbitmq-sim-broker: + container_name: rabbitmq-sim-broker + image: "rabbitmq:4.2.2-management" + expose: + - 5672 + - 15672 + env_file: + - ./.env + restart: unless-stopped + healthcheck: + test: ["CMD", "rabbitmq-diagnostics", "check_port_connectivity"] + interval: 10s + timeout: 5s + retries: 5 + environment: + RABBITMQ_DEFAULT_USER: ${RABBITMQ_USER} + RABBITMQ_DEFAULT_PASS: ${RABBITMQ_PASSWORD} + volumes: + - ./rabbitmq_plugins/enabled_plugins:/etc/rabbitmq/enabled_plugins:ro + - ./rabbit/rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf:ro + - ./rabbit/definitions.json:/etc/rabbitmq/definitions.json:ro + labels: + - "io.portainer.accesscontrol.teams=develop" + + sf-sims-api: + container_name: sf-sims-api + build: + context: . + dockerfile: Dockerfile + args: + PORT: ${PORT:-3000} + image: sf-sims-api + env_file: + - ./.env + restart: unless-stopped + depends_on: + rabbitmq-sim-broker: + condition: service_healthy + postgresql-sim: + condition: service_healthy + networks: + - savefamily + - proxy + expose: + - ${PORT} + labels: + - "io.portainer.accesscontrol.teams=develop" + - "traefik.enable=true" + - "traefik.http.routers.sf-sims.entrypoints=web" + - "traefik.http.routers.sf-sims.rule=Host(`sf-sims.savefamilygps.net`)" + - "traefik.http.middlewares.sf-sims-https-redirect.redirectscheme.scheme=https" + - "traefik.http.routers.sf-sims.middlewares=sf-sims-https-redirect" + - "traefik.http.routers.sf-sims-secure.entrypoints=websecure" + - "traefik.http.routers.sf-sims-secure.rule=Host(`sf-sims.savefamilygps.net`)" + - "traefik.http.routers.sf-sims-secure.tls=true" + - "traefik.http.routers.sf-sims-secure.service=sf-sims" + - "traefik.http.routers.sf-sims-secure.tls.certresolver=myresolver" + - "traefik.http.routers.sf-sims-secure.middlewares=tailscale-ipwhitelist@file" + - "traefik.http.services.sf-sims.loadbalancer.server.port=${PORT}" + - "traefik.docker.network=proxy" + + postgresql-sim: + image: postgres:16.1 + env_file: + - ./.env + ports: + - 5432 + volumes: + - ./postgres:/var/lib/postgres/data + - ./database/init.sql:/docker-entrypoint-initdb.d/init.sql + healthcheck: + test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"] + interval: 5s + retries: 5 + start_period: 5s + timeout: 5s + labels: + - "io.portainer.accesscontrol.teams=develop" diff --git a/deployment/develop/docker/rebuild.sh b/deployment/develop/docker/rebuild.sh new file mode 100644 index 0000000..a94fd45 --- /dev/null +++ b/deployment/develop/docker/rebuild.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +cd /mnt/docker-storage/containers/savefamily/sf-sims + +docker stop sf-sims-api || true +docker rm sf-sims-api || true +docker rmi sf-sims-api || true + +docker compose -f docker-compose.yaml up --build -d sf-sims-api diff --git a/deployment/develop/jenkinsfile.groovy b/deployment/develop/jenkinsfile.groovy new file mode 100644 index 0000000..99dfe0e --- /dev/null +++ b/deployment/develop/jenkinsfile.groovy @@ -0,0 +1,98 @@ +#!/usr/bin/env groovy + +String BASE_REMOTE_PATH = "//home/devops" +String APP_REMOTE_PATH = "//mnt/docker-storage/containers/savefamily/sf-sims" + +pipeline { + agent any + tools { nodejs "22.15.0" } + + environment { + GENERAL_CHANGES = "false" + } + + stages { + stage("🧱 Building") { + sh 'yarn run build' + } + stage("🏗 Deploying") { + steps { + sshPublisher( + publishers: [ + sshPublisherDesc( + verbose: true, + configName: "Save Family", + transfers: [ + sshTransfer( + cleanRemote: false, + execCommand: "mkdir -p $APP_REMOTE_PATH" + ), + sshTransfer( + cleanRemote: false, + execCommand: "ln -sf $BASE_REMOTE_PATH/vault/savefamily/sf-sims/.env $APP_REMOTE_PATH/.env" + ), + sshTransfer( + cleanRemote: false, + remoteDirectory: "$APP_REMOTE_PATH", + sourceFiles: "dist/**/*" + ), + sshTransfer( + cleanRemote: false, + remoteDirectory: "$APP_REMOTE_PATH", + sourceFiles: "deployment/database/**/*", + removePrefix: "deployment", + ), + sshTransfer( + cleanRemote: false, + remoteDirectory: "$APP_REMOTE_PATH", + sourceFiles: "deployment/rabbit/**/*", + removePrefix: "deployment", + ), + sshTransfer( + cleanRemote: false, + remoteDirectory: "$APP_REMOTE_PATH", + sourceFiles: "rabbitmq_plugins/**/*" + ), + sshTransfer( + cleanRemote: false, + remoteDirectory: "$APP_REMOTE_PATH", + sourceFiles: "deployment/develop/docker/**/*", + removePrefix: "deployment/develop/docker", + ), + sshTransfer( + cleanRemote: false, + remoteDirectory: "$APP_REMOTE_PATH", + sourceFiles: "deployment/Dockerfile", + removePrefix: "deployment", + ), + sshTransfer( + cleanRemote: false, + remoteDirectory: "$APP_REMOTE_PATH", + sourceFiles: "package.json", + ), + sshTransfer( + cleanRemote: false, + remoteDirectory: "$APP_REMOTE_PATH", + sourceFiles: "package-lock.json", + ), + sshTransfer( + cleanRemote: false, + execCommand: "sh $APP_REMOTE_PATH/rebuild.sh" + ) + ] + ) + ] + ) + } + } + } + + post { + failure { + echo '👎🏼 Processing failed' + } + success { + echo '👍🏼 Processing success' + } + } +} diff --git a/package.json b/package.json index a87aaa6..8f8609a 100644 --- a/package.json +++ b/package.json @@ -43,4 +43,4 @@ "tsx": "^4.21.0", "vitest": "^4.0.16" } -} \ No newline at end of file +} diff --git a/packages/sim-entrada-eventos/package.json b/packages/sim-entrada-eventos/package.json index f4380f0..7c7d826 100644 --- a/packages/sim-entrada-eventos/package.json +++ b/packages/sim-entrada-eventos/package.json @@ -73,4 +73,4 @@ "tsx": "*", "vitest": "*" } -} \ No newline at end of file +} diff --git a/packages/sim-objenious-cron/package.json b/packages/sim-objenious-cron/package.json index 843c4e2..bf8da38 100644 --- a/packages/sim-objenious-cron/package.json +++ b/packages/sim-objenious-cron/package.json @@ -73,4 +73,4 @@ "tsx": "*", "vitest": "*" } -} \ No newline at end of file +} diff --git a/packages/sim-shared/package.json b/packages/sim-shared/package.json index 300e8c0..ab5a0d0 100644 --- a/packages/sim-shared/package.json +++ b/packages/sim-shared/package.json @@ -57,4 +57,4 @@ "tsx": "*", "vitest": "*" } -} \ No newline at end of file +}