Template del servicio de SIM
This commit is contained in:
19
deployment/Dockerfile.dev
Normal file
19
deployment/Dockerfile.dev
Normal file
@@ -0,0 +1,19 @@
|
||||
# stage base para coordinar las fases de build y ejecucion
|
||||
FROM node:22-alpine AS base
|
||||
WORKDIR /usr/local/app
|
||||
COPY ./package.json ./yarn.lock ./
|
||||
RUN corepack enable && \
|
||||
corepack prepare yarn@4.12.0 --activate
|
||||
|
||||
# compilacion del ts -> js
|
||||
FROM base AS backend
|
||||
WORKDIR /usr/local/app
|
||||
EXPOSE ${PORT}
|
||||
COPY package*.json ./
|
||||
# copia el codigo en general
|
||||
COPY .tsconfig*.json ./
|
||||
COPY ./packages ./packages
|
||||
RUN yarn && cat package.json
|
||||
CMD ["yarn", "run", "dev"]
|
||||
|
||||
|
||||
31
deployment/database/test.sql
Normal file
31
deployment/database/test.sql
Normal file
@@ -0,0 +1,31 @@
|
||||
CREATE TABLE sim_job_queue (
|
||||
id BIGINT PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
|
||||
job_type TEXT NOT NULL,
|
||||
sim_id INT, -- NOT NULL???
|
||||
payload JSONB NOT NULL,
|
||||
status TEXT NOT NULL DEFAULT "pending", -- pasar a enum
|
||||
priority SMALLINT NOT NULL DEFAULT 100, -- trabajamos entre 200 y 0 para 0 la maxima prioridad
|
||||
retry_count INT NOT NULL DEFAULT 0,
|
||||
max_retries INT NOT NULL DEFAULT 3, -- lo definiria en runtime
|
||||
scheduled_for TIMESTAMP NOT NULL DEFAULT now(),
|
||||
created_at TIMESTAMP NOT NULL DEFAULT now(),
|
||||
started_at TIMESTAMP,
|
||||
completed_at TIMESTAMP,
|
||||
error_msg TEXT,
|
||||
|
||||
-- En teoria el check es mas flexible que el enum
|
||||
CONSTRAINT valid_status CHECK (
|
||||
status IN ('pending', 'processing', 'completed', 'failed', 'dead')
|
||||
)
|
||||
|
||||
-- Revisar si interesa asociar cada trabajo a un id o permitir que sean independientes
|
||||
CONSTRAINT fk_sim_id
|
||||
FOREIGN KEY(sim_id) REFERENCES tableName(tarjetas_sim)
|
||||
)
|
||||
|
||||
-- Indice de pendientes de consumir
|
||||
CREATE INDEX idx_job_fetch ON sim_job_queue (status, scheduled_for, priority DESC, created_at)
|
||||
WHERE status = 'pending';
|
||||
|
||||
-- Indice del resto de procesos
|
||||
CREATE INDEX idx_job_monitor ON sim_job_queue (job_type, status, created_at);
|
||||
65
deployment/local/docker/docker-compose.yaml
Normal file
65
deployment/local/docker/docker-compose.yaml
Normal file
@@ -0,0 +1,65 @@
|
||||
name: sim-eventos
|
||||
networks:
|
||||
default:
|
||||
name: network-test # Tiene que coincidir con el compose objetivo
|
||||
services:
|
||||
rabbitmq:
|
||||
container_name: rabbitmq-broker
|
||||
image: "rabbitmq:4.2.2-management"
|
||||
ports:
|
||||
- "5672:5672"
|
||||
- "15672:15672"
|
||||
env_file:
|
||||
- .env
|
||||
restart: unless-stopped
|
||||
healthcheck:
|
||||
test: ["CMD", "rabbitmq-diagnostics", "check_port_connectivity"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 5
|
||||
environment:
|
||||
RABBITMQ_DEFAULT_USER: ${RABBITMQ_USER}
|
||||
RABBITMQ_DEFAULT_PASS: ${RABBITMQ_PASSWORD}
|
||||
volumes:
|
||||
- ./rabbitmq_plugins/enabled_plugins:/etc/rabbitmq/enabled_plugins:ro
|
||||
- ./deployment/rabbit/rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf:ro
|
||||
- ./deployment/rabbit/definitions.json:/etc/rabbitmq/definitions.json:ro
|
||||
|
||||
sim-gateway:
|
||||
container_name: sim-gateway
|
||||
volumes:
|
||||
- ./:/usr/local/app
|
||||
- ./node_modules:/usr/local/node_modules
|
||||
build:
|
||||
context: ./
|
||||
dockerfile: deployment/Dockerfile.dev
|
||||
args:
|
||||
PORT: "${PORT:-3000}"
|
||||
develop:
|
||||
watch:
|
||||
- path: ./src
|
||||
action: sync
|
||||
target: /usr/local/app/src
|
||||
- path: ./package.json
|
||||
action: rebuild
|
||||
ports:
|
||||
- ${PORT}:${PORT}
|
||||
env_file:
|
||||
- .env
|
||||
restart: unless-stopped
|
||||
|
||||
postgresql-sim:
|
||||
image: postgres:16.1
|
||||
env_file:
|
||||
- .env
|
||||
ports:
|
||||
- "5432:${DEV_POSTGRES_PORT}"
|
||||
volumes:
|
||||
- ./sql-data/:/var/lib/postgres/data
|
||||
- ./deployment/database/test.sql:/docker-entrypoint-initdb.d/init.sql
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"]
|
||||
interval: 10s
|
||||
retries: 5
|
||||
start_period: 30s
|
||||
timeout: 10s
|
||||
9
deployment/local/docker/rebuild.sh
Normal file
9
deployment/local/docker/rebuild.sh
Normal file
@@ -0,0 +1,9 @@
|
||||
#!/bin/bash
|
||||
|
||||
cd /mnt/docker-storage/containers/savefamily/sf-shopify-orders
|
||||
|
||||
docker stop sf-shopify-orders-api || true
|
||||
docker rm sf-shopify-orders-api || true
|
||||
docker rmi sf-shopify-orders-api || true
|
||||
|
||||
docker compose -f docker-compose.yaml up --build -d
|
||||
71
deployment/rabbit/definitions.json
Normal file
71
deployment/rabbit/definitions.json
Normal file
@@ -0,0 +1,71 @@
|
||||
{
|
||||
"rabbit_version": "4.2.2",
|
||||
"rabbitmq_version": "4.2.2",
|
||||
"product_name": "RabbitMQ",
|
||||
"product_version": "4.2.2",
|
||||
"users": [
|
||||
{
|
||||
"name": "guest",
|
||||
"password": "guest",
|
||||
"hashing_algorithm": "rabbit_password_hashing_sha256",
|
||||
"tags": "administrator"
|
||||
}
|
||||
],
|
||||
"vhosts": [
|
||||
{
|
||||
"name": "sim-vhost"
|
||||
}
|
||||
],
|
||||
"permissions": [
|
||||
{
|
||||
"user": "guest",
|
||||
"vhost": "sim-vhost",
|
||||
"configure": ".*",
|
||||
"write": ".*",
|
||||
"read": ".*"
|
||||
}
|
||||
],
|
||||
"topic_permissions": [],
|
||||
"parameters": [],
|
||||
"global_parameters": [
|
||||
{
|
||||
"name": "cluster_name",
|
||||
"value": "rabbit@a8d5c6e08439"
|
||||
},
|
||||
{
|
||||
"name": "internal_cluster_id",
|
||||
"value": "rabbitmq-cluster-id-gXeBLbsUC2W2tU0Bx_QY_w"
|
||||
}
|
||||
],
|
||||
"policies": [],
|
||||
"exchanges": [
|
||||
{
|
||||
"name": "sim.exchange",
|
||||
"vhost": "sim-vhost",
|
||||
"type": "direct",
|
||||
"durable": true,
|
||||
"auto_delete": false,
|
||||
"internal": false,
|
||||
"argurments": {}
|
||||
}
|
||||
],
|
||||
"queues": [
|
||||
{
|
||||
"name": "sim.queue",
|
||||
"vhost": "sim-vhost",
|
||||
"durable": true,
|
||||
"auto_delete": false,
|
||||
"arguments": {}
|
||||
}
|
||||
],
|
||||
"bindings": [
|
||||
{
|
||||
"source": "sim.exchange",
|
||||
"vhost": "sim-vhost",
|
||||
"destination": "sim.queue",
|
||||
"destination_type": "queue",
|
||||
"routing_key": "sim.*",
|
||||
"arguments": {}
|
||||
}
|
||||
]
|
||||
}
|
||||
11
deployment/rabbit/rabbitmq.conf
Normal file
11
deployment/rabbit/rabbitmq.conf
Normal file
@@ -0,0 +1,11 @@
|
||||
default_user = guest
|
||||
default_pass = guest
|
||||
|
||||
listeners.tcp.default = 5672
|
||||
management.tcp.port = 15672
|
||||
|
||||
management.load_definitions = /etc/rabbitmq/definitions.json
|
||||
|
||||
default_queue_type = quorum
|
||||
|
||||
|
||||
Reference in New Issue
Block a user