Subida a producción
This commit is contained in:
parent
7551f9d5ca
commit
973391ec68
@ -28,4 +28,4 @@ RUN pip install --no-cache-dir .
|
||||
|
||||
# Entrypoint genérico
|
||||
#CMD ["python", "-m", "sync_factuges_main"]
|
||||
CMD ["factuges-sync"]
|
||||
CMD ["factuges-sync", "factuges"]
|
||||
31
Dockerfile.verifactu
Normal file
31
Dockerfile.verifactu
Normal file
@ -0,0 +1,31 @@
|
||||
# syntax=docker/dockerfile:1.4
|
||||
|
||||
# Usa una imagen base de Python
|
||||
FROM python:3.11-slim
|
||||
|
||||
ENV PYTHONDONTWRITEBYTECODE=1 \
|
||||
PYTHONUNBUFFERED=1 \
|
||||
APP_HOME="/app"
|
||||
|
||||
|
||||
WORKDIR ${APP_HOME}
|
||||
|
||||
# Instalar librerías cliente Firebird
|
||||
RUN apt-get update
|
||||
RUN apt-get install libfbclient2 -y
|
||||
|
||||
# Copiamos solo lo necesario para instalar el paquete
|
||||
COPY pyproject.toml setup.cfg README.md ./
|
||||
COPY app ./app
|
||||
|
||||
RUN pip install --no-cache-dir .
|
||||
|
||||
# Copiar enviroment (se sobreescribe en compose)
|
||||
#COPY enviroment/ ./enviroment
|
||||
|
||||
# Volumen para logs persistentes
|
||||
#VOLUME ["/app/logs"]
|
||||
|
||||
# Entrypoint genérico
|
||||
#CMD ["python", "-m", "sync_factuges_main"]
|
||||
CMD ["factuges-sync", "verifactu"]
|
||||
6
cronjob
6
cronjob
@ -1,6 +0,0 @@
|
||||
*/5 * * * * /usr/local/bin/python /opt/uecko_sync_app/app/main.py >> /var/log/cron.log 2>&1
|
||||
|
||||
*/5 * * * * docker run --rm \
|
||||
--env-file /opt/my_project/config/prod.env \
|
||||
-v /opt/my_project/logs:/app/logs \
|
||||
my_project:latest
|
||||
149
scripts/build-factuges-sync.sh
Executable file
149
scripts/build-factuges-sync.sh
Executable file
@ -0,0 +1,149 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
SCRIPT_VERSION="1.1.0"
|
||||
|
||||
# ================================================
|
||||
# FACTUGES SYNC - Docker Build Script
|
||||
# -----------------------------------------------
|
||||
# Uso:
|
||||
# ./build.sh <company> [--load]
|
||||
# ================================================
|
||||
|
||||
# ---------- 1. Validación ----------
|
||||
if [[ $# -eq 0 || "$1" == --* ]]; then
|
||||
echo "❌ ERROR: Falta el parámetro <company>"
|
||||
echo "Uso: ./build.sh <company> [--load]"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
COMPANY="$1"
|
||||
LOAD=false
|
||||
[[ "${2:-}" == "--load" ]] && LOAD=true
|
||||
|
||||
# ---------- 2. Directorios ----------
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
PROJECT_DIR="$(realpath "${SCRIPT_DIR}/..")"
|
||||
OUT_DIR="${PROJECT_DIR}/out/${COMPANY}"
|
||||
|
||||
mkdir -p "$OUT_DIR"
|
||||
|
||||
# ---------- 3. Info ----------
|
||||
DATE=$(date +'%Y%m%d-%H%M%S')
|
||||
ISO_DATE=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
|
||||
USER_NAME=$(whoami)
|
||||
|
||||
IMAGE_VERSION=$(sed -n 's/^version[[:space:]]*=[[:space:]]*\(.*\)$/\1/p' "$PROJECT_DIR/setup.cfg" | head -n1)
|
||||
IMAGE_VERSION="${IMAGE_VERSION:-0.0.0}"
|
||||
|
||||
echo ""
|
||||
echo "-------------------------------------------------------"
|
||||
echo " FACTUGES SYNC Build Script v${SCRIPT_VERSION}"
|
||||
echo " Compañía: ${COMPANY}"
|
||||
echo " Versión: ${IMAGE_VERSION}"
|
||||
echo " Fecha: ${DATE}"
|
||||
echo "-------------------------------------------------------"
|
||||
echo ""
|
||||
|
||||
# ---------- 4. Función para generar 1 build ----------
|
||||
build_image() {
|
||||
local MODE="$1" # factuges | verifactu
|
||||
|
||||
local IMAGE_NAME="factuges-sync-${MODE}"
|
||||
|
||||
local TAG_VERSION="${IMAGE_NAME}:${COMPANY}-${IMAGE_VERSION}"
|
||||
local TAG_LATEST="${IMAGE_NAME}:${COMPANY}-latest"
|
||||
|
||||
echo "📦 Construyendo imagen Docker (${MODE})..."
|
||||
|
||||
docker build --no-cache \
|
||||
-t "${TAG_VERSION}" \
|
||||
-t "${TAG_LATEST}" \
|
||||
--build-arg COMPANY="${COMPANY}" \
|
||||
-f "${PROJECT_DIR}/Dockerfile.${MODE}" "${PROJECT_DIR}"
|
||||
|
||||
echo "✅ Imagen construida: ${TAG_VERSION}"
|
||||
|
||||
local TAR_V="${OUT_DIR}/${IMAGE_NAME}-${COMPANY}-v${IMAGE_VERSION}-${DATE}.tar"
|
||||
local TAR_LATEST="${OUT_DIR}/${IMAGE_NAME}-${COMPANY}-latest.tar"
|
||||
|
||||
docker save -o "${TAR_V}" "${TAG_VERSION}" "${TAG_LATEST}"
|
||||
cp -f "${TAR_V}" "${TAR_LATEST}"
|
||||
|
||||
echo "📦 Imagen guardada:"
|
||||
echo " - ${TAR_V}"
|
||||
echo " - ${TAR_LATEST}"
|
||||
|
||||
# Exportamos variables a nivel global para el LOAD opcional
|
||||
echo "${TAR_V}"
|
||||
echo "${TAR_LATEST}"
|
||||
|
||||
echo "${TAR_V}|${TAR_LATEST}"
|
||||
}
|
||||
|
||||
# ---------- 5. Ejecutar build para ambos modos ----------
|
||||
BUILD_OUT_FACTUGES=$(build_image "factuges")
|
||||
FACTUGES_TAR_V=$(echo "$BUILD_OUT_FACTUGES" | cut -d '|' -f1)
|
||||
FACTUGES_TAR_LATEST=$(echo "$BUILD_OUT_FACTUGES" | cut -d '|' -f2)
|
||||
|
||||
BUILD_OUT_VERIFACTU=$(build_image "verifactu")
|
||||
VERIFACTU_TAR_V=$(echo "$BUILD_OUT_VERIFACTU" | cut -d '|' -f1)
|
||||
VERIFACTU_TAR_LATEST=$(echo "$BUILD_OUT_VERIFACTU" | cut -d '|' -f2)
|
||||
|
||||
# ---------- 6. Manifest ----------
|
||||
MANIFEST_FILE="${OUT_DIR}/manifest-${IMAGE_VERSION}-${DATE}.json"
|
||||
cat > "${MANIFEST_FILE}" <<EOF
|
||||
{
|
||||
"company": "${COMPANY}",
|
||||
"version": "${IMAGE_VERSION}",
|
||||
"build_time": "${ISO_DATE}",
|
||||
"docker_images": {
|
||||
"factuges": {
|
||||
"versioned": "$(basename "${FACTUGES_TAR_V}")",
|
||||
"latest": "$(basename "${FACTUGES_TAR_LATEST}")"
|
||||
},
|
||||
"verifactu": {
|
||||
"versioned": "$(basename "${VERIFACTU_TAR_V}")",
|
||||
"latest": "$(basename "${VERIFACTU_TAR_LATEST}")"
|
||||
}
|
||||
}
|
||||
}
|
||||
EOF
|
||||
|
||||
echo ""
|
||||
echo "📄 Manifest generado: ${MANIFEST_FILE}"
|
||||
echo ""
|
||||
|
||||
# ---------- 7. LOAD opcional ----------
|
||||
if [[ "$LOAD" == true ]]; then
|
||||
echo "📥 Subiendo imágenes al servidor..."
|
||||
|
||||
# Subimos solo los .tar
|
||||
scp -P 49152 "${OUT_DIR}"/*.tar \
|
||||
rodax@vps-2.rodax-software.com:/opt/factuges/${COMPANY}/sync/
|
||||
|
||||
scp -P 49152 deploy-cron.sh \
|
||||
rodax@vps-2.rodax-software.com:/opt/factuges/${COMPANY}/
|
||||
|
||||
echo "📥 Cargando imágenes en Docker remoto..."
|
||||
|
||||
ssh -p 49152 rodax@vps-2.rodax-software.com <<EOF
|
||||
docker load -i /opt/factuges/${COMPANY}/sync/$(basename "${FACTUGES_TAR_V}")
|
||||
docker load -i /opt/factuges/${COMPANY}/sync/$(basename "${FACTUGES_TAR_LATEST}")
|
||||
docker load -i /opt/factuges/${COMPANY}/sync/$(basename "${VERIFACTU_TAR_V}")
|
||||
docker load -i /opt/factuges/${COMPANY}/sync/$(basename "${VERIFACTU_TAR_LATEST}")
|
||||
EOF
|
||||
|
||||
echo "✔ Todas las imágenes cargadas en producción"
|
||||
fi
|
||||
|
||||
# ---------- 8. Resumen ----------
|
||||
echo ""
|
||||
echo "-------------------------------------------------------"
|
||||
echo "🎯 BUILD COMPLETADO PARA '${COMPANY}'"
|
||||
echo " - factuges"
|
||||
echo " - verifactu"
|
||||
[[ "$LOAD" == true ]] && echo "✔ Load OK"
|
||||
echo "🧩 Script version: ${SCRIPT_VERSION}"
|
||||
echo "-------------------------------------------------------"
|
||||
echo ""
|
||||
113
scripts/build.sh
113
scripts/build.sh
@ -1,113 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
SCRIPT_VERSION="1.0.0"
|
||||
|
||||
# ================================================
|
||||
# FACTUGES SYNC - Docker Build Script
|
||||
# -----------------------------------------------
|
||||
# Uso:
|
||||
# ./build.sh <company> [--load]
|
||||
# ================================================
|
||||
|
||||
# ---------- 1. Validación de parámetros ----------
|
||||
if [[ $# -eq 0 || "$1" == --* ]]; then
|
||||
echo "❌ ERROR: Falta el parámetro <company>"
|
||||
echo "Uso: ./build.sh <company> [--load]"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
COMPANY="$1"
|
||||
LOAD=false
|
||||
|
||||
if [[ "${2:-}" == "--load" ]]; then
|
||||
LOAD=true
|
||||
fi
|
||||
|
||||
# ---------- 2. Directorios ----------
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
PROJECT_DIR="$(realpath "${SCRIPT_DIR}/..")"
|
||||
OUT_DIR="${PROJECT_DIR}/out/${COMPANY}"
|
||||
|
||||
mkdir -p "$OUT_DIR"
|
||||
cd "$PROJECT_DIR"
|
||||
|
||||
# ---------- 3. Versión del proyecto ----------
|
||||
IMAGE_NAME="factuges-sync"
|
||||
|
||||
IMAGE_VERSION=$(sed -n 's/^version[[:space:]]*=[[:space:]]*\(.*\)$/\1/p' setup.cfg | head -n1)
|
||||
IMAGE_VERSION="${IMAGE_VERSION:-0.0.0}"
|
||||
|
||||
IMAGE_TAG_VERSION="${IMAGE_NAME}:${COMPANY}-${IMAGE_VERSION}"
|
||||
IMAGE_TAG_LATEST="${IMAGE_NAME}:${COMPANY}-latest"
|
||||
|
||||
# ---------- 4. Info del sistema ----------
|
||||
DATE=$(date +'%Y%m%d-%H%M%S')
|
||||
ISO_DATE=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
|
||||
USER_NAME=$(whoami)
|
||||
|
||||
echo ""
|
||||
echo "-------------------------------------------------------"
|
||||
echo " FACTUGES SYNC Build Script v${SCRIPT_VERSION}"
|
||||
echo " Compañía: ${COMPANY}"
|
||||
echo " Version: ${IMAGE_VERSION}"
|
||||
echo " Imagen: ${IMAGE_TAG_VERSION}"
|
||||
echo " Latest tag: ${IMAGE_TAG_LATEST}"
|
||||
echo " Load: ${LOAD}"
|
||||
echo "-------------------------------------------------------"
|
||||
echo ""
|
||||
|
||||
# ---------- 5. Build de la imagen Docker ----------
|
||||
echo "📦 Construyendo imagen Docker..."
|
||||
docker build \
|
||||
-t "${IMAGE_TAG_VERSION}" \
|
||||
-t "${IMAGE_TAG_LATEST}" \
|
||||
.
|
||||
|
||||
echo "✔ Build OK: ${IMAGE_TAG_VERSION}"
|
||||
echo ""
|
||||
|
||||
# ---------- 6. Generar manifest JSON ----------
|
||||
MANIFEST_FILE="${OUT_DIR}/manifest-${IMAGE_VERSION}-${DATE}.json"
|
||||
|
||||
cat > "$MANIFEST_FILE" <<EOF
|
||||
{
|
||||
"company": "${COMPANY}",
|
||||
"image_version": "${IMAGE_VERSION}",
|
||||
"image_tag_version": "${IMAGE_TAG_VERSION}",
|
||||
"image_tag_latest": "${IMAGE_TAG_LATEST}",
|
||||
"build_time": "${ISO_DATE}",
|
||||
"user": "${USER_NAME}"
|
||||
}
|
||||
EOF
|
||||
|
||||
echo "📄 Manifest generado: ${MANIFEST_FILE}"
|
||||
echo ""
|
||||
|
||||
# ---------- 7. LOAD opcional ----------
|
||||
if [[ "$LOAD" == true ]]; then
|
||||
echo "📥 Subiendo imagen al servidor..."
|
||||
|
||||
TAR_FILE="${OUT_DIR}/${IMAGE_NAME}-${COMPANY}-latest.tar"
|
||||
docker save -o "${TAR_FILE}" "${IMAGE_TAG_LATEST}"
|
||||
|
||||
scp -P 49152 "${TAR_FILE}" \
|
||||
rodax@vps-2.rodax-software.com:/opt/factuges/${COMPANY}/
|
||||
|
||||
ssh -p 49152 rodax@vps-2.rodax-software.com \
|
||||
"docker load -i /opt/factuges/${COMPANY}/$(basename "$TAR_FILE")"
|
||||
|
||||
echo "✔ Imagen cargada en producción"
|
||||
fi
|
||||
|
||||
# ---------- 8. Resumen ----------
|
||||
echo ""
|
||||
echo "-------------------------------------------------------"
|
||||
echo "🎯 Resultado final para '${COMPANY}'"
|
||||
echo "✔ Build OK: ${IMAGE_TAG_VERSION}"
|
||||
if [[ "$LOAD" == true ]]; then
|
||||
echo "✔ Load OK"
|
||||
fi
|
||||
echo "🧩 Script version: ${SCRIPT_VERSION}"
|
||||
echo "-------------------------------------------------------"
|
||||
echo ""
|
||||
13
scripts/cronjob
Normal file
13
scripts/cronjob
Normal file
@ -0,0 +1,13 @@
|
||||
# ===== FACTUGES SYNC JOBS =====
|
||||
|
||||
# Sincronización FactuGES → cada 5 minutos
|
||||
*/5 * * * * docker run --rm \
|
||||
-e ENV=prod \
|
||||
factuges-sync-factuges:acme-latest \
|
||||
>> /var/log/factuges-sync/factuges.log 2>&1
|
||||
|
||||
# Sincronización Verifactu → cada 7 minutos
|
||||
*/7 * * * * docker run --rm \
|
||||
-e ENV=prod \
|
||||
factuges-sync-verifactu:acme-latest \
|
||||
>> /var/log/factuges-sync/verifactu.log 2>&1
|
||||
45
scripts/deploy-cron.sh
Executable file
45
scripts/deploy-cron.sh
Executable file
@ -0,0 +1,45 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
# ================================================
|
||||
# FACTUGES SYNC - Deploy cron jobs
|
||||
# -----------------------------------------------
|
||||
# Este script:
|
||||
# - Crea /var/log/factuges-sync
|
||||
# - Instala los cron jobs de producción
|
||||
# - Mantiene los cron jobs idempotentes
|
||||
# ================================================
|
||||
|
||||
COMPANY="${1:-acme}"
|
||||
|
||||
CRON_FILE="/tmp/factuges-sync-cron-${COMPANY}.txt"
|
||||
|
||||
echo "📄 Generando cron file temporal: ${CRON_FILE}"
|
||||
|
||||
mkdir -p /var/log/factuges-sync
|
||||
|
||||
cat > "$CRON_FILE" <<EOF
|
||||
# ===== FACTUGES SYNC JOBS (${COMPANY}) =====
|
||||
|
||||
# Sincronización FactuGES → cada 5 minutos
|
||||
*/5 * * * * docker run --rm \
|
||||
-e ENV=prod \
|
||||
factuges-sync-factuges:${COMPANY}-latest \
|
||||
>> /var/log/factuges-sync/factuges.log 2>&1
|
||||
|
||||
# Sincronización Verifactu → cada 7 minutos
|
||||
*/7 * * * * docker run --rm \
|
||||
-e ENV=prod \
|
||||
factuges-sync-verifactu:${COMPANY}-latest \
|
||||
>> /var/log/factuges-sync/verifactu.log 2>&1
|
||||
EOF
|
||||
|
||||
echo "📥 Instalando cron jobs del sistema..."
|
||||
|
||||
crontab "$CRON_FILE"
|
||||
|
||||
echo "---------------------------------------------"
|
||||
echo "✔ Cron jobs instalados correctamente"
|
||||
echo "✔ Logs → /var/log/factuges-sync/"
|
||||
echo "✔ Puedes comprobar con: crontab -l"
|
||||
echo "---------------------------------------------"
|
||||
@ -1,19 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
# Comentario: genera el siguiente tag semántico automáticamente
|
||||
# Formato: major.minor.patch
|
||||
|
||||
CURRENT=$(git describe --tags --abbrev=0 2>/dev/null || echo "0.0.0")
|
||||
|
||||
IFS='.' read -r MAJ MIN PAT <<< "$CURRENT"
|
||||
|
||||
# Incremento patch por defecto
|
||||
PAT=$((PAT + 1))
|
||||
|
||||
NEXT="${MAJ}.${MIN}.${PAT}"
|
||||
|
||||
echo "Creating release tag: ${NEXT}"
|
||||
|
||||
git tag "${NEXT}"
|
||||
git push origin "${NEXT}"
|
||||
Loading…
Reference in New Issue
Block a user