From 64fdf7ce63e8719c24e7de5c15ffcd6318bef76c Mon Sep 17 00:00:00 2001 From: josedario87 Date: Fri, 17 Oct 2025 18:28:49 -0600 Subject: [PATCH] =?UTF-8?q?Feat:=20Actualizar=20homepage=20con=20branding?= =?UTF-8?q?=20RioCata=20y=20ajustar=20configuraci=C3=B3n?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env.example | 20 +++++-- .gitea/workflows/build-and-deploy.yml | 83 ++++++++++++++------------- docker-compose.yml | 34 +++++++++++ nuxt4/app/app.vue | 4 +- 4 files changed, 93 insertions(+), 48 deletions(-) diff --git a/.env.example b/.env.example index 3f3b307..f9a6d23 100644 --- a/.env.example +++ b/.env.example @@ -10,22 +10,32 @@ # REGISTRY & DEPLOYMENT # =========================================== # URL del registro Docker (sin http:// ni https://) -# Para registry de Gitea: gitea.ejemplo.com +# Para registry de Gitea: gitea.nucleoriofrio.com # El owner del repositorio se agrega automáticamente en el workflow # Imagen final: REGISTRY_URL/owner/APP_NAME:latest -REGISTRY_URL=gitea.ejemplo.com +REGISTRY_URL=gitea.nucleoriofrio.com # Nombre de la aplicación (usado para container, imagen, y labels de Traefik) -APP_NAME=mi-app +APP_NAME=riocata # Dominio donde se desplegará la aplicación -APP_DOMAIN=miapp.ejemplo.com +APP_DOMAIN=riocata.nucleoriofrio.com # =========================================== # APPLICATION # =========================================== # URL pública de la aplicación -NUXT_PUBLIC_APP_URL=https://miapp.ejemplo.com +NUXT_PUBLIC_APP_URL=https://riocata.nucleoriofrio.com + +# =========================================== +# DATABASE +# =========================================== +# Base de datos PostgreSQL +POSTGRES_DB=riocata +POSTGRES_USER=riocata_user + +# Contraseña de PostgreSQL (SECRETO) +POSTGRES_PASSWORD=cambiar-en-produccion # =========================================== # REGISTRY AUTHENTICATION (solo para CI/CD) diff --git a/.gitea/workflows/build-and-deploy.yml b/.gitea/workflows/build-and-deploy.yml index 7e8e1c4..dd99c10 100644 --- a/.gitea/workflows/build-and-deploy.yml +++ b/.gitea/workflows/build-and-deploy.yml @@ -5,56 +5,57 @@ on: branches: [ main, master ] jobs: -#───────────────── build & push ───────────────── - build: - runs-on: docker - env: - REG: ${{ vars.REGISTRY_URL }} - APP_NAME: ${{ vars.APP_NAME }} - steps: - - uses: actions/checkout@v3 - - uses: docker/setup-buildx-action@v2 - - uses: docker/login-action@v2 - with: - registry: ${{ vars.REGISTRY_URL }} - username: ${{ secrets.REGISTRY_USERNAME }} - password: ${{ secrets.REGISTRY_PASSWORD }} - - - name: Build+push ${{ vars.APP_NAME }} - run: | - cd nuxt4 - docker build -t $REG/${{ github.repository_owner }}/$APP_NAME:${{ github.sha }} -t $REG/${{ github.repository_owner }}/$APP_NAME:latest . - docker push $REG/${{ github.repository_owner }}/$APP_NAME:${{ github.sha }} - docker push $REG/${{ github.repository_owner }}/$APP_NAME:latest - -#───────────────── deploy ───────────────── - deploy: - needs: build + build-and-deploy: runs-on: docker env: REG: ${{ vars.REGISTRY_URL }} REPO_OWNER: ${{ github.repository_owner }} APP_NAME: ${{ vars.APP_NAME }} - # Variables de entorno para docker-compose APP_DOMAIN: ${{ vars.APP_DOMAIN }} NUXT_PUBLIC_APP_URL: ${{ vars.NUXT_PUBLIC_APP_URL }} + POSTGRES_DB: ${{ vars.POSTGRES_DB }} + POSTGRES_USER: ${{ vars.POSTGRES_USER }} + POSTGRES_PASSWORD: ${{ secrets.POSTGRES_PASSWORD }} steps: - - uses: actions/checkout@v3 - - name: Login to registry - run: docker login ${{ vars.REGISTRY_URL }} -u ${{ secrets.REGISTRY_USERNAME }} -p ${{ secrets.REGISTRY_PASSWORD }} - - - name: Info about environment + - name: Build, push y deploy completo run: | - echo "ℹ️ Deploying ${{ vars.APP_NAME }}" - echo " Domain: ${{ vars.APP_DOMAIN }}" - echo " Image: ${{ vars.REGISTRY_URL }}/${{ github.repository_owner }}/${{ vars.APP_NAME }}:latest" - echo " Network: principal" + set -e - - name: Pull fresh images used in compose - run: docker compose pull + echo "📦 Clonando repositorio..." + git clone https://${{ github.repository_owner }}:${{ secrets.REGISTRY_PASSWORD }}@${{ vars.REGISTRY_URL }}/${{ github.repository }}.git /tmp/repo + cd /tmp/repo + git checkout ${{ github.sha }} - - name: Clean up stack - run: docker compose --project-name $APP_NAME down + echo "🔐 Login al registry..." + docker login ${{ vars.REGISTRY_URL }} -u ${{ secrets.REGISTRY_USERNAME }} -p ${{ secrets.REGISTRY_PASSWORD }} - - name: Update stack - run: docker compose --project-name $APP_NAME up -d --remove-orphans --wait + echo "🏗️ Construyendo imagen de Nuxt..." + cd nuxt4 + docker build -t $REG/$REPO_OWNER/$APP_NAME:${{ github.sha }} -t $REG/$REPO_OWNER/$APP_NAME:latest . + + echo "📤 Subiendo imágenes..." + docker push $REG/$REPO_OWNER/$APP_NAME:${{ github.sha }} + docker push $REG/$REPO_OWNER/$APP_NAME:latest + + echo "ℹ️ Información de despliegue:" + echo " App: $APP_NAME" + echo " Domain: $APP_DOMAIN" + echo " Image: $REG/$REPO_OWNER/$APP_NAME:latest" + echo " Networks: principal, traefik-network" + + cd /tmp/repo + + echo "🔄 Descargando imágenes actualizadas..." + docker compose pull + + echo "🧹 Limpiando stack anterior..." + docker compose --project-name $APP_NAME down + + echo "🚀 Desplegando stack actualizado..." + docker compose --project-name $APP_NAME up -d --remove-orphans --wait + + echo "✅ Despliegue completado exitosamente!" + + echo "🧼 Limpiando archivos temporales..." + cd / + rm -rf /tmp/repo diff --git a/docker-compose.yml b/docker-compose.yml index 099fd89..e15ed78 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,10 +1,33 @@ version: '3.8' services: + postgres: + image: postgres:16-alpine + container_name: ${APP_NAME}_postgres + restart: unless-stopped + environment: + - POSTGRES_DB=${POSTGRES_DB:-riocata} + - POSTGRES_USER=${POSTGRES_USER:-riocata_user} + - POSTGRES_PASSWORD=${POSTGRES_PASSWORD} + - PGDATA=/var/lib/postgresql/data/pgdata + volumes: + - postgres_data:/var/lib/postgresql/data + - ./postgres/init:/docker-entrypoint-initdb.d:ro + networks: + - principal + healthcheck: + test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-riocata_user} -d ${POSTGRES_DB:-riocata}"] + interval: 10s + timeout: 5s + retries: 5 + app: image: ${REG}/${REPO_OWNER}/${APP_NAME}:latest container_name: ${APP_NAME} restart: unless-stopped + depends_on: + postgres: + condition: service_healthy environment: # Node Environment - NODE_ENV=production @@ -12,6 +35,13 @@ services: - NUXT_PORT=3000 # Public URL - NUXT_PUBLIC_APP_URL=${NUXT_PUBLIC_APP_URL} + # Database Connection + - DATABASE_URL=postgresql://${POSTGRES_USER:-riocata_user}:${POSTGRES_PASSWORD}@postgres:5432/${POSTGRES_DB:-riocata} + - POSTGRES_HOST=postgres + - POSTGRES_PORT=5432 + - POSTGRES_DB=${POSTGRES_DB:-riocata} + - POSTGRES_USER=${POSTGRES_USER:-riocata_user} + - POSTGRES_PASSWORD=${POSTGRES_PASSWORD} networks: - principal - traefik-network @@ -48,6 +78,10 @@ services: - "traefik.http.middlewares.${APP_NAME}-cors.headers.accesscontrolmaxage=100" - "traefik.http.middlewares.${APP_NAME}-cors.headers.addvaryheader=true" +volumes: + postgres_data: + name: ${APP_NAME}_postgres_data + networks: principal: external: true diff --git a/nuxt4/app/app.vue b/nuxt4/app/app.vue index e37e66a..33c0a1e 100644 --- a/nuxt4/app/app.vue +++ b/nuxt4/app/app.vue @@ -7,9 +7,9 @@
-

Plantilla Nuxt + Authentik

+

RioCata

- Ejemplo de integración con Authentik Proxy Outpost + Sistema de Catastro del Río - Gestión Integral