From 4ec1ff1272edffcf4960ee622f8f9d4821177f48 Mon Sep 17 00:00:00 2001 From: Bryan Zapata Date: Fri, 14 Aug 2026 16:12:08 -0500 Subject: [PATCH 1/7] init config --- android/app/build.gradle.kts | 2 +- android/app/google-services.json | 4 ++-- docker-compose.yml | 35 +++++++++++++++++++++++----- web/Dockerfile | 39 ++++++++++++++++++++++++++++++-- 4 files changed, 69 insertions(+), 11 deletions(-) diff --git a/android/app/build.gradle.kts b/android/app/build.gradle.kts index f670b8bb7..f76c8ee61 100644 --- a/android/app/build.gradle.kts +++ b/android/app/build.gradle.kts @@ -13,7 +13,7 @@ android { compileSdk = 37 defaultConfig { - applicationId = "com.httpsms" + applicationId = "com.coremaster.httpsms" minSdk = 28 targetSdk = 37 versionCode = 1 diff --git a/android/app/google-services.json b/android/app/google-services.json index 4db4c0640..5e5875885 100644 --- a/android/app/google-services.json +++ b/android/app/google-services.json @@ -9,7 +9,7 @@ "client_info": { "mobilesdk_app_id": "1:877524083399:android:5ceb08a909fd24a96514e2", "android_client_info": { - "package_name": "com.httpsms" + "package_name": "com.coremaster.httpsms" } }, "oauth_client": [ @@ -17,7 +17,7 @@ "client_id": "877524083399-londfmd80qqlb2gebpbhctavlmqtla3b.apps.googleusercontent.com", "client_type": 1, "android_info": { - "package_name": "com.httpsms", + "package_name": "com.coremaster.httpsms", "certificate_hash": "58df9f7489b8bb5e3cd57f01a03d5e0068d8c185" } }, diff --git a/docker-compose.yml b/docker-compose.yml index ef63287d2..ac02c3eaf 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -7,8 +7,9 @@ services: POSTGRES_USER: dbusername volumes: - postgres:/var/lib/postgresql/data - ports: - - "5435:5432" + # No publicar Postgres al host en Dokploy (solo red interna) + expose: + - "5432" restart: on-failure healthcheck: test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"] @@ -22,13 +23,16 @@ services: command: redis-server volumes: - redis:/var/lib/redis - ports: - - "6379:6379" + expose: + - "6379" restart: on-failure api: build: context: ./api + # Dokploy: un solo Environment del compose → archivo .env en la raíz del proyecto + env_file: + - .env ports: - "8000:8000" depends_on: @@ -36,17 +40,36 @@ services: condition: service_healthy redis: condition: service_started - env_file: - - ./api/.env + restart: on-failure web: build: context: ./web + # Nuxt se genera en build: estas vars deben existir en el Environment de Dokploy + args: + API_BASE_URL: ${API_BASE_URL} + APP_URL: ${APP_URL} + APP_NAME: ${APP_NAME:-httpSMS} + APP_GITHUB_URL: ${APP_GITHUB_URL:-https://github.com/NdoleStudio/httpsms} + APP_DOCUMENTATION_URL: ${APP_DOCUMENTATION_URL:-https://docs.httpsms.com} + APP_DOWNLOAD_URL: ${APP_DOWNLOAD_URL:-} + APP_ENV: ${APP_ENV:-production} + CLOUDFLARE_TURNSTILE_SITE_KEY: ${CLOUDFLARE_TURNSTILE_SITE_KEY:-} + PUSHER_KEY: ${PUSHER_KEY:-} + PUSHER_CLUSTER: ${PUSHER_CLUSTER:-} + FIREBASE_API_KEY: ${FIREBASE_API_KEY} + FIREBASE_AUTH_DOMAIN: ${FIREBASE_AUTH_DOMAIN} + FIREBASE_PROJECT_ID: ${FIREBASE_PROJECT_ID} + FIREBASE_STORAGE_BUCKET: ${FIREBASE_STORAGE_BUCKET} + FIREBASE_MESSAGING_SENDER_ID: ${FIREBASE_MESSAGING_SENDER_ID} + FIREBASE_APP_ID: ${FIREBASE_APP_ID} + FIREBASE_MEASUREMENT_ID: ${FIREBASE_MEASUREMENT_ID:-} ports: - "3000:3000" depends_on: api: condition: service_started + restart: on-failure volumes: redis: diff --git a/web/Dockerfile b/web/Dockerfile index f283fd32a..1723f7223 100644 --- a/web/Dockerfile +++ b/web/Dockerfile @@ -3,9 +3,45 @@ FROM node:22-alpine AS build WORKDIR /app +# Inyectadas desde docker-compose build.args ← Environment de Dokploy (.env raíz) +ARG API_BASE_URL +ARG APP_URL +ARG APP_NAME +ARG APP_GITHUB_URL +ARG APP_DOCUMENTATION_URL +ARG APP_DOWNLOAD_URL +ARG APP_ENV +ARG CLOUDFLARE_TURNSTILE_SITE_KEY +ARG PUSHER_KEY +ARG PUSHER_CLUSTER +ARG FIREBASE_API_KEY +ARG FIREBASE_AUTH_DOMAIN +ARG FIREBASE_PROJECT_ID +ARG FIREBASE_STORAGE_BUCKET +ARG FIREBASE_MESSAGING_SENDER_ID +ARG FIREBASE_APP_ID +ARG FIREBASE_MEASUREMENT_ID + +ENV API_BASE_URL=$API_BASE_URL \ + APP_URL=$APP_URL \ + APP_NAME=$APP_NAME \ + APP_GITHUB_URL=$APP_GITHUB_URL \ + APP_DOCUMENTATION_URL=$APP_DOCUMENTATION_URL \ + APP_DOWNLOAD_URL=$APP_DOWNLOAD_URL \ + APP_ENV=$APP_ENV \ + CLOUDFLARE_TURNSTILE_SITE_KEY=$CLOUDFLARE_TURNSTILE_SITE_KEY \ + PUSHER_KEY=$PUSHER_KEY \ + PUSHER_CLUSTER=$PUSHER_CLUSTER \ + FIREBASE_API_KEY=$FIREBASE_API_KEY \ + FIREBASE_AUTH_DOMAIN=$FIREBASE_AUTH_DOMAIN \ + FIREBASE_PROJECT_ID=$FIREBASE_PROJECT_ID \ + FIREBASE_STORAGE_BUCKET=$FIREBASE_STORAGE_BUCKET \ + FIREBASE_MESSAGING_SENDER_ID=$FIREBASE_MESSAGING_SENDER_ID \ + FIREBASE_APP_ID=$FIREBASE_APP_ID \ + FIREBASE_MEASUREMENT_ID=$FIREBASE_MEASUREMENT_ID + COPY package.json pnpm-lock.yaml ./ -# Install pnpm RUN npm install -g pnpm RUN pnpm install @@ -17,7 +53,6 @@ RUN pnpm run generate FROM nginx:stable-alpine AS production COPY --from=build /app/.output/public /usr/share/nginx/html -# Copy the nginx configuration file COPY ./nginx.conf /etc/nginx/conf.d/default.conf EXPOSE 3000 From 94269127e0b577ffa0d8b22dd1464e2d2de9009a Mon Sep 17 00:00:00 2001 From: Bryan Zapata Date: Fri, 14 Aug 2026 16:15:42 -0500 Subject: [PATCH 2/7] fix --- web/Dockerfile | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/web/Dockerfile b/web/Dockerfile index 1723f7223..84af46a4a 100644 --- a/web/Dockerfile +++ b/web/Dockerfile @@ -44,9 +44,19 @@ COPY package.json pnpm-lock.yaml ./ RUN npm install -g pnpm +# Docker: no hay .git → husky falla el `prepare`. pnpm 10 bloquea build scripts sin approve. +ENV HUSKY=0 \ + CI=true +RUN printf 'dangerouslyAllowAllBuilds=true\n' > .npmrc + RUN pnpm install COPY . . +# Reaplicar por si COPY . sobrescribe .npmrc del contexto +RUN printf 'dangerouslyAllowAllBuilds=true\n' > .npmrc +ENV HUSKY=0 \ + CI=true + RUN pnpm run generate # production stage From e5f6fc0426f23645f581279edabfe6d9f21be94f Mon Sep 17 00:00:00 2001 From: Bryan Zapata Date: Fri, 14 Aug 2026 16:17:30 -0500 Subject: [PATCH 3/7] fix --- web/Dockerfile | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/web/Dockerfile b/web/Dockerfile index 84af46a4a..96c6c2756 100644 --- a/web/Dockerfile +++ b/web/Dockerfile @@ -42,18 +42,16 @@ ENV API_BASE_URL=$API_BASE_URL \ COPY package.json pnpm-lock.yaml ./ -RUN npm install -g pnpm +# pnpm 10 exige approve-builds y falla el Docker build; 9 instala normal. +RUN npm install -g pnpm@9.15.9 -# Docker: no hay .git → husky falla el `prepare`. pnpm 10 bloquea build scripts sin approve. +# Docker: no hay .git → husky no debe instalar hooks ENV HUSKY=0 \ CI=true -RUN printf 'dangerouslyAllowAllBuilds=true\n' > .npmrc -RUN pnpm install +RUN pnpm install --no-frozen-lockfile COPY . . -# Reaplicar por si COPY . sobrescribe .npmrc del contexto -RUN printf 'dangerouslyAllowAllBuilds=true\n' > .npmrc ENV HUSKY=0 \ CI=true From c8381426905e27afb486750fc4b824e88426e1b8 Mon Sep 17 00:00:00 2001 From: Bryan Zapata Date: Fri, 14 Aug 2026 16:19:13 -0500 Subject: [PATCH 4/7] fix --- web/Dockerfile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/web/Dockerfile b/web/Dockerfile index 96c6c2756..743682493 100644 --- a/web/Dockerfile +++ b/web/Dockerfile @@ -40,10 +40,10 @@ ENV API_BASE_URL=$API_BASE_URL \ FIREBASE_APP_ID=$FIREBASE_APP_ID \ FIREBASE_MEASUREMENT_ID=$FIREBASE_MEASUREMENT_ID -COPY package.json pnpm-lock.yaml ./ +# allowBuilds vive en pnpm-workspace.yaml (pnpm 10); hay que copiarlo ANTES del install +COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./ -# pnpm 10 exige approve-builds y falla el Docker build; 9 instala normal. -RUN npm install -g pnpm@9.15.9 +RUN npm install -g pnpm@10 # Docker: no hay .git → husky no debe instalar hooks ENV HUSKY=0 \ From d8949499b8c50b3d7fcb2a0bdb2154e1729e413a Mon Sep 17 00:00:00 2001 From: Bryan Zapata Date: Fri, 14 Aug 2026 16:23:29 -0500 Subject: [PATCH 5/7] fix --- docker-compose.yml | 37 +++++++++++++++++++++---------------- 1 file changed, 21 insertions(+), 16 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index ac02c3eaf..8d15578f5 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,36 +1,42 @@ services: postgres: - image: postgres:alpine + image: postgres:16-alpine environment: POSTGRES_DB: httpsms POSTGRES_PASSWORD: dbpassword POSTGRES_USER: dbusername volumes: - postgres:/var/lib/postgresql/data - # No publicar Postgres al host en Dokploy (solo red interna) + # Solo red interna del compose (Dokploy no necesita publicar 5432) expose: - "5432" - restart: on-failure + restart: unless-stopped + # Healthcheck más agresivo: el intervalo 30s + start_period 5s fallaba el deploy healthcheck: - test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"] - interval: 30s - timeout: 60s - retries: 5 - start_period: 5s + test: ["CMD-SHELL", "pg_isready -U dbusername -d httpsms"] + interval: 5s + timeout: 5s + retries: 20 + start_period: 20s redis: - image: redis:latest - command: redis-server + image: redis:7-alpine + command: redis-server --appendonly yes volumes: - - redis:/var/lib/redis + - redis:/data expose: - "6379" - restart: on-failure + restart: unless-stopped + healthcheck: + test: ["CMD", "redis-cli", "ping"] + interval: 5s + timeout: 3s + retries: 10 api: build: context: ./api - # Dokploy: un solo Environment del compose → archivo .env en la raíz del proyecto + # Dokploy: Environment del compose → .env en la raíz del proyecto env_file: - .env ports: @@ -40,12 +46,11 @@ services: condition: service_healthy redis: condition: service_started - restart: on-failure + restart: unless-stopped web: build: context: ./web - # Nuxt se genera en build: estas vars deben existir en el Environment de Dokploy args: API_BASE_URL: ${API_BASE_URL} APP_URL: ${APP_URL} @@ -69,7 +74,7 @@ services: depends_on: api: condition: service_started - restart: on-failure + restart: unless-stopped volumes: redis: From ec76458d02f5f6618a320917529f493cfb1541dd Mon Sep 17 00:00:00 2001 From: Bryan Zapata Date: Fri, 14 Aug 2026 16:25:11 -0500 Subject: [PATCH 6/7] fix --- docker-compose.yml | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 8d15578f5..861a36f7c 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -39,8 +39,9 @@ services: # Dokploy: Environment del compose → .env en la raíz del proyecto env_file: - .env - ports: - - "8000:8000" + # Sin bind al host: Dokploy/Traefik enruta al puerto interno + expose: + - "8000" depends_on: postgres: condition: service_healthy @@ -69,8 +70,9 @@ services: FIREBASE_MESSAGING_SENDER_ID: ${FIREBASE_MESSAGING_SENDER_ID} FIREBASE_APP_ID: ${FIREBASE_APP_ID} FIREBASE_MEASUREMENT_ID: ${FIREBASE_MEASUREMENT_ID:-} - ports: - - "3000:3000" + # 3000 del host ya estaba ocupado; Dokploy usa el puerto interno del contenedor + expose: + - "3000" depends_on: api: condition: service_started From a5d7607fff512b94b2fbf45dcc25c05740c2da5b Mon Sep 17 00:00:00 2001 From: Bryan Zapata Date: Fri, 14 Aug 2026 16:29:12 -0500 Subject: [PATCH 7/7] fix --- api/pkg/di/container.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/api/pkg/di/container.go b/api/pkg/di/container.go index ad9a18858..c05c94038 100644 --- a/api/pkg/di/container.go +++ b/api/pkg/di/container.go @@ -1793,6 +1793,10 @@ func (container *Container) UserRistrettoCache() *ristretto.Cache[string, entiti // InitializeTraceProvider initializes the open telemetry trace provider func (container *Container) InitializeTraceProvider() func() { + if isLocal() { + container.logger.Debug("skipping axiom trace provider (ENV=local)") + return func() {} + } return container.initializeAxiomTraceProvider(container.version, container.projectID) }